├── README.md ├── download └── io_export_gms3d.zip ├── example └── 3D Model Viewer.zip ├── legacy ├── io_export_gamemaker_3d.py └── io_export_gamemaker_d3d.py └── source ├── 3D Model Viewer ├── 3D Model Viewer.yyp ├── datafiles │ └── sphere.buf ├── fonts │ └── fnt_arial │ │ ├── fnt_arial.old.png │ │ ├── fnt_arial.old.yy │ │ ├── fnt_arial.png │ │ └── fnt_arial.yy ├── notes │ ├── compatibility_report_020121_144805485 │ │ ├── compatibility_report_020121_144805485.txt │ │ └── compatibility_report_020121_144805485.yy │ └── notes │ │ ├── notes.txt │ │ └── notes.yy ├── objects │ ├── obj_camera │ │ ├── Create_0.gml │ │ ├── Draw_0.gml │ │ ├── Step_0.gml │ │ └── obj_camera.yy │ ├── obj_floor │ │ ├── Create_0.gml │ │ ├── Draw_0.gml │ │ └── obj_floor.yy │ ├── obj_hud │ │ ├── Create_0.gml │ │ ├── Draw_0.gml │ │ └── obj_hud.yy │ ├── obj_model │ │ ├── Create_0.gml │ │ ├── Draw_0.gml │ │ ├── Other_10.gml │ │ ├── Step_0.gml │ │ └── obj_model.yy │ └── obj_worldspawn │ │ ├── Create_0.gml │ │ ├── KeyPress_27.gml │ │ ├── Step_0.gml │ │ └── obj_worldspawn.yy ├── options │ ├── amazonfire │ │ └── options_amazonfire.yy │ ├── android │ │ ├── icons │ │ │ ├── icon_hdpi.png │ │ │ ├── icon_ldpi.png │ │ │ ├── icon_mdpi.png │ │ │ ├── icon_xhdpi.png │ │ │ ├── icon_xxhdpi.png │ │ │ ├── icon_xxxhdpi.png │ │ │ └── ouyaIcon.png │ │ ├── options_android.yy │ │ ├── portrait_splash.png │ │ ├── splash.png │ │ └── splash │ │ │ ├── portrait_splash.png │ │ │ └── splash.png │ ├── html5 │ │ ├── fav.ico │ │ ├── options_html5.yy │ │ └── splash.png │ ├── ios │ │ ├── iPadRetinaSplash.png │ │ ├── iPadRetinaSplashPortrait.png │ │ ├── iPadsplash.png │ │ ├── iPadsplashPortrait.png │ │ ├── iPhone5splash.png │ │ ├── iPhone5splashPortrait.png │ │ ├── iPhone6PlusSplash.png │ │ ├── iPhone6PlusSplashPortrait.png │ │ ├── iPhone6Splash.png │ │ ├── iPhone6SplashPortrait.png │ │ ├── iPhoneRetinasplash.png │ │ ├── iPhoneRetinasplashPortrait.png │ │ ├── iPhonesplash.png │ │ ├── iPhonesplashPortrait.png │ │ ├── icons │ │ │ ├── icon114.png │ │ │ ├── icon120.png │ │ │ ├── icon144.png │ │ │ ├── icon152.png │ │ │ ├── icon167.png │ │ │ ├── icon57.png │ │ │ ├── icon72.png │ │ │ └── icon76.png │ │ ├── options_ios.yy │ │ ├── splash.png │ │ ├── splash │ │ │ ├── IphoneRetinasplashPortrait.png │ │ │ ├── iPadRetinasplash.png │ │ │ ├── iPadRetinasplashPortrait.png │ │ │ ├── iPadsplash.png │ │ │ ├── iPadsplashPortrait.png │ │ │ ├── iPhone5splashPortrait.png │ │ │ ├── iPhone6Plussplash.png │ │ │ ├── iPhone6PlussplashPortrait.png │ │ │ ├── iPhone6splashPortrait.png │ │ │ └── iPhonesplashPortrait.png │ │ └── splashPortrait.png │ ├── linux │ │ └── options_linux.yy │ ├── mac │ │ ├── icon512.png │ │ ├── icons │ │ │ └── icon512.png │ │ ├── options_mac.yy │ │ ├── splash.png │ │ └── splash │ │ │ └── splash.png │ ├── main │ │ └── options_main.yy │ ├── operagx │ │ └── options_operagx.yy │ ├── tvos │ │ └── options_tvos.yy │ ├── windows │ │ ├── License.txt │ │ ├── RunnerInstaller.nsi │ │ ├── Runner_Icon_256.ico │ │ ├── Runner_finish.bmp │ │ ├── Runner_header.bmp │ │ ├── installer │ │ │ └── license.txt │ │ ├── options_windows.yy │ │ ├── runner_icon.ico │ │ └── splash.png │ └── windowsuap │ │ └── options_windowsuap.yy ├── rooms │ └── rm_example │ │ └── rm_example.yy ├── scripts │ ├── functions │ │ ├── functions.gml │ │ └── functions.yy │ └── macros │ │ ├── macros.gml │ │ └── macros.yy └── sprites │ ├── spr_camera │ ├── 0638d719-56a9-4c66-a75e-a2d69dfc61a2.png │ ├── 094bc6c5-42da-4178-9ef4-0dfc38f06d6d.png │ ├── 0ceb400a-5156-49ae-9507-86d4ea9eaa08.png │ ├── 0f9cd664-296d-40c7-9d1e-35d4c4c2684b.png │ ├── 1304025c-53ab-48e2-9118-9ff47b144df6.png │ ├── 20672b94-f84c-414c-bf31-c3bdb3e493cd.png │ ├── 21c3e2b2-0b40-41fe-acc9-5da5902d634a.png │ ├── 21f73e35-9a09-4b4a-b6e9-ffff1481cc62.png │ ├── 23dc8e31-dd90-42f9-a811-46b33f0e2744.png │ ├── 2b15c324-0ca4-4553-b343-50a2796b23b8.png │ ├── 2d6b61c9-a073-4ca1-b477-dda0a095be3f.png │ ├── 314ac0c4-48ef-4ac1-99da-0e7936c3fe3e.png │ ├── 34d63c82-817f-49fe-afcd-993fadc29f10.png │ ├── 37812ae6-c51b-4319-92d9-d2fce7b39818.png │ ├── 38201428-f077-4475-81a3-7688b725fe76.png │ ├── 45473dd1-3390-46f1-a231-9c3724a52d36.png │ ├── 4588e73b-327a-4d46-94f9-436504c9aff0.png │ ├── 4a768da1-f2f5-4b4a-a325-26c780f61433.png │ ├── 4fb6f0fb-6de2-4707-8299-c13ef950b885.png │ ├── 50cc9ca5-a337-4617-bf1c-446baeab983e.png │ ├── 5246d612-d50c-42c9-a4dc-fffa201a734a.png │ ├── 5c8f9e7c-db32-4961-992b-7ab2b16a249e.png │ ├── 61abe727-19ea-4342-b97c-f3bd52beeb79.png │ ├── 67da1ff6-e753-4162-b9eb-b2e1175c34ea.png │ ├── 7698940c-6747-4674-8d7b-c90b54c937b4.png │ ├── 7714a809-c1f9-4807-b871-0764f63de988.png │ ├── 77fc921c-c989-4378-b36f-a1085647ec66.png │ ├── 7932b5ae-3ce0-4d33-ab33-f1411caf058a.png │ ├── 84a0b706-06b0-4d18-b6f6-90911724dc7b.png │ ├── 85affb4c-231e-4c1a-8d32-8d9fab98db7e.png │ ├── 873b8602-5288-4921-85b2-17ac6b897b12.png │ ├── 8bcab37b-4e92-4c82-9e8a-19090ff92c9b.png │ ├── 8da88f92-a20c-4520-86f3-0c2f60c20345.png │ ├── 999bd5b8-de89-4197-b63a-d722b4a4fe35.png │ ├── 9ed3aad0-fa0f-4a1a-9c4c-6b5d2e1c4592.png │ ├── a78755a0-86e0-4156-a6bc-8bf4036e9055.png │ ├── b1ee8931-cc62-4784-af1d-819419033551.png │ ├── b5d7b28b-5b7b-4f93-9bda-ded44c56b691.png │ ├── bac48ecb-5f36-4c78-a70b-26d950ec63f0.png │ ├── bdfb5047-2297-4eaf-987a-46bbad9d33e9.png │ ├── be053013-94cd-4204-8d6c-1a26ca6be499.png │ ├── be07708f-c097-4a12-9122-dd8dea456bf2.png │ ├── be1ddc5d-9c5b-4003-9242-e61005178ca1.png │ ├── c0c01294-91ed-4f8d-81f1-3360df8dbb1f.png │ ├── c1532b6c-da3c-48a0-a936-5c59f2970620.png │ ├── c2a769d7-923a-4d20-a08a-2f7ef3295114.png │ ├── c55763d4-d98a-4270-bb37-4284aab698dd.png │ ├── d07d0400-72c0-4c8a-aded-70608bd36232.png │ ├── d1538bc8-f7be-4189-93ed-e83b25c78422.png │ ├── d2c8c88a-f6be-4222-8731-a2c086b275cc.png │ ├── d34c49eb-6564-4f54-86de-af5d1944f1bd.png │ ├── d7d3ea40-2596-4622-b4db-2a1ad67a3d5d.png │ ├── d82cc809-22ad-4a68-8d43-c2747c13f4e3.png │ ├── dc28f729-7267-40a7-8d72-a14b66b2c32e.png │ ├── e0c91714-ea4c-4a50-86b9-0226102994f3.png │ ├── e14bf24b-5b9c-4035-adc1-d41dd17f4ccc.png │ ├── ea891ac0-3a1d-4c91-9f4c-1ed5664fd844.png │ ├── ee506626-5555-4daf-9572-5c82cca239a0.png │ ├── fb04380b-441c-4d46-a0ef-01438b12fbaf.png │ ├── fb482759-e793-4009-b942-1b13dce26b4c.png │ ├── layers │ │ ├── 0638d719-56a9-4c66-a75e-a2d69dfc61a2 │ │ │ └── d2b1b377-4f85-45fc-a0e7-e360deafed91.png │ │ ├── 094bc6c5-42da-4178-9ef4-0dfc38f06d6d │ │ │ └── d2b1b377-4f85-45fc-a0e7-e360deafed91.png │ │ ├── 0ceb400a-5156-49ae-9507-86d4ea9eaa08 │ │ │ └── d2b1b377-4f85-45fc-a0e7-e360deafed91.png │ │ ├── 0f9cd664-296d-40c7-9d1e-35d4c4c2684b │ │ │ └── d2b1b377-4f85-45fc-a0e7-e360deafed91.png │ │ ├── 1304025c-53ab-48e2-9118-9ff47b144df6 │ │ │ └── d2b1b377-4f85-45fc-a0e7-e360deafed91.png │ │ ├── 20672b94-f84c-414c-bf31-c3bdb3e493cd │ │ │ └── d2b1b377-4f85-45fc-a0e7-e360deafed91.png │ │ ├── 21c3e2b2-0b40-41fe-acc9-5da5902d634a │ │ │ └── d2b1b377-4f85-45fc-a0e7-e360deafed91.png │ │ ├── 21f73e35-9a09-4b4a-b6e9-ffff1481cc62 │ │ │ └── d2b1b377-4f85-45fc-a0e7-e360deafed91.png │ │ ├── 23dc8e31-dd90-42f9-a811-46b33f0e2744 │ │ │ └── d2b1b377-4f85-45fc-a0e7-e360deafed91.png │ │ ├── 2b15c324-0ca4-4553-b343-50a2796b23b8 │ │ │ └── d2b1b377-4f85-45fc-a0e7-e360deafed91.png │ │ ├── 2d6b61c9-a073-4ca1-b477-dda0a095be3f │ │ │ └── d2b1b377-4f85-45fc-a0e7-e360deafed91.png │ │ ├── 314ac0c4-48ef-4ac1-99da-0e7936c3fe3e │ │ │ └── d2b1b377-4f85-45fc-a0e7-e360deafed91.png │ │ ├── 34d63c82-817f-49fe-afcd-993fadc29f10 │ │ │ └── d2b1b377-4f85-45fc-a0e7-e360deafed91.png │ │ ├── 37812ae6-c51b-4319-92d9-d2fce7b39818 │ │ │ └── d2b1b377-4f85-45fc-a0e7-e360deafed91.png │ │ ├── 38201428-f077-4475-81a3-7688b725fe76 │ │ │ └── d2b1b377-4f85-45fc-a0e7-e360deafed91.png │ │ ├── 45473dd1-3390-46f1-a231-9c3724a52d36 │ │ │ └── d2b1b377-4f85-45fc-a0e7-e360deafed91.png │ │ ├── 4588e73b-327a-4d46-94f9-436504c9aff0 │ │ │ └── d2b1b377-4f85-45fc-a0e7-e360deafed91.png │ │ ├── 4a768da1-f2f5-4b4a-a325-26c780f61433 │ │ │ └── d2b1b377-4f85-45fc-a0e7-e360deafed91.png │ │ ├── 4fb6f0fb-6de2-4707-8299-c13ef950b885 │ │ │ └── d2b1b377-4f85-45fc-a0e7-e360deafed91.png │ │ ├── 50cc9ca5-a337-4617-bf1c-446baeab983e │ │ │ └── d2b1b377-4f85-45fc-a0e7-e360deafed91.png │ │ ├── 5246d612-d50c-42c9-a4dc-fffa201a734a │ │ │ └── d2b1b377-4f85-45fc-a0e7-e360deafed91.png │ │ ├── 5c8f9e7c-db32-4961-992b-7ab2b16a249e │ │ │ └── d2b1b377-4f85-45fc-a0e7-e360deafed91.png │ │ ├── 61abe727-19ea-4342-b97c-f3bd52beeb79 │ │ │ └── d2b1b377-4f85-45fc-a0e7-e360deafed91.png │ │ ├── 67da1ff6-e753-4162-b9eb-b2e1175c34ea │ │ │ └── d2b1b377-4f85-45fc-a0e7-e360deafed91.png │ │ ├── 7698940c-6747-4674-8d7b-c90b54c937b4 │ │ │ └── d2b1b377-4f85-45fc-a0e7-e360deafed91.png │ │ ├── 7714a809-c1f9-4807-b871-0764f63de988 │ │ │ └── d2b1b377-4f85-45fc-a0e7-e360deafed91.png │ │ ├── 77fc921c-c989-4378-b36f-a1085647ec66 │ │ │ └── d2b1b377-4f85-45fc-a0e7-e360deafed91.png │ │ ├── 7932b5ae-3ce0-4d33-ab33-f1411caf058a │ │ │ └── d2b1b377-4f85-45fc-a0e7-e360deafed91.png │ │ ├── 84a0b706-06b0-4d18-b6f6-90911724dc7b │ │ │ └── d2b1b377-4f85-45fc-a0e7-e360deafed91.png │ │ ├── 85affb4c-231e-4c1a-8d32-8d9fab98db7e │ │ │ └── d2b1b377-4f85-45fc-a0e7-e360deafed91.png │ │ ├── 873b8602-5288-4921-85b2-17ac6b897b12 │ │ │ └── d2b1b377-4f85-45fc-a0e7-e360deafed91.png │ │ ├── 8bcab37b-4e92-4c82-9e8a-19090ff92c9b │ │ │ └── d2b1b377-4f85-45fc-a0e7-e360deafed91.png │ │ ├── 8da88f92-a20c-4520-86f3-0c2f60c20345 │ │ │ └── d2b1b377-4f85-45fc-a0e7-e360deafed91.png │ │ ├── 999bd5b8-de89-4197-b63a-d722b4a4fe35 │ │ │ └── d2b1b377-4f85-45fc-a0e7-e360deafed91.png │ │ ├── 9ed3aad0-fa0f-4a1a-9c4c-6b5d2e1c4592 │ │ │ └── d2b1b377-4f85-45fc-a0e7-e360deafed91.png │ │ ├── a78755a0-86e0-4156-a6bc-8bf4036e9055 │ │ │ └── d2b1b377-4f85-45fc-a0e7-e360deafed91.png │ │ ├── b1ee8931-cc62-4784-af1d-819419033551 │ │ │ └── d2b1b377-4f85-45fc-a0e7-e360deafed91.png │ │ ├── b5d7b28b-5b7b-4f93-9bda-ded44c56b691 │ │ │ └── d2b1b377-4f85-45fc-a0e7-e360deafed91.png │ │ ├── bac48ecb-5f36-4c78-a70b-26d950ec63f0 │ │ │ └── d2b1b377-4f85-45fc-a0e7-e360deafed91.png │ │ ├── bdfb5047-2297-4eaf-987a-46bbad9d33e9 │ │ │ └── d2b1b377-4f85-45fc-a0e7-e360deafed91.png │ │ ├── be053013-94cd-4204-8d6c-1a26ca6be499 │ │ │ └── d2b1b377-4f85-45fc-a0e7-e360deafed91.png │ │ ├── be07708f-c097-4a12-9122-dd8dea456bf2 │ │ │ └── d2b1b377-4f85-45fc-a0e7-e360deafed91.png │ │ ├── be1ddc5d-9c5b-4003-9242-e61005178ca1 │ │ │ └── d2b1b377-4f85-45fc-a0e7-e360deafed91.png │ │ ├── c0c01294-91ed-4f8d-81f1-3360df8dbb1f │ │ │ └── d2b1b377-4f85-45fc-a0e7-e360deafed91.png │ │ ├── c1532b6c-da3c-48a0-a936-5c59f2970620 │ │ │ └── d2b1b377-4f85-45fc-a0e7-e360deafed91.png │ │ ├── c2a769d7-923a-4d20-a08a-2f7ef3295114 │ │ │ └── d2b1b377-4f85-45fc-a0e7-e360deafed91.png │ │ ├── c55763d4-d98a-4270-bb37-4284aab698dd │ │ │ └── d2b1b377-4f85-45fc-a0e7-e360deafed91.png │ │ ├── d07d0400-72c0-4c8a-aded-70608bd36232 │ │ │ └── d2b1b377-4f85-45fc-a0e7-e360deafed91.png │ │ ├── d1538bc8-f7be-4189-93ed-e83b25c78422 │ │ │ └── d2b1b377-4f85-45fc-a0e7-e360deafed91.png │ │ ├── d2c8c88a-f6be-4222-8731-a2c086b275cc │ │ │ └── d2b1b377-4f85-45fc-a0e7-e360deafed91.png │ │ ├── d34c49eb-6564-4f54-86de-af5d1944f1bd │ │ │ └── d2b1b377-4f85-45fc-a0e7-e360deafed91.png │ │ ├── d7d3ea40-2596-4622-b4db-2a1ad67a3d5d │ │ │ └── d2b1b377-4f85-45fc-a0e7-e360deafed91.png │ │ ├── d82cc809-22ad-4a68-8d43-c2747c13f4e3 │ │ │ └── d2b1b377-4f85-45fc-a0e7-e360deafed91.png │ │ ├── dc28f729-7267-40a7-8d72-a14b66b2c32e │ │ │ └── d2b1b377-4f85-45fc-a0e7-e360deafed91.png │ │ ├── e0c91714-ea4c-4a50-86b9-0226102994f3 │ │ │ └── d2b1b377-4f85-45fc-a0e7-e360deafed91.png │ │ ├── e14bf24b-5b9c-4035-adc1-d41dd17f4ccc │ │ │ └── d2b1b377-4f85-45fc-a0e7-e360deafed91.png │ │ ├── ea891ac0-3a1d-4c91-9f4c-1ed5664fd844 │ │ │ └── d2b1b377-4f85-45fc-a0e7-e360deafed91.png │ │ ├── ee506626-5555-4daf-9572-5c82cca239a0 │ │ │ └── d2b1b377-4f85-45fc-a0e7-e360deafed91.png │ │ ├── fb04380b-441c-4d46-a0ef-01438b12fbaf │ │ │ └── d2b1b377-4f85-45fc-a0e7-e360deafed91.png │ │ └── fb482759-e793-4009-b942-1b13dce26b4c │ │ │ └── d2b1b377-4f85-45fc-a0e7-e360deafed91.png │ └── spr_camera.yy │ └── spr_uvcolorgrid │ ├── bfccf9fe-3d81-4d41-81bb-ba2bcdddda01.png │ ├── layers │ └── bfccf9fe-3d81-4d41-81bb-ba2bcdddda01 │ │ └── 9751fbf8-e9c3-48a2-bda8-3ea026dabcfb.png │ └── spr_uvcolorgrid.yy ├── io_export_gms3d ├── __init__.py ├── gm3d_output.py └── gm3d_prep.py └── scratch ├── face-loop.py └── scratch.py /README.md: -------------------------------------------------------------------------------- 1 | # gamemaker-3d-io 2 | A Blender addon which exports 3D models to a format that GameMaker Studio 2 will read natively. 3 | 4 | This is a continuation of the GameMaker D3D and GML script addons for Blender 2.7x, recreated from the ground up to work with [Blender 2.93](https://blender.org). This version of the addon can export directly to a vertex buffer format that [GameMaker Studio 2](https://www.yoyogames.com/en/gamemaker) will load/read natively, or to a GML script (mostly for debugging purposes) that can be put into a GameMaker project. 5 | 6 | Not all of the options from the original plugin are present in this version, but most that were removed were superfluous and didn't need to be carried over. 7 | 8 | This addon is a work-in-progress; thanks for your patience! 9 | 10 | ### Features 11 | - gamemaker-3d-io is an easy way to get objects from Blender to GameMaker Studio 2, using GameMaker's native buffer format 12 | - Objects can alternatively be exported to a GML script for importing/debugging 13 | - Exports models with normals, vertex colors, and UV coordinates included 14 | - Exports models as triangle lists, line lists, or point lists 15 | 16 | A number of example models have been included to try. The source code for this project is also available [here](https://github.com/massivecatapult/gamemaker-3d-io/tree/main/source/3D%20Model%20Viewer). 17 | 18 | ### How to install: 19 | 1. Download the Zip of the latest version of the addon from the [download](https://github.com/massivecatapult/gamemaker-3d-io/tree/main/download) directory 20 | 1. Open Blender, then go to Edit > Preferences, and select the Addons tab on the left 21 | 1. Click Install... at the top right of the window, then find and select the downloaded Zip file 22 | 1. Check the box to the left of Import-Export: GameMaker Studio 2 3D format to enable the addon 23 | 24 | ### How to use: 25 | 1. Create a 3D model for your game, then select it 26 | 1. Go to File > Export > GameMaker 3D (.buf, .gml), choose the desired options, and click Export 27 | 1. Depending on which output type was chosen: 28 | - For vertex buffers, load the file into a GameMaker project as a buffer, convert to a vertex buffer, and submit the buffer for drawing/shaders 29 | - For GML output, open the file, copy and paste the function into a GameMaker project, then call it in your game to build the model 30 | 31 | ### Export Options 32 | - **Format:** Choose to output the model as a Triangle List, a Line List, or a Point List. Line lists and point lists can only be a single color, and a new option to choose the color will appear if those formats are selected. 33 | - **Vertex Color:** This option only appears if the output format is set to Line List or Point List. This color will determine the color the entire set of lines/points will draw when used in GameMaker. 34 | - **Use World Origin:** If selected, the object's position will be applied before it is output, which will set the object's origin to the world origin. If unselected, the object will retain its original origin point. 35 | - **Flip On Y:** Flips/mirrors the object's Y coordinates before it is output. This action will pivot around the object's origin, which will also be the world origin if **Use World Origin** is selected. This can help ensure that the object looks correct in GameMaker's 3D view. 36 | - **Flip UV Coordinates:** Flips the object's UV coordinates (on Y), which can help ensure that textures draw properly once in GameMaker. 37 | - **Apply Modifiers:** If selected, the object's modifiers will be applied to the model before it is output, which will make the output retain the same appearance as in Blender. 38 | - **Scale:** Additional scaling to apply to the object before output, which can be useful if there is a disparity between your workspace in Blender and the size of objects in GameMaker. The minimum scale is 0.01. 39 | - **Type:** Choose between vertex buffers or GML output. Vertex buffers are external files that can be loaded directly into GameMaker at runtime, while GML files should be copied into GameMaker as scripts/functions and used to build the vertex buffer at runtime. It is recommended to only use GML output for debugging, because the resulting scripts can be quite large. 40 | 41 | ### Tips 42 | - GameMaker requires a vertex format to use that when loading objects. The format for triangle lists is: 43 | ```gml 44 | vertex_format_begin(); 45 | vertex_format_add_position_3d(); 46 | vertex_format_add_normal(); 47 | vertex_format_add_color(); 48 | vertex_format_add_texcoord(); 49 | format = vertex_format_end(); 50 | ``` 51 | - The format for line lists and point lists is: 52 | ```gml 53 | vertex_format_begin(); 54 | vertex_format_add_position_3d(); 55 | vertex_format_add_color(); 56 | format = vertex_format_end(); 57 | ``` 58 | - If you output your object to GML, a copy of the formatting above is included in a comment at the head of the script. 59 | - To ensure that objects retain smooth/hard edges in GameMaker, consider setting the object to smooth shading, then using an Edge Split modifier and marking sharp edges where desired. Make sure to export with modifiers applied. 60 | - Legacy versions of the script, which supported D3D and GML output for GameMaker Studio 1, are available here: https://github.com/massivecatapult/gamemaker-3d-io/tree/main/legacy 61 | 62 | ### Example 63 | A pre-compiled GameMaker Studio 2 executable is available to try, which has a basic 3D world set up and some functions for loading and viewing models under different conditions. It can be found in the [example](https://github.com/massivecatapult/gamemaker-3d-io/tree/main/example) directory. To try out the example for yourself, do the following: 64 | 1. Download the example from the link above 65 | 2. Extract the files to a folder and run **3D Model Viewer.exe** 66 | 3. Use the following controls to view models (modeled after Blender's controls, for convenience): 67 | - Middle Mouse: rotate the view 68 | - Middle Mouse + Shift: pan the view 69 | - Middle Mouse + Ctrl/Mouse Wheel: zoom the view 70 | - Numpad 0: reset the position of the view 71 | - M: load a new model for viewing (you will be asked to confirm the model format after selecting a file) 72 | - D: set the model to "demo mode", which will have it rotate around all axis 73 | - L: toggle lighting 74 | - C: toggle culling 75 | - T: toggle texture 76 | - Escape: close the app 77 | 78 | ### Roadmap 79 | Plans for the continued development of this addon include: 80 | - Ability to disable some types of data in the output, such as normals and UV data 81 | - Additional options for viewing models in the example project, such as loading a custom preview texture 82 | - Cleanup pass on code in example project (since this code was co-opted from another project, there's still a little cruft leftover) 83 | -------------------------------------------------------------------------------- /download/io_export_gms3d.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/download/io_export_gms3d.zip -------------------------------------------------------------------------------- /example/3D Model Viewer.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/example/3D Model Viewer.zip -------------------------------------------------------------------------------- /legacy/io_export_gamemaker_d3d.py: -------------------------------------------------------------------------------- 1 | bl_info = { 2 | "name": "Export GameMaker 3D Model (.d3d)", 3 | "author": "Martin Crownover", 4 | "version": (1, 0, 1), 5 | "blender": (2, 7, 6), 6 | "location": "File > Export", 7 | "description": "Export 3D Model for GameMaker: Studio", 8 | "warning": "", 9 | "wiki_url": "", 10 | "tracker_url": "http://martincrownover.com/blender-addon-gmd3d", 11 | "category": "Import-Export"} 12 | 13 | ''' 14 | Usage Notes: 15 | Build your 3D model, select it, then go to File > Export > GameMaker 3D Model. 16 | Set options as desired, export, and then import the resulting directly into GameMaker using the d3d_model_load() function. 17 | Using Edge Split and marking sharp edges is recommended, as is setting up a proper UV map. 18 | 19 | Additional links: 20 | url: http://martincrownover.com 21 | e-mail: martin {at} martincrownover {dot} com 22 | 23 | Additional credits: 24 | Jeff LaMarche {http://iphonedevelopment.blogspot.com} 25 | BenRK 26 | shad0w 27 | 28 | ''' 29 | 30 | import bpy 31 | from bpy.props import * 32 | import mathutils, math, struct 33 | import os 34 | from os import remove 35 | import time 36 | import bpy_extras 37 | from bpy_extras.io_utils import ExportHelper 38 | import time 39 | import shutil 40 | import bpy 41 | import mathutils 42 | from math import radians 43 | 44 | def prepMesh(object, flippy): 45 | bneedtri = False 46 | scene = bpy.context.scene 47 | bpy.ops.object.mode_set(mode='OBJECT') 48 | for i in scene.objects: i.select = False 49 | object.select = True 50 | scene.objects.active = object 51 | 52 | print("Checking mesh if needs to convert quad to Tri...") 53 | object.data.update(calc_tessface=True) 54 | for face in object.data.tessfaces: 55 | if (len(face.vertices) > 3): 56 | bneedtri = True 57 | break 58 | 59 | bpy.ops.object.mode_set(mode='OBJECT') 60 | #moved copy operation here so we don't do anything irreversible to the existing model 61 | me_da = object.data.copy() 62 | me_ob = object.copy() 63 | #note two copy two types else it will use the current data or mesh 64 | me_ob.data = me_da 65 | bpy.context.scene.objects.link(me_ob) #link the object to the scene #current object location 66 | #moved this stuff outside the triangulate operation 67 | for i in scene.objects: i.select = False #deselect all objects 68 | me_ob.select = True 69 | scene.objects.active = me_ob #set the mesh object to current 70 | bpy.ops.object.mode_set(mode='EDIT') 71 | bpy.ops.mesh.select_all(action='SELECT') 72 | 73 | if bneedtri == True: 74 | bpy.ops.mesh.quads_convert_to_tris() 75 | 76 | bpy.context.scene.update() 77 | bpy.ops.object.mode_set(mode='OBJECT') # set it in object 78 | 79 | return me_ob 80 | 81 | def writeString(file, string): 82 | file.write(bytes(string, 'UTF-8')) 83 | 84 | def do_export(context, props, filepath): 85 | ob = context.active_object 86 | me_ob = prepMesh(ob, props.flip_y) 87 | current_scene = context.scene 88 | apply_modifiers = props.apply_modifiers 89 | 90 | #apply the object in its current state 91 | bpy.ops.object.transform_apply(location=True, rotation=True, scale=True) 92 | 93 | if props.flip_y: 94 | bpy.context.object.scale[1] = -1; 95 | bpy.ops.object.transform_apply(location=False, rotation=False, scale=True) 96 | bpy.ops.object.mode_set(mode='EDIT') 97 | bpy.ops.mesh.flip_normals() 98 | bpy.ops.object.mode_set(mode='OBJECT') 99 | 100 | mesh = me_ob.to_mesh(current_scene, apply_modifiers, 'PREVIEW') 101 | 102 | basename = mesh.name.capitalize() 103 | 104 | if props.rot_x90: 105 | mesh.transform(mathutils.Matrix.Rotation(radians(90.0), 4, 'X')) 106 | 107 | mesh.transform(mathutils.Matrix.Scale(props.mod_scale, 4)) 108 | 109 | file = open(filepath, "wb") 110 | mesh_string = ''; 111 | start_line = '0 4.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000\n' 112 | end_line = '1 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000' 113 | line_count = 2; 114 | 115 | if len(mesh.uv_textures) > 0: 116 | uv_layer = mesh.tessface_uv_textures.active 117 | for face in mesh.tessfaces: 118 | faceUV = uv_layer.data[face.index] 119 | i=0 120 | for index in face.vertices: 121 | if len(face.vertices) == 3: 122 | vert = mesh.vertices[index] 123 | mesh_string = mesh_string + '9 '; 124 | mesh_string = mesh_string + ('%f %f %f ' % (vert.co.x, vert.co.y, vert.co.z) ) 125 | mesh_string = mesh_string + ('%f %f %f ' % (vert.normal.x, vert.normal.y, vert.normal.z) ) 126 | 127 | if props.flip_uvs: 128 | mesh_string = mesh_string + ('%f %f ' % (faceUV.uv[i][0], 1-faceUV.uv[i][1]) ) 129 | else: 130 | mesh_string = mesh_string + ('%f %f ' % (faceUV.uv[i][0], faceUV.uv[i][1]) ) 131 | mesh_string = mesh_string + '16777215.0000 1.0000\n' 132 | line_count += 1; 133 | i+=1 134 | else: 135 | uv_layer = mesh.tessface_uv_textures.active 136 | for face in mesh.tessfaces: 137 | for index in face.vertices: 138 | if len(face.vertices) == 3: 139 | vert = mesh.vertices[index] 140 | mesh_string = mesh_string + '9 '; 141 | mesh_string = mesh_string + ('%f %f %f ' % (vert.co.x, vert.co.y, vert.co.z) ) 142 | mesh_string = mesh_string + ('%f %f %f ' % (vert.normal.x, vert.normal.y, vert.normal.z) ) 143 | mesh_string = mesh_string + '0.0000 0.0000 16777215.0000 1.0000\n' 144 | line_count += 1; 145 | 146 | #export the all the strings to file 147 | writeString(file, '100\n') 148 | writeString(file, str(line_count) + '\n') 149 | writeString(file, start_line); 150 | writeString(file, mesh_string) 151 | writeString(file, end_line); 152 | 153 | file.flush() 154 | file.close() 155 | 156 | #delete the new copy now 157 | bpy.context.scene.objects.unlink(me_ob) 158 | #reselect the original object 159 | ob.select = True 160 | bpy.context.scene.objects.active = ob 161 | 162 | return True 163 | 164 | 165 | ###### EXPORT OPERATOR ####### 166 | class Export_gmd3d(bpy.types.Operator, ExportHelper): 167 | '''Exports the active Object as a GameMaker: Studio 3D model''' 168 | bl_idname = "export_object.d3d" 169 | bl_label = "Export GameMaker 3D" 170 | filename_ext = ".d3d" 171 | filter_glob = StringProperty( 172 | default="*.d3d", 173 | options={'HIDDEN'}, 174 | ) 175 | 176 | apply_modifiers = BoolProperty(name="Apply modifiers", 177 | description="Applies Modifiers to the Object before exporting", 178 | default=True) 179 | 180 | rot_x90 = BoolProperty(name="Rotate X by 90", 181 | description="Rotate 90 degrees around X to convert to Y-up", 182 | default=False) 183 | 184 | flip_y = BoolProperty(name="Flip Y coordinates", 185 | description="Flips the Y coordinates of the object", 186 | default=True) 187 | 188 | flip_uvs = BoolProperty(name="Flip UV vertically", 189 | description="Flips the UV coordinates on the Y axis", 190 | default=True) 191 | 192 | mod_scale = FloatProperty(name="Scale", 193 | description="Adjusts the scale of the model", 194 | default=1.0) 195 | 196 | @classmethod 197 | def poll(cls, context): 198 | return context.active_object.type in ['MESH', 'CURVE', 'SURFACE', 'FONT'] 199 | 200 | def execute(self, context): 201 | start_time = time.time() 202 | print('\n_____START_____') 203 | props = self.properties 204 | filepath = self.filepath 205 | filepath = bpy.path.ensure_ext(filepath, self.filename_ext) 206 | 207 | exported = do_export(context, props, filepath) 208 | 209 | if exported: 210 | print('finished export in %s seconds' %((time.time() - start_time))) 211 | print(filepath) 212 | 213 | return {'FINISHED'} 214 | 215 | def invoke(self, context, event): 216 | wm = context.window_manager 217 | 218 | if True: 219 | # File selector 220 | wm.fileselect_add(self) # will run self.execute() 221 | return {'RUNNING_MODAL'} 222 | elif True: 223 | # search the enum 224 | wm.invoke_search_popup(self) 225 | return {'RUNNING_MODAL'} 226 | elif False: 227 | # Redo popup 228 | return wm.invoke_props_popup(self, event) # 229 | elif False: 230 | return self.execute(context) 231 | 232 | 233 | ### REGISTER ### 234 | 235 | def menu_func(self, context): 236 | self.layout.operator(Export_gmd3d.bl_idname, text="GameMaker 3D Model (.d3d)") 237 | 238 | def register(): 239 | bpy.utils.register_module(__name__) 240 | 241 | bpy.types.INFO_MT_file_export.append(menu_func) 242 | 243 | def unregister(): 244 | bpy.utils.unregister_module(__name__) 245 | 246 | bpy.types.INFO_MT_file_export.remove(menu_func) 247 | 248 | if __name__ == "__main__": 249 | register() -------------------------------------------------------------------------------- /source/3D Model Viewer/3D Model Viewer.yyp: -------------------------------------------------------------------------------- 1 | { 2 | "resources": [ 3 | {"id":{"name":"functions","path":"scripts/functions/functions.yy",},"order":1,}, 4 | {"id":{"name":"macros","path":"scripts/macros/macros.yy",},"order":4,}, 5 | {"id":{"name":"obj_worldspawn","path":"objects/obj_worldspawn/obj_worldspawn.yy",},"order":1,}, 6 | {"id":{"name":"obj_camera","path":"objects/obj_camera/obj_camera.yy",},"order":3,}, 7 | {"id":{"name":"obj_hud","path":"objects/obj_hud/obj_hud.yy",},"order":5,}, 8 | {"id":{"name":"spr_uvcolorgrid","path":"sprites/spr_uvcolorgrid/spr_uvcolorgrid.yy",},"order":5,}, 9 | {"id":{"name":"fnt_arial","path":"fonts/fnt_arial/fnt_arial.yy",},"order":0,}, 10 | {"id":{"name":"obj_model","path":"objects/obj_model/obj_model.yy",},"order":7,}, 11 | {"id":{"name":"spr_camera","path":"sprites/spr_camera/spr_camera.yy",},"order":6,}, 12 | {"id":{"name":"obj_floor","path":"objects/obj_floor/obj_floor.yy",},"order":9,}, 13 | {"id":{"name":"rm_example","path":"rooms/rm_example/rm_example.yy",},"order":1,}, 14 | {"id":{"name":"notes","path":"notes/notes/notes.yy",},"order":1,}, 15 | {"id":{"name":"compatibility_report_020121_144805485","path":"notes/compatibility_report_020121_144805485/compatibility_report_020121_144805485.yy",},"order":3,}, 16 | ], 17 | "Options": [ 18 | {"name":"Main","path":"options/main/options_main.yy",}, 19 | {"name":"tvOS","path":"options/tvos/options_tvos.yy",}, 20 | {"name":"macOS","path":"options/mac/options_mac.yy",}, 21 | {"name":"Linux","path":"options/linux/options_linux.yy",}, 22 | {"name":"HTML5","path":"options/html5/options_html5.yy",}, 23 | {"name":"Windows","path":"options/windows/options_windows.yy",}, 24 | {"name":"iOS","path":"options/ios/options_ios.yy",}, 25 | {"name":"Windows UWP","path":"options/windowsuap/options_windowsuap.yy",}, 26 | {"name":"Android","path":"options/android/options_android.yy",}, 27 | {"name":"Amazon Fire","path":"options/amazonfire/options_amazonfire.yy",}, 28 | {"name":"operagx","path":"options/operagx/options_operagx.yy",}, 29 | ], 30 | "isDnDProject": false, 31 | "isEcma": false, 32 | "configs": { 33 | "name": "Default", 34 | "children": [], 35 | }, 36 | "RoomOrderNodes": [ 37 | {"roomId":{"name":"rm_example","path":"rooms/rm_example/rm_example.yy",},}, 38 | ], 39 | "Folders": [ 40 | {"folderPath":"folders/Sprites.yy","order":1,"resourceVersion":"1.0","name":"Sprites","tags":[],"resourceType":"GMFolder",}, 41 | {"folderPath":"folders/Tile Sets.yy","order":3,"resourceVersion":"1.0","name":"Tile Sets","tags":[],"resourceType":"GMFolder",}, 42 | {"folderPath":"folders/Sounds.yy","order":5,"resourceVersion":"1.0","name":"Sounds","tags":[],"resourceType":"GMFolder",}, 43 | {"folderPath":"folders/Paths.yy","order":7,"resourceVersion":"1.0","name":"Paths","tags":[],"resourceType":"GMFolder",}, 44 | {"folderPath":"folders/Scripts.yy","order":9,"resourceVersion":"1.0","name":"Scripts","tags":[],"resourceType":"GMFolder",}, 45 | {"folderPath":"folders/Shaders.yy","order":11,"resourceVersion":"1.0","name":"Shaders","tags":[],"resourceType":"GMFolder",}, 46 | {"folderPath":"folders/Fonts.yy","order":13,"resourceVersion":"1.0","name":"Fonts","tags":[],"resourceType":"GMFolder",}, 47 | {"folderPath":"folders/Timelines.yy","order":15,"resourceVersion":"1.0","name":"Timelines","tags":[],"resourceType":"GMFolder",}, 48 | {"folderPath":"folders/Sequences.yy","order":17,"resourceVersion":"1.0","name":"Sequences","tags":[],"resourceType":"GMFolder",}, 49 | {"folderPath":"folders/Objects.yy","order":19,"resourceVersion":"1.0","name":"Objects","tags":[],"resourceType":"GMFolder",}, 50 | {"folderPath":"folders/Rooms.yy","order":21,"resourceVersion":"1.0","name":"Rooms","tags":[],"resourceType":"GMFolder",}, 51 | {"folderPath":"folders/Notes.yy","order":23,"resourceVersion":"1.0","name":"Notes","tags":[],"resourceType":"GMFolder",}, 52 | {"folderPath":"folders/Extensions.yy","order":25,"resourceVersion":"1.0","name":"Extensions","tags":[],"resourceType":"GMFolder",}, 53 | {"folderPath":"folders/Animation Curves.yy","order":1,"resourceVersion":"1.0","name":"Animation Curves","tags":[],"resourceType":"GMFolder",}, 54 | ], 55 | "AudioGroups": [ 56 | {"targets":-1,"resourceVersion":"1.3","name":"audiogroup_default","resourceType":"GMAudioGroup",}, 57 | ], 58 | "TextureGroups": [ 59 | {"isScaled":false,"autocrop":true,"border":8,"mipsToGenerate":0,"groupParent":null,"targets":-1,"resourceVersion":"1.3","name":"Default","resourceType":"GMTextureGroup",}, 60 | {"isScaled":true,"autocrop":true,"border":8,"mipsToGenerate":-1,"groupParent":{"name":"Default","path":"texturegroups/Default",},"targets":-1,"resourceVersion":"1.3","name":"mipmap","resourceType":"GMTextureGroup",}, 61 | ], 62 | "IncludedFiles": [ 63 | {"CopyToMask":-1,"filePath":"datafiles","resourceVersion":"1.0","name":"sphere.buf","resourceType":"GMIncludedFile",}, 64 | ], 65 | "MetaData": { 66 | "IDEVersion": "2022.2.0.614", 67 | }, 68 | "resourceVersion": "1.5", 69 | "name": "3D Model Viewer", 70 | "tags": [], 71 | "resourceType": "GMProject", 72 | } -------------------------------------------------------------------------------- /source/3D Model Viewer/datafiles/sphere.buf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/datafiles/sphere.buf -------------------------------------------------------------------------------- /source/3D Model Viewer/fonts/fnt_arial/fnt_arial.old.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/fonts/fnt_arial/fnt_arial.old.png -------------------------------------------------------------------------------- /source/3D Model Viewer/fonts/fnt_arial/fnt_arial.old.yy: -------------------------------------------------------------------------------- 1 | { 2 | "hinting": 0, 3 | "glyphOperations": 0, 4 | "interpreter": 0, 5 | "pointRounding": 0, 6 | "fontName": "Arial", 7 | "styleName": "Regular", 8 | "size": 36.0, 9 | "bold": false, 10 | "italic": false, 11 | "charset": 0, 12 | "AntiAlias": 1, 13 | "first": 0, 14 | "last": 0, 15 | "sampleText": "abcdef ABCDEF\n0123456789 .,<>\"'&!?\nthe quick brown fox jumps over the lazy dog\nTHE QUICK BROWN FOX JUMPS OVER THE LAZY DOG\nDefault character: ▯ (9647)", 16 | "includeTTF": false, 17 | "TTFName": "", 18 | "textureGroupId": { 19 | "name": "Default", 20 | "path": "texturegroups/Default", 21 | }, 22 | "ascenderOffset": 0, 23 | "glyphs": { 24 | "32": {"x":2,"y":2,"w":13,"h":55,"character":32,"shift":13,"offset":0,}, 25 | "33": {"x":112,"y":173,"w":6,"h":55,"character":33,"shift":13,"offset":4,}, 26 | "34": {"x":97,"y":173,"w":13,"h":55,"character":34,"shift":17,"offset":2,}, 27 | "35": {"x":68,"y":173,"w":27,"h":55,"character":35,"shift":27,"offset":0,}, 28 | "36": {"x":42,"y":173,"w":24,"h":55,"character":36,"shift":27,"offset":1,}, 29 | "37": {"x":2,"y":173,"w":38,"h":55,"character":37,"shift":43,"offset":2,}, 30 | "38": {"x":455,"y":116,"w":29,"h":55,"character":38,"shift":32,"offset":2,}, 31 | "39": {"x":448,"y":116,"w":5,"h":55,"character":39,"shift":9,"offset":2,}, 32 | "40": {"x":433,"y":116,"w":13,"h":55,"character":40,"shift":16,"offset":2,}, 33 | "41": {"x":418,"y":116,"w":13,"h":55,"character":41,"shift":16,"offset":2,}, 34 | "42": {"x":120,"y":173,"w":16,"h":55,"character":42,"shift":19,"offset":1,}, 35 | "43": {"x":392,"y":116,"w":24,"h":55,"character":43,"shift":28,"offset":2,}, 36 | "44": {"x":358,"y":116,"w":7,"h":55,"character":44,"shift":13,"offset":3,}, 37 | "45": {"x":342,"y":116,"w":14,"h":55,"character":45,"shift":16,"offset":1,}, 38 | "46": {"x":334,"y":116,"w":6,"h":55,"character":46,"shift":13,"offset":4,}, 39 | "47": {"x":318,"y":116,"w":14,"h":55,"character":47,"shift":13,"offset":0,}, 40 | "48": {"x":293,"y":116,"w":23,"h":55,"character":48,"shift":27,"offset":2,}, 41 | "49": {"x":278,"y":116,"w":13,"h":55,"character":49,"shift":27,"offset":5,}, 42 | "50": {"x":252,"y":116,"w":24,"h":55,"character":50,"shift":27,"offset":1,}, 43 | "51": {"x":227,"y":116,"w":23,"h":55,"character":51,"shift":27,"offset":2,}, 44 | "52": {"x":200,"y":116,"w":25,"h":55,"character":52,"shift":27,"offset":0,}, 45 | "53": {"x":367,"y":116,"w":23,"h":55,"character":53,"shift":27,"offset":2,}, 46 | "54": {"x":138,"y":173,"w":24,"h":55,"character":54,"shift":27,"offset":1,}, 47 | "55": {"x":164,"y":173,"w":23,"h":55,"character":55,"shift":27,"offset":2,}, 48 | "56": {"x":189,"y":173,"w":24,"h":55,"character":56,"shift":27,"offset":1,}, 49 | "57": {"x":267,"y":230,"w":23,"h":55,"character":57,"shift":27,"offset":2,}, 50 | "58": {"x":259,"y":230,"w":6,"h":55,"character":58,"shift":13,"offset":4,}, 51 | "59": {"x":250,"y":230,"w":7,"h":55,"character":59,"shift":13,"offset":3,}, 52 | "60": {"x":224,"y":230,"w":24,"h":55,"character":60,"shift":28,"offset":2,}, 53 | "61": {"x":198,"y":230,"w":24,"h":55,"character":61,"shift":28,"offset":2,}, 54 | "62": {"x":172,"y":230,"w":24,"h":55,"character":62,"shift":28,"offset":2,}, 55 | "63": {"x":147,"y":230,"w":23,"h":55,"character":63,"shift":27,"offset":2,}, 56 | "64": {"x":100,"y":230,"w":45,"h":55,"character":64,"shift":49,"offset":2,}, 57 | "65": {"x":64,"y":230,"w":34,"h":55,"character":65,"shift":32,"offset":-1,}, 58 | "66": {"x":35,"y":230,"w":27,"h":55,"character":66,"shift":32,"offset":3,}, 59 | "67": {"x":2,"y":230,"w":31,"h":55,"character":67,"shift":35,"offset":2,}, 60 | "68": {"x":457,"y":173,"w":30,"h":55,"character":68,"shift":35,"offset":3,}, 61 | "69": {"x":428,"y":173,"w":27,"h":55,"character":69,"shift":32,"offset":3,}, 62 | "70": {"x":401,"y":173,"w":25,"h":55,"character":70,"shift":29,"offset":3,}, 63 | "71": {"x":366,"y":173,"w":33,"h":55,"character":71,"shift":37,"offset":2,}, 64 | "72": {"x":336,"y":173,"w":28,"h":55,"character":72,"shift":35,"offset":3,}, 65 | "73": {"x":328,"y":173,"w":6,"h":55,"character":73,"shift":13,"offset":4,}, 66 | "74": {"x":306,"y":173,"w":20,"h":55,"character":74,"shift":24,"offset":1,}, 67 | "75": {"x":275,"y":173,"w":29,"h":55,"character":75,"shift":32,"offset":3,}, 68 | "76": {"x":251,"y":173,"w":22,"h":55,"character":76,"shift":27,"offset":3,}, 69 | "77": {"x":215,"y":173,"w":34,"h":55,"character":77,"shift":40,"offset":3,}, 70 | "78": {"x":170,"y":116,"w":28,"h":55,"character":78,"shift":35,"offset":3,}, 71 | "79": {"x":134,"y":116,"w":34,"h":55,"character":79,"shift":37,"offset":2,}, 72 | "80": {"x":105,"y":116,"w":27,"h":55,"character":80,"shift":32,"offset":3,}, 73 | "81": {"x":78,"y":59,"w":34,"h":55,"character":81,"shift":37,"offset":2,}, 74 | "82": {"x":32,"y":59,"w":32,"h":55,"character":82,"shift":35,"offset":3,}, 75 | "83": {"x":2,"y":59,"w":28,"h":55,"character":83,"shift":32,"offset":2,}, 76 | "84": {"x":464,"y":2,"w":28,"h":55,"character":84,"shift":29,"offset":1,}, 77 | "85": {"x":434,"y":2,"w":28,"h":55,"character":85,"shift":35,"offset":3,}, 78 | "86": {"x":400,"y":2,"w":32,"h":55,"character":86,"shift":32,"offset":0,}, 79 | "87": {"x":353,"y":2,"w":45,"h":55,"character":87,"shift":45,"offset":0,}, 80 | "88": {"x":319,"y":2,"w":32,"h":55,"character":88,"shift":32,"offset":0,}, 81 | "89": {"x":285,"y":2,"w":32,"h":55,"character":89,"shift":32,"offset":0,}, 82 | "90": {"x":254,"y":2,"w":29,"h":55,"character":90,"shift":29,"offset":0,}, 83 | "91": {"x":66,"y":59,"w":10,"h":55,"character":91,"shift":13,"offset":3,}, 84 | "92": {"x":238,"y":2,"w":14,"h":55,"character":92,"shift":13,"offset":0,}, 85 | "93": {"x":208,"y":2,"w":11,"h":55,"character":93,"shift":13,"offset":0,}, 86 | "94": {"x":185,"y":2,"w":21,"h":55,"character":94,"shift":23,"offset":1,}, 87 | "95": {"x":154,"y":2,"w":29,"h":55,"character":95,"shift":27,"offset":-1,}, 88 | "96": {"x":143,"y":2,"w":9,"h":55,"character":96,"shift":16,"offset":2,}, 89 | "97": {"x":117,"y":2,"w":24,"h":55,"character":97,"shift":27,"offset":1,}, 90 | "98": {"x":93,"y":2,"w":22,"h":55,"character":98,"shift":27,"offset":3,}, 91 | "99": {"x":68,"y":2,"w":23,"h":55,"character":99,"shift":24,"offset":1,}, 92 | "100": {"x":43,"y":2,"w":23,"h":55,"character":100,"shift":27,"offset":1,}, 93 | "101": {"x":17,"y":2,"w":24,"h":55,"character":101,"shift":27,"offset":1,}, 94 | "102": {"x":221,"y":2,"w":15,"h":55,"character":102,"shift":13,"offset":0,}, 95 | "103": {"x":114,"y":59,"w":23,"h":55,"character":103,"shift":27,"offset":1,}, 96 | "104": {"x":348,"y":59,"w":21,"h":55,"character":104,"shift":27,"offset":3,}, 97 | "105": {"x":139,"y":59,"w":5,"h":55,"character":105,"shift":11,"offset":3,}, 98 | "106": {"x":68,"y":116,"w":11,"h":55,"character":106,"shift":11,"offset":-3,}, 99 | "107": {"x":45,"y":116,"w":21,"h":55,"character":107,"shift":24,"offset":3,}, 100 | "108": {"x":38,"y":116,"w":5,"h":55,"character":108,"shift":11,"offset":3,}, 101 | "109": {"x":2,"y":116,"w":34,"h":55,"character":109,"shift":40,"offset":3,}, 102 | "110": {"x":477,"y":59,"w":21,"h":55,"character":110,"shift":27,"offset":3,}, 103 | "111": {"x":451,"y":59,"w":24,"h":55,"character":111,"shift":27,"offset":1,}, 104 | "112": {"x":427,"y":59,"w":22,"h":55,"character":112,"shift":27,"offset":3,}, 105 | "113": {"x":402,"y":59,"w":23,"h":55,"character":113,"shift":27,"offset":1,}, 106 | "114": {"x":386,"y":59,"w":14,"h":55,"character":114,"shift":16,"offset":3,}, 107 | "115": {"x":81,"y":116,"w":22,"h":55,"character":115,"shift":24,"offset":1,}, 108 | "116": {"x":371,"y":59,"w":13,"h":55,"character":116,"shift":13,"offset":0,}, 109 | "117": {"x":325,"y":59,"w":21,"h":55,"character":117,"shift":27,"offset":3,}, 110 | "118": {"x":299,"y":59,"w":24,"h":55,"character":118,"shift":24,"offset":0,}, 111 | "119": {"x":262,"y":59,"w":35,"h":55,"character":119,"shift":35,"offset":0,}, 112 | "120": {"x":236,"y":59,"w":24,"h":55,"character":120,"shift":24,"offset":0,}, 113 | "121": {"x":210,"y":59,"w":24,"h":55,"character":121,"shift":24,"offset":0,}, 114 | "122": {"x":185,"y":59,"w":23,"h":55,"character":122,"shift":24,"offset":0,}, 115 | "123": {"x":169,"y":59,"w":14,"h":55,"character":123,"shift":16,"offset":1,}, 116 | "124": {"x":162,"y":59,"w":5,"h":55,"character":124,"shift":12,"offset":4,}, 117 | "125": {"x":146,"y":59,"w":14,"h":55,"character":125,"shift":16,"offset":1,}, 118 | "126": {"x":292,"y":230,"w":25,"h":55,"character":126,"shift":28,"offset":2,}, 119 | "9647": {"x":319,"y":230,"w":28,"h":55,"character":9647,"shift":47,"offset":9,}, 120 | }, 121 | "kerningPairs": [ 122 | {"first":32,"second":65,"amount":-3,}, 123 | {"first":32,"second":84,"amount":-1,}, 124 | {"first":32,"second":89,"amount":-1,}, 125 | {"first":32,"second":902,"amount":-3,}, 126 | {"first":32,"second":913,"amount":-3,}, 127 | {"first":32,"second":916,"amount":-3,}, 128 | {"first":32,"second":923,"amount":-3,}, 129 | {"first":32,"second":932,"amount":-1,}, 130 | {"first":32,"second":933,"amount":-1,}, 131 | {"first":32,"second":939,"amount":-1,}, 132 | {"first":49,"second":49,"amount":-4,}, 133 | {"first":65,"second":32,"amount":-3,}, 134 | {"first":65,"second":84,"amount":-4,}, 135 | {"first":65,"second":86,"amount":-4,}, 136 | {"first":65,"second":87,"amount":-2,}, 137 | {"first":65,"second":89,"amount":-4,}, 138 | {"first":65,"second":118,"amount":-1,}, 139 | {"first":65,"second":119,"amount":-1,}, 140 | {"first":65,"second":121,"amount":-1,}, 141 | {"first":65,"second":160,"amount":-3,}, 142 | {"first":65,"second":8217,"amount":-4,}, 143 | {"first":70,"second":44,"amount":-5,}, 144 | {"first":70,"second":46,"amount":-5,}, 145 | {"first":70,"second":65,"amount":-3,}, 146 | {"first":76,"second":32,"amount":-2,}, 147 | {"first":76,"second":84,"amount":-4,}, 148 | {"first":76,"second":86,"amount":-4,}, 149 | {"first":76,"second":87,"amount":-4,}, 150 | {"first":76,"second":89,"amount":-4,}, 151 | {"first":76,"second":121,"amount":-2,}, 152 | {"first":76,"second":160,"amount":-2,}, 153 | {"first":76,"second":8217,"amount":-3,}, 154 | {"first":80,"second":32,"amount":-1,}, 155 | {"first":80,"second":44,"amount":-6,}, 156 | {"first":80,"second":46,"amount":-6,}, 157 | {"first":80,"second":65,"amount":-4,}, 158 | {"first":80,"second":160,"amount":-1,}, 159 | {"first":82,"second":84,"amount":-1,}, 160 | {"first":82,"second":86,"amount":-1,}, 161 | {"first":82,"second":87,"amount":-1,}, 162 | {"first":82,"second":89,"amount":-1,}, 163 | {"first":84,"second":32,"amount":-1,}, 164 | {"first":84,"second":44,"amount":-5,}, 165 | {"first":84,"second":45,"amount":-3,}, 166 | {"first":84,"second":46,"amount":-5,}, 167 | {"first":84,"second":58,"amount":-5,}, 168 | {"first":84,"second":59,"amount":-5,}, 169 | {"first":84,"second":65,"amount":-4,}, 170 | {"first":84,"second":79,"amount":-1,}, 171 | {"first":84,"second":97,"amount":-5,}, 172 | {"first":84,"second":99,"amount":-5,}, 173 | {"first":84,"second":101,"amount":-5,}, 174 | {"first":84,"second":105,"amount":-2,}, 175 | {"first":84,"second":111,"amount":-5,}, 176 | {"first":84,"second":114,"amount":-2,}, 177 | {"first":84,"second":115,"amount":-5,}, 178 | {"first":84,"second":117,"amount":-2,}, 179 | {"first":84,"second":119,"amount":-3,}, 180 | {"first":84,"second":121,"amount":-3,}, 181 | {"first":84,"second":160,"amount":-1,}, 182 | {"first":84,"second":173,"amount":-3,}, 183 | {"first":84,"second":894,"amount":-5,}, 184 | {"first":86,"second":44,"amount":-4,}, 185 | {"first":86,"second":45,"amount":-3,}, 186 | {"first":86,"second":46,"amount":-4,}, 187 | {"first":86,"second":58,"amount":-2,}, 188 | {"first":86,"second":59,"amount":-2,}, 189 | {"first":86,"second":65,"amount":-4,}, 190 | {"first":86,"second":97,"amount":-4,}, 191 | {"first":86,"second":101,"amount":-3,}, 192 | {"first":86,"second":105,"amount":-1,}, 193 | {"first":86,"second":111,"amount":-3,}, 194 | {"first":86,"second":114,"amount":-2,}, 195 | {"first":86,"second":117,"amount":-2,}, 196 | {"first":86,"second":121,"amount":-2,}, 197 | {"first":86,"second":173,"amount":-3,}, 198 | {"first":86,"second":894,"amount":-2,}, 199 | {"first":87,"second":44,"amount":-3,}, 200 | {"first":87,"second":45,"amount":-1,}, 201 | {"first":87,"second":46,"amount":-3,}, 202 | {"first":87,"second":58,"amount":-1,}, 203 | {"first":87,"second":59,"amount":-1,}, 204 | {"first":87,"second":65,"amount":-2,}, 205 | {"first":87,"second":97,"amount":-2,}, 206 | {"first":87,"second":101,"amount":-1,}, 207 | {"first":87,"second":111,"amount":-1,}, 208 | {"first":87,"second":114,"amount":-1,}, 209 | {"first":87,"second":117,"amount":-1,}, 210 | {"first":87,"second":173,"amount":-1,}, 211 | {"first":87,"second":894,"amount":-1,}, 212 | {"first":89,"second":32,"amount":-1,}, 213 | {"first":89,"second":44,"amount":-6,}, 214 | {"first":89,"second":45,"amount":-4,}, 215 | {"first":89,"second":46,"amount":-6,}, 216 | {"first":89,"second":58,"amount":-3,}, 217 | {"first":89,"second":59,"amount":-3,}, 218 | {"first":89,"second":65,"amount":-4,}, 219 | {"first":89,"second":97,"amount":-4,}, 220 | {"first":89,"second":101,"amount":-4,}, 221 | {"first":89,"second":105,"amount":-2,}, 222 | {"first":89,"second":111,"amount":-4,}, 223 | {"first":89,"second":112,"amount":-4,}, 224 | {"first":89,"second":113,"amount":-4,}, 225 | {"first":89,"second":117,"amount":-3,}, 226 | {"first":89,"second":118,"amount":-3,}, 227 | {"first":89,"second":160,"amount":-1,}, 228 | {"first":89,"second":173,"amount":-4,}, 229 | {"first":89,"second":894,"amount":-3,}, 230 | {"first":102,"second":102,"amount":-1,}, 231 | {"first":102,"second":8217,"amount":1,}, 232 | {"first":114,"second":44,"amount":-3,}, 233 | {"first":114,"second":46,"amount":-3,}, 234 | {"first":114,"second":8217,"amount":2,}, 235 | {"first":118,"second":44,"amount":-4,}, 236 | {"first":118,"second":46,"amount":-4,}, 237 | {"first":119,"second":44,"amount":-3,}, 238 | {"first":119,"second":46,"amount":-3,}, 239 | {"first":121,"second":44,"amount":-4,}, 240 | {"first":121,"second":46,"amount":-4,}, 241 | ], 242 | "ranges": [ 243 | {"lower":32,"upper":127,}, 244 | {"lower":9647,"upper":9647,}, 245 | ], 246 | "regenerateBitmap": false, 247 | "canGenerateBitmap": true, 248 | "maintainGms1Font": false, 249 | "parent": { 250 | "name": "Fonts", 251 | "path": "folders/Fonts.yy", 252 | }, 253 | "resourceVersion": "1.0", 254 | "name": "fnt_arial", 255 | "tags": [], 256 | "resourceType": "GMFont", 257 | } -------------------------------------------------------------------------------- /source/3D Model Viewer/fonts/fnt_arial/fnt_arial.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/fonts/fnt_arial/fnt_arial.png -------------------------------------------------------------------------------- /source/3D Model Viewer/fonts/fnt_arial/fnt_arial.yy: -------------------------------------------------------------------------------- 1 | { 2 | "hinting": 0, 3 | "glyphOperations": 0, 4 | "interpreter": 0, 5 | "pointRounding": 0, 6 | "fontName": "Arial", 7 | "styleName": "Regular", 8 | "size": 36.0, 9 | "bold": false, 10 | "italic": false, 11 | "charset": 0, 12 | "AntiAlias": 1, 13 | "first": 0, 14 | "last": 0, 15 | "sampleText": "abcdef ABCDEF\n0123456789 .,<>\"'&!?\nthe quick brown fox jumps over the lazy dog\nTHE QUICK BROWN FOX JUMPS OVER THE LAZY DOG\nDefault character: ▯ (9647)", 16 | "includeTTF": false, 17 | "TTFName": "", 18 | "textureGroupId": { 19 | "name": "Default", 20 | "path": "texturegroups/Default", 21 | }, 22 | "ascenderOffset": 0, 23 | "glyphs": { 24 | "32": {"x":2,"y":2,"w":13,"h":55,"character":32,"shift":13,"offset":0,}, 25 | "33": {"x":112,"y":173,"w":6,"h":55,"character":33,"shift":13,"offset":4,}, 26 | "34": {"x":97,"y":173,"w":13,"h":55,"character":34,"shift":17,"offset":2,}, 27 | "35": {"x":68,"y":173,"w":27,"h":55,"character":35,"shift":27,"offset":0,}, 28 | "36": {"x":42,"y":173,"w":24,"h":55,"character":36,"shift":27,"offset":1,}, 29 | "37": {"x":2,"y":173,"w":38,"h":55,"character":37,"shift":43,"offset":2,}, 30 | "38": {"x":455,"y":116,"w":29,"h":55,"character":38,"shift":32,"offset":2,}, 31 | "39": {"x":448,"y":116,"w":5,"h":55,"character":39,"shift":9,"offset":2,}, 32 | "40": {"x":433,"y":116,"w":13,"h":55,"character":40,"shift":16,"offset":2,}, 33 | "41": {"x":418,"y":116,"w":13,"h":55,"character":41,"shift":16,"offset":2,}, 34 | "42": {"x":120,"y":173,"w":16,"h":55,"character":42,"shift":19,"offset":1,}, 35 | "43": {"x":392,"y":116,"w":24,"h":55,"character":43,"shift":28,"offset":2,}, 36 | "44": {"x":358,"y":116,"w":7,"h":55,"character":44,"shift":13,"offset":3,}, 37 | "45": {"x":342,"y":116,"w":14,"h":55,"character":45,"shift":16,"offset":1,}, 38 | "46": {"x":334,"y":116,"w":6,"h":55,"character":46,"shift":13,"offset":4,}, 39 | "47": {"x":318,"y":116,"w":14,"h":55,"character":47,"shift":13,"offset":0,}, 40 | "48": {"x":293,"y":116,"w":23,"h":55,"character":48,"shift":27,"offset":2,}, 41 | "49": {"x":278,"y":116,"w":13,"h":55,"character":49,"shift":27,"offset":5,}, 42 | "50": {"x":252,"y":116,"w":24,"h":55,"character":50,"shift":27,"offset":1,}, 43 | "51": {"x":227,"y":116,"w":23,"h":55,"character":51,"shift":27,"offset":2,}, 44 | "52": {"x":200,"y":116,"w":25,"h":55,"character":52,"shift":27,"offset":0,}, 45 | "53": {"x":367,"y":116,"w":23,"h":55,"character":53,"shift":27,"offset":2,}, 46 | "54": {"x":138,"y":173,"w":24,"h":55,"character":54,"shift":27,"offset":1,}, 47 | "55": {"x":164,"y":173,"w":23,"h":55,"character":55,"shift":27,"offset":2,}, 48 | "56": {"x":189,"y":173,"w":24,"h":55,"character":56,"shift":27,"offset":1,}, 49 | "57": {"x":267,"y":230,"w":23,"h":55,"character":57,"shift":27,"offset":2,}, 50 | "58": {"x":259,"y":230,"w":6,"h":55,"character":58,"shift":13,"offset":4,}, 51 | "59": {"x":250,"y":230,"w":7,"h":55,"character":59,"shift":13,"offset":3,}, 52 | "60": {"x":224,"y":230,"w":24,"h":55,"character":60,"shift":28,"offset":2,}, 53 | "61": {"x":198,"y":230,"w":24,"h":55,"character":61,"shift":28,"offset":2,}, 54 | "62": {"x":172,"y":230,"w":24,"h":55,"character":62,"shift":28,"offset":2,}, 55 | "63": {"x":147,"y":230,"w":23,"h":55,"character":63,"shift":27,"offset":2,}, 56 | "64": {"x":100,"y":230,"w":45,"h":55,"character":64,"shift":49,"offset":2,}, 57 | "65": {"x":64,"y":230,"w":34,"h":55,"character":65,"shift":32,"offset":-1,}, 58 | "66": {"x":35,"y":230,"w":27,"h":55,"character":66,"shift":32,"offset":3,}, 59 | "67": {"x":2,"y":230,"w":31,"h":55,"character":67,"shift":35,"offset":2,}, 60 | "68": {"x":457,"y":173,"w":30,"h":55,"character":68,"shift":35,"offset":3,}, 61 | "69": {"x":428,"y":173,"w":27,"h":55,"character":69,"shift":32,"offset":3,}, 62 | "70": {"x":401,"y":173,"w":25,"h":55,"character":70,"shift":29,"offset":3,}, 63 | "71": {"x":366,"y":173,"w":33,"h":55,"character":71,"shift":37,"offset":2,}, 64 | "72": {"x":336,"y":173,"w":28,"h":55,"character":72,"shift":35,"offset":3,}, 65 | "73": {"x":328,"y":173,"w":6,"h":55,"character":73,"shift":13,"offset":4,}, 66 | "74": {"x":306,"y":173,"w":20,"h":55,"character":74,"shift":24,"offset":1,}, 67 | "75": {"x":275,"y":173,"w":29,"h":55,"character":75,"shift":32,"offset":3,}, 68 | "76": {"x":251,"y":173,"w":22,"h":55,"character":76,"shift":27,"offset":3,}, 69 | "77": {"x":215,"y":173,"w":34,"h":55,"character":77,"shift":40,"offset":3,}, 70 | "78": {"x":170,"y":116,"w":28,"h":55,"character":78,"shift":35,"offset":3,}, 71 | "79": {"x":134,"y":116,"w":34,"h":55,"character":79,"shift":37,"offset":2,}, 72 | "80": {"x":105,"y":116,"w":27,"h":55,"character":80,"shift":32,"offset":3,}, 73 | "81": {"x":78,"y":59,"w":34,"h":55,"character":81,"shift":37,"offset":2,}, 74 | "82": {"x":32,"y":59,"w":32,"h":55,"character":82,"shift":35,"offset":3,}, 75 | "83": {"x":2,"y":59,"w":28,"h":55,"character":83,"shift":32,"offset":2,}, 76 | "84": {"x":464,"y":2,"w":28,"h":55,"character":84,"shift":29,"offset":1,}, 77 | "85": {"x":434,"y":2,"w":28,"h":55,"character":85,"shift":35,"offset":3,}, 78 | "86": {"x":400,"y":2,"w":32,"h":55,"character":86,"shift":32,"offset":0,}, 79 | "87": {"x":353,"y":2,"w":45,"h":55,"character":87,"shift":45,"offset":0,}, 80 | "88": {"x":319,"y":2,"w":32,"h":55,"character":88,"shift":32,"offset":0,}, 81 | "89": {"x":285,"y":2,"w":32,"h":55,"character":89,"shift":32,"offset":0,}, 82 | "90": {"x":254,"y":2,"w":29,"h":55,"character":90,"shift":29,"offset":0,}, 83 | "91": {"x":66,"y":59,"w":10,"h":55,"character":91,"shift":13,"offset":3,}, 84 | "92": {"x":238,"y":2,"w":14,"h":55,"character":92,"shift":13,"offset":0,}, 85 | "93": {"x":208,"y":2,"w":11,"h":55,"character":93,"shift":13,"offset":0,}, 86 | "94": {"x":185,"y":2,"w":21,"h":55,"character":94,"shift":23,"offset":1,}, 87 | "95": {"x":154,"y":2,"w":29,"h":55,"character":95,"shift":27,"offset":-1,}, 88 | "96": {"x":143,"y":2,"w":9,"h":55,"character":96,"shift":16,"offset":2,}, 89 | "97": {"x":117,"y":2,"w":24,"h":55,"character":97,"shift":27,"offset":1,}, 90 | "98": {"x":93,"y":2,"w":22,"h":55,"character":98,"shift":27,"offset":3,}, 91 | "99": {"x":68,"y":2,"w":23,"h":55,"character":99,"shift":24,"offset":1,}, 92 | "100": {"x":43,"y":2,"w":23,"h":55,"character":100,"shift":27,"offset":1,}, 93 | "101": {"x":17,"y":2,"w":24,"h":55,"character":101,"shift":27,"offset":1,}, 94 | "102": {"x":221,"y":2,"w":15,"h":55,"character":102,"shift":13,"offset":0,}, 95 | "103": {"x":114,"y":59,"w":23,"h":55,"character":103,"shift":27,"offset":1,}, 96 | "104": {"x":348,"y":59,"w":21,"h":55,"character":104,"shift":27,"offset":3,}, 97 | "105": {"x":139,"y":59,"w":5,"h":55,"character":105,"shift":11,"offset":3,}, 98 | "106": {"x":68,"y":116,"w":11,"h":55,"character":106,"shift":11,"offset":-3,}, 99 | "107": {"x":45,"y":116,"w":21,"h":55,"character":107,"shift":24,"offset":3,}, 100 | "108": {"x":38,"y":116,"w":5,"h":55,"character":108,"shift":11,"offset":3,}, 101 | "109": {"x":2,"y":116,"w":34,"h":55,"character":109,"shift":40,"offset":3,}, 102 | "110": {"x":477,"y":59,"w":21,"h":55,"character":110,"shift":27,"offset":3,}, 103 | "111": {"x":451,"y":59,"w":24,"h":55,"character":111,"shift":27,"offset":1,}, 104 | "112": {"x":427,"y":59,"w":22,"h":55,"character":112,"shift":27,"offset":3,}, 105 | "113": {"x":402,"y":59,"w":23,"h":55,"character":113,"shift":27,"offset":1,}, 106 | "114": {"x":386,"y":59,"w":14,"h":55,"character":114,"shift":16,"offset":3,}, 107 | "115": {"x":81,"y":116,"w":22,"h":55,"character":115,"shift":24,"offset":1,}, 108 | "116": {"x":371,"y":59,"w":13,"h":55,"character":116,"shift":13,"offset":0,}, 109 | "117": {"x":325,"y":59,"w":21,"h":55,"character":117,"shift":27,"offset":3,}, 110 | "118": {"x":299,"y":59,"w":24,"h":55,"character":118,"shift":24,"offset":0,}, 111 | "119": {"x":262,"y":59,"w":35,"h":55,"character":119,"shift":35,"offset":0,}, 112 | "120": {"x":236,"y":59,"w":24,"h":55,"character":120,"shift":24,"offset":0,}, 113 | "121": {"x":210,"y":59,"w":24,"h":55,"character":121,"shift":24,"offset":0,}, 114 | "122": {"x":185,"y":59,"w":23,"h":55,"character":122,"shift":24,"offset":0,}, 115 | "123": {"x":169,"y":59,"w":14,"h":55,"character":123,"shift":16,"offset":1,}, 116 | "124": {"x":162,"y":59,"w":5,"h":55,"character":124,"shift":12,"offset":4,}, 117 | "125": {"x":146,"y":59,"w":14,"h":55,"character":125,"shift":16,"offset":1,}, 118 | "126": {"x":292,"y":230,"w":25,"h":55,"character":126,"shift":28,"offset":2,}, 119 | "9647": {"x":319,"y":230,"w":28,"h":55,"character":9647,"shift":47,"offset":9,}, 120 | }, 121 | "kerningPairs": [ 122 | {"first":32,"second":65,"amount":-3,}, 123 | {"first":32,"second":84,"amount":-1,}, 124 | {"first":32,"second":89,"amount":-1,}, 125 | {"first":32,"second":902,"amount":-3,}, 126 | {"first":32,"second":913,"amount":-3,}, 127 | {"first":32,"second":916,"amount":-3,}, 128 | {"first":32,"second":923,"amount":-3,}, 129 | {"first":32,"second":932,"amount":-1,}, 130 | {"first":32,"second":933,"amount":-1,}, 131 | {"first":32,"second":939,"amount":-1,}, 132 | {"first":49,"second":49,"amount":-4,}, 133 | {"first":65,"second":32,"amount":-3,}, 134 | {"first":65,"second":84,"amount":-4,}, 135 | {"first":65,"second":86,"amount":-4,}, 136 | {"first":65,"second":87,"amount":-2,}, 137 | {"first":65,"second":89,"amount":-4,}, 138 | {"first":65,"second":118,"amount":-1,}, 139 | {"first":65,"second":119,"amount":-1,}, 140 | {"first":65,"second":121,"amount":-1,}, 141 | {"first":65,"second":160,"amount":-3,}, 142 | {"first":65,"second":8217,"amount":-4,}, 143 | {"first":70,"second":44,"amount":-5,}, 144 | {"first":70,"second":46,"amount":-5,}, 145 | {"first":70,"second":65,"amount":-3,}, 146 | {"first":76,"second":32,"amount":-2,}, 147 | {"first":76,"second":84,"amount":-4,}, 148 | {"first":76,"second":86,"amount":-4,}, 149 | {"first":76,"second":87,"amount":-4,}, 150 | {"first":76,"second":89,"amount":-4,}, 151 | {"first":76,"second":121,"amount":-2,}, 152 | {"first":76,"second":160,"amount":-2,}, 153 | {"first":76,"second":8217,"amount":-3,}, 154 | {"first":80,"second":32,"amount":-1,}, 155 | {"first":80,"second":44,"amount":-6,}, 156 | {"first":80,"second":46,"amount":-6,}, 157 | {"first":80,"second":65,"amount":-4,}, 158 | {"first":80,"second":160,"amount":-1,}, 159 | {"first":82,"second":84,"amount":-1,}, 160 | {"first":82,"second":86,"amount":-1,}, 161 | {"first":82,"second":87,"amount":-1,}, 162 | {"first":82,"second":89,"amount":-1,}, 163 | {"first":84,"second":32,"amount":-1,}, 164 | {"first":84,"second":44,"amount":-5,}, 165 | {"first":84,"second":45,"amount":-3,}, 166 | {"first":84,"second":46,"amount":-5,}, 167 | {"first":84,"second":58,"amount":-5,}, 168 | {"first":84,"second":59,"amount":-5,}, 169 | {"first":84,"second":65,"amount":-4,}, 170 | {"first":84,"second":79,"amount":-1,}, 171 | {"first":84,"second":97,"amount":-5,}, 172 | {"first":84,"second":99,"amount":-5,}, 173 | {"first":84,"second":101,"amount":-5,}, 174 | {"first":84,"second":105,"amount":-2,}, 175 | {"first":84,"second":111,"amount":-5,}, 176 | {"first":84,"second":114,"amount":-2,}, 177 | {"first":84,"second":115,"amount":-5,}, 178 | {"first":84,"second":117,"amount":-2,}, 179 | {"first":84,"second":119,"amount":-3,}, 180 | {"first":84,"second":121,"amount":-3,}, 181 | {"first":84,"second":160,"amount":-1,}, 182 | {"first":84,"second":173,"amount":-3,}, 183 | {"first":84,"second":894,"amount":-5,}, 184 | {"first":86,"second":44,"amount":-4,}, 185 | {"first":86,"second":45,"amount":-3,}, 186 | {"first":86,"second":46,"amount":-4,}, 187 | {"first":86,"second":58,"amount":-2,}, 188 | {"first":86,"second":59,"amount":-2,}, 189 | {"first":86,"second":65,"amount":-4,}, 190 | {"first":86,"second":97,"amount":-4,}, 191 | {"first":86,"second":101,"amount":-3,}, 192 | {"first":86,"second":105,"amount":-1,}, 193 | {"first":86,"second":111,"amount":-3,}, 194 | {"first":86,"second":114,"amount":-2,}, 195 | {"first":86,"second":117,"amount":-2,}, 196 | {"first":86,"second":121,"amount":-2,}, 197 | {"first":86,"second":173,"amount":-3,}, 198 | {"first":86,"second":894,"amount":-2,}, 199 | {"first":87,"second":44,"amount":-3,}, 200 | {"first":87,"second":45,"amount":-1,}, 201 | {"first":87,"second":46,"amount":-3,}, 202 | {"first":87,"second":58,"amount":-1,}, 203 | {"first":87,"second":59,"amount":-1,}, 204 | {"first":87,"second":65,"amount":-2,}, 205 | {"first":87,"second":97,"amount":-2,}, 206 | {"first":87,"second":101,"amount":-1,}, 207 | {"first":87,"second":111,"amount":-1,}, 208 | {"first":87,"second":114,"amount":-1,}, 209 | {"first":87,"second":117,"amount":-1,}, 210 | {"first":87,"second":173,"amount":-1,}, 211 | {"first":87,"second":894,"amount":-1,}, 212 | {"first":89,"second":32,"amount":-1,}, 213 | {"first":89,"second":44,"amount":-6,}, 214 | {"first":89,"second":45,"amount":-4,}, 215 | {"first":89,"second":46,"amount":-6,}, 216 | {"first":89,"second":58,"amount":-3,}, 217 | {"first":89,"second":59,"amount":-3,}, 218 | {"first":89,"second":65,"amount":-4,}, 219 | {"first":89,"second":97,"amount":-4,}, 220 | {"first":89,"second":101,"amount":-4,}, 221 | {"first":89,"second":105,"amount":-2,}, 222 | {"first":89,"second":111,"amount":-4,}, 223 | {"first":89,"second":112,"amount":-4,}, 224 | {"first":89,"second":113,"amount":-4,}, 225 | {"first":89,"second":117,"amount":-3,}, 226 | {"first":89,"second":118,"amount":-3,}, 227 | {"first":89,"second":160,"amount":-1,}, 228 | {"first":89,"second":173,"amount":-4,}, 229 | {"first":89,"second":894,"amount":-3,}, 230 | {"first":102,"second":102,"amount":-1,}, 231 | {"first":102,"second":8217,"amount":1,}, 232 | {"first":114,"second":44,"amount":-3,}, 233 | {"first":114,"second":46,"amount":-3,}, 234 | {"first":114,"second":8217,"amount":2,}, 235 | {"first":118,"second":44,"amount":-4,}, 236 | {"first":118,"second":46,"amount":-4,}, 237 | {"first":119,"second":44,"amount":-3,}, 238 | {"first":119,"second":46,"amount":-3,}, 239 | {"first":121,"second":44,"amount":-4,}, 240 | {"first":121,"second":46,"amount":-4,}, 241 | ], 242 | "ranges": [ 243 | {"lower":32,"upper":127,}, 244 | {"lower":9647,"upper":9647,}, 245 | ], 246 | "regenerateBitmap": false, 247 | "canGenerateBitmap": true, 248 | "maintainGms1Font": false, 249 | "parent": { 250 | "name": "Fonts", 251 | "path": "folders/Fonts.yy", 252 | }, 253 | "resourceVersion": "1.0", 254 | "name": "fnt_arial", 255 | "tags": [], 256 | "resourceType": "GMFont", 257 | } -------------------------------------------------------------------------------- /source/3D Model Viewer/notes/compatibility_report_020121_144805485/compatibility_report_020121_144805485.txt: -------------------------------------------------------------------------------- 1 | macOS icon ${options_dir}\mac\icons\icon512.png written out as 32-bit 2 | Windows NSIS Installer Script has been set to default due to changes in GameMaker Studio 2 3 | Game speed set to 60 4 | Added compatibility script 'background/background_get_texture.gml' 5 | Added compatibility script 'd3d/d3d_draw_ellipsoid.gml' 6 | Added compatibility script 'd3d/d3d_draw_floor.gml' 7 | Added compatibility script 'd3d/d3d_light_define_ambient.gml' 8 | Added compatibility script 'd3d/d3d_light_define_direction.gml' 9 | Added compatibility script 'd3d/d3d_light_enable.gml' 10 | Added compatibility script 'd3d/d3d_primitive_begin_texture.gml' 11 | Added compatibility script 'd3d/d3d_primitive_end.gml' 12 | Added compatibility script 'd3d/d3d_set_culling.gml' 13 | Added compatibility script 'd3d/d3d_set_fog.gml' 14 | Added compatibility script 'd3d/d3d_set_hidden.gml' 15 | Added compatibility script 'd3d/d3d_set_lighting.gml' 16 | Added compatibility script 'd3d/d3d_set_projection_ext.gml' 17 | Added compatibility script 'd3d/d3d_set_projection_ortho.gml' 18 | Added compatibility script 'd3d/d3d_start.gml' 19 | Added compatibility script 'd3d/d3d_transform_set_identity.gml' 20 | Added compatibility script 'd3d/d3d_transform_set_translation.gml' 21 | Added compatibility script 'd3d/d3d_vertex_normal_texture.gml' 22 | Added compatibility script 'instance/instance_create.gml' 23 | Added compatibility script 'object/object_get_depth.gml' 24 | Added compatibility script 'texture/texture_set_interpolation.gml' 25 | Added compatibility script 'background/__init_background.gml' 26 | Added compatibility script 'd3d/__init_d3d.gml' 27 | Added compatibility script '__init_global.gml' 28 | Added compatibility script '__global_object_depths.gml' -------------------------------------------------------------------------------- /source/3D Model Viewer/notes/compatibility_report_020121_144805485/compatibility_report_020121_144805485.yy: -------------------------------------------------------------------------------- 1 | { 2 | "parent": { 3 | "name": "Notes", 4 | "path": "folders/Notes.yy", 5 | }, 6 | "resourceVersion": "1.1", 7 | "name": "compatibility_report_020121_144805485", 8 | "tags": [], 9 | "resourceType": "GMNotes", 10 | } -------------------------------------------------------------------------------- /source/3D Model Viewer/notes/notes/notes.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /source/3D Model Viewer/notes/notes/notes.yy: -------------------------------------------------------------------------------- 1 | { 2 | "parent": { 3 | "name": "Notes", 4 | "path": "folders/Notes.yy", 5 | }, 6 | "resourceVersion": "1.1", 7 | "name": "notes", 8 | "tags": [], 9 | "resourceType": "GMNotes", 10 | } -------------------------------------------------------------------------------- /source/3D Model Viewer/objects/obj_camera/Create_0.gml: -------------------------------------------------------------------------------- 1 | camera = camera_create(); 2 | 3 | z = 0; 4 | pos = [0, 0, 0]; 5 | rot = [-100, -20]; 6 | dis = 14; 7 | 8 | m = [window_mouse_get_x(), window_mouse_get_y()]; 9 | sensitivity = 0.5; -------------------------------------------------------------------------------- /source/3D Model Viewer/objects/obj_camera/Draw_0.gml: -------------------------------------------------------------------------------- 1 | //set the projection to show the 3D objects correctly, but grab ball location first 2 | var up = 1; 3 | //if (abs(rot[1] mod 360) > 90) && (abs(rot[1] mod 360) < 270){ 4 | // up = -1; 5 | //} 6 | var aspect = window_get_width() / window_get_height(); 7 | var matrix_lookat = matrix_build_lookat(x, y, z, pos[0], pos[1], pos[2], 0, 0, up); 8 | var matrix_proj = matrix_build_projection_perspective_fov( -45, -aspect, 1, 32000 ); 9 | 10 | camera_set_view_mat(camera, matrix_lookat); 11 | camera_set_proj_mat(camera, matrix_proj); 12 | camera_apply(camera); 13 | 14 | view_camera[0] = camera; -------------------------------------------------------------------------------- /source/3D Model Viewer/objects/obj_camera/Step_0.gml: -------------------------------------------------------------------------------- 1 | window_set_cursor(cr_default); 2 | 3 | if (mouse_check_button(mb_middle)){ 4 | window_set_cursor(cr_none); 5 | var dx = (display_mouse_get_x() - m[0]) * sensitivity; 6 | var dy = (display_mouse_get_y() - m[1]) * sensitivity; 7 | if (keyboard_check(vk_shift)){ 8 | //get x dir 9 | var p = rot[0] + 90; 10 | pos[0] = pos[0] - lengthdir_x((dx * 0.05), p); 11 | pos[1] = pos[1] - lengthdir_y((dx * 0.05), p); 12 | pos[2] += (dy * 0.05); 13 | } else if (keyboard_check(vk_control)){ 14 | dis += (dy * 0.25); 15 | } else { 16 | rot[0] -= dx; 17 | rot[1] -= dy; 18 | } 19 | display_mouse_set(m[0], m[1]); 20 | } 21 | 22 | if (mouse_wheel_up()){ 23 | dis -= 2; 24 | } 25 | 26 | if (mouse_wheel_down()){ 27 | dis += 2; 28 | } 29 | 30 | if (keyboard_check_pressed(vk_numpad0)){ 31 | pos = [0, 0, 0]; 32 | } 33 | 34 | dis = clamp(dis, 2, 50); 35 | 36 | x = pos[0] + lengthdir_x(lengthdir_x(dis, rot[1]), rot[0]); 37 | y = pos[1] + lengthdir_y(lengthdir_x(dis, rot[1]), rot[0]); 38 | z = pos[2] + lengthdir_y(dis, rot[1]); 39 | 40 | m = [display_mouse_get_x(), display_mouse_get_y()]; -------------------------------------------------------------------------------- /source/3D Model Viewer/objects/obj_camera/obj_camera.yy: -------------------------------------------------------------------------------- 1 | { 2 | "spriteId": null, 3 | "solid": false, 4 | "visible": true, 5 | "spriteMaskId": null, 6 | "persistent": false, 7 | "parentObjectId": null, 8 | "physicsObject": false, 9 | "physicsSensor": false, 10 | "physicsShape": 0, 11 | "physicsGroup": 0, 12 | "physicsDensity": 0.5, 13 | "physicsRestitution": 0.1, 14 | "physicsLinearDamping": 0.1, 15 | "physicsAngularDamping": 0.1, 16 | "physicsFriction": 0.2, 17 | "physicsStartAwake": true, 18 | "physicsKinematic": false, 19 | "physicsShapePoints": [], 20 | "eventList": [ 21 | {"isDnD":false,"eventNum":0,"eventType":0,"collisionObjectId":null,"resourceVersion":"1.0","name":"","tags":[],"resourceType":"GMEvent",}, 22 | {"isDnD":false,"eventNum":0,"eventType":3,"collisionObjectId":null,"resourceVersion":"1.0","name":"","tags":[],"resourceType":"GMEvent",}, 23 | {"isDnD":false,"eventNum":0,"eventType":8,"collisionObjectId":null,"resourceVersion":"1.0","name":"","tags":[],"resourceType":"GMEvent",}, 24 | ], 25 | "properties": [], 26 | "overriddenProperties": [], 27 | "parent": { 28 | "name": "Objects", 29 | "path": "folders/Objects.yy", 30 | }, 31 | "resourceVersion": "1.0", 32 | "name": "obj_camera", 33 | "tags": [], 34 | "resourceType": "GMObject", 35 | } -------------------------------------------------------------------------------- /source/3D Model Viewer/objects/obj_floor/Create_0.gml: -------------------------------------------------------------------------------- 1 | m = matrix_build_identity(); 2 | buf = vb_grid(); -------------------------------------------------------------------------------- /source/3D Model Viewer/objects/obj_floor/Draw_0.gml: -------------------------------------------------------------------------------- 1 | matrix_set( matrix_world, m); 2 | 3 | //set the alpha to 1 and color to white so everything draws correctly if any other objects didn't reset them 4 | draw_set_alpha(1); 5 | draw_set_color(c_white); 6 | draw_set_lighting(false); 7 | 8 | //clear the screen, the same color as the fog 9 | draw_clear(fog_color); 10 | 11 | //enable fog 12 | gpu_set_fog(true, fog_color, fog_dist_near, fog_dist_far); 13 | 14 | //draw the floor grid 15 | vertex_submit(buf, pr_linelist, -1); 16 | 17 | draw_set_lighting(true); -------------------------------------------------------------------------------- /source/3D Model Viewer/objects/obj_floor/obj_floor.yy: -------------------------------------------------------------------------------- 1 | { 2 | "spriteId": null, 3 | "solid": false, 4 | "visible": true, 5 | "spriteMaskId": null, 6 | "persistent": false, 7 | "parentObjectId": null, 8 | "physicsObject": false, 9 | "physicsSensor": false, 10 | "physicsShape": 0, 11 | "physicsGroup": 0, 12 | "physicsDensity": 0.5, 13 | "physicsRestitution": 0.1, 14 | "physicsLinearDamping": 0.1, 15 | "physicsAngularDamping": 0.1, 16 | "physicsFriction": 0.2, 17 | "physicsStartAwake": true, 18 | "physicsKinematic": false, 19 | "physicsShapePoints": [], 20 | "eventList": [ 21 | {"isDnD":false,"eventNum":0,"eventType":0,"collisionObjectId":null,"resourceVersion":"1.0","name":"","tags":[],"resourceType":"GMEvent",}, 22 | {"isDnD":false,"eventNum":0,"eventType":8,"collisionObjectId":null,"resourceVersion":"1.0","name":"","tags":[],"resourceType":"GMEvent",}, 23 | ], 24 | "properties": [], 25 | "overriddenProperties": [], 26 | "parent": { 27 | "name": "Objects", 28 | "path": "folders/Objects.yy", 29 | }, 30 | "resourceVersion": "1.0", 31 | "name": "obj_floor", 32 | "tags": [], 33 | "resourceType": "GMObject", 34 | } -------------------------------------------------------------------------------- /source/3D Model Viewer/objects/obj_hud/Create_0.gml: -------------------------------------------------------------------------------- 1 | //the depth for this object is set to -20 so it will draw after everything else 2 | camera = camera_create(); 3 | m = matrix_build_identity(); 4 | a = [0, 0, window_get_width(), window_get_height()]; -------------------------------------------------------------------------------- /source/3D Model Viewer/objects/obj_hud/Draw_0.gml: -------------------------------------------------------------------------------- 1 | //set the projection to ortho, so we can draw a flat HUD over the main projection 2 | //d3d_set_projection_ortho(0 ,0, 960, 540, 0); 3 | 4 | 5 | 6 | matrix_set(matrix_world, m); 7 | a = [0, 0, window_get_width(), window_get_height()]; 8 | 9 | var v9; 10 | v9[0] = 0 + (a[2] / 2); 11 | v9[1] = 0 + (a[3] / 2); 12 | v9[2] = -16000; 13 | v9[3] = 0 + (a[2] / 2); 14 | v9[4] = 0 + (a[3] / 2); 15 | v9[5] = 0; 16 | v9[6] = dsin(0); 17 | v9[7] = dcos(0); 18 | v9[8] = 0; 19 | 20 | var scale = a[2] / 960; 21 | 22 | var matrix_lookat = matrix_build_lookat(v9[0], v9[1], v9[2], v9[3], v9[4], v9[5], v9[6], v9[7], v9[8]); 23 | var matrix_proj = matrix_build_projection_ortho(a[2], a[3], 1, 32000); 24 | 25 | camera_set_view_mat(camera, matrix_lookat); 26 | camera_set_proj_mat(camera, matrix_proj); 27 | camera_apply(camera); 28 | 29 | draw_set_lighting(false); 30 | gpu_set_ztestenable(false); 31 | gpu_set_fog(false, fog_color, fog_dist_near, fog_dist_far); 32 | 33 | //set color to black and alpha to .25 for HUD elements 34 | 35 | 36 | 37 | //draw box for HUD 38 | 39 | draw_set_alpha(.5); 40 | draw_line_color(a[0] + scale_var(20, scale), a[3] - scale_var(60, scale), a[0] + scale_var(100, scale), a[3] - scale_var(60, scale), x_axis_color, x_axis_color); 41 | draw_line_color(a[0] + scale_var(60, scale), a[3] - scale_var(100, scale), a[0] + scale_var(60, scale), a[3] - scale_var(20, scale), y_axis_color, y_axis_color); 42 | draw_set_alpha(1); 43 | draw_set_color(x_axis_color); 44 | draw_circle(a[0] + scale_var(20, scale), a[3] - scale_var(60, scale), scale_var(6, scale), false); 45 | draw_circle(a[0] + scale_var(100, scale), a[3] - scale_var(60, scale), scale_var(6, scale), false); 46 | draw_set_color(y_axis_color); 47 | draw_circle(a[0] + scale_var(60, scale), a[3] - scale_var(100, scale), scale_var(6, scale), false); 48 | draw_circle(a[0] + scale_var(60, scale), a[3] - scale_var(20, scale), scale_var(6, scale), false); 49 | draw_set_color(c_black); 50 | draw_set_halign(fa_center); 51 | draw_set_valign(fa_middle); 52 | draw_text_transformed(a[0] + scale_var(20, scale), a[3] - scale_var(59.5, scale), "-X", scale * 0.15, scale * 0.15, 0); 53 | draw_text_transformed(a[0] + scale_var(100, scale), a[3] - scale_var(59.5, scale), "+X", scale * 0.15, scale * 0.15, 0); 54 | draw_text_transformed(a[0] + scale_var(60, scale), a[3] - scale_var(99.5, scale), "-Y", scale * 0.15, scale * 0.15, 0); 55 | draw_text_transformed(a[0] + scale_var(60, scale), a[3] - scale_var(19.5, scale), "+Y", scale * 0.15, scale * 0.15, 0); 56 | draw_set_halign(fa_left); 57 | draw_set_valign(fa_top); 58 | draw_set_alpha(.5); 59 | draw_roundrect_ext(a[0] + scale_var(10, scale), a[3] - scale_var(110, scale), a[0] + scale_var(110, scale), a[3] - scale_var(10, scale), scale_var(4, scale), scale_var(4, scale), false); 60 | draw_set_alpha(1); 61 | 62 | draw_set_color(c_white); 63 | draw_set_font(fnt_arial); 64 | draw_text_transformed(a[0] + scale_var(10, scale), a[1] + scale_var(10, scale), "Model: " + string(global.model_name), scale * 0.3, scale * 0.3, 0); 65 | 66 | //draw camera 67 | if (instance_exists(obj_camera)){ 68 | var c = obj_camera; 69 | var crot = ((angle_difference(0, c.rot[1]) + 180) / 6) + 30; 70 | var cx = a[0] + scale_var(60, scale) + scale_var(c.pos[0], scale) + lengthdir_x(lengthdir_x(scale_var((c.dis + 50) / 3, scale), c.rot[1]), c.rot[0]); 71 | var cy = a[3] - scale_var(60, scale) + scale_var(c.pos[1], scale) + lengthdir_y(lengthdir_x(scale_var((c.dis + 50) / 3, scale), c.rot[1]), c.rot[0]); 72 | 73 | if (angle_difference(0, c.rot[1]) >= 0){ 74 | draw_set_color(c_orange); 75 | draw_circle(a[0] + scale_var(60, scale), a[3] - scale_var(60, scale), scale_var(3, scale), false); 76 | } 77 | 78 | draw_sprite_ext(spr_camera, crot, clamp(cx, a[0] + scale_var(10, scale), a[0] + scale_var(110, scale)), clamp(cy, a[3] - scale_var(110, scale), a[3] - scale_var(10, scale)), scale * 0.3, scale * 0.3, c.rot[0], c_white, 1); 79 | 80 | if (angle_difference(0, c.rot[1]) < 0){ 81 | draw_set_color(c_orange); 82 | draw_circle(a[0] + scale_var(60, scale), a[3] - scale_var(60, scale), scale_var(3, scale), false); 83 | } 84 | } 85 | 86 | //toggles 87 | draw_toggle(a[0] + scale_var(10, scale), a[3] - scale_var(215, scale), scale, "Demo", global.demo_mode); 88 | draw_toggle(a[0] + scale_var(10, scale), a[3] - scale_var(190, scale), scale, "Lighting", global.use_lighting); 89 | draw_toggle(a[0] + scale_var(10, scale), a[3] - scale_var(165, scale), scale, "Culling", global.use_culling); 90 | draw_toggle(a[0] + scale_var(10, scale), a[3] - scale_var(140, scale), scale, "Texture", global.use_texture); 91 | 92 | //reset 93 | gpu_set_ztestenable(true); 94 | draw_set_color(c_white); 95 | draw_set_alpha(1); 96 | draw_set_lighting(true); 97 | 98 | -------------------------------------------------------------------------------- /source/3D Model Viewer/objects/obj_hud/obj_hud.yy: -------------------------------------------------------------------------------- 1 | { 2 | "spriteId": null, 3 | "solid": false, 4 | "visible": true, 5 | "spriteMaskId": null, 6 | "persistent": false, 7 | "parentObjectId": null, 8 | "physicsObject": false, 9 | "physicsSensor": false, 10 | "physicsShape": 0, 11 | "physicsGroup": 0, 12 | "physicsDensity": 0.5, 13 | "physicsRestitution": 0.1, 14 | "physicsLinearDamping": 0.1, 15 | "physicsAngularDamping": 0.1, 16 | "physicsFriction": 0.2, 17 | "physicsStartAwake": true, 18 | "physicsKinematic": false, 19 | "physicsShapePoints": [], 20 | "eventList": [ 21 | {"isDnD":false,"eventNum":0,"eventType":0,"collisionObjectId":null,"resourceVersion":"1.0","name":"","tags":[],"resourceType":"GMEvent",}, 22 | {"isDnD":false,"eventNum":0,"eventType":8,"collisionObjectId":null,"resourceVersion":"1.0","name":"","tags":[],"resourceType":"GMEvent",}, 23 | ], 24 | "properties": [], 25 | "overriddenProperties": [], 26 | "parent": { 27 | "name": "Objects", 28 | "path": "folders/Objects.yy", 29 | }, 30 | "resourceVersion": "1.0", 31 | "name": "obj_hud", 32 | "tags": [], 33 | "resourceType": "GMObject", 34 | } -------------------------------------------------------------------------------- /source/3D Model Viewer/objects/obj_model/Create_0.gml: -------------------------------------------------------------------------------- 1 | z = 0; 2 | m = matrix_build_identity(); 3 | r = 0; 4 | draw_mode = pr_trianglelist; 5 | 6 | var b = buffer_load("sphere.buf"); 7 | model = vertex_create_buffer_from_buffer(b, global.vtf); 8 | buffer_delete(b); 9 | 10 | tex = sprite_get_texture(spr_uvcolorgrid, 0); -------------------------------------------------------------------------------- /source/3D Model Viewer/objects/obj_model/Draw_0.gml: -------------------------------------------------------------------------------- 1 | gpu_set_tex_repeat(false); 2 | 3 | matrix_set(matrix_world, m); 4 | 5 | if (!global.use_lighting){ 6 | draw_set_lighting(false); 7 | } 8 | 9 | if (global.use_culling){ 10 | gpu_set_cullmode(cull_counterclockwise); 11 | } else { 12 | gpu_set_cullmode(cull_noculling); 13 | } 14 | 15 | if (global.use_texture){ 16 | gpu_set_texrepeat(true); 17 | vertex_submit(model, draw_mode, tex); 18 | gpu_set_texrepeat(false); 19 | } else { 20 | vertex_submit(model, draw_mode, -1); 21 | } 22 | 23 | gpu_set_cullmode(cull_counterclockwise); 24 | 25 | 26 | draw_set_lighting(true); 27 | draw_set_color(c_white); -------------------------------------------------------------------------------- /source/3D Model Viewer/objects/obj_model/Other_10.gml: -------------------------------------------------------------------------------- 1 | /// @description Load new model 2 | 3 | //var b = load_model(global.vtf); 4 | var f = get_open_filename("buffer|*.buf", ""); 5 | if (f != "" ){ 6 | var b = buffer_load(f); 7 | vertex_delete_buffer(model); 8 | if (show_question("Is this model a triangle list?")){ 9 | model = vertex_create_buffer_from_buffer(b, global.vtf); 10 | draw_mode = pr_trianglelist; 11 | } else { 12 | model = vertex_create_buffer_from_buffer(b, global.vtf_lite); 13 | if (show_question("Is this model a line list?")){ 14 | draw_mode = pr_linelist; 15 | } else { 16 | draw_mode = pr_pointlist; 17 | } 18 | } 19 | buffer_delete(b); 20 | global.model_name = filename_name(f); 21 | r = 0; 22 | } -------------------------------------------------------------------------------- /source/3D Model Viewer/objects/obj_model/Step_0.gml: -------------------------------------------------------------------------------- 1 | if (keyboard_check_pressed(ord("T"))){ 2 | if (global.use_texture){ 3 | global.use_texture = false; 4 | } else { 5 | global.use_texture = true; 6 | } 7 | } 8 | 9 | if (keyboard_check_pressed(ord("L"))){ 10 | if (global.use_lighting){ 11 | global.use_lighting = false; 12 | } else { 13 | global.use_lighting = true; 14 | } 15 | } 16 | 17 | if (keyboard_check_pressed(ord("D"))){ 18 | if (global.demo_mode){ 19 | global.demo_mode = false; 20 | r = 0; 21 | } else { 22 | global.demo_mode = true; 23 | } 24 | } 25 | 26 | if (keyboard_check_pressed(ord("C"))){ 27 | if (global.use_culling){ 28 | global.use_culling = false; 29 | } else { 30 | global.use_culling = true; 31 | } 32 | } 33 | 34 | if (keyboard_check_pressed(ord("M"))){ 35 | event_user(0); 36 | } 37 | 38 | if (global.demo_mode){ 39 | r += 1; 40 | } 41 | m = matrix_build(0, 0, 0, r/3, r/2, r, 1, 1, 1); -------------------------------------------------------------------------------- /source/3D Model Viewer/objects/obj_model/obj_model.yy: -------------------------------------------------------------------------------- 1 | { 2 | "spriteId": null, 3 | "solid": false, 4 | "visible": true, 5 | "spriteMaskId": null, 6 | "persistent": false, 7 | "parentObjectId": null, 8 | "physicsObject": false, 9 | "physicsSensor": false, 10 | "physicsShape": 0, 11 | "physicsGroup": 0, 12 | "physicsDensity": 0.5, 13 | "physicsRestitution": 0.1, 14 | "physicsLinearDamping": 0.1, 15 | "physicsAngularDamping": 0.1, 16 | "physicsFriction": 0.2, 17 | "physicsStartAwake": true, 18 | "physicsKinematic": false, 19 | "physicsShapePoints": [], 20 | "eventList": [ 21 | {"isDnD":false,"eventNum":0,"eventType":0,"collisionObjectId":null,"resourceVersion":"1.0","name":"","tags":[],"resourceType":"GMEvent",}, 22 | {"isDnD":false,"eventNum":0,"eventType":8,"collisionObjectId":null,"resourceVersion":"1.0","name":"","tags":[],"resourceType":"GMEvent",}, 23 | {"isDnD":false,"eventNum":0,"eventType":3,"collisionObjectId":null,"resourceVersion":"1.0","name":"","tags":[],"resourceType":"GMEvent",}, 24 | {"isDnD":false,"eventNum":10,"eventType":7,"collisionObjectId":null,"resourceVersion":"1.0","name":"","tags":[],"resourceType":"GMEvent",}, 25 | ], 26 | "properties": [], 27 | "overriddenProperties": [], 28 | "parent": { 29 | "name": "Objects", 30 | "path": "folders/Objects.yy", 31 | }, 32 | "resourceVersion": "1.0", 33 | "name": "obj_model", 34 | "tags": [], 35 | "resourceType": "GMObject", 36 | } -------------------------------------------------------------------------------- /source/3D Model Viewer/objects/obj_worldspawn/Create_0.gml: -------------------------------------------------------------------------------- 1 | //global vars and vertex formats 2 | global.model_name = "Default (sphere.buf)"; 3 | 4 | global.demo_mode = false; 5 | global.use_texture = false; 6 | global.use_lighting = true; 7 | global.use_culling = true; 8 | 9 | vertex_format_begin(); 10 | vertex_format_add_position_3d(); 11 | vertex_format_add_normal(); 12 | vertex_format_add_color(); 13 | vertex_format_add_texcoord(); 14 | global.vtf = vertex_format_end(); 15 | 16 | vertex_format_begin(); 17 | vertex_format_add_position_3d(); 18 | vertex_format_add_color(); 19 | global.vtf_lite = vertex_format_end(); 20 | 21 | //initiate 3D 22 | display_reset(8, true); 23 | gpu_set_ztestenable(true); 24 | gpu_set_cullmode(cull_counterclockwise); 25 | gpu_set_texfilter(true); 26 | gpu_set_tex_mip_enable(mip_markedonly); 27 | gpu_set_tex_mip_filter(tf_anisotropic); 28 | 29 | //define a light and enable it so we can see our objects 30 | draw_set_lighting(true); 31 | draw_light_define_ambient(ambient_light_color); 32 | draw_light_define_direction(1, 1, -1, -1, c_white); 33 | draw_light_define_direction(2, -.25, 1, .5, make_color_rgb(10, 15, 40)); 34 | draw_light_enable(1, true); 35 | draw_light_enable(2, true); 36 | 37 | //create example objects 38 | instance_create_depth(0, 0, 0, obj_camera); 39 | instance_create_depth(0, 0, -20, obj_hud); 40 | instance_create_depth(0, 0, -10, obj_model); 41 | instance_create_depth(0, 0, -5, obj_floor); -------------------------------------------------------------------------------- /source/3D Model Viewer/objects/obj_worldspawn/KeyPress_27.gml: -------------------------------------------------------------------------------- 1 | /// @description End game 2 | game_end(); -------------------------------------------------------------------------------- /source/3D Model Viewer/objects/obj_worldspawn/Step_0.gml: -------------------------------------------------------------------------------- 1 | if (window_has_focus()){ 2 | if ((window_get_width() != surface_get_width(application_surface)) || (window_get_height() != surface_get_height(application_surface))){ 3 | var w = max(window_get_width(), 1); 4 | var h = max(window_get_height(), 1); 5 | show_debug_message("Resizing application surface to " + string(w) + "x" + string(h) + "..."); 6 | surface_resize(application_surface, w, h); 7 | } 8 | } -------------------------------------------------------------------------------- /source/3D Model Viewer/objects/obj_worldspawn/obj_worldspawn.yy: -------------------------------------------------------------------------------- 1 | { 2 | "spriteId": null, 3 | "solid": false, 4 | "visible": true, 5 | "spriteMaskId": null, 6 | "persistent": false, 7 | "parentObjectId": null, 8 | "physicsObject": false, 9 | "physicsSensor": false, 10 | "physicsShape": 0, 11 | "physicsGroup": 0, 12 | "physicsDensity": 0.5, 13 | "physicsRestitution": 0.1, 14 | "physicsLinearDamping": 0.1, 15 | "physicsAngularDamping": 0.1, 16 | "physicsFriction": 0.2, 17 | "physicsStartAwake": true, 18 | "physicsKinematic": false, 19 | "physicsShapePoints": [], 20 | "eventList": [ 21 | {"isDnD":false,"eventNum":0,"eventType":0,"collisionObjectId":null,"resourceVersion":"1.0","name":"","tags":[],"resourceType":"GMEvent",}, 22 | {"isDnD":false,"eventNum":0,"eventType":3,"collisionObjectId":null,"resourceVersion":"1.0","name":"","tags":[],"resourceType":"GMEvent",}, 23 | {"isDnD":false,"eventNum":27,"eventType":9,"collisionObjectId":null,"resourceVersion":"1.0","name":"","tags":[],"resourceType":"GMEvent",}, 24 | ], 25 | "properties": [], 26 | "overriddenProperties": [], 27 | "parent": { 28 | "name": "Objects", 29 | "path": "folders/Objects.yy", 30 | }, 31 | "resourceVersion": "1.0", 32 | "name": "obj_worldspawn", 33 | "tags": [], 34 | "resourceType": "GMObject", 35 | } -------------------------------------------------------------------------------- /source/3D Model Viewer/options/amazonfire/options_amazonfire.yy: -------------------------------------------------------------------------------- 1 | { 2 | "option_amazonfire_sync_android": false, 3 | "option_amazonfire_display_name": "Created with GameMaker Studio 2", 4 | "option_amazonfire_version": "1.0.0.0", 5 | "option_amazonfire_tools_from_version": false, 6 | "option_amazonfire_build_tools": "", 7 | "option_amazonfire_support_lib": "", 8 | "option_amazonfire_target_sdk": "", 9 | "option_amazonfire_minimum_sdk": "", 10 | "option_amazonfire_compile_sdk": "", 11 | "option_amazonfire_package_domain": "com", 12 | "option_amazonfire_package_company": "company", 13 | "option_amazonfire_package_product": "game", 14 | "option_amazonfire_orient_portrait": true, 15 | "option_amazonfire_orient_portrait_flipped": true, 16 | "option_amazonfire_orient_landscape": true, 17 | "option_amazonfire_orient_landscape_flipped": true, 18 | "option_amazonfire_gamepad_support": true, 19 | "option_amazonfire_lint": false, 20 | "option_amazonfire_install_location": 0, 21 | "option_amazonfire_sleep_margin": 4, 22 | "option_amazonfire_splash_screens_landscape": "${base_options_dir}/amazonfire/splash/landscape.png", 23 | "option_amazonfire_splash_screens_portrait": "${base_options_dir}/amazonfire/splash/portrait.png", 24 | "option_amazonfire_splash_time": 0, 25 | "option_amazonfire_launchscreen_fill": 0, 26 | "option_amazonfire_splashscreen_background_colour": 255, 27 | "option_amazonfire_tv_banner": "${base_options_dir}/amazonfire/tv_banner.png", 28 | "option_amazonfire_interpolate_pixels": false, 29 | "option_amazonfire_screen_depth": 0, 30 | "option_amazonfire_scale": 0, 31 | "option_amazonfire_texture_page": "2048x2048", 32 | "option_amazonfire_icon_ldpi": "${base_options_dir}/android/icons/ldpi.png", 33 | "option_amazonfire_icon_mdpi": "${base_options_dir}/android/icons/mdpi.png", 34 | "option_amazonfire_icon_hdpi": "${base_options_dir}/android/icons/hdpi.png", 35 | "option_amazonfire_icon_xhdpi": "${base_options_dir}/android/icons/xhdpi.png", 36 | "option_amazonfire_icon_xxhdpi": "${base_options_dir}/android/icons/xxhdpi.png", 37 | "option_amazonfire_icon_xxxhdpi": "${base_options_dir}/android/icons/xxxhdpi.png", 38 | "option_amazonfire_permission_write_external_storage": false, 39 | "option_amazonfire_permission_read_phone_state": false, 40 | "option_amazonfire_permission_network_state": false, 41 | "option_amazonfire_permission_internet": true, 42 | "option_amazonfire_permission_bluetooth": true, 43 | "option_amazonfire_permission_record_audio": false, 44 | "option_amazonfire_application_tag_inject": "", 45 | "resourceVersion": "1.0", 46 | "name": "Amazon Fire", 47 | "tags": [], 48 | "resourceType": "GMAmazonFireOptions", 49 | } -------------------------------------------------------------------------------- /source/3D Model Viewer/options/android/icons/icon_hdpi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/options/android/icons/icon_hdpi.png -------------------------------------------------------------------------------- /source/3D Model Viewer/options/android/icons/icon_ldpi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/options/android/icons/icon_ldpi.png -------------------------------------------------------------------------------- /source/3D Model Viewer/options/android/icons/icon_mdpi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/options/android/icons/icon_mdpi.png -------------------------------------------------------------------------------- /source/3D Model Viewer/options/android/icons/icon_xhdpi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/options/android/icons/icon_xhdpi.png -------------------------------------------------------------------------------- /source/3D Model Viewer/options/android/icons/icon_xxhdpi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/options/android/icons/icon_xxhdpi.png -------------------------------------------------------------------------------- /source/3D Model Viewer/options/android/icons/icon_xxxhdpi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/options/android/icons/icon_xxxhdpi.png -------------------------------------------------------------------------------- /source/3D Model Viewer/options/android/icons/ouyaIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/options/android/icons/ouyaIcon.png -------------------------------------------------------------------------------- /source/3D Model Viewer/options/android/options_android.yy: -------------------------------------------------------------------------------- 1 | { 2 | "option_android_sync_amazon": false, 3 | "option_android_display_name": "3D Camera Example", 4 | "option_android_version": "1.0.0.0", 5 | "option_android_tools_from_version": false, 6 | "option_android_build_tools": "23.0.1", 7 | "option_android_support_lib": "23.1.1", 8 | "option_android_target_sdk": "23", 9 | "option_android_minimum_sdk": "9", 10 | "option_android_compile_sdk": "23", 11 | "option_android_package_domain": "com", 12 | "option_android_package_company": "companyname", 13 | "option_android_package_product": "", 14 | "option_android_arch_armv7": true, 15 | "option_android_arch_x86": true, 16 | "option_android_arch_arm64": false, 17 | "option_android_arch_x86_64": false, 18 | "option_android_orient_portrait": true, 19 | "option_android_orient_portrait_flipped": true, 20 | "option_android_orient_landscape": true, 21 | "option_android_orient_landscape_flipped": true, 22 | "option_android_gamepad_support": true, 23 | "option_android_lint": true, 24 | "option_android_install_location": 0, 25 | "option_android_sleep_margin": 4, 26 | "option_android_splash_screens_landscape": "${options_dir}/android/splash/splash.png", 27 | "option_android_splash_screens_portrait": "${options_dir}/android/splash/portrait_splash.png", 28 | "option_android_splash_time": 0, 29 | "option_android_launchscreen_fill": 0, 30 | "option_android_splashscreen_background_colour": 0, 31 | "option_android_tv_banner": "${base_options_dir}/android/tv_banner.png", 32 | "option_android_interpolate_pixels": true, 33 | "option_android_screen_depth": 0, 34 | "option_android_device_support": 0, 35 | "option_android_scale": 0, 36 | "option_android_texture_page": "1024x1024", 37 | "option_android_icon_ldpi": "${options_dir}/android/icons/icon_ldpi.png", 38 | "option_android_icon_mdpi": "${options_dir}/android/icons/icon_mdpi.png", 39 | "option_android_icon_hdpi": "${options_dir}/android/icons/icon_hdpi.png", 40 | "option_android_icon_xhdpi": "${options_dir}/android/icons/icon_xhdpi.png", 41 | "option_android_icon_xxhdpi": "${options_dir}/android/icons/icon_xxhdpi.png", 42 | "option_android_icon_xxxhdpi": "${options_dir}/android/icons/icon_xxxhdpi.png", 43 | "option_android_icon_adaptive_generate": false, 44 | "option_android_icon_adaptive_ldpi": "${base_options_dir}/android/icons_adaptive/ldpi.png", 45 | "option_android_icon_adaptive_mdpi": "${base_options_dir}/android/icons_adaptive/mdpi.png", 46 | "option_android_icon_adaptive_hdpi": "${base_options_dir}/android/icons_adaptive/hdpi.png", 47 | "option_android_icon_adaptive_xhdpi": "${base_options_dir}/android/icons_adaptive/xhdpi.png", 48 | "option_android_icon_adaptive_xxhdpi": "${base_options_dir}/android/icons_adaptive/xxhdpi.png", 49 | "option_android_icon_adaptive_xxxhdpi": "${base_options_dir}/android/icons_adaptive/xxxhdpi.png", 50 | "option_android_icon_adaptivebg_ldpi": "${base_options_dir}/android/icons_adaptivebg/ldpi.png", 51 | "option_android_icon_adaptivebg_mdpi": "${base_options_dir}/android/icons_adaptivebg/mdpi.png", 52 | "option_android_icon_adaptivebg_hdpi": "${base_options_dir}/android/icons_adaptivebg/hdpi.png", 53 | "option_android_icon_adaptivebg_xhdpi": "${base_options_dir}/android/icons_adaptivebg/xhdpi.png", 54 | "option_android_icon_adaptivebg_xxhdpi": "${base_options_dir}/android/icons_adaptivebg/xxhdpi.png", 55 | "option_android_icon_adaptivebg_xxxhdpi": "${base_options_dir}/android/icons_adaptivebg/xxxhdpi.png", 56 | "option_android_use_facebook": false, 57 | "option_android_facebook_id": "", 58 | "option_android_facebook_app_display_name": "", 59 | "option_android_google_cloud_saving": false, 60 | "option_android_google_services_app_id": "", 61 | "option_android_permission_write_external_storage": false, 62 | "option_android_permission_read_phone_state": false, 63 | "option_android_permission_network_state": false, 64 | "option_android_permission_internet": true, 65 | "option_android_permission_bluetooth": false, 66 | "option_android_permission_record_audio": false, 67 | "option_android_application_tag_inject": null, 68 | "option_android_google_apk_expansion": false, 69 | "option_android_google_dynamic_asset_delivery": false, 70 | "option_android_google_licensing_public_key": "", 71 | "option_android_tv_isgame": true, 72 | "resourceVersion": "1.0", 73 | "name": "Android", 74 | "tags": [], 75 | "resourceType": "GMAndroidOptions", 76 | } -------------------------------------------------------------------------------- /source/3D Model Viewer/options/android/portrait_splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/options/android/portrait_splash.png -------------------------------------------------------------------------------- /source/3D Model Viewer/options/android/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/options/android/splash.png -------------------------------------------------------------------------------- /source/3D Model Viewer/options/android/splash/portrait_splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/options/android/splash/portrait_splash.png -------------------------------------------------------------------------------- /source/3D Model Viewer/options/android/splash/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/options/android/splash/splash.png -------------------------------------------------------------------------------- /source/3D Model Viewer/options/html5/fav.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/options/html5/fav.ico -------------------------------------------------------------------------------- /source/3D Model Viewer/options/html5/options_html5.yy: -------------------------------------------------------------------------------- 1 | { 2 | "option_html5_browser_title": "Created with GameMaker: Studio", 3 | "option_html5_version": "1.0.0.0", 4 | "option_html5_foldername": "html5game", 5 | "option_html5_outputname": "index.html", 6 | "option_html5_splash_png": "${options_dir}/html5/splash.png", 7 | "option_html5_usesplash": false, 8 | "option_html5_outputdebugtoconsole": true, 9 | "option_html5_display_cursor": true, 10 | "option_html5_localrunalert": true, 11 | "option_html5_index": "use_default", 12 | "option_html5_loadingbar": "-1", 13 | "option_html5_jsprepend": "", 14 | "option_html5_icon": "${options_dir}/html5/fav.ico", 15 | "option_html5_allow_fullscreen": true, 16 | "option_html5_interpolate_pixels": true, 17 | "option_html5_centregame": false, 18 | "option_html5_usebuiltinparticles": true, 19 | "option_html5_usebuiltinfont": true, 20 | "option_html5_webgl": 2, 21 | "option_html5_scale": 0, 22 | "option_html5_texture_page": "2048x2048", 23 | "option_html5_use_facebook": false, 24 | "option_html5_facebook_id": "", 25 | "option_html5_facebook_app_display_name": "", 26 | "option_html5_flurry_enable": false, 27 | "option_html5_flurry_id": "", 28 | "option_html5_google_analytics_enable": false, 29 | "option_html5_google_tracking_id": "", 30 | "resourceVersion": "1.0", 31 | "name": "HTML5", 32 | "tags": [], 33 | "resourceType": "GMHtml5Options", 34 | } -------------------------------------------------------------------------------- /source/3D Model Viewer/options/html5/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/options/html5/splash.png -------------------------------------------------------------------------------- /source/3D Model Viewer/options/ios/iPadRetinaSplash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/options/ios/iPadRetinaSplash.png -------------------------------------------------------------------------------- /source/3D Model Viewer/options/ios/iPadRetinaSplashPortrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/options/ios/iPadRetinaSplashPortrait.png -------------------------------------------------------------------------------- /source/3D Model Viewer/options/ios/iPadsplash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/options/ios/iPadsplash.png -------------------------------------------------------------------------------- /source/3D Model Viewer/options/ios/iPadsplashPortrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/options/ios/iPadsplashPortrait.png -------------------------------------------------------------------------------- /source/3D Model Viewer/options/ios/iPhone5splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/options/ios/iPhone5splash.png -------------------------------------------------------------------------------- /source/3D Model Viewer/options/ios/iPhone5splashPortrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/options/ios/iPhone5splashPortrait.png -------------------------------------------------------------------------------- /source/3D Model Viewer/options/ios/iPhone6PlusSplash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/options/ios/iPhone6PlusSplash.png -------------------------------------------------------------------------------- /source/3D Model Viewer/options/ios/iPhone6PlusSplashPortrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/options/ios/iPhone6PlusSplashPortrait.png -------------------------------------------------------------------------------- /source/3D Model Viewer/options/ios/iPhone6Splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/options/ios/iPhone6Splash.png -------------------------------------------------------------------------------- /source/3D Model Viewer/options/ios/iPhone6SplashPortrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/options/ios/iPhone6SplashPortrait.png -------------------------------------------------------------------------------- /source/3D Model Viewer/options/ios/iPhoneRetinasplash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/options/ios/iPhoneRetinasplash.png -------------------------------------------------------------------------------- /source/3D Model Viewer/options/ios/iPhoneRetinasplashPortrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/options/ios/iPhoneRetinasplashPortrait.png -------------------------------------------------------------------------------- /source/3D Model Viewer/options/ios/iPhonesplash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/options/ios/iPhonesplash.png -------------------------------------------------------------------------------- /source/3D Model Viewer/options/ios/iPhonesplashPortrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/options/ios/iPhonesplashPortrait.png -------------------------------------------------------------------------------- /source/3D Model Viewer/options/ios/icons/icon114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/options/ios/icons/icon114.png -------------------------------------------------------------------------------- /source/3D Model Viewer/options/ios/icons/icon120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/options/ios/icons/icon120.png -------------------------------------------------------------------------------- /source/3D Model Viewer/options/ios/icons/icon144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/options/ios/icons/icon144.png -------------------------------------------------------------------------------- /source/3D Model Viewer/options/ios/icons/icon152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/options/ios/icons/icon152.png -------------------------------------------------------------------------------- /source/3D Model Viewer/options/ios/icons/icon167.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/options/ios/icons/icon167.png -------------------------------------------------------------------------------- /source/3D Model Viewer/options/ios/icons/icon57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/options/ios/icons/icon57.png -------------------------------------------------------------------------------- /source/3D Model Viewer/options/ios/icons/icon72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/options/ios/icons/icon72.png -------------------------------------------------------------------------------- /source/3D Model Viewer/options/ios/icons/icon76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/options/ios/icons/icon76.png -------------------------------------------------------------------------------- /source/3D Model Viewer/options/ios/options_ios.yy: -------------------------------------------------------------------------------- 1 | { 2 | "option_ios_display_name": "3D Camera Example", 3 | "option_ios_bundle_name": "", 4 | "option_ios_version": "1.0.0.0", 5 | "option_ios_output_dir": "~/GameMakerStudio2/iOS", 6 | "option_ios_team_id": "", 7 | "option_ios_orientation_portrait": true, 8 | "option_ios_orientation_portrait_flipped": true, 9 | "option_ios_orientation_landscape": true, 10 | "option_ios_orientation_landscape_flipped": true, 11 | "option_ios_devices": 2, 12 | "option_ios_defer_home_indicator": false, 13 | "option_ios_icon_iphone_app_120": "${base_options_dir}/ios/icons/app/iphone_120.png", 14 | "option_ios_icon_iphone_app_180": "${base_options_dir}/ios/icons/app/iphone_180.png", 15 | "option_ios_icon_ipad_app_76": "${base_options_dir}/ios/icons/app/ipad_76.png", 16 | "option_ios_icon_ipad_app_152": "${base_options_dir}/ios/icons/app/ipad_152.png", 17 | "option_ios_icon_ipad_pro_app_167": "${base_options_dir}/ios/icons/app/ipad_pro_167.png", 18 | "option_ios_icon_iphone_notification_40": "${base_options_dir}/ios/icons/notification/iphone_40.png", 19 | "option_ios_icon_iphone_notification_60": "${base_options_dir}/ios/icons/notification/iphone_60.png", 20 | "option_ios_icon_ipad_notification_20": "${base_options_dir}/ios/icons/notification/ipad_20.png", 21 | "option_ios_icon_ipad_notification_40": "${base_options_dir}/ios/icons/notification/ipad_40.png", 22 | "option_ios_icon_iphone_spotlight_80": "${base_options_dir}/ios/icons/spotlight/iphone_80.png", 23 | "option_ios_icon_iphone_spotlight_120": "${base_options_dir}/ios/icons/spotlight/iphone_120.png", 24 | "option_ios_icon_ipad_spotlight_40": "${base_options_dir}/ios/icons/spotlight/ipad_40.png", 25 | "option_ios_icon_ipad_spotlight_80": "${base_options_dir}/ios/icons/spotlight/ipad_80.png", 26 | "option_ios_icon_iphone_settings_58": "${base_options_dir}/ios/icons/settings/iphone_58.png", 27 | "option_ios_icon_iphone_settings_87": "${base_options_dir}/ios/icons/settings/iphone_87.png", 28 | "option_ios_icon_ipad_settings_29": "${base_options_dir}/ios/icons/settings/ipad_29.png", 29 | "option_ios_icon_ipad_settings_58": "${base_options_dir}/ios/icons/settings/ipad_58.png", 30 | "option_ios_icon_itunes_artwork_1024": "${base_options_dir}/ios/icons/itunes/itunes_1024.png", 31 | "option_ios_splashscreen_background_colour": 0, 32 | "option_ios_launchscreen_image": "", 33 | "option_ios_launchscreen_image_landscape": "", 34 | "option_ios_launchscreen_fill": 0, 35 | "option_ios_interpolate_pixels": true, 36 | "option_ios_half_ipad1_textures": false, 37 | "option_ios_scale": 0, 38 | "option_ios_texture_page": "1024x1024", 39 | "option_ios_use_facebook": false, 40 | "option_ios_facebook_id": "", 41 | "option_ios_facebook_app_display_name": "", 42 | "option_ios_push_notifications": false, 43 | "option_ios_apple_sign_in": false, 44 | "option_ios_podfile_path": "${options_dir}/ios/Podfile", 45 | "option_ios_podfile_lock_path": "${options_dir}/ios/Podfile.lock", 46 | "resourceVersion": "1.3", 47 | "name": "iOS", 48 | "tags": [], 49 | "resourceType": "GMiOSOptions", 50 | } -------------------------------------------------------------------------------- /source/3D Model Viewer/options/ios/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/options/ios/splash.png -------------------------------------------------------------------------------- /source/3D Model Viewer/options/ios/splash/IphoneRetinasplashPortrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/options/ios/splash/IphoneRetinasplashPortrait.png -------------------------------------------------------------------------------- /source/3D Model Viewer/options/ios/splash/iPadRetinasplash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/options/ios/splash/iPadRetinasplash.png -------------------------------------------------------------------------------- /source/3D Model Viewer/options/ios/splash/iPadRetinasplashPortrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/options/ios/splash/iPadRetinasplashPortrait.png -------------------------------------------------------------------------------- /source/3D Model Viewer/options/ios/splash/iPadsplash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/options/ios/splash/iPadsplash.png -------------------------------------------------------------------------------- /source/3D Model Viewer/options/ios/splash/iPadsplashPortrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/options/ios/splash/iPadsplashPortrait.png -------------------------------------------------------------------------------- /source/3D Model Viewer/options/ios/splash/iPhone5splashPortrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/options/ios/splash/iPhone5splashPortrait.png -------------------------------------------------------------------------------- /source/3D Model Viewer/options/ios/splash/iPhone6Plussplash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/options/ios/splash/iPhone6Plussplash.png -------------------------------------------------------------------------------- /source/3D Model Viewer/options/ios/splash/iPhone6PlussplashPortrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/options/ios/splash/iPhone6PlussplashPortrait.png -------------------------------------------------------------------------------- /source/3D Model Viewer/options/ios/splash/iPhone6splashPortrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/options/ios/splash/iPhone6splashPortrait.png -------------------------------------------------------------------------------- /source/3D Model Viewer/options/ios/splash/iPhonesplashPortrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/options/ios/splash/iPhonesplashPortrait.png -------------------------------------------------------------------------------- /source/3D Model Viewer/options/ios/splashPortrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/options/ios/splashPortrait.png -------------------------------------------------------------------------------- /source/3D Model Viewer/options/linux/options_linux.yy: -------------------------------------------------------------------------------- 1 | { 2 | "option_linux_display_name": "3D Camera Example", 3 | "option_linux_version": "1.0.0.0", 4 | "option_linux_maintainer_email": "", 5 | "option_linux_homepage": "http://www.3D Camera Example.com", 6 | "option_linux_short_desc": "3D Camera Example", 7 | "option_linux_long_desc": "3D Camera Example", 8 | "option_linux_splash_screen": "${base_options_dir}/linux/splash/splash.png", 9 | "option_linux_display_splash": false, 10 | "option_linux_icon": "${base_options_dir}/linux/icons/64.png", 11 | "option_linux_start_fullscreen": false, 12 | "option_linux_allow_fullscreen": true, 13 | "option_linux_interpolate_pixels": false, 14 | "option_linux_display_cursor": true, 15 | "option_linux_sync": false, 16 | "option_linux_resize_window": false, 17 | "option_linux_scale": 0, 18 | "option_linux_texture_page": "2048x2048", 19 | "option_linux_enable_steam": false, 20 | "option_linux_disable_sandbox": false, 21 | "resourceVersion": "1.0", 22 | "name": "Linux", 23 | "tags": [], 24 | "resourceType": "GMLinuxOptions", 25 | } -------------------------------------------------------------------------------- /source/3D Model Viewer/options/mac/icon512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/options/mac/icon512.png -------------------------------------------------------------------------------- /source/3D Model Viewer/options/mac/icons/icon512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/options/mac/icons/icon512.png -------------------------------------------------------------------------------- /source/3D Model Viewer/options/mac/options_mac.yy: -------------------------------------------------------------------------------- 1 | { 2 | "option_mac_display_name": "3D Camera Example", 3 | "option_mac_app_id": "", 4 | "option_mac_version": "1.0.0.0", 5 | "option_mac_output_dir": "~/GameMaker-Studio/3D Camera Example", 6 | "option_mac_team_id": null, 7 | "option_mac_signing_identity": "Developer ID Application:", 8 | "option_mac_copyright": "(c)2016 CompanyName Ltd...", 9 | "option_mac_splash_png": "${options_dir}/mac/splash/splash.png", 10 | "option_mac_icon_png": "${options_dir}/mac/icons/icon512.png", 11 | "option_mac_installer_background_png": "${base_options_dir}/mac/splash/installer_background.png", 12 | "option_mac_menu_dock": false, 13 | "option_mac_display_cursor": true, 14 | "option_mac_start_fullscreen": false, 15 | "option_mac_allow_fullscreen": true, 16 | "option_mac_interpolate_pixels": false, 17 | "option_mac_vsync": false, 18 | "option_mac_resize_window": false, 19 | "option_mac_enable_retina": false, 20 | "option_mac_scale": 0, 21 | "option_mac_texture_page": "2048x2048", 22 | "option_mac_build_app_store": true, 23 | "option_mac_allow_incoming_network": false, 24 | "option_mac_allow_outgoing_network": false, 25 | "option_mac_app_category": "", 26 | "option_mac_enable_steam": false, 27 | "option_mac_disable_sandbox": false, 28 | "option_mac_apple_sign_in": false, 29 | "resourceVersion": "1.0", 30 | "name": "macOS", 31 | "tags": [], 32 | "resourceType": "GMMacOptions", 33 | } -------------------------------------------------------------------------------- /source/3D Model Viewer/options/mac/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/options/mac/splash.png -------------------------------------------------------------------------------- /source/3D Model Viewer/options/mac/splash/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/options/mac/splash/splash.png -------------------------------------------------------------------------------- /source/3D Model Viewer/options/main/options_main.yy: -------------------------------------------------------------------------------- 1 | { 2 | "option_gameguid": "{109FF631-8879-422F-8FBA-44C7D7E78E19}", 3 | "option_gameid": "0", 4 | "option_game_speed": 60, 5 | "option_mips_for_3d_textures": true, 6 | "option_draw_colour": 4294967295, 7 | "option_window_colour": 255, 8 | "option_steam_app_id": "0", 9 | "option_sci_usesci": false, 10 | "option_author": "", 11 | "option_collision_compatibility": true, 12 | "option_copy_on_write_enabled": true, 13 | "option_lastchanged": "28 June 2021 21:32:26", 14 | "option_spine_licence": false, 15 | "option_template_image": "${base_options_dir}/main/template_image.png", 16 | "option_template_icon": "${base_options_dir}/main/template_icon.png", 17 | "option_template_description": null, 18 | "resourceVersion": "1.4", 19 | "name": "Main", 20 | "tags": [], 21 | "resourceType": "GMMainOptions", 22 | } -------------------------------------------------------------------------------- /source/3D Model Viewer/options/operagx/options_operagx.yy: -------------------------------------------------------------------------------- 1 | { 2 | "option_operagx_version": "1.0.0.0", 3 | "option_operagx_next_version": "1.0.0.0", 4 | "option_operagx_game_name": "${project_name}", 5 | "option_operagx_interpolate_pixels": true, 6 | "option_operagx_scale": 0, 7 | "option_operagx_texture_page": "2048x2048", 8 | "option_operagx_display_cursor": true, 9 | "option_operagx_guid": "", 10 | "option_operagx_team_name": "", 11 | "option_operagx_editUrl": "", 12 | "option_operagx_internalShareUrl": "", 13 | "option_operagx_publicShareUrl": "", 14 | "resourceVersion": "1.0", 15 | "name": "operagx", 16 | "tags": [], 17 | "resourceType": "GMOperaGXOptions", 18 | } -------------------------------------------------------------------------------- /source/3D Model Viewer/options/tvos/options_tvos.yy: -------------------------------------------------------------------------------- 1 | { 2 | "option_tvos_display_name": "3D Camera Example", 3 | "option_tvos_bundle_name": "", 4 | "option_tvos_version": "1.0.0.0", 5 | "option_tvos_output_dir": "~/GameMakerStudio2/tvOS", 6 | "option_tvos_team_id": "", 7 | "option_tvos_icon_400": "${base_options_dir}/tvos/icons/400.png", 8 | "option_tvos_icon_400_2x": "${base_options_dir}/tvos/icons/400_2x.png", 9 | "option_tvos_icon_1280": "${base_options_dir}/tvos/icons/1280.png", 10 | "option_tvos_topshelf": "${base_options_dir}/tvos/topshelf/topshelf.png", 11 | "option_tvos_topshelf_2x": "${base_options_dir}/tvos/topshelf/topshelf_2x.png", 12 | "option_tvos_topshelf_wide": "${base_options_dir}/tvos/topshelf/topshelf_wide.png", 13 | "option_tvos_topshelf_wide_2x": "${base_options_dir}/tvos/topshelf/topshelf_wide_2x.png", 14 | "option_tvos_splashscreen": "${base_options_dir}/tvos/splash/splash.png", 15 | "option_tvos_splashscreen_2x": "${base_options_dir}/tvos/splash/splash_2x.png", 16 | "option_tvos_splash_time": 0, 17 | "option_tvos_interpolate_pixels": true, 18 | "option_tvos_scale": -1, 19 | "option_tvos_texture_page": "2048x2048", 20 | "option_tvos_display_cursor": false, 21 | "option_tvos_push_notifications": false, 22 | "option_tvos_apple_sign_in": false, 23 | "option_tvos_podfile_path": "${options_dir}\\tvos\\Podfile", 24 | "option_tvos_podfile_lock_path": "${options_dir}\\tvos\\Podfile.lock", 25 | "resourceVersion": "1.3", 26 | "name": "tvOS", 27 | "tags": [], 28 | "resourceType": "GMtvOSOptions", 29 | } -------------------------------------------------------------------------------- /source/3D Model Viewer/options/windows/License.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/options/windows/License.txt -------------------------------------------------------------------------------- /source/3D Model Viewer/options/windows/RunnerInstaller.nsi: -------------------------------------------------------------------------------- 1 | ; RunnerInstaller.nsi 2 | ; 3 | ; This script is based on example1.nsi, but it remember the directory, 4 | ; has uninstall support and (optionally) installs start menu shortcuts. 5 | ; 6 | ; It will install example2.nsi into a directory that the user selects, 7 | 8 | ;-------------------------------- 9 | !include MUI2.nsh 10 | 11 | !ifndef FULL_VERSION 12 | !define FULL_VERSION "1.0.0.0" 13 | !endif 14 | !ifndef SOURCE_DIR 15 | !define SOURCE_DIR "C:\source\temp\InstallerTest\runner" 16 | !endif 17 | !ifndef INSTALLER_FILENAME 18 | !define INSTALLER_FILENAME "C:\source\temp\InstallerTest\RunnerInstaller.exe" 19 | !endif 20 | 21 | !ifndef MAKENSIS 22 | !define MAKENSIS "%appdata%\GameMaker-Studio\makensis" 23 | !endif 24 | 25 | !ifndef COMPANY_NAME 26 | !define COMPANY_NAME "" 27 | !endif 28 | 29 | !ifndef COPYRIGHT_TXT 30 | !define COPYRIGHT_TXT "(c)Copyright 2013" 31 | !endif 32 | 33 | !ifndef FILE_DESC 34 | !define FILE_DESC "Created with GameMaker:Studio" 35 | !endif 36 | 37 | !ifndef LICENSE_NAME 38 | !define LICENSE_NAME "License.txt" 39 | !endif 40 | 41 | !ifndef ICON_FILE 42 | !define ICON_FILE "icon.ico" 43 | !endif 44 | 45 | !ifndef IMAGE_FINISHED 46 | !define IMAGE_FINISHED "Runner_finish.bmp" 47 | !endif 48 | 49 | !ifndef IMAGE_HEADER 50 | !define IMAGE_HEADER "Runner_header.bmp" 51 | !endif 52 | 53 | !ifndef PRODUCT_NAME 54 | !define PRODUCT_NAME "Runner" 55 | !endif 56 | 57 | !define APP_NAME "${PRODUCT_NAME}" 58 | !define SHORT_NAME "${PRODUCT_NAME}" 59 | 60 | !ifndef EXE_NAME 61 | !define EXE_NAME "${PRODUCT_NAME}" 62 | !endif 63 | 64 | 65 | ;;USAGE: 66 | !define MIN_FRA_MAJOR "2" 67 | !define MIN_FRA_MINOR "0" 68 | !define MIN_FRA_BUILD "*" 69 | 70 | !addplugindir "." 71 | 72 | ;-------------------------------- 73 | 74 | ; The name of the installer 75 | Name "${APP_NAME}" 76 | Caption "${APP_NAME}" 77 | BrandingText "${APP_NAME}" 78 | 79 | ; The file to write 80 | OutFile "${INSTALLER_FILENAME}" 81 | 82 | ; The default installation directory 83 | InstallDir "$PROFILE\${APP_NAME}" 84 | 85 | ; Registry key to check for directory (so if you install again, it will 86 | ; overwrite the old one automatically) 87 | InstallDirRegKey HKCU "Software\Runner" "Install_Dir" 88 | 89 | ; Request application privileges for Windows Vista 90 | RequestExecutionLevel admin 91 | 92 | 93 | VIProductVersion "${FULL_VERSION}" 94 | VIAddVersionKey /LANG=1033 "FileVersion" "${FULL_VERSION}" 95 | VIAddVersionKey /LANG=1033 "ProductVersion" "${FULL_VERSION}" 96 | VIAddVersionKey /LANG=1033 "ProductName" "${PRODUCT_NAME}" 97 | VIAddVersionKey /LANG=1033 "CompanyName" "${PRODUCT_PUBLISHER}" 98 | VIAddVersionKey /LANG=1033 "LegalCopyright" "${COPYRIGHT_TXT}" 99 | VIAddVersionKey /LANG=1033 "FileDescription" "${FILE_DESC}" 100 | 101 | 102 | 103 | !define MUI_HEADERIMAGE 104 | !define MUI_HEADERIMAGE_BITMAP_NOSTRETCH 105 | !define MUI_ICON "${ICON_FILE}" 106 | !define MUI_WELCOMEFINISHPAGE_BITMAP "${IMAGE_FINISHED}" 107 | !define MUI_HEADERIMAGE_BITMAP "${IMAGE_HEADER}" 108 | !define MUI_WELCOMEFINISHPAGE_BITMAP_NOSTRETCH 109 | 110 | 111 | ;-------------------------------- 112 | 113 | ; Pages 114 | !insertmacro MUI_PAGE_LICENSE "${LICENSE_NAME}" 115 | !insertmacro MUI_PAGE_COMPONENTS 116 | !insertmacro MUI_PAGE_DIRECTORY 117 | !insertmacro MUI_PAGE_INSTFILES 118 | # These indented statements modify settings for MUI_PAGE_FINISH 119 | !define MUI_FINISHPAGE_NOAUTOCLOSE 120 | !define MUI_FINISHPAGE_RUN_TEXT "Start ${PRODUCT_NAME}" 121 | !define MUI_FINISHPAGE_RUN "$INSTDIR\${EXE_NAME}.exe" 122 | !insertmacro MUI_PAGE_FINISH 123 | 124 | Var DirectXSetupError 125 | 126 | UninstPage uninstConfirm 127 | UninstPage instfiles 128 | 129 | !insertmacro MUI_LANGUAGE "English" 130 | ;-------------------------------- 131 | 132 | ; The stuff to install 133 | Section `${APP_NAME}` 134 | SectionIn RO 135 | 136 | ; Set output path to the installation directory. 137 | SetOutPath $INSTDIR 138 | 139 | ; Put file there 140 | File "${LICENSE_NAME}" 141 | File /r "${SOURCE_DIR}\*.*" 142 | 143 | ; Write the uninstall keys for Windows 144 | WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORT_NAME}" "DisplayName" "${APP_NAME}" 145 | WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORT_NAME}" "UninstallString" '"$INSTDIR\uninstall.exe"' 146 | WriteRegDWORD SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORT_NAME}" "NoModify" 1 147 | WriteRegDWORD SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORT_NAME}" "NoRepair" 1 148 | WriteUninstaller "uninstall.exe" 149 | 150 | SectionEnd 151 | 152 | ; Optional section (can be disabled by the user) 153 | Section "Start Menu Shortcuts" 154 | 155 | CreateDirectory "$SMPROGRAMS\${APP_NAME}" 156 | CreateShortCut "$SMPROGRAMS\${APP_NAME}\Uninstall.lnk" "$INSTDIR\uninstall.exe" "" "$INSTDIR\uninstall.exe" 0 157 | CreateShortCut "$SMPROGRAMS\${APP_NAME}\${APP_NAME}.lnk" "$INSTDIR\${EXE_NAME}.exe" "" "$INSTDIR\${EXE_NAME}.exe" 158 | CreateShortCut "$SMPROGRAMS\${APP_NAME}\${APP_NAME} License.lnk" "notepad.exe" "$INSTDIR\License.txt" 159 | 160 | SectionEnd 161 | 162 | 163 | ; Optional section (can be enabled by the user) 164 | Section /o "Desktop shortcut" 165 | 166 | CreateShortCut "$DESKTOP\${APP_NAME}.lnk" "$INSTDIR\${EXE_NAME}.exe" "" 167 | 168 | SectionEnd 169 | 170 | 171 | ;-------------------------------- 172 | 173 | ; Uninstaller 174 | 175 | Section "Uninstall" 176 | ; Remove registry keys 177 | DeleteRegKey SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\${SHORT_NAME}" 178 | 179 | ; Remove files and uninstaller (everything) 180 | RMDir /r "$INSTDIR" 181 | 182 | ; Remove desktop icon 183 | Delete "$DESKTOP\${APP_NAME}.lnk" 184 | 185 | ; Remove shortcuts, if any 186 | Delete "$SMPROGRAMS\${APP_NAME}\*.*" 187 | 188 | ; Remove directories used 189 | RMDir "$SMPROGRAMS\${APP_NAME}" 190 | RMDir "$INSTDIR" 191 | 192 | SectionEnd 193 | 194 | 195 | ;-------------------------------- 196 | ; 197 | ; This should be the LAST section available.... 198 | ; 199 | Section "DirectX Install" SEC_DIRECTX 200 | 201 | SectionIn RO 202 | 203 | SetOutPath "$TEMP" 204 | File "${MAKENSIS}\dxwebsetup.exe" 205 | DetailPrint "Running DirectX Setup..." 206 | ExecWait '"$TEMP\dxwebsetup.exe" /Q' $DirectXSetupError 207 | DetailPrint "Finished DirectX Setup" 208 | 209 | Delete "$TEMP\dxwebsetup.exe" 210 | 211 | SetOutPath "$INSTDIR" 212 | 213 | SectionEnd 214 | -------------------------------------------------------------------------------- /source/3D Model Viewer/options/windows/Runner_Icon_256.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/options/windows/Runner_Icon_256.ico -------------------------------------------------------------------------------- /source/3D Model Viewer/options/windows/Runner_finish.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/options/windows/Runner_finish.bmp -------------------------------------------------------------------------------- /source/3D Model Viewer/options/windows/Runner_header.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/options/windows/Runner_header.bmp -------------------------------------------------------------------------------- /source/3D Model Viewer/options/windows/installer/license.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/options/windows/installer/license.txt -------------------------------------------------------------------------------- /source/3D Model Viewer/options/windows/options_windows.yy: -------------------------------------------------------------------------------- 1 | { 2 | "option_windows_display_name": "3D Model Viewer", 3 | "option_windows_executable_name": "${project_name}", 4 | "option_windows_version": "1.0.0.0", 5 | "option_windows_company_info": "Massive Catapult Creative, Inc.", 6 | "option_windows_product_info": "3D Model Viewer", 7 | "option_windows_copyright_info": "2021", 8 | "option_windows_description_info": "A simple app to load and preview 3D models exported from Blender", 9 | "option_windows_display_cursor": true, 10 | "option_windows_icon": "${options_dir}/windows/runner_icon.ico", 11 | "option_windows_save_location": 0, 12 | "option_windows_splash_screen": "${options_dir}/windows/splash.png", 13 | "option_windows_use_splash": false, 14 | "option_windows_start_fullscreen": false, 15 | "option_windows_allow_fullscreen_switching": true, 16 | "option_windows_interpolate_pixels": true, 17 | "option_windows_vsync": true, 18 | "option_windows_resize_window": true, 19 | "option_windows_borderless": false, 20 | "option_windows_scale": 0, 21 | "option_windows_copy_exe_to_dest": false, 22 | "option_windows_sleep_margin": 1, 23 | "option_windows_texture_page": "2048x2048", 24 | "option_windows_installer_finished": "${options_dir}/windows/Runner_finish.bmp", 25 | "option_windows_installer_header": "${options_dir}/windows/Runner_header.bmp", 26 | "option_windows_license": "${options_dir}/windows/installer/license.txt", 27 | "option_windows_nsis_file": "${base_options_dir}/windows/installer/nsis_script.nsi", 28 | "option_windows_enable_steam": false, 29 | "option_windows_disable_sandbox": false, 30 | "option_windows_steam_use_alternative_launcher": false, 31 | "option_windows_use_x64": false, 32 | "resourceVersion": "1.1", 33 | "name": "Windows", 34 | "tags": [], 35 | "resourceType": "GMWindowsOptions", 36 | } -------------------------------------------------------------------------------- /source/3D Model Viewer/options/windows/runner_icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/options/windows/runner_icon.ico -------------------------------------------------------------------------------- /source/3D Model Viewer/options/windows/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/options/windows/splash.png -------------------------------------------------------------------------------- /source/3D Model Viewer/options/windowsuap/options_windowsuap.yy: -------------------------------------------------------------------------------- 1 | { 2 | "option_windowsuap_display_name": "3D Camera Example", 3 | "option_windowsuap_package_name": "YourPackageName", 4 | "option_windowsuap_publisher_display_name": "YourPublisherName", 5 | "option_windowsuap_package_display_name": "YourPackageDisplayName", 6 | "option_windowsuap_description": null, 7 | "option_windowsuap_version": "1.0.0.0", 8 | "option_windowsuap_orient_portrait": true, 9 | "option_windowsuap_orient_portrait_flipped": true, 10 | "option_windowsuap_orient_landscape": true, 11 | "option_windowsuap_orient_landscape_flipped": true, 12 | "option_windowsuap_small_logo": "${base_options_dir}/windowsuap/logos/SmallLogo.scale-100.png", 13 | "option_windowsuap_smallish_logo": "${base_options_dir}/windowsuap/logos/SmallishLogo.scale-100.png", 14 | "option_windowsuap_store_logo": "${base_options_dir}/windowsuap/logos/StoreLogo.scale-100.png", 15 | "option_windowsuap_logo": "${base_options_dir}/windowsuap/logos/Logo.scale-100.png", 16 | "option_windowsuap_logo_background_colour": 0, 17 | "option_windowsuap_logo_foreground_text": 0, 18 | "option_windowsuap_wide_logo": "${base_options_dir}/windowsuap/logos/WideLogo.scale-100.png", 19 | "option_windowsuap_large_logo": "${base_options_dir}/windowsuap/logos/LargeLogo.scale-100.png", 20 | "option_windowsuap_splash_png": "${base_options_dir}/windowsuap/splash/SplashScreen.scale-100.png", 21 | "option_windowsuap_splash_background_colour": 0, 22 | "option_windowsuap_interpolate_pixels": true, 23 | "option_windowsuap_display_cursor": true, 24 | "option_windowsuap_start_fullscreen": false, 25 | "option_windowsuap_allow_fullscreen_switching": false, 26 | "option_windowsuap_use_synchronization": true, 27 | "option_windowsuap_scale": 0, 28 | "option_windowsuap_texture_page": "1024x1024", 29 | "option_windowsuap_certificate_location": "${base_options_dir}\\windowsuap\\keys\\WinUWPRunner_TemporaryKey.pfx", 30 | "option_windowsuap_certificate_publishername": "CN=Sandbox", 31 | "option_windowsuap_native_cpu": 0, 32 | "option_windowsuap_internet_capable": false, 33 | "option_windowsuap_microphone_capable": false, 34 | "option_windowsuap_iap_sandbox": false, 35 | "option_windowsuap_targetdevicefamily_universal": true, 36 | "option_windowsuap_target_platform_version": "10.0.14393.0", 37 | "option_windowsuap_target_platform_min_version": "10.0.14393.0", 38 | "option_windowsuap_targetdevicefamily_desktop": false, 39 | "option_windowsuap_desktop_family_platform_version": "10.0.14393.0", 40 | "option_windowsuap_desktop_family_platform_min_version": "10.0.14393.0", 41 | "option_windowsuap_targetdevicefamily_xbox": false, 42 | "option_windowsuap_xbox_family_platform_version": "10.0.14393.0", 43 | "option_windowsuap_xbox_family_platform_min_version": "10.0.14393.0", 44 | "option_windowsuap_targetdevicefamily_mobile": false, 45 | "option_windowsuap_mobile_family_platform_version": "10.0.14393.0", 46 | "option_windowsuap_mobile_family_platform_min_version": "10.0.14393.0", 47 | "option_windowsuap_targetdevicefamily_holographic": false, 48 | "option_windowsuap_holographic_family_platform_version": "10.0.14393.0", 49 | "option_windowsuap_holographic_family_platform_min_version": "10.0.14393.0", 50 | "option_windowsuap_targetdevicefamily_team": false, 51 | "option_windowsuap_team_family_platform_version": "10.0.14393.0", 52 | "option_windowsuap_team_family_platform_min_version": "10.0.14393.0", 53 | "option_windowsuap_xbox_live": false, 54 | "option_windowsuap_xbox_live_creators_program": false, 55 | "option_windowsuap_xbox_live_title_id": 0, 56 | "option_windowsuap_xbox_live_scid": null, 57 | "resourceVersion": "1.0", 58 | "name": "Windows UWP", 59 | "tags": [], 60 | "resourceType": "GMWindowsUAPOptions", 61 | } -------------------------------------------------------------------------------- /source/3D Model Viewer/rooms/rm_example/rm_example.yy: -------------------------------------------------------------------------------- 1 | { 2 | "isDnd": false, 3 | "volume": 1.0, 4 | "parentRoom": null, 5 | "views": [ 6 | {"inherit":false,"visible":true,"xview":0,"yview":0,"wview":960,"hview":540,"xport":0,"yport":0,"wport":960,"hport":540,"hborder":32,"vborder":32,"hspeed":-1,"vspeed":-1,"objectId":null,}, 7 | {"inherit":false,"visible":false,"xview":0,"yview":0,"wview":640,"hview":480,"xport":0,"yport":0,"wport":640,"hport":480,"hborder":32,"vborder":32,"hspeed":-1,"vspeed":-1,"objectId":null,}, 8 | {"inherit":false,"visible":false,"xview":0,"yview":0,"wview":640,"hview":480,"xport":0,"yport":0,"wport":640,"hport":480,"hborder":32,"vborder":32,"hspeed":-1,"vspeed":-1,"objectId":null,}, 9 | {"inherit":false,"visible":false,"xview":0,"yview":0,"wview":640,"hview":480,"xport":0,"yport":0,"wport":640,"hport":480,"hborder":32,"vborder":32,"hspeed":-1,"vspeed":-1,"objectId":null,}, 10 | {"inherit":false,"visible":false,"xview":0,"yview":0,"wview":640,"hview":480,"xport":0,"yport":0,"wport":640,"hport":480,"hborder":32,"vborder":32,"hspeed":-1,"vspeed":-1,"objectId":null,}, 11 | {"inherit":false,"visible":false,"xview":0,"yview":0,"wview":640,"hview":480,"xport":0,"yport":0,"wport":640,"hport":480,"hborder":32,"vborder":32,"hspeed":-1,"vspeed":-1,"objectId":null,}, 12 | {"inherit":false,"visible":false,"xview":0,"yview":0,"wview":640,"hview":480,"xport":0,"yport":0,"wport":640,"hport":480,"hborder":32,"vborder":32,"hspeed":-1,"vspeed":-1,"objectId":null,}, 13 | {"inherit":false,"visible":false,"xview":0,"yview":0,"wview":640,"hview":480,"xport":0,"yport":0,"wport":640,"hport":480,"hborder":32,"vborder":32,"hspeed":-1,"vspeed":-1,"objectId":null,}, 14 | ], 15 | "layers": [ 16 | {"instances":[ 17 | {"properties":[],"isDnd":false,"objectId":{"name":"obj_worldspawn","path":"objects/obj_worldspawn/obj_worldspawn.yy",},"inheritCode":false,"hasCreationCode":false,"colour":4294967295,"rotation":0.0,"scaleX":1.0,"scaleY":1.0,"imageIndex":0,"imageSpeed":1.0,"inheritedItemId":null,"frozen":false,"ignore":false,"inheritItemSettings":false,"x":0.0,"y":0.0,"resourceVersion":"1.0","name":"inst_E5649490","tags":[],"resourceType":"GMRInstance",}, 18 | ],"visible":true,"depth":0,"userdefinedDepth":true,"inheritLayerDepth":false,"inheritLayerSettings":false,"gridX":32,"gridY":32,"layers":[],"hierarchyFrozen":false,"resourceVersion":"1.0","name":"Objects","tags":[],"resourceType":"GMRInstanceLayer",}, 19 | {"spriteId":null,"colour":4290822336,"x":0,"y":0,"htiled":false,"vtiled":false,"hspeed":0.0,"vspeed":0.0,"stretch":false,"animationFPS":15.0,"animationSpeedType":0,"userdefinedAnimFPS":false,"visible":true,"depth":2147483600,"userdefinedDepth":true,"inheritLayerDepth":false,"inheritLayerSettings":false,"gridX":32,"gridY":32,"layers":[],"hierarchyFrozen":false,"resourceVersion":"1.0","name":"Background","tags":[],"resourceType":"GMRBackgroundLayer",}, 20 | ], 21 | "inheritLayers": false, 22 | "creationCodeFile": "", 23 | "inheritCode": false, 24 | "instanceCreationOrder": [ 25 | {"name":"inst_E5649490","path":"rooms/rm_example/rm_example.yy",}, 26 | ], 27 | "inheritCreationOrder": false, 28 | "sequenceId": null, 29 | "roomSettings": { 30 | "inheritRoomSettings": false, 31 | "Width": 400, 32 | "Height": 400, 33 | "persistent": false, 34 | }, 35 | "viewSettings": { 36 | "inheritViewSettings": false, 37 | "enableViews": true, 38 | "clearViewBackground": true, 39 | "clearDisplayBuffer": true, 40 | }, 41 | "physicsSettings": { 42 | "inheritPhysicsSettings": false, 43 | "PhysicsWorld": false, 44 | "PhysicsWorldGravityX": 0.0, 45 | "PhysicsWorldGravityY": 10.0, 46 | "PhysicsWorldPixToMetres": 0.1, 47 | }, 48 | "parent": { 49 | "name": "Rooms", 50 | "path": "folders/Rooms.yy", 51 | }, 52 | "resourceVersion": "1.0", 53 | "name": "rm_example", 54 | "tags": [], 55 | "resourceType": "GMRoom", 56 | } -------------------------------------------------------------------------------- /source/3D Model Viewer/scripts/functions/functions.gml: -------------------------------------------------------------------------------- 1 | function scale_var(v, scale){ 2 | return v * scale; 3 | } 4 | 5 | function draw_toggle(x, y, scale, label, state){ 6 | draw_set_color(c_black); 7 | draw_set_alpha(.5); 8 | draw_roundrect_ext(x, y, x + (100 * scale), y + (20 * scale), 4 * scale, 4 * scale, false); 9 | draw_set_alpha(1); 10 | draw_set_color(c_dkgray); 11 | draw_roundrect_ext(x + (70 * scale), y + (4 * scale), x + (96 * scale), y + (16 * scale), 4 * scale, 4 * scale, false); 12 | draw_set_color(c_gray); 13 | if (state){ 14 | draw_roundrect_ext(x + (86 * scale), y + (5 * scale), x + (95 * scale), y + (15 * scale), 4 * scale, 4 * scale, false); 15 | draw_set_color(c_white); 16 | } else { 17 | draw_roundrect_ext(x + (71 * scale), y + (5 * scale), x + (80 * scale), y + (15 * scale), 4 * scale, 4 * scale, false); 18 | draw_set_color(c_ltgray); 19 | } 20 | 21 | draw_set_alpha(1); 22 | draw_text_transformed(x + (7 * scale), y + (3.25 * scale), string(label), scale * 0.275, scale * 0.275, 0); 23 | draw_set_color(c_white); 24 | } 25 | 26 | function vb_grid(){ 27 | var size = 100; 28 | var color = grid_color; 29 | var buf = vertex_create_buffer(); 30 | vertex_begin(buf, global.vtf_lite); 31 | for (var i = -size; i <= size; i += 1){ 32 | if (i == 0){ 33 | color = y_axis_color; 34 | } else if (i mod 10 == 0){ 35 | color = grid_color; 36 | } else { 37 | color = grid_color_lite; 38 | } 39 | vertex_position_3d(buf, i, -size, 0); 40 | vertex_color(buf, color, 1); 41 | vertex_position_3d(buf, i, size, 0); 42 | vertex_color(buf, color, 1); 43 | } 44 | for (var i = -size; i <= size; i += 1){ 45 | if (i == 0){ 46 | color = x_axis_color; 47 | } else if (i mod 10 == 0){ 48 | color = grid_color; 49 | } else { 50 | color = grid_color_lite; 51 | } 52 | vertex_position_3d(buf, -size, i, 0); 53 | vertex_color(buf, color, 1); 54 | vertex_position_3d(buf, size, i, 0); 55 | vertex_color(buf, color, 1); 56 | } 57 | vertex_end(buf); 58 | vertex_freeze(buf); 59 | return buf; 60 | } -------------------------------------------------------------------------------- /source/3D Model Viewer/scripts/functions/functions.yy: -------------------------------------------------------------------------------- 1 | { 2 | "isDnD": false, 3 | "isCompatibility": false, 4 | "parent": { 5 | "name": "Scripts", 6 | "path": "folders/Scripts.yy", 7 | }, 8 | "resourceVersion": "1.0", 9 | "name": "functions", 10 | "tags": [], 11 | "resourceType": "GMScript", 12 | } -------------------------------------------------------------------------------- /source/3D Model Viewer/scripts/macros/macros.gml: -------------------------------------------------------------------------------- 1 | #macro grid_color make_color_rgb(102, 102, 102) 2 | #macro grid_color_lite make_color_rgb(75, 75, 75) 3 | #macro x_axis_color make_color_rgb(255, 51, 82) 4 | #macro y_axis_color make_color_rgb(139, 220, 0) 5 | #macro fog_color make_color_rgb(60, 60, 60) 6 | 7 | #macro fog_dist_near 20 8 | #macro fog_dist_far 80 9 | 10 | #macro ambient_light_color make_color_rgb(93, 101, 111) -------------------------------------------------------------------------------- /source/3D Model Viewer/scripts/macros/macros.yy: -------------------------------------------------------------------------------- 1 | { 2 | "isDnD": false, 3 | "isCompatibility": false, 4 | "parent": { 5 | "name": "Scripts", 6 | "path": "folders/Scripts.yy", 7 | }, 8 | "resourceVersion": "1.0", 9 | "name": "macros", 10 | "tags": [], 11 | "resourceType": "GMScript", 12 | } -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/0638d719-56a9-4c66-a75e-a2d69dfc61a2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/0638d719-56a9-4c66-a75e-a2d69dfc61a2.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/094bc6c5-42da-4178-9ef4-0dfc38f06d6d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/094bc6c5-42da-4178-9ef4-0dfc38f06d6d.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/0ceb400a-5156-49ae-9507-86d4ea9eaa08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/0ceb400a-5156-49ae-9507-86d4ea9eaa08.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/0f9cd664-296d-40c7-9d1e-35d4c4c2684b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/0f9cd664-296d-40c7-9d1e-35d4c4c2684b.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/1304025c-53ab-48e2-9118-9ff47b144df6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/1304025c-53ab-48e2-9118-9ff47b144df6.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/20672b94-f84c-414c-bf31-c3bdb3e493cd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/20672b94-f84c-414c-bf31-c3bdb3e493cd.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/21c3e2b2-0b40-41fe-acc9-5da5902d634a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/21c3e2b2-0b40-41fe-acc9-5da5902d634a.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/21f73e35-9a09-4b4a-b6e9-ffff1481cc62.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/21f73e35-9a09-4b4a-b6e9-ffff1481cc62.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/23dc8e31-dd90-42f9-a811-46b33f0e2744.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/23dc8e31-dd90-42f9-a811-46b33f0e2744.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/2b15c324-0ca4-4553-b343-50a2796b23b8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/2b15c324-0ca4-4553-b343-50a2796b23b8.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/2d6b61c9-a073-4ca1-b477-dda0a095be3f.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/2d6b61c9-a073-4ca1-b477-dda0a095be3f.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/314ac0c4-48ef-4ac1-99da-0e7936c3fe3e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/314ac0c4-48ef-4ac1-99da-0e7936c3fe3e.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/34d63c82-817f-49fe-afcd-993fadc29f10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/34d63c82-817f-49fe-afcd-993fadc29f10.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/37812ae6-c51b-4319-92d9-d2fce7b39818.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/37812ae6-c51b-4319-92d9-d2fce7b39818.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/38201428-f077-4475-81a3-7688b725fe76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/38201428-f077-4475-81a3-7688b725fe76.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/45473dd1-3390-46f1-a231-9c3724a52d36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/45473dd1-3390-46f1-a231-9c3724a52d36.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/4588e73b-327a-4d46-94f9-436504c9aff0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/4588e73b-327a-4d46-94f9-436504c9aff0.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/4a768da1-f2f5-4b4a-a325-26c780f61433.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/4a768da1-f2f5-4b4a-a325-26c780f61433.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/4fb6f0fb-6de2-4707-8299-c13ef950b885.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/4fb6f0fb-6de2-4707-8299-c13ef950b885.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/50cc9ca5-a337-4617-bf1c-446baeab983e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/50cc9ca5-a337-4617-bf1c-446baeab983e.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/5246d612-d50c-42c9-a4dc-fffa201a734a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/5246d612-d50c-42c9-a4dc-fffa201a734a.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/5c8f9e7c-db32-4961-992b-7ab2b16a249e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/5c8f9e7c-db32-4961-992b-7ab2b16a249e.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/61abe727-19ea-4342-b97c-f3bd52beeb79.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/61abe727-19ea-4342-b97c-f3bd52beeb79.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/67da1ff6-e753-4162-b9eb-b2e1175c34ea.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/67da1ff6-e753-4162-b9eb-b2e1175c34ea.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/7698940c-6747-4674-8d7b-c90b54c937b4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/7698940c-6747-4674-8d7b-c90b54c937b4.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/7714a809-c1f9-4807-b871-0764f63de988.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/7714a809-c1f9-4807-b871-0764f63de988.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/77fc921c-c989-4378-b36f-a1085647ec66.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/77fc921c-c989-4378-b36f-a1085647ec66.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/7932b5ae-3ce0-4d33-ab33-f1411caf058a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/7932b5ae-3ce0-4d33-ab33-f1411caf058a.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/84a0b706-06b0-4d18-b6f6-90911724dc7b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/84a0b706-06b0-4d18-b6f6-90911724dc7b.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/85affb4c-231e-4c1a-8d32-8d9fab98db7e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/85affb4c-231e-4c1a-8d32-8d9fab98db7e.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/873b8602-5288-4921-85b2-17ac6b897b12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/873b8602-5288-4921-85b2-17ac6b897b12.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/8bcab37b-4e92-4c82-9e8a-19090ff92c9b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/8bcab37b-4e92-4c82-9e8a-19090ff92c9b.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/8da88f92-a20c-4520-86f3-0c2f60c20345.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/8da88f92-a20c-4520-86f3-0c2f60c20345.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/999bd5b8-de89-4197-b63a-d722b4a4fe35.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/999bd5b8-de89-4197-b63a-d722b4a4fe35.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/9ed3aad0-fa0f-4a1a-9c4c-6b5d2e1c4592.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/9ed3aad0-fa0f-4a1a-9c4c-6b5d2e1c4592.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/a78755a0-86e0-4156-a6bc-8bf4036e9055.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/a78755a0-86e0-4156-a6bc-8bf4036e9055.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/b1ee8931-cc62-4784-af1d-819419033551.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/b1ee8931-cc62-4784-af1d-819419033551.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/b5d7b28b-5b7b-4f93-9bda-ded44c56b691.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/b5d7b28b-5b7b-4f93-9bda-ded44c56b691.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/bac48ecb-5f36-4c78-a70b-26d950ec63f0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/bac48ecb-5f36-4c78-a70b-26d950ec63f0.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/bdfb5047-2297-4eaf-987a-46bbad9d33e9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/bdfb5047-2297-4eaf-987a-46bbad9d33e9.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/be053013-94cd-4204-8d6c-1a26ca6be499.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/be053013-94cd-4204-8d6c-1a26ca6be499.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/be07708f-c097-4a12-9122-dd8dea456bf2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/be07708f-c097-4a12-9122-dd8dea456bf2.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/be1ddc5d-9c5b-4003-9242-e61005178ca1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/be1ddc5d-9c5b-4003-9242-e61005178ca1.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/c0c01294-91ed-4f8d-81f1-3360df8dbb1f.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/c0c01294-91ed-4f8d-81f1-3360df8dbb1f.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/c1532b6c-da3c-48a0-a936-5c59f2970620.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/c1532b6c-da3c-48a0-a936-5c59f2970620.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/c2a769d7-923a-4d20-a08a-2f7ef3295114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/c2a769d7-923a-4d20-a08a-2f7ef3295114.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/c55763d4-d98a-4270-bb37-4284aab698dd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/c55763d4-d98a-4270-bb37-4284aab698dd.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/d07d0400-72c0-4c8a-aded-70608bd36232.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/d07d0400-72c0-4c8a-aded-70608bd36232.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/d1538bc8-f7be-4189-93ed-e83b25c78422.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/d1538bc8-f7be-4189-93ed-e83b25c78422.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/d2c8c88a-f6be-4222-8731-a2c086b275cc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/d2c8c88a-f6be-4222-8731-a2c086b275cc.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/d34c49eb-6564-4f54-86de-af5d1944f1bd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/d34c49eb-6564-4f54-86de-af5d1944f1bd.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/d7d3ea40-2596-4622-b4db-2a1ad67a3d5d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/d7d3ea40-2596-4622-b4db-2a1ad67a3d5d.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/d82cc809-22ad-4a68-8d43-c2747c13f4e3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/d82cc809-22ad-4a68-8d43-c2747c13f4e3.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/dc28f729-7267-40a7-8d72-a14b66b2c32e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/dc28f729-7267-40a7-8d72-a14b66b2c32e.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/e0c91714-ea4c-4a50-86b9-0226102994f3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/e0c91714-ea4c-4a50-86b9-0226102994f3.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/e14bf24b-5b9c-4035-adc1-d41dd17f4ccc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/e14bf24b-5b9c-4035-adc1-d41dd17f4ccc.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/ea891ac0-3a1d-4c91-9f4c-1ed5664fd844.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/ea891ac0-3a1d-4c91-9f4c-1ed5664fd844.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/ee506626-5555-4daf-9572-5c82cca239a0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/ee506626-5555-4daf-9572-5c82cca239a0.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/fb04380b-441c-4d46-a0ef-01438b12fbaf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/fb04380b-441c-4d46-a0ef-01438b12fbaf.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/fb482759-e793-4009-b942-1b13dce26b4c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/fb482759-e793-4009-b942-1b13dce26b4c.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/layers/0638d719-56a9-4c66-a75e-a2d69dfc61a2/d2b1b377-4f85-45fc-a0e7-e360deafed91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/layers/0638d719-56a9-4c66-a75e-a2d69dfc61a2/d2b1b377-4f85-45fc-a0e7-e360deafed91.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/layers/094bc6c5-42da-4178-9ef4-0dfc38f06d6d/d2b1b377-4f85-45fc-a0e7-e360deafed91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/layers/094bc6c5-42da-4178-9ef4-0dfc38f06d6d/d2b1b377-4f85-45fc-a0e7-e360deafed91.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/layers/0ceb400a-5156-49ae-9507-86d4ea9eaa08/d2b1b377-4f85-45fc-a0e7-e360deafed91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/layers/0ceb400a-5156-49ae-9507-86d4ea9eaa08/d2b1b377-4f85-45fc-a0e7-e360deafed91.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/layers/0f9cd664-296d-40c7-9d1e-35d4c4c2684b/d2b1b377-4f85-45fc-a0e7-e360deafed91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/layers/0f9cd664-296d-40c7-9d1e-35d4c4c2684b/d2b1b377-4f85-45fc-a0e7-e360deafed91.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/layers/1304025c-53ab-48e2-9118-9ff47b144df6/d2b1b377-4f85-45fc-a0e7-e360deafed91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/layers/1304025c-53ab-48e2-9118-9ff47b144df6/d2b1b377-4f85-45fc-a0e7-e360deafed91.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/layers/20672b94-f84c-414c-bf31-c3bdb3e493cd/d2b1b377-4f85-45fc-a0e7-e360deafed91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/layers/20672b94-f84c-414c-bf31-c3bdb3e493cd/d2b1b377-4f85-45fc-a0e7-e360deafed91.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/layers/21c3e2b2-0b40-41fe-acc9-5da5902d634a/d2b1b377-4f85-45fc-a0e7-e360deafed91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/layers/21c3e2b2-0b40-41fe-acc9-5da5902d634a/d2b1b377-4f85-45fc-a0e7-e360deafed91.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/layers/21f73e35-9a09-4b4a-b6e9-ffff1481cc62/d2b1b377-4f85-45fc-a0e7-e360deafed91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/layers/21f73e35-9a09-4b4a-b6e9-ffff1481cc62/d2b1b377-4f85-45fc-a0e7-e360deafed91.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/layers/23dc8e31-dd90-42f9-a811-46b33f0e2744/d2b1b377-4f85-45fc-a0e7-e360deafed91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/layers/23dc8e31-dd90-42f9-a811-46b33f0e2744/d2b1b377-4f85-45fc-a0e7-e360deafed91.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/layers/2b15c324-0ca4-4553-b343-50a2796b23b8/d2b1b377-4f85-45fc-a0e7-e360deafed91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/layers/2b15c324-0ca4-4553-b343-50a2796b23b8/d2b1b377-4f85-45fc-a0e7-e360deafed91.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/layers/2d6b61c9-a073-4ca1-b477-dda0a095be3f/d2b1b377-4f85-45fc-a0e7-e360deafed91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/layers/2d6b61c9-a073-4ca1-b477-dda0a095be3f/d2b1b377-4f85-45fc-a0e7-e360deafed91.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/layers/314ac0c4-48ef-4ac1-99da-0e7936c3fe3e/d2b1b377-4f85-45fc-a0e7-e360deafed91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/layers/314ac0c4-48ef-4ac1-99da-0e7936c3fe3e/d2b1b377-4f85-45fc-a0e7-e360deafed91.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/layers/34d63c82-817f-49fe-afcd-993fadc29f10/d2b1b377-4f85-45fc-a0e7-e360deafed91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/layers/34d63c82-817f-49fe-afcd-993fadc29f10/d2b1b377-4f85-45fc-a0e7-e360deafed91.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/layers/37812ae6-c51b-4319-92d9-d2fce7b39818/d2b1b377-4f85-45fc-a0e7-e360deafed91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/layers/37812ae6-c51b-4319-92d9-d2fce7b39818/d2b1b377-4f85-45fc-a0e7-e360deafed91.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/layers/38201428-f077-4475-81a3-7688b725fe76/d2b1b377-4f85-45fc-a0e7-e360deafed91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/layers/38201428-f077-4475-81a3-7688b725fe76/d2b1b377-4f85-45fc-a0e7-e360deafed91.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/layers/45473dd1-3390-46f1-a231-9c3724a52d36/d2b1b377-4f85-45fc-a0e7-e360deafed91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/layers/45473dd1-3390-46f1-a231-9c3724a52d36/d2b1b377-4f85-45fc-a0e7-e360deafed91.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/layers/4588e73b-327a-4d46-94f9-436504c9aff0/d2b1b377-4f85-45fc-a0e7-e360deafed91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/layers/4588e73b-327a-4d46-94f9-436504c9aff0/d2b1b377-4f85-45fc-a0e7-e360deafed91.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/layers/4a768da1-f2f5-4b4a-a325-26c780f61433/d2b1b377-4f85-45fc-a0e7-e360deafed91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/layers/4a768da1-f2f5-4b4a-a325-26c780f61433/d2b1b377-4f85-45fc-a0e7-e360deafed91.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/layers/4fb6f0fb-6de2-4707-8299-c13ef950b885/d2b1b377-4f85-45fc-a0e7-e360deafed91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/layers/4fb6f0fb-6de2-4707-8299-c13ef950b885/d2b1b377-4f85-45fc-a0e7-e360deafed91.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/layers/50cc9ca5-a337-4617-bf1c-446baeab983e/d2b1b377-4f85-45fc-a0e7-e360deafed91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/layers/50cc9ca5-a337-4617-bf1c-446baeab983e/d2b1b377-4f85-45fc-a0e7-e360deafed91.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/layers/5246d612-d50c-42c9-a4dc-fffa201a734a/d2b1b377-4f85-45fc-a0e7-e360deafed91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/layers/5246d612-d50c-42c9-a4dc-fffa201a734a/d2b1b377-4f85-45fc-a0e7-e360deafed91.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/layers/5c8f9e7c-db32-4961-992b-7ab2b16a249e/d2b1b377-4f85-45fc-a0e7-e360deafed91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/layers/5c8f9e7c-db32-4961-992b-7ab2b16a249e/d2b1b377-4f85-45fc-a0e7-e360deafed91.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/layers/61abe727-19ea-4342-b97c-f3bd52beeb79/d2b1b377-4f85-45fc-a0e7-e360deafed91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/layers/61abe727-19ea-4342-b97c-f3bd52beeb79/d2b1b377-4f85-45fc-a0e7-e360deafed91.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/layers/67da1ff6-e753-4162-b9eb-b2e1175c34ea/d2b1b377-4f85-45fc-a0e7-e360deafed91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/layers/67da1ff6-e753-4162-b9eb-b2e1175c34ea/d2b1b377-4f85-45fc-a0e7-e360deafed91.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/layers/7698940c-6747-4674-8d7b-c90b54c937b4/d2b1b377-4f85-45fc-a0e7-e360deafed91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/layers/7698940c-6747-4674-8d7b-c90b54c937b4/d2b1b377-4f85-45fc-a0e7-e360deafed91.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/layers/7714a809-c1f9-4807-b871-0764f63de988/d2b1b377-4f85-45fc-a0e7-e360deafed91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/layers/7714a809-c1f9-4807-b871-0764f63de988/d2b1b377-4f85-45fc-a0e7-e360deafed91.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/layers/77fc921c-c989-4378-b36f-a1085647ec66/d2b1b377-4f85-45fc-a0e7-e360deafed91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/layers/77fc921c-c989-4378-b36f-a1085647ec66/d2b1b377-4f85-45fc-a0e7-e360deafed91.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/layers/7932b5ae-3ce0-4d33-ab33-f1411caf058a/d2b1b377-4f85-45fc-a0e7-e360deafed91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/layers/7932b5ae-3ce0-4d33-ab33-f1411caf058a/d2b1b377-4f85-45fc-a0e7-e360deafed91.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/layers/84a0b706-06b0-4d18-b6f6-90911724dc7b/d2b1b377-4f85-45fc-a0e7-e360deafed91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/layers/84a0b706-06b0-4d18-b6f6-90911724dc7b/d2b1b377-4f85-45fc-a0e7-e360deafed91.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/layers/85affb4c-231e-4c1a-8d32-8d9fab98db7e/d2b1b377-4f85-45fc-a0e7-e360deafed91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/layers/85affb4c-231e-4c1a-8d32-8d9fab98db7e/d2b1b377-4f85-45fc-a0e7-e360deafed91.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/layers/873b8602-5288-4921-85b2-17ac6b897b12/d2b1b377-4f85-45fc-a0e7-e360deafed91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/layers/873b8602-5288-4921-85b2-17ac6b897b12/d2b1b377-4f85-45fc-a0e7-e360deafed91.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/layers/8bcab37b-4e92-4c82-9e8a-19090ff92c9b/d2b1b377-4f85-45fc-a0e7-e360deafed91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/layers/8bcab37b-4e92-4c82-9e8a-19090ff92c9b/d2b1b377-4f85-45fc-a0e7-e360deafed91.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/layers/8da88f92-a20c-4520-86f3-0c2f60c20345/d2b1b377-4f85-45fc-a0e7-e360deafed91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/layers/8da88f92-a20c-4520-86f3-0c2f60c20345/d2b1b377-4f85-45fc-a0e7-e360deafed91.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/layers/999bd5b8-de89-4197-b63a-d722b4a4fe35/d2b1b377-4f85-45fc-a0e7-e360deafed91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/layers/999bd5b8-de89-4197-b63a-d722b4a4fe35/d2b1b377-4f85-45fc-a0e7-e360deafed91.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/layers/9ed3aad0-fa0f-4a1a-9c4c-6b5d2e1c4592/d2b1b377-4f85-45fc-a0e7-e360deafed91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/layers/9ed3aad0-fa0f-4a1a-9c4c-6b5d2e1c4592/d2b1b377-4f85-45fc-a0e7-e360deafed91.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/layers/a78755a0-86e0-4156-a6bc-8bf4036e9055/d2b1b377-4f85-45fc-a0e7-e360deafed91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/layers/a78755a0-86e0-4156-a6bc-8bf4036e9055/d2b1b377-4f85-45fc-a0e7-e360deafed91.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/layers/b1ee8931-cc62-4784-af1d-819419033551/d2b1b377-4f85-45fc-a0e7-e360deafed91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/layers/b1ee8931-cc62-4784-af1d-819419033551/d2b1b377-4f85-45fc-a0e7-e360deafed91.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/layers/b5d7b28b-5b7b-4f93-9bda-ded44c56b691/d2b1b377-4f85-45fc-a0e7-e360deafed91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/layers/b5d7b28b-5b7b-4f93-9bda-ded44c56b691/d2b1b377-4f85-45fc-a0e7-e360deafed91.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/layers/bac48ecb-5f36-4c78-a70b-26d950ec63f0/d2b1b377-4f85-45fc-a0e7-e360deafed91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/layers/bac48ecb-5f36-4c78-a70b-26d950ec63f0/d2b1b377-4f85-45fc-a0e7-e360deafed91.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/layers/bdfb5047-2297-4eaf-987a-46bbad9d33e9/d2b1b377-4f85-45fc-a0e7-e360deafed91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/layers/bdfb5047-2297-4eaf-987a-46bbad9d33e9/d2b1b377-4f85-45fc-a0e7-e360deafed91.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/layers/be053013-94cd-4204-8d6c-1a26ca6be499/d2b1b377-4f85-45fc-a0e7-e360deafed91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/layers/be053013-94cd-4204-8d6c-1a26ca6be499/d2b1b377-4f85-45fc-a0e7-e360deafed91.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/layers/be07708f-c097-4a12-9122-dd8dea456bf2/d2b1b377-4f85-45fc-a0e7-e360deafed91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/layers/be07708f-c097-4a12-9122-dd8dea456bf2/d2b1b377-4f85-45fc-a0e7-e360deafed91.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/layers/be1ddc5d-9c5b-4003-9242-e61005178ca1/d2b1b377-4f85-45fc-a0e7-e360deafed91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/layers/be1ddc5d-9c5b-4003-9242-e61005178ca1/d2b1b377-4f85-45fc-a0e7-e360deafed91.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/layers/c0c01294-91ed-4f8d-81f1-3360df8dbb1f/d2b1b377-4f85-45fc-a0e7-e360deafed91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/layers/c0c01294-91ed-4f8d-81f1-3360df8dbb1f/d2b1b377-4f85-45fc-a0e7-e360deafed91.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/layers/c1532b6c-da3c-48a0-a936-5c59f2970620/d2b1b377-4f85-45fc-a0e7-e360deafed91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/layers/c1532b6c-da3c-48a0-a936-5c59f2970620/d2b1b377-4f85-45fc-a0e7-e360deafed91.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/layers/c2a769d7-923a-4d20-a08a-2f7ef3295114/d2b1b377-4f85-45fc-a0e7-e360deafed91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/layers/c2a769d7-923a-4d20-a08a-2f7ef3295114/d2b1b377-4f85-45fc-a0e7-e360deafed91.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/layers/c55763d4-d98a-4270-bb37-4284aab698dd/d2b1b377-4f85-45fc-a0e7-e360deafed91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/layers/c55763d4-d98a-4270-bb37-4284aab698dd/d2b1b377-4f85-45fc-a0e7-e360deafed91.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/layers/d07d0400-72c0-4c8a-aded-70608bd36232/d2b1b377-4f85-45fc-a0e7-e360deafed91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/layers/d07d0400-72c0-4c8a-aded-70608bd36232/d2b1b377-4f85-45fc-a0e7-e360deafed91.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/layers/d1538bc8-f7be-4189-93ed-e83b25c78422/d2b1b377-4f85-45fc-a0e7-e360deafed91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/layers/d1538bc8-f7be-4189-93ed-e83b25c78422/d2b1b377-4f85-45fc-a0e7-e360deafed91.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/layers/d2c8c88a-f6be-4222-8731-a2c086b275cc/d2b1b377-4f85-45fc-a0e7-e360deafed91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/layers/d2c8c88a-f6be-4222-8731-a2c086b275cc/d2b1b377-4f85-45fc-a0e7-e360deafed91.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/layers/d34c49eb-6564-4f54-86de-af5d1944f1bd/d2b1b377-4f85-45fc-a0e7-e360deafed91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/layers/d34c49eb-6564-4f54-86de-af5d1944f1bd/d2b1b377-4f85-45fc-a0e7-e360deafed91.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/layers/d7d3ea40-2596-4622-b4db-2a1ad67a3d5d/d2b1b377-4f85-45fc-a0e7-e360deafed91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/layers/d7d3ea40-2596-4622-b4db-2a1ad67a3d5d/d2b1b377-4f85-45fc-a0e7-e360deafed91.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/layers/d82cc809-22ad-4a68-8d43-c2747c13f4e3/d2b1b377-4f85-45fc-a0e7-e360deafed91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/layers/d82cc809-22ad-4a68-8d43-c2747c13f4e3/d2b1b377-4f85-45fc-a0e7-e360deafed91.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/layers/dc28f729-7267-40a7-8d72-a14b66b2c32e/d2b1b377-4f85-45fc-a0e7-e360deafed91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/layers/dc28f729-7267-40a7-8d72-a14b66b2c32e/d2b1b377-4f85-45fc-a0e7-e360deafed91.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/layers/e0c91714-ea4c-4a50-86b9-0226102994f3/d2b1b377-4f85-45fc-a0e7-e360deafed91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/layers/e0c91714-ea4c-4a50-86b9-0226102994f3/d2b1b377-4f85-45fc-a0e7-e360deafed91.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/layers/e14bf24b-5b9c-4035-adc1-d41dd17f4ccc/d2b1b377-4f85-45fc-a0e7-e360deafed91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/layers/e14bf24b-5b9c-4035-adc1-d41dd17f4ccc/d2b1b377-4f85-45fc-a0e7-e360deafed91.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/layers/ea891ac0-3a1d-4c91-9f4c-1ed5664fd844/d2b1b377-4f85-45fc-a0e7-e360deafed91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/layers/ea891ac0-3a1d-4c91-9f4c-1ed5664fd844/d2b1b377-4f85-45fc-a0e7-e360deafed91.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/layers/ee506626-5555-4daf-9572-5c82cca239a0/d2b1b377-4f85-45fc-a0e7-e360deafed91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/layers/ee506626-5555-4daf-9572-5c82cca239a0/d2b1b377-4f85-45fc-a0e7-e360deafed91.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/layers/fb04380b-441c-4d46-a0ef-01438b12fbaf/d2b1b377-4f85-45fc-a0e7-e360deafed91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/layers/fb04380b-441c-4d46-a0ef-01438b12fbaf/d2b1b377-4f85-45fc-a0e7-e360deafed91.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_camera/layers/fb482759-e793-4009-b942-1b13dce26b4c/d2b1b377-4f85-45fc-a0e7-e360deafed91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_camera/layers/fb482759-e793-4009-b942-1b13dce26b4c/d2b1b377-4f85-45fc-a0e7-e360deafed91.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_uvcolorgrid/bfccf9fe-3d81-4d41-81bb-ba2bcdddda01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_uvcolorgrid/bfccf9fe-3d81-4d41-81bb-ba2bcdddda01.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_uvcolorgrid/layers/bfccf9fe-3d81-4d41-81bb-ba2bcdddda01/9751fbf8-e9c3-48a2-bda8-3ea026dabcfb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/massivecatapult/gamemaker-3d-io/866e784c6ebf813507be2621a29e17400d091324/source/3D Model Viewer/sprites/spr_uvcolorgrid/layers/bfccf9fe-3d81-4d41-81bb-ba2bcdddda01/9751fbf8-e9c3-48a2-bda8-3ea026dabcfb.png -------------------------------------------------------------------------------- /source/3D Model Viewer/sprites/spr_uvcolorgrid/spr_uvcolorgrid.yy: -------------------------------------------------------------------------------- 1 | { 2 | "bboxMode": 0, 3 | "collisionKind": 1, 4 | "type": 0, 5 | "origin": 0, 6 | "preMultiplyAlpha": false, 7 | "edgeFiltering": false, 8 | "collisionTolerance": 0, 9 | "swfPrecision": 2.525, 10 | "bbox_left": 0, 11 | "bbox_right": 1023, 12 | "bbox_top": 0, 13 | "bbox_bottom": 1023, 14 | "HTile": true, 15 | "VTile": true, 16 | "For3D": true, 17 | "width": 1024, 18 | "height": 1024, 19 | "textureGroupId": { 20 | "name": "mipmap", 21 | "path": "texturegroups/mipmap", 22 | }, 23 | "swatchColours": null, 24 | "gridX": 0, 25 | "gridY": 0, 26 | "frames": [ 27 | {"compositeImage":{"FrameId":{"name":"bfccf9fe-3d81-4d41-81bb-ba2bcdddda01","path":"sprites/spr_uvcolorgrid/spr_uvcolorgrid.yy",},"LayerId":null,"resourceVersion":"1.0","name":"","tags":[],"resourceType":"GMSpriteBitmap",},"images":[ 28 | {"FrameId":{"name":"bfccf9fe-3d81-4d41-81bb-ba2bcdddda01","path":"sprites/spr_uvcolorgrid/spr_uvcolorgrid.yy",},"LayerId":{"name":"9751fbf8-e9c3-48a2-bda8-3ea026dabcfb","path":"sprites/spr_uvcolorgrid/spr_uvcolorgrid.yy",},"resourceVersion":"1.0","name":"","tags":[],"resourceType":"GMSpriteBitmap",}, 29 | ],"parent":{"name":"spr_uvcolorgrid","path":"sprites/spr_uvcolorgrid/spr_uvcolorgrid.yy",},"resourceVersion":"1.0","name":"bfccf9fe-3d81-4d41-81bb-ba2bcdddda01","tags":[],"resourceType":"GMSpriteFrame",}, 30 | ], 31 | "sequence": { 32 | "spriteId": {"name":"spr_uvcolorgrid","path":"sprites/spr_uvcolorgrid/spr_uvcolorgrid.yy",}, 33 | "timeUnits": 1, 34 | "playback": 1, 35 | "playbackSpeed": 30.0, 36 | "playbackSpeedType": 0, 37 | "autoRecord": true, 38 | "volume": 1.0, 39 | "length": 1.0, 40 | "events": {"Keyframes":[],"resourceVersion":"1.0","resourceType":"KeyframeStore",}, 41 | "moments": {"Keyframes":[],"resourceVersion":"1.0","resourceType":"KeyframeStore",}, 42 | "tracks": [ 43 | {"name":"frames","spriteId":null,"keyframes":{"Keyframes":[ 44 | {"id":"cca8b026-dddf-40fb-a897-0056d581bf99","Key":0.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"bfccf9fe-3d81-4d41-81bb-ba2bcdddda01","path":"sprites/spr_uvcolorgrid/spr_uvcolorgrid.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe",}, 45 | ],"resourceVersion":"1.0","resourceType":"KeyframeStore",},"trackColour":0,"inheritsTrackColour":true,"builtinName":0,"traits":0,"interpolation":1,"tracks":[],"events":[],"isCreationTrack":false,"resourceVersion":"1.0","tags":[],"resourceType":"GMSpriteFramesTrack","modifiers":[],}, 46 | ], 47 | "visibleRange": null, 48 | "lockOrigin": false, 49 | "showBackdrop": true, 50 | "showBackdropImage": false, 51 | "backdropImagePath": "", 52 | "backdropImageOpacity": 0.5, 53 | "backdropWidth": 1366, 54 | "backdropHeight": 768, 55 | "backdropXOffset": 0.0, 56 | "backdropYOffset": 0.0, 57 | "xorigin": 0, 58 | "yorigin": 0, 59 | "eventToFunction": {}, 60 | "eventStubScript": null, 61 | "parent": {"name":"spr_uvcolorgrid","path":"sprites/spr_uvcolorgrid/spr_uvcolorgrid.yy",}, 62 | "resourceVersion": "1.4", 63 | "name": "spr_uvcolorgrid", 64 | "tags": [], 65 | "resourceType": "GMSequence", 66 | }, 67 | "layers": [ 68 | {"visible":true,"isLocked":false,"blendMode":0,"opacity":100.0,"displayName":"default","resourceVersion":"1.0","name":"9751fbf8-e9c3-48a2-bda8-3ea026dabcfb","tags":[],"resourceType":"GMImageLayer",}, 69 | ], 70 | "nineSlice": null, 71 | "parent": { 72 | "name": "Sprites", 73 | "path": "folders/Sprites.yy", 74 | }, 75 | "resourceVersion": "1.0", 76 | "name": "spr_uvcolorgrid", 77 | "tags": [], 78 | "resourceType": "GMSprite", 79 | } -------------------------------------------------------------------------------- /source/io_export_gms3d/__init__.py: -------------------------------------------------------------------------------- 1 | # Copyright 2021 Martin Crownover. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | # 15 | # Portions of this software are based on the work of The glTF-Blender-IO 16 | # authors. glTF-Blender-IO is licensed and available under the Apache 17 | # License, Version 2.0. 18 | 19 | bl_info = { 20 | 'name': 'GameMaker Studio 2 3D format', 21 | 'author': 'Martin Crownover', 22 | "version": (2, 1, 2), 23 | 'blender': (2, 93, 0), 24 | 'location': 'File > Export', 25 | 'description': 'Export as GameMaker Studio 2 3D', 26 | 'warning': '', 27 | 'doc_url': "https://github.com/massivecatapult/gamemaker-3d-io#readme", 28 | 'tracker_url': "https://github.com/massivecatapult/gamemaker-3d-io", 29 | 'support': 'OFFICIAL', 30 | 'category': 'Import-Export', 31 | } 32 | 33 | import bpy 34 | import bmesh 35 | from . import gm3d_prep 36 | from . import gm3d_output 37 | 38 | def export_gm3d(context, filepath, use_world_origin, apply_modifiers, flip_y, flip_uvs, scale_modifier, vertex_color_override, output_format, output_type): 39 | """Export the active object as a GameMaker Studio 2 compatible 3D file""" 40 | 41 | # Make sure we're in OBJECT mode 42 | bpy.ops.object.mode_set(mode = 'OBJECT') 43 | 44 | # Get the view layer 45 | view_layer = bpy.context.view_layer 46 | 47 | # Mark the original object 48 | original_object = bpy.context.active_object 49 | 50 | # Make sure only the active object is selected 51 | bpy.ops.object.select_all(action = 'DESELECT') 52 | original_object.select_set(True) 53 | 54 | # Make a temporary copy of the object to operate on 55 | temp_object = original_object.copy() 56 | temp_object.data = original_object.data.copy() 57 | view_layer.active_layer_collection.collection.objects.link(temp_object) 58 | 59 | # Perform the selection routine once more, and make the new object the active one 60 | bpy.ops.object.select_all(action = 'DESELECT') 61 | temp_object.select_set(True) 62 | bpy.context.view_layer.objects.active = temp_object 63 | 64 | # Apply modifiers, if applicable 65 | if apply_modifiers: 66 | bpy.ops.object.convert(target = 'MESH') 67 | 68 | # Apply the object 69 | bpy.ops.object.transform_apply(location = use_world_origin, rotation = True, scale = True) 70 | 71 | # Flip the object on the Y axis, if applicable 72 | if flip_y: 73 | bpy.ops.transform.mirror(constraint_axis = (False, True, False)) 74 | bpy.ops.object.transform_apply(location = use_world_origin, rotation = True, scale = True) 75 | bpy.ops.object.mode_set(mode = 'EDIT') 76 | bpy.ops.mesh.select_all(action = 'SELECT') 77 | bpy.ops.mesh.flip_normals() 78 | bpy.context.view_layer.update() 79 | bpy.ops.object.mode_set(mode = 'OBJECT') 80 | 81 | # Scale the object 82 | if scale_modifier != 1: 83 | bpy.ops.transform.resize(value = (scale_modifier, scale_modifier, scale_modifier)) 84 | bpy.ops.object.transform_apply(location = use_world_origin, rotation = True, scale = True) 85 | 86 | # Grab object mesh, and convert to bmesh 87 | mesh = bpy.context.object.data 88 | bm = bmesh.new() 89 | bm.from_mesh(mesh) 90 | 91 | output_data = gm3d_prep.prep_mesh_data(bm, flip_uvs, vertex_color_override, output_format) 92 | output = gm3d_output.format_output(output_data, output_format, output_type) 93 | 94 | # Delete object copy and bmesh, and reselect original object 95 | bm.free() 96 | bpy.ops.object.delete() 97 | original_object.select_set(True) 98 | bpy.context.view_layer.objects.active = original_object 99 | 100 | # Output the data 101 | if output_type == 'vertex_buffer': 102 | f = open(filepath, 'wb') 103 | else: 104 | f = open(filepath, 'w', encoding = 'utf-8') 105 | f.write(output) 106 | f.close() 107 | 108 | return {'FINISHED'} 109 | 110 | from bpy_extras.io_utils import ExportHelper 111 | from bpy.props import StringProperty, BoolProperty, EnumProperty, FloatProperty, FloatVectorProperty 112 | from bpy.types import Operator, Panel 113 | 114 | def align_output_format(filepath, output_type): 115 | """Format filename appropriately to the selected output type""" 116 | import os 117 | filename = os.path.basename(filepath) 118 | if not filename: 119 | return filepath 120 | 121 | stem, ext = os.path.splitext(filename) 122 | if stem.startswith('.') and not ext: 123 | stem, ext = '', stem 124 | 125 | desired_ext = '.buf' if output_type == 'vertex_buffer' else '.gml' 126 | ext_lower = ext.lower() 127 | if ext_lower not in ['.buf', '.gml']: 128 | return filepath + desired_ext 129 | elif ext_lower != desired_ext: 130 | # Strip extension 131 | filepath = filepath[:-len(ext)] 132 | return filepath + desired_ext 133 | else: 134 | return filepath 135 | 136 | def update_ext(self, context): 137 | """Update the filename in the file browser when the format changes""" 138 | sfile = context.space_data 139 | if not isinstance(sfile, bpy.types.SpaceFileBrowser): 140 | return 141 | if not sfile.active_operator: 142 | return 143 | if sfile.active_operator.bl_idname != 'EXPORT_OT_GML': 144 | return 145 | 146 | sfile.params.filename = align_output_format( 147 | sfile.params.filename, 148 | self.output_type, 149 | ) 150 | 151 | class ExportGM3D(Operator, ExportHelper): 152 | """Export the active object to the selected GameMaker 3D format""" 153 | bl_idname = "export.gml" 154 | bl_label = "Export" 155 | 156 | filename_ext = '' 157 | filter_glob: StringProperty( 158 | default = "*.buf;*.gml", 159 | options = {'HIDDEN'}, 160 | maxlen = 255, 161 | ) 162 | 163 | # Operator properties 164 | use_world_origin: BoolProperty( 165 | name = "Use World Origin", 166 | description = "Applies the position of the model relative to the world origin before exporting", 167 | default = True, 168 | ) 169 | 170 | apply_modifiers: BoolProperty( 171 | name = "Apply Modifiers", 172 | description = "Apply modifiers to the mesh before exporting", 173 | default = True, 174 | ) 175 | 176 | flip_y: BoolProperty( 177 | name = "Flip On Y", 178 | description = "Flips the mesh on the Y axis", 179 | default = True, 180 | ) 181 | 182 | flip_uvs: BoolProperty( 183 | name = "Flip UV Coordinates", 184 | description = "Flips the UV coordinates on the Y axis", 185 | default = True, 186 | ) 187 | 188 | scale_modifier: FloatProperty( 189 | name = "Scale", 190 | description = "Adjusts the scale of the model", 191 | default = 1.0, 192 | min = 0.01, 193 | soft_min = 0.01, 194 | ) 195 | 196 | vertex_color_override: FloatVectorProperty( 197 | name = "Vertex Color", 198 | description = "Multiply or set vertex colors to this color", 199 | default = (1.0, 1.0, 1.0), 200 | min = 0.0, 201 | max = 1.0, 202 | precision = 3, 203 | soft_min = 0.0, 204 | soft_max = 1.0, 205 | subtype = 'COLOR', 206 | size = 3, 207 | ) 208 | 209 | output_format: EnumProperty( 210 | name = "Format", 211 | description="The format of the model to output", 212 | items = ( 213 | ('triangle_list', "Triangle List", "Format the model as a triangle list"), 214 | ('line_list', "Line List", "Format the model as a line list"), 215 | ('point_list', "Point List", "Format the model as a point list"), 216 | ), 217 | default = 'triangle_list', 218 | ) 219 | 220 | output_type: EnumProperty( 221 | name = "Type", 222 | description="The type of data to output", 223 | items = ( 224 | ('vertex_buffer', "Vertex Buffer", "A vertex buffer that can be loaded into GameMaker at runtime"), 225 | ('debug', "GML Script (debug)", "A human-readable script that can be used to import and debug"), 226 | ), 227 | default = 'vertex_buffer', 228 | update = update_ext, 229 | ) 230 | 231 | def check(self, context): 232 | # Force the filename to update appropriately 233 | old_filepath = self.filepath 234 | self.filepath = align_output_format( 235 | self.filepath, 236 | self.output_type, 237 | ) 238 | return self.filepath != old_filepath 239 | 240 | def execute(self, context): 241 | return export_gm3d( 242 | context, 243 | self.filepath, 244 | self.use_world_origin, 245 | self.apply_modifiers, 246 | self.flip_y, 247 | self.flip_uvs, 248 | self.scale_modifier, 249 | self.vertex_color_override, 250 | self.output_format, 251 | self.output_type 252 | ) 253 | 254 | def draw(self, context): 255 | layout = self.layout 256 | 257 | sfile = context.space_data 258 | operator = sfile.active_operator 259 | 260 | layout.prop(operator, "output_format") 261 | if self.output_format != 'triangle_list': 262 | layout.prop(operator, "vertex_color_override") 263 | 264 | layout.label(text = "Transform:") 265 | box = layout.box() 266 | box.prop(operator, "use_world_origin") 267 | box.prop(operator, "flip_y") 268 | box.prop(operator, "flip_uvs") 269 | box.prop(operator, "apply_modifiers") 270 | box.prop(operator, "scale_modifier") 271 | 272 | layout.prop(operator, "output_type") 273 | 274 | # Only needed if you want to add into a dynamic menu 275 | def menu_func_export(self, context): 276 | self.layout.operator(ExportGM3D.bl_idname, text="GameMaker 3D (.buf, .gml)") 277 | 278 | classes = ( 279 | ExportGM3D, 280 | ) 281 | 282 | def register(): 283 | for cls in classes: 284 | bpy.utils.register_class(cls) 285 | bpy.types.TOPBAR_MT_file_export.append(menu_func_export) 286 | 287 | def unregister(): 288 | for cls in classes: 289 | bpy.utils.unregister_class(cls) 290 | bpy.types.TOPBAR_MT_file_export.remove(menu_func_export) 291 | 292 | if __name__ == "__main__": 293 | register() -------------------------------------------------------------------------------- /source/io_export_gms3d/gm3d_output.py: -------------------------------------------------------------------------------- 1 | import struct 2 | 3 | def format_output(data, output_format, output_type): 4 | """Formats and outputs data according to the selected model format and type""" 5 | 6 | # Return data as the correct type 7 | if output_type == 'vertex_buffer': 8 | 9 | # Init data 10 | output_list = [] 11 | 12 | # Vertex buffer output 13 | if output_format == 'triangle_list': 14 | # Triangle list 15 | for p in data: 16 | output_list.append(struct.pack("fff", p.get("vertices")[0], p.get("vertices")[1], p.get("vertices")[2])) 17 | output_list.append(struct.pack("fff", p.get("normals")[0], p.get("normals")[1], p.get("normals")[2])) 18 | output_list.append(struct.pack("BBBB", p.get("colors")[0], p.get("colors")[1], p.get("colors")[2], 255)) 19 | output_list.append(struct.pack("ff", p.get("uvs")[0], p.get("uvs")[1])) 20 | 21 | elif output_format == 'line_list': 22 | # Line list 23 | for p in data: 24 | output_list.append(struct.pack("fff", p.get("vertices")[0], p.get("vertices")[1], p.get("vertices")[2])) 25 | output_list.append(struct.pack("BBBB", p.get("colors")[0], p.get("colors")[1], p.get("colors")[2], 255)) 26 | 27 | else: 28 | # Point list 29 | for p in data: 30 | output_list.append(struct.pack("fff", p.get("vertices")[0], p.get("vertices")[1], p.get("vertices")[2])) 31 | output_list.append(struct.pack("BBBB", p.get("colors")[0], p.get("colors")[1], p.get("colors")[2], 255)) 32 | 33 | # Combine data 34 | output = b"".join(output_list) 35 | 36 | # Debug output to GML script 37 | else: 38 | 39 | # Init data 40 | output = "" 41 | count = 0 42 | 43 | if output_format == 'triangle_list': 44 | # Triangle list 45 | for p in data: 46 | if count % 3 == 0: 47 | output += "\t\t//triangle " + str(count // 3) + "\n" 48 | output += "\t\tvertex_position_3d(buf, " + str(p.get("vertices")[0]) + ", " + str(p.get("vertices")[1]) + ", " + str(p.get("vertices")[2]) + ");\n" 49 | output += "\t\tvertex_normal(buf, " + str(p.get("normals")[0]) + ", " + str(p.get("normals")[1]) + ", " + str(p.get("normals")[2]) + ");\n" 50 | if p.get("colors")[0] + p.get("colors")[1] + p.get("colors")[2] < 765: 51 | output += "\t\tvertex_color(buf, make_color_rgb(" + str(p.get("colors")[0]) + ", " + str(p.get("colors")[1]) + ", " + str(p.get("colors")[2]) + "), 1);\n" 52 | else: 53 | output += "\t\tvertex_color(buf, c_white, 1);\n" 54 | output += "\t\tvertex_texcoord(buf, " + str(p.get("uvs")[0]) + ", " + str(p.get("uvs")[1]) + ");\n" 55 | if (count + 1) % 3 == 0: 56 | output += "\n" 57 | count += 1 58 | # Add header and footer to file 59 | header = "function load_model(format){\n\n\t/*\n\tuse the following format to load this model:\n\tvertex_format_begin();\n\t\tvertex_format_add_position_3d();\n\t\tvertex_format_add_normal();\n\t\tvertex_format_add_color();\n\t\tvertex_format_add_texcoord();\n\t vertex_format = vertex_format_end();\n\t*/\n\n" 60 | output = header + "\tvar buf = vertex_create_buffer();\n\tvertex_begin(buf, format);\n\n" + output 61 | output += "\tvertex_end(buf);\n\n\treturn buf;\n}" 62 | 63 | elif output_format == 'line_list': 64 | # Line list 65 | for p in data: 66 | if count % 2 == 0: 67 | output += "\t\t//line " + str(count // 2) + "\n" 68 | output += "\t\tvertex_position_3d(buf, " + str(p.get("vertices")[0]) + ", " + str(p.get("vertices")[1]) + ", " + str(p.get("vertices")[2]) + ");\n" 69 | if p.get("colors")[0] + p.get("colors")[1] + p.get("colors")[2] < 765: 70 | output += "\t\tvertex_color(buf, make_color_rgb(" + str(p.get("colors")[0]) + ", " + str(p.get("colors")[1]) + ", " + str(p.get("colors")[2]) + "), 1);\n" 71 | else: 72 | output += "\t\tvertex_color(buf, c_white, 1);\n" 73 | if (count + 1) % 2 == 0: 74 | output += "\n" 75 | count += 1 76 | # Add header and footer to file 77 | header = "function load_model(format){\n\n\t/*\n\tuse the following format to load this model:\n\tvertex_format_begin();\n\t\tvertex_format_add_position_3d();\n\t\tvertex_format_add_color();\n\t vertex_format = vertex_format_end();\n\t*/\n\n" 78 | output = header + "\tvar buf = vertex_create_buffer();\n\tvertex_begin(buf, format);\n\n" + output 79 | output += "\tvertex_end(buf);\n\n\treturn buf;\n}" 80 | else: 81 | # Point list 82 | for p in data: 83 | output += "\t\t//point " + str(count) + "\n" 84 | output += "\t\tvertex_position_3d(buf, " + str(p.get("vertices")[0]) + ", " + str(p.get("vertices")[1]) + ", " + str(p.get("vertices")[2]) + ");\n" 85 | if p.get("colors")[0] + p.get("colors")[1] + p.get("colors")[2] < 765: 86 | output += "\t\tvertex_color(buf, make_color_rgb(" + str(p.get("colors")[0]) + ", " + str(p.get("colors")[1]) + ", " + str(p.get("colors")[2]) + "), 1);\n" 87 | else: 88 | output += "\t\tvertex_color(buf, c_white, 1);\n" 89 | output += "\n" 90 | count += 1 91 | # Add header and footer to file 92 | header = "function load_model(format){\n\n\t/*\n\tuse the following format to load this model:\n\tvertex_format_begin();\n\t\tvertex_format_add_position_3d();\n\t\tvertex_format_add_color();\n\t vertex_format = vertex_format_end();\n\t*/\n\n" 93 | output = header + "\tvar buf = vertex_create_buffer();\n\tvertex_begin(buf, format);\n\n" + output 94 | output += "\tvertex_end(buf);\n\n\treturn buf;\n}" 95 | 96 | return output -------------------------------------------------------------------------------- /source/io_export_gms3d/gm3d_prep.py: -------------------------------------------------------------------------------- 1 | import bmesh 2 | 3 | def prep_mesh_data(bm, flip_uvs, vertex_color_override, output_format): 4 | """Triangulates a mesh (when appropriate), then returns the model data in the requested format""" 5 | 6 | # Triangulate, if we want to export faces 7 | if output_format == 'triangle_list': 8 | bmesh.ops.triangulate(bm, faces=bm.faces[:]) 9 | 10 | # Get uv active layout, if there is one 11 | uv_layer = bm.loops.layers.uv.active 12 | use_uv_layer = True if uv_layer else False 13 | 14 | # Iterate through the mesh and grab appropriate data 15 | output_data = [] 16 | 17 | if output_format == 'triangle_list': 18 | # If we want to output a triangle list 19 | 20 | # Get vertex colors, if there are any 21 | vert_colors = bm.loops.layers.color.active 22 | use_vert_colors = True if vert_colors else False 23 | 24 | for face in bm.faces: 25 | for loop in face.loops: 26 | point = {} 27 | point["vertices"] = [round(v, 4) for v in loop.vert.co] 28 | point["normals"] = [round(n, 4) for n in loop.vert.normal] 29 | if use_vert_colors: 30 | point["colors"] = [int(round(c * 255)) for c in loop[vert_colors]] 31 | else: 32 | point["colors"] = [255, 255, 255] 33 | if use_uv_layer: 34 | point["uvs"] = [round(u, 4) for u in loop[uv_layer].uv] 35 | if flip_uvs: 36 | point["uvs"][1] = round(1 - loop[uv_layer].uv[1], 4) 37 | else: 38 | point["uvs"] = [0, 0] 39 | output_data.append(point) 40 | 41 | elif output_format == 'line_list': 42 | # If we want to output a line list 43 | for edge in bm.edges: 44 | for vert in edge.verts: 45 | point = {} 46 | point["vertices"] = [round(v, 4) for v in vert.co] 47 | point["colors"] = [int(round(c * 255)) for c in vertex_color_override] 48 | output_data.append(point) 49 | 50 | else: 51 | # If we want to output a point list 52 | for vert in bm.verts: 53 | point = {} 54 | point["vertices"] = [round(v, 4) for v in vert.co] 55 | point["colors"] = [int(round(c * 255)) for c in vertex_color_override] 56 | output_data.append(point) 57 | 58 | return output_data -------------------------------------------------------------------------------- /source/scratch/face-loop.py: -------------------------------------------------------------------------------- 1 | uv_lay = bm.loops.layers.uv.active 2 | 3 | for face in bm.faces: 4 | for loop in face.loops: 5 | uv = loop[uv_lay].uv 6 | output += str("Loop UV: %f, %f" % uv[:]) + "\n" 7 | vert = loop.vert 8 | output += str("Loop Vert: (%f,%f,%f)" % vert.co[:]) + "\n" 9 | normal = vert.normal 10 | output += str("Loop Normal: (%f,%f,%f)" % normal[:]) + "\n\n" 11 | 12 | -------------------------------------------------------------------------------- /source/scratch/scratch.py: -------------------------------------------------------------------------------- 1 | import bpy 2 | import bmesh 3 | import struct 4 | 5 | def export_gm3d(context, filepath, use_world_origin, apply_modifiers, flip_y, flip_uvs, scale_modifier, output_type): 6 | 7 | #make sure we're in OBJECT mode 8 | bpy.ops.object.mode_set(mode = 'OBJECT') 9 | 10 | #get the view layer 11 | view_layer = bpy.context.view_layer 12 | 13 | #mark the original object 14 | original_object = bpy.context.active_object 15 | 16 | #make sure only the active object is selected 17 | bpy.ops.object.select_all(action = 'DESELECT') 18 | original_object.select_set(True) 19 | 20 | #make a temporary copy of the object to operate on 21 | temp_object = original_object.copy() 22 | temp_object.data = original_object.data.copy() 23 | view_layer.active_layer_collection.collection.objects.link(temp_object) 24 | 25 | #perform the selection routine once more, and make the new object the active one 26 | bpy.ops.object.select_all(action = 'DESELECT') 27 | temp_object.select_set(True) 28 | bpy.context.view_layer.objects.active = temp_object 29 | 30 | #apply modifiers, if applicable 31 | if apply_modifiers: 32 | bpy.ops.object.convert(target = 'MESH') 33 | 34 | #triangulate 35 | bpy.ops.object.mode_set(mode = 'EDIT') 36 | bpy.ops.mesh.select_all(action = 'SELECT') 37 | bpy.ops.mesh.quads_convert_to_tris() 38 | bpy.context.view_layer.update() 39 | bpy.ops.object.mode_set(mode = 'OBJECT') 40 | 41 | #apply the object 42 | bpy.ops.object.transform_apply(location = use_world_origin, rotation = True, scale = True) 43 | 44 | #flip the object on the Y axis, if applicable 45 | if flip_y: 46 | bpy.ops.transform.mirror(constraint_axis = (False, True, False)) 47 | bpy.ops.object.transform_apply(location = use_world_origin, rotation = True, scale = True) 48 | bpy.ops.object.mode_set(mode = 'EDIT') 49 | bpy.ops.mesh.select_all(action = 'SELECT') 50 | bpy.ops.mesh.flip_normals() 51 | bpy.context.view_layer.update() 52 | bpy.ops.object.mode_set(mode = 'OBJECT') 53 | 54 | #scale the object 55 | if scale_modifier != 1: 56 | bpy.ops.transform.resize(value = (scale_modifier, scale_modifier, scale_modifier)) 57 | bpy.ops.object.transform_apply(location = use_world_origin, rotation = True, scale = True) 58 | 59 | #grab object mesh, and convert to bmesh 60 | mesh = bpy.context.object.data 61 | bm = bmesh.new() 62 | bm.from_mesh(mesh) 63 | 64 | #get uv active layout, if there is one 65 | uv_layer = bm.loops.layers.uv.active 66 | use_uv_layer = True if uv_layer else False 67 | 68 | #get vertex colors, if there are any 69 | vert_colors = bm.loops.layers.color.active 70 | use_vert_colors = True if vert_colors else False 71 | 72 | #iterate through the faces of the mesh and grab data for each point 73 | output_data = [] 74 | for face in bm.faces: 75 | for loop in face.loops: 76 | point = {} 77 | point["vertices"] = [round(v, 4) for v in loop.vert.co] 78 | point["normals"] = [round(n, 4) for n in loop.vert.normal] 79 | if use_vert_colors: 80 | #colors = loop[vert_colors] 81 | point["colors"] = [int(round(c * 255)) for c in loop[vert_colors]] 82 | else: 83 | point["colors"] = [255, 255, 255] 84 | if use_uv_layer: 85 | #uvs = loop[uv_layer].uv 86 | point["uvs"] = [round(u, 4) for u in loop[uv_layer].uv] 87 | if flip_uvs: 88 | point["uvs"][1] = round(1 - loop[uv_layer].uv[1], 4) 89 | else: 90 | point["uvs"] = [0, 0] 91 | output_data.append(point) 92 | 93 | if output_type == 'vertex_buffer': 94 | #vertex buffer output 95 | output_list = [] 96 | for p in output_data: 97 | output_list.append(struct.pack("fff", p.get("vertices")[0], p.get("vertices")[1], p.get("vertices")[2])) 98 | output_list.append(struct.pack("fff", p.get("normals")[0], p.get("normals")[1], p.get("normals")[2])) 99 | output_list.append(struct.pack("BBBB", p.get("colors")[0], p.get("colors")[1], p.get("colors")[2], 255)) 100 | output_list.append(struct.pack("ff", p.get("uvs")[0], p.get("uvs")[1])) 101 | output = b"".join(output_list) 102 | 103 | else: 104 | #debug output to GML script 105 | output = "" 106 | count = 0; 107 | for p in output_data: 108 | if count % 3 == 0: 109 | output += "\t\t//triangle " + str(count // 3) + "\n" 110 | output += "\t\tvertex_position_3d(buf, " + str(p.get("vertices")[0]) + ", " + str(p.get("vertices")[1]) + ", " + str(p.get("vertices")[2]) + ");\n" 111 | output += "\t\tvertex_normal(buf, " + str(p.get("normals")[0]) + ", " + str(p.get("normals")[1]) + ", " + str(p.get("normals")[2]) + ");\n" 112 | if use_vert_colors: 113 | output += "\t\tvertex_color(buf, make_color_rgb(" + str(p.get("colors")[0]) + ", " + str(p.get("colors")[1]) + ", " + str(p.get("colors")[2]) + "), 1);\n" 114 | else: 115 | output += "\t\tvertex_color(buf, c_white, 1);\n" 116 | output += "\t\tvertex_texcoord(buf, " + str(p.get("uvs")[0]) + ", " + str(p.get("uvs")[1]) + ");\n" 117 | if (count + 1) % 3 == 0: 118 | output += "\n" 119 | count += 1 120 | #add header and footer to file 121 | header = "function load_model(format){\n\n\t/*\n\tuse the following format to load this model:\n\tvertex_format_begin();\n\t\tvertex_format_add_position_3d();\n\t\tvertex_format_add_normal();\n\t\tvertex_format_add_color();\n\t\tvertex_format_add_texcoord();\n\t vertex_format = vertex_format_end();\n\t*/\n\n" 122 | output = header + "\tvar buf = vertex_create_buffer();\n\tvertex_begin(buf, format);\n\n" + output 123 | output += "\tvertex_end(buf);\n\n\treturn buf;\n}" 124 | 125 | #delete object copy and bmesh, and reselect original object 126 | bm.free() 127 | bpy.ops.object.delete() 128 | original_object.select_set(state = True) 129 | bpy.context.view_layer.objects.active = original_object 130 | 131 | #output the data 132 | if output_type == 'vertex_buffer': 133 | f = open(filepath, 'wb') 134 | else: 135 | f = open(filepath, 'w', encoding='utf-8') 136 | f.write(output) 137 | f.close() 138 | 139 | return {'FINISHED'} 140 | 141 | # ExportHelper is a helper class, defines filename and 142 | # invoke() function which calls the file selector. 143 | from bpy_extras.io_utils import ExportHelper 144 | from bpy.props import StringProperty, BoolProperty, EnumProperty, FloatProperty 145 | from bpy.types import Operator 146 | 147 | def align_output_format(filepath, output_type): 148 | import os 149 | filename = os.path.basename(filepath) 150 | if not filename: 151 | return filepath 152 | 153 | stem, ext = os.path.splitext(filename) 154 | if stem.startswith('.') and not ext: 155 | stem, ext = '', stem 156 | 157 | desired_ext = '.buf' if output_type == 'vertex_buffer' else '.gml' 158 | ext_lower = ext.lower() 159 | if ext_lower not in ['.buf', '.gml']: 160 | return filepath + desired_ext 161 | elif ext_lower != desired_ext: 162 | filepath = filepath[:-len(ext)] # strip off ext 163 | return filepath + desired_ext 164 | else: 165 | return filepath 166 | 167 | def update_ext(self, context): 168 | # Update the filename in the file browser when the format changes 169 | sfile = context.space_data 170 | if not isinstance(sfile, bpy.types.SpaceFileBrowser): 171 | print('not in space file browser!') 172 | return 173 | if not sfile.active_operator: 174 | print('active operator error!') 175 | return 176 | #if sfile.active_operator.bl_idname != "export.gml": 177 | #print('wrong bl_idname!') 178 | #return 179 | 180 | sfile.params.filename = align_output_format( 181 | sfile.params.filename, 182 | self.output_type, 183 | ) 184 | print(sfile.params.filename) 185 | 186 | class ExportData(Operator, ExportHelper): 187 | """This appears in the tooltip of the operator and in the generated docs""" 188 | bl_idname = "export.gml" # important since its how bpy.ops.import_test.some_data is constructed 189 | bl_label = "Export" 190 | 191 | # ExportHelper mixin class uses this 192 | filename_ext = '' 193 | 194 | filter_glob: StringProperty( 195 | default="*.buf;*.gm;*.gml", 196 | options={'HIDDEN'}, 197 | maxlen=255, # Max internal buffer length, longer would be clamped. 198 | ) 199 | 200 | # List of operator properties, the attributes will be assigned 201 | # to the class instance from the operator settings before calling. 202 | use_world_origin: BoolProperty( 203 | name = "Use World Origin", 204 | description = "Applies the position of the model relative to the world origin before exporting", 205 | default = True, 206 | ) 207 | 208 | apply_modifiers: BoolProperty( 209 | name = "Apply Modifiers", 210 | description = "Apply modifiers to the mesh before exporting", 211 | default = True, 212 | ) 213 | 214 | flip_y: BoolProperty( 215 | name = "Flip On Y", 216 | description = "Flips the mesh on the Y axis", 217 | default = True, 218 | ) 219 | 220 | flip_uvs: BoolProperty( 221 | name = "Flip UV Coordinates", 222 | description = "Flips the UV coordinates on the Y axis", 223 | default = True, 224 | ) 225 | 226 | scale_modifier: FloatProperty( 227 | name = "Scale", 228 | description = "Adjusts the scale of the model", 229 | default = 1.0, 230 | min = 0.01, 231 | soft_min = 0.01, 232 | ) 233 | 234 | output_type: EnumProperty( 235 | name = "Output Type", 236 | description="The type of data to output", 237 | items = ( 238 | ('vertex_buffer', "Vertex Buffer", "A vertex buffer that can be loaded into GameMaker at runtime"), 239 | ('debug', "GML Script (debug)", "A human-readable script that can be used to import and debug"), 240 | ), 241 | default = 'vertex_buffer', 242 | update = update_ext, 243 | ) 244 | 245 | def check(self, _context): 246 | #Force the filename to update appropriately 247 | old_filepath = self.filepath 248 | self.filepath = align_output_format( 249 | self.filepath, 250 | self.output_type, 251 | ) 252 | return self.filepath != old_filepath 253 | 254 | def execute(self, context): 255 | return export_gm3d(context, self.filepath, self.use_world_origin, self.apply_modifiers, self.flip_y, self.flip_uvs, self.scale_modifier, self.output_type) 256 | 257 | # Only needed if you want to add into a dynamic menu 258 | def menu_func_export(self, context): 259 | self.layout.operator(ExportData.bl_idname, text="Export GameMaker 3D") 260 | 261 | def register(): 262 | bpy.utils.register_class(ExportData) 263 | bpy.types.TOPBAR_MT_file_export.append(menu_func_export) 264 | 265 | def unregister(): 266 | bpy.utils.unregister_class(ExportData) 267 | bpy.types.TOPBAR_MT_file_export.remove(menu_func_export) 268 | 269 | if __name__ == "__main__": 270 | register() 271 | 272 | # test call 273 | bpy.ops.export.gml('INVOKE_DEFAULT') 274 | --------------------------------------------------------------------------------