Jump to content


Photo

3d Collisions Dll


  • Please log in to reply
154 replies to this topic

#1 hanson

hanson

    GMC Member

  • GMC Member
  • 444 posts
  • Version:GM8

Posted 23 September 2007 - 01:59 PM

3D collision DLL
Use precise 3d collisions in your GM game!



Since I have moved on to GMNewton and am no longer supporting this, why not some source?
http://host-a.net/ha...odModSource.zip

God bless,
-hanson



This is a dll I created to add 3d collision checking to GM games. It is based off of http://jgt.akpeters....r97/tritri.html by Tomas Moller. I also want to mention Hach-Que; his TriTriCollisions DLL got me started on this project. This DLL supersedes Hach-Que's TriTriCollisions DLL. It works best with low-poly models, so if you have a mesh with many polygons, create a different one with less polys to use as its collision model. The dll works fast enough if you keep your levels small, or add some optimizations. I have included a basic example to get you started. Please note that the physics are not the main focus of the example. If you use this in your project, please give credit to Samuel Hanson. Please let me know what you think!


Notice: Brett14 has improved on this project a ton! If you are looking for precise 3d collisions, I would recommend you check out his topic at http://gmc.yoyogames...howtopic=449508. It offers better speed and fixed bugs as compared to this.


Last update: March 8, 2008

Complete:
-load model
-check collision
-Rotations
-ray-model intersection detection.
-ray reflection
-example
-Primitives
---*block
---*cylinder
---*wall
---*floor
---*triangle
-Collision model replacing on the fly
-supports loading of 3 formats:
---*GM model format, must be triangulated
---*gml(must be formated correctly). Made to work with export from marzipan.
---*Separated format. Made to work with export from Marzipan
---*I encourage you to create scripts to import from more file formats. Please let me know if you create any that I can include in with the scripts

Planned:
Sorry - there are no planned updates at this time. My efforts are now directed toward GMNewton, which is a wrapper for a 3d physics engine. This is still available free to use though, and I love to see what you use it for.

Items in bold are in progress.

Screenshot:
Posted Image


__________________________________________________
____________________

I will keep this available for download for a time, though I highly recommend using Brett14's dll instead.
__________________________________________________
____________________


<span style='font-size:14pt;line-height:100%'>Download: Download ModMod7.2.zip </span> - updated 03/08/08

<span style='font-size:8pt;line-height:100%'>
OLD ModMod7.1
OLD - ModMod7
OLD - ModMod6</span>


Posted Image


Thanks for looking!
-hanson

Edited by hanson, 15 October 2009 - 11:43 PM.

  • 0

#2 Jesper

Jesper

    GMC Member

  • New Member
  • 1789 posts

Posted 23 September 2007 - 02:06 PM

Link broken. And btw, please use normal ZIP.
  • 0

The latest game news (Dutch): GameRSS game nieuws

#3 hanson

hanson

    GMC Member

  • GMC Member
  • 444 posts
  • Version:GM8

Posted 23 September 2007 - 02:11 PM

Sorry. I'm fixing it.

FIXED

Edited by hanson, 23 September 2007 - 02:17 PM.

  • 0

#4 Robot Freak

Robot Freak

    GMC Member

  • New Member
  • 271 posts

Posted 23 September 2007 - 06:59 PM

What about support for the basic gamemaker 3D shapes?

Nice DLL!
  • 0

#5 freko

freko

    The Professional

  • GMC Member
  • 504 posts
  • Version:GM8

Posted 23 September 2007 - 07:42 PM

GR8.This is a close one I was looking for.
Can't wait to see your Planned development :ph34r:
Hmm...If futher features arise, I'll be all set to use it in my project
(in my sig)
Keep up the good.




