{"id":44486310,"url":"https://github.com/blueburncz/gmbullet","last_synced_at":"2026-02-13T02:00:52.364Z","repository":{"id":134883483,"uuid":"595196041","full_name":"blueburncz/GMBullet","owner":"blueburncz","description":"Bullet Physics extension for GameMaker","archived":false,"fork":false,"pushed_at":"2025-12-28T16:42:33.000Z","size":20863,"stargazers_count":13,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-12-31T06:23:50.794Z","etag":null,"topics":["bullet-physics","extension","gamemaker"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/blueburncz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-01-30T15:43:35.000Z","updated_at":"2025-12-28T16:42:37.000Z","dependencies_parsed_at":"2023-11-12T17:24:58.995Z","dependency_job_id":"b253f41e-31bd-4627-9ded-580c936360fc","html_url":"https://github.com/blueburncz/GMBullet","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/blueburncz/GMBullet","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/blueburncz%2FGMBullet","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/blueburncz%2FGMBullet/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/blueburncz%2FGMBullet/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/blueburncz%2FGMBullet/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/blueburncz","download_url":"https://codeload.github.com/blueburncz/GMBullet/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/blueburncz%2FGMBullet/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29392756,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-13T00:53:09.511Z","status":"online","status_checked_at":"2026-02-13T02:00:10.076Z","response_time":78,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bullet-physics","extension","gamemaker"],"created_at":"2026-02-13T02:00:20.367Z","updated_at":"2026-02-13T02:00:52.358Z","avatar_url":"https://github.com/blueburncz.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# GMBullet\n\n\u003e Bullet Physics extension for GameMaker\n\n[![License](https://img.shields.io/github/license/blueburncz/GMBullet)](LICENSE)\n[![Discord](https://img.shields.io/discord/298884075585011713?label=Discord)](https://discord.gg/ep2BGPm)\n\n## Table of Contents\n\n* [Status](#status-community-project-)\n* [About](#about)\n* [Translating API](#translating-api)\n  * [Construtors and destructors](#constructors-and-destructors)\n  * [Methods](#methods)\n  * [Return values](#return-values)\n  * [Public properties](#public-properties)\n  * [Operators](#operators)\n* [Features](#features)\n* [Documentation and help](#documentation-and-help)\n* [Building from source](#building-from-source)\n* [License](#license)\n* [Links](#links)\n\n## Status: Community Project 💙\n\nThis is a community-developed project, released under **CC0 1.0 Universal (Public Domain)**.\nIt is **no longer actively maintained** by the original author. Feel free to fork, modify,\nor experiment.\n\n## About\n\nGMBullet is an extension that exposes\n[Bullet physics](https://github.com/bulletphysics/bullet3) functions to\nGameMaker. Its goal is not to be a simplification layer, but instead it tries to\nmatch Bullet's API as closely as possible.\n\n## Translating API\n\nBullet's C++ public API is converted into a C-like code and exposed to GML. This\nis how to find a GMBullet equivalent to a Bullet function:\n\n### Constructors and destructors\n\nIn GMBullet, these are the class name appended with `_create` or `_destroy`. For\nexample:\n\n```cpp\n// C++\nbtDiscreteDynamicsWorld* dynamicsWorld = new btDiscreteDynamicsWorld(\n    dispatcher, pairCache, constraintSolver, collisionConfiguration);\n\ndelete dynamicsWorld;\n```\n\nbecomes\n\n```gml\n// GML\nvar dynamicsWorld = btDiscreteDynamicsWorld_create(\n    dispatcher, pairCache, constraintSolver, collisionConfiguration);\n\nbtDiscreteDynamicsWorld_destroy(dynamicsWorld);\n```\n\nIf a Bullet class/struct has multiple constructors, in GMBullet these are available\nas separate functions. For example these are the constructors of `btQuaternion`\navailable in GMBullet:\n\n```gml\n// GML\nbtQuaternion_create(x, y, z, w);\nbtQuaternion_createFromAxisAngle(axis, angle);\nbtQuaternion_createFromEuler(yaw, pitch, roll);\n```\n\nIf a Bullet class/struct is defined inside of a namespace or another class/struct,\nthe GMBullet name is just the class/struct name (prepended with `bt`, if missing),\nwithout the namespace. For example, `btCollisionWorld::ClosestRayResultCallback`\nbecomes just `btClosestRayResultCallback`.\n\n### Methods\n\nIn GMBullet, these are the class name appended with underscore, followed by the\nmethod name. The first argument of a method is always a pointer to the class\ninstance. For example:\n\n```cpp\n// C++\nbtVector3 gravity(0.0, 0.0, -9.8);\ndynamicsWorld-\u003esetGravity(gravity);\n```\n\nbecomes\n\n```gml\n// GML\nvar gravity = btVector3_create(0, 0, -9.8);\nbtDiscreteDynamicsWorld_setGravity(dynamicsWorld, gravity);\nbtVector3_destroy(gravity);\n```\n\n### Return values\n\nInstead of allocating a new class/struct and returning those directly, GMBullet\nuses output parameters, appended to the end of the original function. For example:\n\n```cpp\n// C++\nbtVector3 gravity = dynamicsWorld-\u003egetGravity();\n// Use gravity...\n```\n\nbecomes\n\n```gml\n// GML\nvar outGravity = btVector3_create();\nbtDiscreteDynamicsWorld_getGravity(dynamicsWorld, outGravity);\n// Use outGravity...\nbtVector3_destroy(outGravity);\n```\n\n### Public properties\n\nPublic properties of classes/structs in Bullet are exposed via getters and setters\nin GMBullet. For example for `m_hitPointWorld` of `btClosestRayResultCallback`,\nthere's a getter `btClosestRayResultCallback_getHitPointWorld`.\n\n### Operators\n\n**Operator overloads are currently not exposed in GMBullet!** (But when they're\nadded, they are most likely going t be `_add`, `_sub`, `_mul` and `_div`,\nappended to the class/struct name.)\n\n## Features\n\n* [x] Collision world\n* [ ] Collision shapes\n  * [x] Box\n  * [x] Sphere\n  * [x] Capsule\n  * [x] Cone\n  * [ ] Convex hull (🛑 TODO)\n  * [x] Cylinder\n  * [x] Compound\n  * [ ] Plane (🛑 TODO)\n  * [ ] Triangle mesh\n    * [ ] For dynamic colliders (🛑 TODO)\n    * [x] For static colliders\n  * [x] Heightfield terrain\n* [x] Collision objects\n* [x] Discrete dynamics world\n* [x] Rigid body\n* [ ] Constraints\n  * [x] ConeTwist\n  * [x] Fixed\n  * [x] Gear\n  * [x] Generic6Dof\n  * [x] Generic6DofSpring2\n  * [x] Generic6DofSpring\n  * [x] Hinge2\n  * [x] Hinge\n  * [x] Point2Point\n  * [x] Slider\n  * [x] Typed\n  * [x] Universal\n* [ ] Actions\n  * [x] Raycast vehicle\n* [x] Ray test\n* [x] Sweep test\n* [x] Contact tests\n* [ ] Debug draw\n  * [x] In-memory (copy to vertex buffer, submit from GM; slow)\n  * [ ] OpenGL 2 (🛑 TODO)\n  * [ ] D3D11 (🛑 TODO)\n* [ ] Soft body (🚧 WIP)\n* [ ] Multithreading (🛑 TODO)\n\n## Documentation and help\n\nAll documentation was generated from source using [ChatGPT 3.5](https://chat.openai.com)!\nPlease use Bullet's official resources for learning.\n\n## Building from source\n\nRequires [CMake](https://cmake.org) version 3.23 or newer!\n\n```sh\n# Clone the repo, including submodules\ngit clone https://github.com/blueburncz/GMBullet.git --recurse-submodules\n\n# Build Bullet\ncd GMBullet/bullet3\nmkdir build\ncd build\ncmake .. -DUSE_DOUBLE_PRECISION=ON\ncmake --build . --config=Release\n\n# Build GMBullet\ncd ../../\nmkdir build\ncd build\ncmake ..\ncmake --build . --config=Release\n```\n\n## License\n\nBased on Bullet Physics extension for GameMaker: Studio 1.4 by Okapi, available\nfrom \u003chttps://drive.google.com/file/d/1AAn1PfZ8EDkCkJXNkaKyOkp5eJdx2bcM/view\u003e\nunder \"Finish it, learn from it, do whatever the hell you want\" license. Further\nmodifications to the library are available under the CC0 license.\nSee [LICENSE](LICENSE) for the full license text.\n\n## Links\n\n* [Bullet 3](https://github.com/bulletphysics/bullet3)\n* [Original project](https://drive.google.com/file/d/1AAn1PfZ8EDkCkJXNkaKyOkp5eJdx2bcM/view) by Okapi\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fblueburncz%2Fgmbullet","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fblueburncz%2Fgmbullet","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fblueburncz%2Fgmbullet/lists"}