edit:-
But does it support other types of models like obj & 3ds.
And I hav found a minor bug:-
When the ball touched the sides of the floating blue plate, it gets stuck.. :(

Edited by freko, 23 September 2007 - 07:49 PM.

  • 0

#6 xygthop3

xygthop3

    You may know me from such forums as "Shaders"

  • GMC Member
  • 3252 posts
  • Version:GM:Studio

Posted 25 September 2007 - 12:11 AM

Nice DLL, please add .obj or .3ds support because .mod format is a pain in the neck.

Thanks
  • 0

#7 freko

freko

    The Professional

  • GMC Member
  • 504 posts
  • Version:GM8

Posted 25 September 2007 - 01:08 AM

Yea Please..
  • 0

#8 Ivo Georgiev

Ivo Georgiev

    GMC Member

  • New Member
  • 274 posts

Posted 25 September 2007 - 08:55 AM

Nice DLL, please add .obj or .3ds support because .mod format is a pain in the neck.

Thanks

<{POST_SNAPBACK}>

D3D can draw ONLY GM model arrays!
All the scripts which load obj files are converting the file to GM model array.
And this DLL uses this model array.
Great DLL.Just awsome!

AND: OBJ file is a pain in the neck...You can only load it with script.Its biger that the mod format.The script for loading models is very slow because the slow file functions :D .There is a program for converting OBJ to MOD.

Edited by Ivo Georgiev, 25 September 2007 - 09:02 AM.

  • 0

#9 xygthop3

xygthop3

    You may know me from such forums as "Shaders"

  • GMC Member
  • 3252 posts
  • Version:GM:Studio

Posted 25 September 2007 - 10:35 PM

I also found the bug that freko found, and it freezes the game and has to be closed via task manager.

Also, the collisions with a ramp with even a small incline on 10deg's could use some work.

Edited by xygthop3, 26 September 2007 - 12:13 AM.

  • 0

#10 hanson

hanson

    GMC Member

  • GMC Member
  • 444 posts
  • Version:GM8

Posted 26 September 2007 - 12:31 AM

I also found the bug that freko found, and it freezes the game and has to be closed via task manager.

Also, the collisions with a ramp with even a small incline on 10deg's could use some work.

<{POST_SNAPBACK}>


The ball getting stuck might be a while loop not ending for some reason. I'll look in to it.

And about the ramp collision, you want it to climb slopes right? If that's not what you meant pleas explain farther.

obj and 3ds formats are not supported(yet). I might add these if I read about the file formats a bit. If anyone is willing to help me and make a few scripts, here are the steps you need to take:

1. Create a new script
2. set a temporary variable to begin_define_model()//(i.e. var modelid;modelid=begin_define_model(); )
3. Write some code to extract triangles from file. Refer to file format documentations to know how to parse it.
3. use model_add_point and model_add_triangle to add triangles read from file to the dlls model.
4. call end_define_model()
5. return modelid

Thanks for the comments,
-hanson

Edited by hanson, 25 March 2008 - 02:24 PM.

  • 0

#11 xygthop3

xygthop3

    You may know me from such forums as "Shaders"

  • GMC Member
  • 3252 posts
  • Version:GM:Studio

Posted 26 September 2007 - 12:35 AM

And about the ramp collision, you want it to climb slopes right?  If that's not what you meant pleas explain farther.

<{POST_SNAPBACK}>


Yep, climb slopes, ramps, terrain.....etc,etc
  • 0

#12 hanson

hanson

    GMC Member

  • GMC Member
  • 444 posts
  • Version:GM8

Posted 26 September 2007 - 12:39 AM

And about the ramp collision, you want it to climb slopes right?  If that's not what you meant pleas explain farther.

<{POST_SNAPBACK}>


Yep, climb slopes, ramps, terrain.....etc,etc

<{POST_SNAPBACK}>

I'll see if I can add that to the example when I release an update to the dll.
  • 0

#13 xygthop3

xygthop3

    You may know me from such forums as "Shaders"

  • GMC Member
  • 3252 posts
  • Version:GM:Studio

Posted 26 September 2007 - 12:41 AM

And about the ramp collision, you want it to climb slopes right?  If that's not what you meant pleas explain farther.

<{POST_SNAPBACK}>


Yep, climb slopes, ramps, terrain.....etc,etc

<{POST_SNAPBACK}>

I'll see if I can add that to the example when I release an update to the dll.

<{POST_SNAPBACK}>


I'll try my hand at it and see if I can convert the Mosaic Lite .obj script to work with this as well, shouldn't be to hard.

Edited by xygthop3, 26 September 2007 - 12:42 AM.

  • 0

#14 hanson

hanson

    GMC Member

  • GMC Member
  • 444 posts
  • Version:GM8

Posted 26 September 2007 - 12:50 AM

Okay, Thanks! You can look at the scripts in the example under the 'plugins' sub-folder if you want to see the completed import code.
-hanson
  • 0

#15 xygthop3

xygthop3

    You may know me from such forums as "Shaders"

  • GMC Member
  • 3252 posts
  • Version:GM:Studio

Posted 26 September 2007 - 02:12 AM

Just a little thing. I noticed you didn't use file_text_close(), this is quite important.
  • 0

#16 hanson

hanson

    GMC Member

  • GMC Member
  • 444 posts
  • Version:GM8

Posted 26 September 2007 - 02:16 AM

I fixed that and updated the download. Thanks for noticing.
-hanson

Edited by hanson, 26 September 2007 - 02:26 AM.

  • 0

#17 xygthop3

xygthop3

    You may know me from such forums as "Shaders"

  • GMC Member
  • 3252 posts
  • Version:GM:Studio

Posted 26 September 2007 - 08:14 AM

Great, here is the script to load collisions for .obj models, use the same as you would with load_model_mod();

You will need to use Mosaic Lite Script to load the .obj and draw it however.

I will add an example later.

//obj_loader for MODMODCollision DLL by xygthop3 will load collisions for .obj models. ENJOY!//Use create_from_obj by Zoltan Percsich to draw the obj model.data=ds_list_create();if(!file_exists(argument0)) return(-1);//return -1 if file not foundfile=file_text_open_read(argument0);modelid=begin_define_model();//show_message("start load model:"+argument0+"  id:"+string(modelid))for (i=0;file_text_eof(fp)==false;i+=1) {    filetext=file_text_read_string(fp);//row=string_replace_all(row,"  "," ");        if (string_char_at(filetext,1)=="v" && string_char_at(filetext,2)==" ") {//  start=string_pos_ext(" " , filetext , 1)//  count=string_pos_ext(" " , filetext , 2);    filetext=string_copy(filetext,3,28);    ds_list_clear(data);    string_to_list_ext(filetext," ",data);    model_add_point_fromlist(data);//    show_list(data)    ds_list_clear(data)    }       file_text_readln(fp);          }end_define_model();file_text_close(fp);ds_list_destroy(data);return(modelid);

Posted Image

Edited by xygthop3, 26 September 2007 - 08:23 AM.

  • 0

#18 hanson

hanson

    GMC Member

  • GMC Member
  • 444 posts
  • Version:GM8

Posted 26 September 2007 - 12:32 PM

I am having a bit of trouble with your script. It seems as if the points are sometimes reused in the obj file format. We will have to also parse the faces. That should be easy though...
Good job so far.
Thanks,

-hanson
  • 0

#19 xygthop3

xygthop3

    You may know me from such forums as "Shaders"

  • GMC Member
  • 3252 posts
  • Version:GM:Studio

Posted 26 September 2007 - 08:57 PM

Help?

I did notice that .obj's exported from Marzipan the faces are ordered 1-2-3-4 etc,etc

.obj's exported from Anim8or the faces seem to be ordered in order they were created in anim8or (eg: 13-14-15). I could add parsing with a little help from Mosaic Lite, but for now, just run the models through Marzipan for a shot term fix. :D

Edited by xygthop3, 26 September 2007 - 10:00 PM.

  • 0

#20 Slick

Slick

    The Wheelman

  • GMC Member
  • 268 posts

Posted 27 September 2007 - 08:03 AM

hanson, I'd just like to say great work on this. This is indeed something many people including myself have been either trying to create ourselves or find. You have delivered the gold :D

I see a lot of potential in this if used correctly, can't wait to see what future updates will offer.

Edited by Slick, 27 September 2007 - 08:25 AM.

  • 0
Making something as simple as possible can often require the most complex thinking, yet making something complicated will often come naturally.
123123123 + 333666 = 123456789!!

#21 hanson

hanson

    GMC Member

  • GMC Member
  • 444 posts
  • Version:GM8

Posted 29 September 2007 - 11:21 AM

Help?

I did notice that .obj's exported from Marzipan the faces are ordered 1-2-3-4 etc,etc

.obj's exported from Anim8or the faces seem to be ordered in order they were created in anim8or (eg: 13-14-15). I could add parsing with a little help from Mosaic Lite, but for now, just run the models through Marzipan for a shot term fix.  :unsure:

<{POST_SNAPBACK}>


Good work! I'll give that a try.

@Slick: Thanks!

-hanson
  • 0

#22 eat268

eat268

    Videogame Programmer

  • New Member
  • 335 posts

Posted 01 October 2007 - 12:33 AM

Are the collisions perfect?
  • 0
C..C++..Java..PHP Coder.

#23 hanson

hanson

    GMC Member

  • GMC Member
  • 444 posts
  • Version:GM8

Posted 01 October 2007 - 02:41 AM

Are the collisions perfect?

<{POST_SNAPBACK}>


Yes, the collisions are perfect. Every triangle in first model is collision checked with every triangle in second model.

-hanson
  • 0

#24 freko

freko

    The Professional

  • GMC Member
  • 504 posts
  • Version:GM8

Posted 01 October 2007 - 06:40 PM

Howz work on the rotations going on.

Will you be adding forces too..?
  • 0

#25 hanson

hanson

    GMC Member

  • GMC Member
  • 444 posts
  • Version:GM8

Posted 02 October 2007 - 12:52 PM

Howz work on the rotations going on.

Will you be adding forces too..?

<{POST_SNAPBACK}>


The rotations are going slow. I'm not an expert on 3d math. I have been reading on how to do them though. About forces... if you mean physics, I am not planning on it.

-hanson
  • 0

#26 xygthop3

xygthop3

    You may know me from such forums as "Shaders"

  • GMC Member
  • 3252 posts
  • Version:GM:Studio

Posted 10 October 2007 - 09:58 PM

A bump on the house.
  • 0

#27 dmitko

dmitko

    GMC Member

  • GMC Member
  • 1011 posts
  • Version:Unknown

Posted 20 October 2007 - 07:51 AM

This is what GM needs. Well done!
  • 0
Posted Image Posted Image Posted Image Posted Image Posted Image

Currently working on Project Funky 3D

#28 Proffessor_gad

Proffessor_gad

    GMC Member

  • New Member
  • 757 posts

Posted 13 November 2007 - 10:25 PM

I've been working on a 3d engine of my own with physics, real gravity, parenting, spheroids, fast rotate, fast resize, .obj import and stuff. But it doesn't have model -> model collissions. Maybe if we work together we can cook up something good. ;)



The main problem for both of us is that GM IS SLOW... So whoever uses this engine definately needs to simplify their models.

Edited by Proffessor_gad, 14 November 2007 - 04:12 AM.

  • 0

#29 hanson

hanson

    GMC Member

  • GMC Member
  • 444 posts
  • Version:GM8

Posted 14 November 2007 - 01:28 PM

I've been working on a 3d engine of my own with physics, real gravity, parenting, spheroids, fast rotate, fast resize, .obj import and stuff. But it doesn't have model -> model collissions. Maybe if we work together we can cook up something good.  ^_^



The main problem for both of us is that GM IS SLOW... So whoever uses this engine definately needs to simplify their models.

<{POST_SNAPBACK}>


Sure, we coult try :) . I am slowly getting through the model rotations code. Currently I am able to rotate one point with any xrot,yrot,and zrot. There shouldn't be too much work to do from here. I haven't had a lot of time to work on it lately though. I think adding the rotations is going to slow it down a bit. I might try wrapping ColDet , a Free 3D Collision Detection Library for C++. It would probably be much faster than my code.
If you would be willing, might I take a look at your progress on your 3d engine so far? It sound interesting.

-hanson
  • 0

#30 gamescoper

gamescoper

    GMC Member

  • New Member
  • 21 posts

Posted 14 November 2007 - 07:51 PM

superb hanson you siad you would make this and you delivered this is great no more 2d:3d ratios yesssssssssssssss!
  • 0

#31 IamCalle

IamCalle

    GMC Member

  • GMC Member
  • 444 posts

Posted 14 November 2007 - 09:59 PM

Hah, I wish ColDet was a lib for GameMaker. xP

It sounds like this project is heading in an even better direction now. x] (Cooperation and a nice C++ lib^^)
  • 0

#32 dk81584

dk81584

    Program Maker

  • New Member
  • 171 posts
  • Version:GM8

Posted 15 November 2007 - 02:42 PM

Yeah, ive wanted to make 3d games with collisions for a long time, but i couldn't do it, now i can thanks, and don't know if this has been asked yet, but will anim8or work with the .obj extensio, if not please someone send me a link to a program that can make these 3d models, i would really like to make a 3d game with collisions, instead of using only blocks :D
  • 0
Signature removed due to size restriction violation. The old signature is placed in the About Me section of the user's profile.

#33 Proffessor_gad

Proffessor_gad

    GMC Member

  • New Member
  • 757 posts

Posted 16 November 2007 - 05:04 AM

Hanson,


The trick to fast rotations is NOT to rotate the mesh (slow), but to rotate the object inversly to what you were supposed to rotate the mesh (fast).

Eg: Instead of rotating the whole world just so that a plane can fly from Mexico to Florida, just rotate the plane instead. After you are done rotating the "airplane" and checking collissions, place it back to the original position.


I would send you the source code, but many of the functions are not working yet. To add to the pain it's Worry Season, I've got lots of homework, an additional HUGE project that I'm working on, and plenty of chores... I can give you what I do have, but I doubt that it would be of much help as it is right now.
  • 0

#34 hanson

hanson

    GMC Member

  • GMC Member
  • 444 posts
  • Version:GM8

Posted 17 November 2007 - 02:27 PM

Hanson,


The trick to fast rotations is NOT to rotate the mesh (slow), but to rotate the object inversly to what you were supposed to rotate the mesh (fast).

Eg: Instead of rotating the whole world just so that a plane can fly from Mexico to Florida, just rotate the plane instead. After you are done rotating the "airplane" and checking collissions, place it back to the original position.


I would send you the source code, but many of the functions are not working yet. To add to the pain it's  Worry Season, I've got lots of homework, an additional HUGE project that I'm working on, and plenty of chores... I can give you what I do have, but I doubt that it would be of much help as it is right now.

<{POST_SNAPBACK}>


For rotations I was thinking that you would pass xrot,yrot,and zrot, for each model, the same as the values passed to d3d_transform_add_rotation_x(),...y(),...z(). As for your project, I can wait. Thank you though.

  Yeah, ive wanted to make 3d games with collisions for a long time, but i couldn't do it, now i can thanks, and don't know if this has been asked yet, but will anim8or work with the .obj extensio, if not please someone send me a link to a program that can make these 3d models, i would really like to make a 3d game with collisions, instead of using only blocks  :GM131:

xygthop3 was working on a script to import obj files. Look on the first page. He suggests that you run the obj file through marzipan to make it compatible.
Marzipan is available for download at http://www.silentwor...age=downloads

Thanks to everybody for the comments!

-hanson
  • 0

#35 Proffessor_gad

Proffessor_gad

    GMC Member

  • New Member
  • 757 posts

Posted 17 November 2007 - 05:09 PM

Exactly! Just set a value to each object that defines it's rotation, and scaling. d3d_transform_add will make this possible. You can even use d3d transformations to invert the model.


Xypthog's idea about importing .obj is good, but it would be smarter to convert all of the obj's to some intermediate 3d model format that Game Maker can load quickly.


If we work together on this we might be able to get equal with the other 3d engines around here :GM131: ...

Edited by Proffessor_gad, 17 November 2007 - 05:10 PM.

  • 0

#36 xygthop3

xygthop3

    You may know me from such forums as "Shaders"

  • GMC Member
  • 3252 posts
  • Version:GM:Studio

Posted 18 November 2007 - 12:10 AM

xygthop's idea about importing .obj is good, but it would be smarter to convert all of the obj's to some intermediate 3d model format that Game Maker can load quickly.

<{POST_SNAPBACK}>


I would like to have converted all of the obj file to be able to load any formated obj file, but I don't completely understand the file format. If anybody can help that would be great.

It would be great to see some speed improvement with this collision dll to allow to load full game levels because at the moment only very low poly models can be loaded because the collision check system is a little slow.
  • 0

#37 splinterphobe

splinterphobe

    GMC Member

  • New Member
  • 4 posts

Posted 18 November 2007 - 12:42 AM

In the example if you jump the ball so that its side is touching the edge of anything, it'll float in mid-air and act as if it's on solid ground instead of sliding off. Keep up the good work!
  • 0

#38 IamCalle

IamCalle

    GMC Member

  • GMC Member
  • 444 posts

Posted 22 December 2007 - 01:03 AM

Are there any updates? =D
  • 0

#39 hanson

hanson

    GMC Member

  • GMC Member
  • 444 posts
  • Version:GM8

Posted 23 December 2007 - 02:54 PM

Are there any updates? =D

<{POST_SNAPBACK}>


Yes, there is a small one. You can now replace a collision model with a new one. I have been busy on my entry for the winter competition, so I haven't gotten much done. I will post the new file when I get a free moment.

My entry to the winter competition uses this dll for collision detection. Check it out at http://www.yoyogames...ames/show/20613.

-hanson

Edited by hanson, 24 December 2007 - 04:10 AM.

  • 0

#40 Krisando

Krisando

    GMC Member

  • New Member
  • 1351 posts

Posted 24 December 2007 - 03:05 AM

Nice, You're a star!!! :P
May I ask how did you make tghat texture for the player, it wraps around perfect but is drawen quite "cooly" lol?
  • 0

Posted Image


#41 hanson

hanson

    GMC Member

  • GMC Member
  • 444 posts
  • Version:GM8

Posted 26 December 2007 - 03:25 PM

Nice, You're a star!!! :)
May I ask how did you make tghat texture for the player, it wraps around perfect but is drawen quite "cooly" lol?

<{POST_SNAPBACK}>

Thanks! The texture is just a simple grid of black on green applied to a gm ellipsoid.

Also, just to let everybody know, the demo is now playable on yoyogames.
Posted Image

-hanson
  • 0

#42 Krisando

Krisando

    GMC Member

  • New Member
  • 1351 posts

Posted 07 January 2008 - 05:10 AM

Still working on this? Slopes would be really REALLY useful!!! :rambo

Edited by Krisando, 07 January 2008 - 05:29 AM.

  • 0

Posted Image


#43 WadeMcGillis

WadeMcGillis

    wademcgillis.com

  • GMC Member
  • 971 posts

Posted 08 January 2008 - 12:55 AM

<OLD>I noticed how you made the models load. Would it be possible to create a model in GM and use the id for that model, instead of having it external?</
OLD>

Nevermind. You should make it work so we could use models from GM, not external.

If any of you have made a 2D platform game with slopes, 3D slopes should be easy.

Edited by Whaddsoft, 08 January 2008 - 12:59 AM.

  • 0

#44 Krisando

Krisando

    GMC Member

  • New Member
  • 1351 posts

Posted 08 January 2008 - 06:40 AM

External models are waaay faster!! I load models in a global array so every object can load model from that which gives an even bigger fps boost!
  • 0

Posted Image


#45 hanson

hanson

    GMC Member

  • GMC Member
  • 444 posts
  • Version:GM8

Posted 08 January 2008 - 01:30 PM

Yes! I'm still working on it. I got busy during Christmas and such, but I'm still planning on doing more. About GM models, I can try, but as Krisando said it would probably be slower than external.

-hanson
  • 0

#46 Krisando

Krisando

    GMC Member

  • New Member
  • 1351 posts

Posted 08 January 2008 - 05:57 PM

Slopes WOOP!!!
  • 0

Posted Image


#47 WadeMcGillis

WadeMcGillis

    wademcgillis.com

  • GMC Member
  • 971 posts

Posted 10 January 2008 - 12:11 AM

Oh, I didn't know external ones were faster. Oh well, I guess that means I'll have to change my models for speed.
  • 0

#48 hanson

hanson

    GMC Member

  • GMC Member
  • 444 posts
  • Version:GM8

Posted 10 January 2008 - 01:41 AM

Whaddsoft,

Running wouldn't be faster, just the loading I think.

I have looked, and see no way to get the information about a model from its id. If anyone knows of a way to do this, please let me know!

-hanson
  • 0

#49 WadeMcGillis

WadeMcGillis

    wademcgillis.com

  • GMC Member
  • 971 posts

Posted 10 January 2008 - 08:37 PM

If you create a model that's made out of spheres in gm with a linelist or linestrip, (and then save it as a file and use that for your game) will it still work with this dll. since it's not triangles (well, the sphere is, but linelist is definitely not)

Edited by Whaddsoft, 10 January 2008 - 08:42 PM.

  • 0

#50 Krisando

Krisando

    GMC Member

  • New Member
  • 1351 posts

Posted 10 January 2008 - 08:39 PM

Im worried where this is going is there still going to be support for Gm d3d External models? and is there a way to make slopes work?
  • 0

Posted Image





0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users