@scaffscript/create-project 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/README.md +45 -0
  2. package/dist/cli.js +225 -0
  3. package/package.json +35 -0
  4. package/src/index.ts +42 -0
  5. package/templates/bun/bun.lock +29 -0
  6. package/templates/bun/package.json +21 -0
  7. package/templates/bun/scaff.config.ts +11 -0
  8. package/templates/bun/tsconfig.json +33 -0
  9. package/templates/gamemaker/.gitattributes +8 -0
  10. package/templates/gamemaker/BLANK.resource_order +4 -0
  11. package/templates/gamemaker/BLANK.yyp +33 -0
  12. package/templates/gamemaker/options/android/options_android.yy +85 -0
  13. package/templates/gamemaker/options/html5/options_html5.yy +35 -0
  14. package/templates/gamemaker/options/ios/options_ios.yy +49 -0
  15. package/templates/gamemaker/options/linux/options_linux.yy +26 -0
  16. package/templates/gamemaker/options/mac/options_mac.yy +38 -0
  17. package/templates/gamemaker/options/main/options_main.yy +29 -0
  18. package/templates/gamemaker/options/operagx/options_operagx.yy +30 -0
  19. package/templates/gamemaker/options/reddit/options_reddit.yy +15 -0
  20. package/templates/gamemaker/options/tvos/options_tvos.yy +31 -0
  21. package/templates/gamemaker/options/windows/options_windows.yy +37 -0
  22. package/templates/gamemaker/rooms/Room1/Room1.yy +53 -0
  23. package/templates/gitignore +95 -0
  24. package/templates/npm/package-lock.json +36 -0
  25. package/templates/npm/package.json +16 -0
  26. package/templates/npm/scaff.config.cjs +9 -0
  27. package/templates/npm/src/index.ss +4 -0
  28. package/templates/pnpm/package.json +16 -0
  29. package/templates/pnpm/pnpm-lock.yaml +34 -0
  30. package/templates/pnpm/scaff.config.cjs +9 -0
  31. package/templates/pnpm/src/index.ss +4 -0
  32. package/templates/src/index.ss +4 -0
package/README.md ADDED
@@ -0,0 +1,45 @@
1
+ # @scaffscript/create-project
2
+
3
+ A CLI tool for initializing a new ScaffScript project.
4
+
5
+ ## Usage
6
+
7
+ ```bash
8
+ bun create @scaffscript/project
9
+
10
+ npm create @scaffscript/project
11
+
12
+ pnpm create @scaffscript/project
13
+ ```
14
+
15
+ ## Installation (Development)
16
+
17
+ 1. Make sure you have [Bun](https://bun.sh) installed.
18
+ 2. Clone this repository.
19
+ 3. Install dependencies:
20
+
21
+ ```bash
22
+ bun install
23
+ ```
24
+
25
+ 4. Build the project:
26
+
27
+ ```bash
28
+ bun run build
29
+ ```
30
+
31
+ 5. Link the project:
32
+
33
+ ```bash
34
+ bun link
35
+ ```
36
+
37
+ 6. Use the CLI tool as described in the [Usage](#usage) section.
38
+
39
+ ## License
40
+
41
+ MIT License
42
+
43
+ ## Contributing
44
+
45
+ Contributions are welcome! Please open an issue or submit a pull request.
package/dist/cli.js ADDED
@@ -0,0 +1,225 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire } from "node:module";
3
+ var __require = /* @__PURE__ */ createRequire(import.meta.url);
4
+
5
+ // src/utils.ts
6
+ var log = {
7
+ debug: (msg) => console.log("\x1B[90m[DEBUG]\x1B[0m ", msg),
8
+ info: (msg) => console.log("\x1B[36m[INFO]\x1B[0m ", msg),
9
+ warn: (msg) => console.log("\x1B[33m[WARN]\x1B[0m ", msg),
10
+ error: (msg) => console.log("\x1B[31m[ERROR]\x1B[0m ", msg)
11
+ };
12
+ var readline = await import("readline/promises");
13
+ async function getInput(message) {
14
+ const { stdin, stdout } = await import("process");
15
+ const rl = readline.createInterface({
16
+ input: stdin,
17
+ output: stdout
18
+ });
19
+ const answer = await rl.question(`\x1B[35m[INPUT]\x1B[0m ${message}\x1B[34m`);
20
+ rl.close();
21
+ return answer.trim();
22
+ }
23
+
24
+ // src/args.ts
25
+ async function parseArgs(...args) {
26
+ let targetPath = args[1];
27
+ const options = [...args];
28
+ options.shift();
29
+ let ideVersion = options.find((opt) => opt.startsWith("--ide"))?.split("=")[1] ?? null;
30
+ let template = options.find((opt) => opt.startsWith("--template") || opt.startsWith("-t"))?.split("=")[1] ?? "npm";
31
+ let projectName = options.find((opt) => opt.startsWith("--name") || opt.startsWith("-n"))?.split("=")[1] ?? targetPath?.split("/").pop() ?? null;
32
+ let initGit = options.includes("--git");
33
+ if (!targetPath) {
34
+ targetPath = await getInput("Project name/path: ");
35
+ if (!targetPath) {
36
+ log.error("No project name/path specified. Please specify a valid project name/path. Aborting...");
37
+ return null;
38
+ }
39
+ template = await getTemplate();
40
+ if (!template)
41
+ return null;
42
+ const newProject = await getInput("Create new GameMaker project? \x1B[90m(y/N)\x1B[0m -> ");
43
+ if (newProject.toLowerCase() === "y") {
44
+ const lastName = targetPath.split("/").pop();
45
+ projectName = await getProjectName(lastName);
46
+ if (!projectName || projectName === "")
47
+ projectName = lastName;
48
+ ideVersion = await getIDEVersion();
49
+ if (!ideVersion)
50
+ return null;
51
+ }
52
+ const git = await getInput("Initialize a new Git repository? \x1B[90m(y/N)\x1B[0m -> ");
53
+ if (git.toLowerCase() === "y")
54
+ initGit = true;
55
+ return {
56
+ targetPath,
57
+ ideVersion,
58
+ template,
59
+ initGit,
60
+ projectName
61
+ };
62
+ }
63
+ if (!["bun", "pnpm", "npm"].includes(template)) {
64
+ template = await getTemplate();
65
+ if (!template)
66
+ return null;
67
+ }
68
+ if (!ideVersion && (options.includes("--new") || options.includes("-n"))) {
69
+ ideVersion = await getIDEVersion();
70
+ if (!ideVersion)
71
+ return null;
72
+ }
73
+ if (!projectName && (options.includes("--new") || options.includes("-n"))) {
74
+ projectName = await getProjectName(targetPath.split("/").pop());
75
+ if (!projectName)
76
+ return null;
77
+ }
78
+ if (targetPath && targetPath.startsWith('"') && targetPath.endsWith('"'))
79
+ targetPath = targetPath.slice(1, -1);
80
+ if (projectName && projectName.startsWith('"') && projectName.endsWith('"'))
81
+ projectName = projectName.slice(1, -1);
82
+ return {
83
+ targetPath,
84
+ ideVersion,
85
+ template,
86
+ initGit,
87
+ projectName
88
+ };
89
+ }
90
+ async function getTemplate() {
91
+ const res = (await getInput("Package manager \x1B[90m(bun/pnpm/NPM)\x1B[0m: ")).toLowerCase();
92
+ if (!["bun", "pnpm", "npm", ""].includes(res)) {
93
+ log.error(`Invalid template: \x1B[33m${res}\x1B[0m. Please specify a valid template (\x1B[32mbun\x1B[0m, \x1B[32mpnpm\x1B[0m, or \x1B[32mnpm\x1B[0m). Aborting...`);
94
+ return null;
95
+ }
96
+ return res !== "" ? res : "npm";
97
+ }
98
+ async function getProjectName(defaultName) {
99
+ return await getInput(`GameMaker project name \x1B[90m(${defaultName})\x1B[0m: `);
100
+ }
101
+ async function getIDEVersion() {
102
+ const res = await getInput("GameMaker IDE version: ");
103
+ if (!res) {
104
+ log.error("No IDE version specified. Please specify a valid IDE version (\x1B[32m--ide=<version>\x1B[0m). Aborting...");
105
+ return null;
106
+ }
107
+ return res;
108
+ }
109
+
110
+ // src/fs.ts
111
+ import { cp, mkdir, access, rename, readFile, writeFile } from "fs/promises";
112
+ import { dirname, join, resolve } from "path";
113
+ import { fileURLToPath } from "url";
114
+ var __filename2 = fileURLToPath(import.meta.url);
115
+ var __dirname2 = dirname(__filename2);
116
+ async function fileExists(path) {
117
+ return access(path).then(() => true).catch(() => false);
118
+ }
119
+ async function copyTemplate(source, target) {
120
+ try {
121
+ const sourceDir = join(__dirname2, "../templates", source);
122
+ const targetDir = resolve(target);
123
+ await cp(sourceDir, targetDir, {
124
+ recursive: true,
125
+ force: true,
126
+ errorOnExist: false
127
+ });
128
+ const targetSrcDir = join(targetDir, "src");
129
+ await cp(join(__dirname2, "../templates/src"), targetSrcDir, {
130
+ recursive: true,
131
+ force: true,
132
+ errorOnExist: false
133
+ });
134
+ const gitIgnorePath = join(__dirname2, "../templates/gitignore");
135
+ if (!await fileExists(join(targetDir, ".gitignore"))) {
136
+ await cp(gitIgnorePath, join(targetDir, "gitignore"));
137
+ await rename(join(targetDir, "gitignore"), join(targetDir, ".gitignore"));
138
+ } else {
139
+ log.warn(`\x1B[34m.gitignore\x1B[0m file already exists in the target directory. Please add \x1B[32mnode_modules\x1B[0m and \x1B[32m.out\x1B[0m to the existing \x1B[34m.gitignore\x1B[0m file.`);
140
+ }
141
+ return true;
142
+ } catch (error) {
143
+ log.error(`Failed to copy template: ${error}`);
144
+ return false;
145
+ }
146
+ }
147
+ async function copyGameMakerProject(target, projectName, ideVersion) {
148
+ try {
149
+ const sourceDir = join(__dirname2, "../templates", "gamemaker");
150
+ const targetDir = resolve(target);
151
+ await cp(sourceDir, targetDir, {
152
+ recursive: true,
153
+ force: true,
154
+ errorOnExist: false
155
+ });
156
+ await rename(`${targetDir}/BLANK.yyp`, `${targetDir}/${projectName}.yyp`);
157
+ await rename(`${targetDir}/BLANK.resource_order`, `${targetDir}/${projectName}.resource_order`);
158
+ const yypContent = await readFile(`${targetDir}/${projectName}.yyp`, "utf8");
159
+ const newYypContent = yypContent.replace(/{PROJECT_NAME}/g, projectName).replace(/{IDE_VERSION}/g, ideVersion);
160
+ await writeFile(`${targetDir}/${projectName}.yyp`, newYypContent);
161
+ const room1Content = await readFile(`${targetDir}/rooms/Room1/Room1.yy`, "utf8");
162
+ const newRoom1Content = room1Content.replace(/{PROJECT_NAME}/g, projectName);
163
+ await writeFile(`${targetDir}/rooms/Room1/Room1.yy`, newRoom1Content);
164
+ return true;
165
+ } catch (error) {
166
+ log.error(`Failed to copy GameMaker project: ${error}`);
167
+ return false;
168
+ }
169
+ }
170
+
171
+ // src/init.ts
172
+ import { spawn } from "child_process";
173
+ async function installDependencies(template, targetDir) {
174
+ try {
175
+ spawn(template, ["install"], {
176
+ cwd: targetDir,
177
+ stdio: "inherit",
178
+ shell: true
179
+ });
180
+ return true;
181
+ } catch (error) {
182
+ log.error(`Failed to install dependencies: ${error}`);
183
+ return false;
184
+ }
185
+ }
186
+ async function initializeGit(targetDir) {
187
+ try {
188
+ spawn("git", ["init"], {
189
+ cwd: targetDir,
190
+ stdio: "inherit",
191
+ shell: true
192
+ });
193
+ return true;
194
+ } catch (error) {
195
+ log.error(`Failed to initialize Git repository: ${error}`);
196
+ return false;
197
+ }
198
+ }
199
+
200
+ // src/index.ts
201
+ async function main() {
202
+ log.info("Initializing ScaffScript project...");
203
+ const args = process.argv.slice(2);
204
+ const input = await parseArgs(...args);
205
+ if (!input)
206
+ return null;
207
+ const copied = await copyTemplate(`../templates/${input.template}`, input.targetPath);
208
+ const installed = await installDependencies(input.template, input.targetPath);
209
+ if (input.initGit) {
210
+ const initGit = await initializeGit(input.targetPath);
211
+ if (!initGit)
212
+ return null;
213
+ }
214
+ if (input.projectName && input.ideVersion) {
215
+ await copyGameMakerProject(input.targetPath, input.projectName, input.ideVersion);
216
+ }
217
+ if (!copied || !installed)
218
+ return null;
219
+ return input;
220
+ }
221
+ var input = await main();
222
+ if (!input)
223
+ process.exit(1);
224
+ log.info("ScaffScript project initialized successfully.");
225
+ log.info(`You can now use \x1B[32m${input.template} run <script> -- <command> [args]\x1B[0m. Use \x1B[32m${input.template} run help\x1B[0m for more information.`);
package/package.json ADDED
@@ -0,0 +1,35 @@
1
+ {
2
+ "name": "@scaffscript/create-project",
3
+ "description": "ScaffScript project initializer",
4
+ "version": "0.1.2",
5
+ "main": "src/index.ts",
6
+ "module": "src/index.ts",
7
+ "type": "module",
8
+ "author": "Undervolta",
9
+ "license": "MIT",
10
+ "keywords": [
11
+ "scaffscript",
12
+ "gamemaker",
13
+ "gml",
14
+ "scaff",
15
+ "script",
16
+ "superset",
17
+ "module"
18
+ ],
19
+ "files": [
20
+ "dist",
21
+ "templates"
22
+ ],
23
+ "devDependencies": {
24
+ "@types/bun": "latest"
25
+ },
26
+ "bin": {
27
+ "create-scaff": "./dist/cli.js"
28
+ },
29
+ "scripts": {
30
+ "build": "bun build src/index.ts --outfile dist/cli.js --target node"
31
+ },
32
+ "peerDependencies": {
33
+ "typescript": "^5"
34
+ }
35
+ }
package/src/index.ts ADDED
@@ -0,0 +1,42 @@
1
+ #!/usr/bin/env node
2
+ import { log } from "./utils";
3
+ import { parseArgs } from "./args";
4
+ import * as fs from "./fs";
5
+ import { installDependencies, initializeGit } from "./init";
6
+
7
+ async function main() {
8
+ log.info("Initializing ScaffScript project...");
9
+
10
+ const args = process.argv.slice(2);
11
+ const input = await parseArgs(...args);
12
+
13
+ if (!input)
14
+ return null;
15
+
16
+ const copied = await fs.copyTemplate(`../templates/${input.template}`, input.targetPath);
17
+ const installed = await installDependencies(input.template, input.targetPath);
18
+
19
+ if (input.initGit) {
20
+ const initGit = await initializeGit(input.targetPath);
21
+
22
+ if (!initGit)
23
+ return null;
24
+ }
25
+
26
+ if (input.projectName && input.ideVersion) {
27
+ await fs.copyGameMakerProject(input.targetPath, input.projectName, input.ideVersion);
28
+ }
29
+
30
+ if (!copied || !installed)
31
+ return null;
32
+
33
+ return input;
34
+ }
35
+
36
+ const input = await main();
37
+
38
+ if (!input)
39
+ process.exit(1);
40
+
41
+ log.info("ScaffScript project initialized successfully.");
42
+ log.info(`You can now use \x1b[32m${input.template} run <script> -- <command> [args]\x1b[0m. Use \x1b[32m${input.template} run help\x1b[0m for more information.`);
@@ -0,0 +1,29 @@
1
+ {
2
+ "lockfileVersion": 1,
3
+ "configVersion": 1,
4
+ "workspaces": {
5
+ "": {
6
+ "name": "bun",
7
+ "devDependencies": {
8
+ "@scaffscript/core": "^0.1.5",
9
+ "@types/bun": "latest",
10
+ },
11
+ "peerDependencies": {
12
+ "typescript": "^5",
13
+ },
14
+ },
15
+ },
16
+ "packages": {
17
+ "@scaffscript/core": ["@scaffscript/core@0.1.5", "", { "peerDependencies": { "typescript": "^5" }, "bin": { "scaff": "dist/index.cjs" } }, "sha512-6v7qYkVQzDTh6MBmbT+A2PmsJjtUDETIzF7nAHvfR4E75uSLsdZtuMwrPLEVhV/1pnV9DuXCSmcYhnef2H2U6A=="],
18
+
19
+ "@types/bun": ["@types/bun@1.3.10", "", { "dependencies": { "bun-types": "1.3.10" } }, "sha512-0+rlrUrOrTSskibryHbvQkDOWRJwJZqZlxrUs1u4oOoTln8+WIXBPmAuCF35SWB2z4Zl3E84Nl/D0P7803nigQ=="],
20
+
21
+ "@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="],
22
+
23
+ "bun-types": ["bun-types@1.3.10", "", { "dependencies": { "@types/node": "*" } }, "sha512-tcpfCCl6XWo6nCVnpcVrxQ+9AYN1iqMIzgrSKYMB/fjLtV2eyAVEg7AxQJuCq/26R6HpKWykQXuSOq/21RYcbg=="],
24
+
25
+ "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="],
26
+
27
+ "undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="],
28
+ }
29
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "name": "scaffscript-compiler",
3
+ "version": "0.1.2",
4
+ "description": "A ScaffScript compiler",
5
+ "license": "MIT",
6
+ "author": "Undervolta",
7
+ "type": "module",
8
+ "private": true,
9
+ "devDependencies": {
10
+ "@scaffscript/core": "^0.1.5",
11
+ "@types/bun": "latest"
12
+ },
13
+ "scripts": {
14
+ "generate": "scaff gen ./src to ./my-game.yyp",
15
+ "help": "scaff help",
16
+ "scaff": "scaff"
17
+ },
18
+ "peerDependencies": {
19
+ "typescript": "^5"
20
+ }
21
+ }
@@ -0,0 +1,11 @@
1
+ import type { ScaffConfig } from "@scaffscript/types";
2
+
3
+ export default {
4
+ clearOutputDir: false,
5
+ noIntegration: true,
6
+ production: false,
7
+ tabType: "1t",
8
+ targetPlatform: "all",
9
+ useGmAssetPath: true
10
+ // add more as needed
11
+ } satisfies Partial<ScaffConfig>;
@@ -0,0 +1,33 @@
1
+ {
2
+ "compilerOptions": {
3
+ // Environment setup & latest features
4
+ "lib": ["ESNext"],
5
+ "target": "ESNext",
6
+ "module": "Preserve",
7
+ "moduleDetection": "force",
8
+ "jsx": "react-jsx",
9
+ "allowJs": true,
10
+
11
+ // Bundler mode
12
+ "moduleResolution": "bundler",
13
+ "allowImportingTsExtensions": true,
14
+ "verbatimModuleSyntax": true,
15
+ "noEmit": true,
16
+
17
+ // Best practices
18
+ "strict": true,
19
+ "skipLibCheck": true,
20
+ "noFallthroughCasesInSwitch": true,
21
+ "noUncheckedIndexedAccess": true,
22
+ "noImplicitOverride": true,
23
+
24
+ // Some stricter flags (disabled by default)
25
+ "noUnusedLocals": false,
26
+ "noUnusedParameters": false,
27
+ "noPropertyAccessFromIndexSignature": false,
28
+
29
+ "paths": {
30
+ "@scaffscript/types": ["./node_modules/@scaffscript/core/dist/index.d.ts"]
31
+ }
32
+ }
33
+ }
@@ -0,0 +1,8 @@
1
+ # Ignore .yy files for language statistics
2
+ *.yy linguist-generated=true
3
+
4
+ # force LF for metadata files for merge simplicity
5
+ *.gml text eol=lf
6
+ *.yy text eol=lf
7
+ *.yyp text eol=lf
8
+ *.json text eol=lf
@@ -0,0 +1,4 @@
1
+ {
2
+ "FolderOrderSettings":[],
3
+ "ResourceOrderSettings":[],
4
+ }
@@ -0,0 +1,33 @@
1
+ {
2
+ "$GMProject":"v1",
3
+ "%Name":"{PROJECT_NAME}",
4
+ "AudioGroups":[
5
+ {"$GMAudioGroup":"v1","%Name":"audiogroup_default","exportDir":"","name":"audiogroup_default","resourceType":"GMAudioGroup","resourceVersion":"2.0","targets":-1,},
6
+ ],
7
+ "configs":{
8
+ "children":[],
9
+ "name":"Default",
10
+ },
11
+ "defaultScriptType":1,
12
+ "Folders":[],
13
+ "ForcedPrefabProjectReferences":[],
14
+ "IncludedFiles":[],
15
+ "isEcma":false,
16
+ "LibraryEmitters":[],
17
+ "MetaData":{
18
+ "IDEVersion":"{IDE_VERSION}",
19
+ },
20
+ "name":"{PROJECT_NAME}",
21
+ "resources":[
22
+ {"id":{"name":"Room1","path":"rooms/Room1/Room1.yy",},},
23
+ ],
24
+ "resourceType":"GMProject",
25
+ "resourceVersion":"2.0",
26
+ "RoomOrderNodes":[
27
+ {"roomId":{"name":"Room1","path":"rooms/Room1/Room1.yy",},},
28
+ ],
29
+ "templateType":"game",
30
+ "TextureGroups":[
31
+ {"$GMTextureGroup":"","%Name":"Default","autocrop":true,"border":2,"compressFormat":"bz2","customOptions":"","directory":"","groupParent":null,"isScaled":true,"loadType":"default","mipsToGenerate":0,"name":"Default","resourceType":"GMTextureGroup","resourceVersion":"2.0","targets":-1,},
32
+ ],
33
+ }
@@ -0,0 +1,85 @@
1
+ {
2
+ "$GMAndroidOptions":"v1",
3
+ "%Name":"Android",
4
+ "name":"Android",
5
+ "option_android_application_tag_inject":"",
6
+ "option_android_arch_arm64":true,
7
+ "option_android_arch_armv7":false,
8
+ "option_android_arch_x86_64":false,
9
+ "option_android_attribute_allow_backup":false,
10
+ "option_android_build_tools":"",
11
+ "option_android_compile_sdk":"",
12
+ "option_android_device_support":0,
13
+ "option_android_display_layout":"LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT",
14
+ "option_android_display_name":"BLANK",
15
+ "option_android_edge_to_edge_display":false,
16
+ "option_android_facebook_app_display_name":"",
17
+ "option_android_facebook_id":"",
18
+ "option_android_gamepad_support":true,
19
+ "option_android_google_apk_expansion":false,
20
+ "option_android_google_cloud_saving":false,
21
+ "option_android_google_dynamic_asset_delivery":false,
22
+ "option_android_google_licensing_public_key":"",
23
+ "option_android_google_services_app_id":"",
24
+ "option_android_gradle_plugin_version":"8.8.0",
25
+ "option_android_gradle_version":"8.10.2",
26
+ "option_android_icon_adaptivebg_hdpi":"${base_options_dir}/android/icons_adaptivebg/hdpi.png",
27
+ "option_android_icon_adaptivebg_ldpi":"${base_options_dir}/android/icons_adaptivebg/ldpi.png",
28
+ "option_android_icon_adaptivebg_mdpi":"${base_options_dir}/android/icons_adaptivebg/mdpi.png",
29
+ "option_android_icon_adaptivebg_xhdpi":"${base_options_dir}/android/icons_adaptivebg/xhdpi.png",
30
+ "option_android_icon_adaptivebg_xxhdpi":"${base_options_dir}/android/icons_adaptivebg/xxhdpi.png",
31
+ "option_android_icon_adaptivebg_xxxhdpi":"${base_options_dir}/android/icons_adaptivebg/xxxhdpi.png",
32
+ "option_android_icon_adaptive_generate":false,
33
+ "option_android_icon_adaptive_hdpi":"${base_options_dir}/android/icons_adaptive/hdpi.png",
34
+ "option_android_icon_adaptive_ldpi":"${base_options_dir}/android/icons_adaptive/ldpi.png",
35
+ "option_android_icon_adaptive_mdpi":"${base_options_dir}/android/icons_adaptive/mdpi.png",
36
+ "option_android_icon_adaptive_xhdpi":"${base_options_dir}/android/icons_adaptive/xhdpi.png",
37
+ "option_android_icon_adaptive_xxhdpi":"${base_options_dir}/android/icons_adaptive/xxhdpi.png",
38
+ "option_android_icon_adaptive_xxxhdpi":"${base_options_dir}/android/icons_adaptive/xxxhdpi.png",
39
+ "option_android_icon_hdpi":"${base_options_dir}/android/icons/hdpi.png",
40
+ "option_android_icon_ldpi":"${base_options_dir}/android/icons/ldpi.png",
41
+ "option_android_icon_mdpi":"${base_options_dir}/android/icons/mdpi.png",
42
+ "option_android_icon_xhdpi":"${base_options_dir}/android/icons/xhdpi.png",
43
+ "option_android_icon_xxhdpi":"${base_options_dir}/android/icons/xxhdpi.png",
44
+ "option_android_icon_xxxhdpi":"${base_options_dir}/android/icons/xxxhdpi.png",
45
+ "option_android_install_location":0,
46
+ "option_android_interpolate_pixels":true,
47
+ "option_android_launchscreen_fill":0,
48
+ "option_android_lint":false,
49
+ "option_android_logcat":"yoyo:V DEBUG:V AndroidRuntime:V",
50
+ "option_android_minimum_sdk":"",
51
+ "option_android_orient_landscape":true,
52
+ "option_android_orient_landscape_flipped":true,
53
+ "option_android_orient_portrait":true,
54
+ "option_android_orient_portrait_flipped":true,
55
+ "option_android_package_company":"company",
56
+ "option_android_package_domain":"com",
57
+ "option_android_package_product":"game",
58
+ "option_android_permission_bluetooth":true,
59
+ "option_android_permission_internet":true,
60
+ "option_android_permission_network_state":false,
61
+ "option_android_permission_read_phone_state":false,
62
+ "option_android_permission_record_audio":false,
63
+ "option_android_permission_write_external_storage":false,
64
+ "option_android_proguard_minifying":false,
65
+ "option_android_proguard_shrinking":false,
66
+ "option_android_scale":0,
67
+ "option_android_screen_depth":0,
68
+ "option_android_sleep_margin":4,
69
+ "option_android_splashscreen_background_colour":255,
70
+ "option_android_splash_screens_landscape":"${base_options_dir}/android/splash/landscape.png",
71
+ "option_android_splash_screens_portrait":"${base_options_dir}/android/splash/portrait.png",
72
+ "option_android_splash_time":0,
73
+ "option_android_support_lib":"",
74
+ "option_android_sync_amazon":false,
75
+ "option_android_target_sdk":"",
76
+ "option_android_texture_page":"2048x2048",
77
+ "option_android_tools_from_version":false,
78
+ "option_android_tv_banner":"${base_options_dir}/android/tv_banner.png",
79
+ "option_android_tv_isgame":true,
80
+ "option_android_tv_supports_leanback":true,
81
+ "option_android_use_facebook":false,
82
+ "option_android_version":"1.0.0.0",
83
+ "resourceType":"GMAndroidOptions",
84
+ "resourceVersion":"2.0",
85
+ }
@@ -0,0 +1,35 @@
1
+ {
2
+ "$GMHtml5Options":"",
3
+ "%Name":"HTML5",
4
+ "name":"HTML5",
5
+ "option_html5_allow_fullscreen":true,
6
+ "option_html5_browser_title":"BLANK",
7
+ "option_html5_centregame":false,
8
+ "option_html5_display_cursor":true,
9
+ "option_html5_facebook_app_display_name":"",
10
+ "option_html5_facebook_id":"",
11
+ "option_html5_flurry_enable":false,
12
+ "option_html5_flurry_id":"",
13
+ "option_html5_foldername":"html5game",
14
+ "option_html5_google_analytics_enable":false,
15
+ "option_html5_google_tracking_id":"",
16
+ "option_html5_icon":"${base_options_dir}/html5/fav.ico",
17
+ "option_html5_index":"",
18
+ "option_html5_interpolate_pixels":true,
19
+ "option_html5_jsprepend":"",
20
+ "option_html5_loadingbar":"",
21
+ "option_html5_localrunalert":true,
22
+ "option_html5_outputdebugtoconsole":true,
23
+ "option_html5_outputname":"index.html",
24
+ "option_html5_scale":0,
25
+ "option_html5_splash_png":"${base_options_dir}/html5/splash.png",
26
+ "option_html5_texture_page":"2048x2048",
27
+ "option_html5_usebuiltinfont":true,
28
+ "option_html5_usebuiltinparticles":true,
29
+ "option_html5_usesplash":false,
30
+ "option_html5_use_facebook":false,
31
+ "option_html5_version":"1.0.0.0",
32
+ "option_html5_webgl":2,
33
+ "resourceType":"GMHtml5Options",
34
+ "resourceVersion":"2.0",
35
+ }
@@ -0,0 +1,49 @@
1
+ {
2
+ "$GMiOSOptions":"v1",
3
+ "%Name":"iOS",
4
+ "name":"iOS",
5
+ "option_ios_build_number":0,
6
+ "option_ios_bundle_name":"com.company.game",
7
+ "option_ios_defer_home_indicator":false,
8
+ "option_ios_devices":2,
9
+ "option_ios_display_name":"BLANK",
10
+ "option_ios_enable_broadcast":false,
11
+ "option_ios_half_ipad1_textures":false,
12
+ "option_ios_icon_ipad_app_152":"${base_options_dir}/ios/icons/app/ipad_152.png",
13
+ "option_ios_icon_ipad_app_76":"${base_options_dir}/ios/icons/app/ipad_76.png",
14
+ "option_ios_icon_ipad_notification_20":"${base_options_dir}/ios/icons/notification/ipad_20.png",
15
+ "option_ios_icon_ipad_notification_40":"${base_options_dir}/ios/icons/notification/ipad_40.png",
16
+ "option_ios_icon_ipad_pro_app_167":"${base_options_dir}/ios/icons/app/ipad_pro_167.png",
17
+ "option_ios_icon_ipad_settings_29":"${base_options_dir}/ios/icons/settings/ipad_29.png",
18
+ "option_ios_icon_ipad_settings_58":"${base_options_dir}/ios/icons/settings/ipad_58.png",
19
+ "option_ios_icon_ipad_spotlight_40":"${base_options_dir}/ios/icons/spotlight/ipad_40.png",
20
+ "option_ios_icon_ipad_spotlight_80":"${base_options_dir}/ios/icons/spotlight/ipad_80.png",
21
+ "option_ios_icon_iphone_app_120":"${base_options_dir}/ios/icons/app/iphone_120.png",
22
+ "option_ios_icon_iphone_app_180":"${base_options_dir}/ios/icons/app/iphone_180.png",
23
+ "option_ios_icon_iphone_notification_40":"${base_options_dir}/ios/icons/notification/iphone_40.png",
24
+ "option_ios_icon_iphone_notification_60":"${base_options_dir}/ios/icons/notification/iphone_60.png",
25
+ "option_ios_icon_iphone_settings_58":"${base_options_dir}/ios/icons/settings/iphone_58.png",
26
+ "option_ios_icon_iphone_settings_87":"${base_options_dir}/ios/icons/settings/iphone_87.png",
27
+ "option_ios_icon_iphone_spotlight_120":"${base_options_dir}/ios/icons/spotlight/iphone_120.png",
28
+ "option_ios_icon_iphone_spotlight_80":"${base_options_dir}/ios/icons/spotlight/iphone_80.png",
29
+ "option_ios_icon_itunes_artwork_1024":"${base_options_dir}/ios/icons/itunes/itunes_1024.png",
30
+ "option_ios_interpolate_pixels":true,
31
+ "option_ios_launchscreen_fill":0,
32
+ "option_ios_launchscreen_image":"${base_options_dir}/ios/splash/launchscreen.png",
33
+ "option_ios_launchscreen_image_landscape":"${base_options_dir}/ios/splash/launchscreen-landscape.png",
34
+ "option_ios_min_version":"10.0",
35
+ "option_ios_orientation_landscape":true,
36
+ "option_ios_orientation_landscape_flipped":true,
37
+ "option_ios_orientation_portrait":true,
38
+ "option_ios_orientation_portrait_flipped":true,
39
+ "option_ios_output_dir":"~/gamemakerstudio2",
40
+ "option_ios_podfile_lock_path":"${options_dir}/ios/Podfile.lock",
41
+ "option_ios_podfile_path":"${options_dir}/ios/Podfile",
42
+ "option_ios_scale":0,
43
+ "option_ios_splashscreen_background_colour":255,
44
+ "option_ios_team_id":"",
45
+ "option_ios_texture_page":"2048x2048",
46
+ "option_ios_version":"1.0.0.0",
47
+ "resourceType":"GMiOSOptions",
48
+ "resourceVersion":"2.0",
49
+ }
@@ -0,0 +1,26 @@
1
+ {
2
+ "$GMLinuxOptions":"",
3
+ "%Name":"Linux",
4
+ "name":"Linux",
5
+ "option_linux_allow_fullscreen":false,
6
+ "option_linux_disable_sandbox":false,
7
+ "option_linux_display_cursor":true,
8
+ "option_linux_display_name":"BLANK",
9
+ "option_linux_display_splash":false,
10
+ "option_linux_enable_steam":false,
11
+ "option_linux_homepage":"http://www.yoyogames.com",
12
+ "option_linux_icon":"${base_options_dir}/linux/icons/64.png",
13
+ "option_linux_interpolate_pixels":true,
14
+ "option_linux_long_desc":"",
15
+ "option_linux_maintainer_email":"",
16
+ "option_linux_resize_window":false,
17
+ "option_linux_scale":0,
18
+ "option_linux_short_desc":"",
19
+ "option_linux_splash_screen":"${base_options_dir}/linux/splash/splash.png",
20
+ "option_linux_start_fullscreen":false,
21
+ "option_linux_sync":true,
22
+ "option_linux_texture_page":"2048x2048",
23
+ "option_linux_version":"1.0.0.0",
24
+ "resourceType":"GMLinuxOptions",
25
+ "resourceVersion":"2.0",
26
+ }
@@ -0,0 +1,38 @@
1
+ {
2
+ "$GMMacOptions":"",
3
+ "%Name":"macOS",
4
+ "name":"macOS",
5
+ "option_mac_allow_fullscreen":false,
6
+ "option_mac_allow_incoming_network":false,
7
+ "option_mac_allow_outgoing_network":false,
8
+ "option_mac_apple_sign_in":false,
9
+ "option_mac_app_category":"Games",
10
+ "option_mac_app_id":"com.company.game",
11
+ "option_mac_arm64":true,
12
+ "option_mac_build_app_store":false,
13
+ "option_mac_build_number":0,
14
+ "option_mac_copyright":"",
15
+ "option_mac_disable_sandbox":false,
16
+ "option_mac_display_cursor":true,
17
+ "option_mac_display_name":"BLANK",
18
+ "option_mac_enable_retina":false,
19
+ "option_mac_enable_steam":false,
20
+ "option_mac_icon_png":"${base_options_dir}/mac/icons/1024.png",
21
+ "option_mac_installer_background_png":"${base_options_dir}/mac/splash/installer_background.png",
22
+ "option_mac_interpolate_pixels":true,
23
+ "option_mac_menu_dock":false,
24
+ "option_mac_min_version":"10.10",
25
+ "option_mac_output_dir":"~/gamemakerstudio2",
26
+ "option_mac_resize_window":false,
27
+ "option_mac_scale":0,
28
+ "option_mac_signing_identity":"Developer ID Application:",
29
+ "option_mac_splash_png":"${base_options_dir}/mac/splash/splash.png",
30
+ "option_mac_start_fullscreen":false,
31
+ "option_mac_team_id":"",
32
+ "option_mac_texture_page":"2048x2048",
33
+ "option_mac_version":"1.0.0.0",
34
+ "option_mac_vsync":true,
35
+ "option_mac_x86_64":true,
36
+ "resourceType":"GMMacOptions",
37
+ "resourceVersion":"2.0",
38
+ }
@@ -0,0 +1,29 @@
1
+ {
2
+ "$GMMainOptions":"v5",
3
+ "%Name":"Main",
4
+ "name":"Main",
5
+ "option_allow_instance_change":false,
6
+ "option_audio_error_behaviour":false,
7
+ "option_author":"",
8
+ "option_collision_compatibility":false,
9
+ "option_copy_on_write_enabled":false,
10
+ "option_draw_colour":4294967295,
11
+ "option_gameguid":"3d13e8a6-9439-4ca1-84c0-f00edfafb7ba",
12
+ "option_gameid":"0",
13
+ "option_game_speed":60,
14
+ "option_legacy_json_parsing":false,
15
+ "option_legacy_number_conversion":false,
16
+ "option_legacy_other_behaviour":false,
17
+ "option_legacy_primitive_drawing":false,
18
+ "option_mips_for_3d_textures":false,
19
+ "option_remove_unused_assets":true,
20
+ "option_sci_usesci":false,
21
+ "option_spine_licence":false,
22
+ "option_steam_app_id":"0",
23
+ "option_template_description":null,
24
+ "option_template_icon":"${base_options_dir}/main/template_icon.png",
25
+ "option_template_image":"${base_options_dir}/main/template_image.png",
26
+ "option_window_colour":255,
27
+ "resourceType":"GMMainOptions",
28
+ "resourceVersion":"2.0",
29
+ }
@@ -0,0 +1,30 @@
1
+ {
2
+ "$GMOperaGXOptions":"v1",
3
+ "%Name":"Opera GX",
4
+ "name":"Opera GX",
5
+ "option_operagx_display_cursor":true,
6
+ "option_operagx_editUrl":"",
7
+ "option_operagx_game_name":"${project_name}",
8
+ "option_operagx_guid":"",
9
+ "option_operagx_internalShareUrl":"",
10
+ "option_operagx_interpolate_pixels":true,
11
+ "option_operagx_mod_editUrl":"",
12
+ "option_operagx_mod_game_name":"${project_name}",
13
+ "option_operagx_mod_guid":"",
14
+ "option_operagx_mod_internalShareUrl":"",
15
+ "option_operagx_mod_next_version":"1.0.0.0",
16
+ "option_operagx_mod_publicShareUrl":"",
17
+ "option_operagx_mod_team_id":"",
18
+ "option_operagx_mod_team_name":"",
19
+ "option_operagx_mod_version":"1.0.0.0",
20
+ "option_operagx_next_version":"1.0.0.0",
21
+ "option_operagx_publicShareUrl":"",
22
+ "option_operagx_scale":0,
23
+ "option_operagx_team_id":"",
24
+ "option_operagx_team_name":"",
25
+ "option_operagx_texture_page":"2048x2048",
26
+ "option_operagx_transparent_background":false,
27
+ "option_operagx_version":"1.0.0.0",
28
+ "resourceType":"GMOperaGXOptions",
29
+ "resourceVersion":"2.0",
30
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "$GMRedditOptions":"v2",
3
+ "%Name":"Reddit",
4
+ "name":"Reddit",
5
+ "option_reddit_devvit_project_id":"${project_name}",
6
+ "option_reddit_devvit_project_path":"",
7
+ "option_reddit_display_cursor":true,
8
+ "option_reddit_game_name":"${project_name}",
9
+ "option_reddit_interpolate_pixels":true,
10
+ "option_reddit_scale":0,
11
+ "option_reddit_texture_page":"2048x2048",
12
+ "option_reddit_transparent_background":false,
13
+ "resourceType":"GMRedditOptions",
14
+ "resourceVersion":"2.0",
15
+ }
@@ -0,0 +1,31 @@
1
+ {
2
+ "$GMtvOSOptions":"v1",
3
+ "%Name":"tvOS",
4
+ "name":"tvOS",
5
+ "option_tvos_build_number":0,
6
+ "option_tvos_bundle_name":"com.company.game",
7
+ "option_tvos_display_cursor":false,
8
+ "option_tvos_display_name":"BLANK",
9
+ "option_tvos_enable_broadcast":false,
10
+ "option_tvos_icon_1280":"${base_options_dir}/tvos/icons/1280.png",
11
+ "option_tvos_icon_400":"${base_options_dir}/tvos/icons/400.png",
12
+ "option_tvos_icon_400_2x":"${base_options_dir}/tvos/icons/400_2x.png",
13
+ "option_tvos_interpolate_pixels":true,
14
+ "option_tvos_min_version":"10.0",
15
+ "option_tvos_output_dir":"~/GameMakerStudio2/tvOS",
16
+ "option_tvos_podfile_lock_path":"${options_dir}\\tvos\\Podfile.lock",
17
+ "option_tvos_podfile_path":"${options_dir}\\tvos\\Podfile",
18
+ "option_tvos_scale":0,
19
+ "option_tvos_splashscreen":"${base_options_dir}/tvos/splash/splash.png",
20
+ "option_tvos_splashscreen_2x":"${base_options_dir}/tvos/splash/splash_2x.png",
21
+ "option_tvos_splash_time":0,
22
+ "option_tvos_team_id":"",
23
+ "option_tvos_texture_page":"2048x2048",
24
+ "option_tvos_topshelf":"${base_options_dir}/tvos/topshelf/topshelf.png",
25
+ "option_tvos_topshelf_2x":"${base_options_dir}/tvos/topshelf/topshelf_2x.png",
26
+ "option_tvos_topshelf_wide":"${base_options_dir}/tvos/topshelf/topshelf_wide.png",
27
+ "option_tvos_topshelf_wide_2x":"${base_options_dir}/tvos/topshelf/topshelf_wide_2x.png",
28
+ "option_tvos_version":"1.0.0.0",
29
+ "resourceType":"GMtvOSOptions",
30
+ "resourceVersion":"2.0",
31
+ }
@@ -0,0 +1,37 @@
1
+ {
2
+ "$GMWindowsOptions":"v1",
3
+ "%Name":"Windows",
4
+ "name":"Windows",
5
+ "option_windows_allow_fullscreen_switching":false,
6
+ "option_windows_borderless":false,
7
+ "option_windows_company_info":"YoYo Games Ltd",
8
+ "option_windows_copyright_info":"",
9
+ "option_windows_copy_exe_to_dest":false,
10
+ "option_windows_d3dswapeffectdiscard":false,
11
+ "option_windows_description_info":"A GameMaker Game",
12
+ "option_windows_disable_sandbox":false,
13
+ "option_windows_display_cursor":true,
14
+ "option_windows_display_name":"BLANK",
15
+ "option_windows_enable_steam":false,
16
+ "option_windows_executable_name":"${project_name}.exe",
17
+ "option_windows_icon":"${base_options_dir}/windows/icons/icon.ico",
18
+ "option_windows_installer_finished":"${base_options_dir}/windows/installer/finished.bmp",
19
+ "option_windows_installer_header":"${base_options_dir}/windows/installer/header.bmp",
20
+ "option_windows_interpolate_pixels":true,
21
+ "option_windows_license":"${base_options_dir}/windows/installer/license.txt",
22
+ "option_windows_nsis_file":"${base_options_dir}/windows/installer/nsis_script.nsi",
23
+ "option_windows_product_info":"${project_name}",
24
+ "option_windows_resize_window":false,
25
+ "option_windows_save_location":0,
26
+ "option_windows_scale":0,
27
+ "option_windows_sleep_margin":10,
28
+ "option_windows_splash_screen":"${base_options_dir}/windows/splash/splash.png",
29
+ "option_windows_start_fullscreen":false,
30
+ "option_windows_steam_use_alternative_launcher":false,
31
+ "option_windows_texture_page":"2048x2048",
32
+ "option_windows_use_splash":false,
33
+ "option_windows_version":"1.0.0.0",
34
+ "option_windows_vsync":true,
35
+ "resourceType":"GMWindowsOptions",
36
+ "resourceVersion":"2.0",
37
+ }
@@ -0,0 +1,53 @@
1
+ {
2
+ "$GMRoom":"v1",
3
+ "%Name":"Room1",
4
+ "creationCodeFile":"",
5
+ "inheritCode":false,
6
+ "inheritCreationOrder":false,
7
+ "inheritLayers":false,
8
+ "instanceCreationOrder":[],
9
+ "isDnd":false,
10
+ "layers":[
11
+ {"$GMRInstanceLayer":"","%Name":"Instances","depth":0,"effectEnabled":true,"effectType":null,"gridX":32,"gridY":32,"hierarchyFrozen":false,"inheritLayerDepth":false,"inheritLayerSettings":false,"inheritSubLayers":true,"inheritVisibility":true,"instances":[],"layers":[],"name":"Instances","properties":[],"resourceType":"GMRInstanceLayer","resourceVersion":"2.0","userdefinedDepth":false,"visible":true,},
12
+ {"$GMRBackgroundLayer":"","%Name":"Background","animationFPS":15.0,"animationSpeedType":0,"colour":4278190080,"depth":100,"effectEnabled":true,"effectType":null,"gridX":32,"gridY":32,"hierarchyFrozen":false,"hspeed":0.0,"htiled":false,"inheritLayerDepth":false,"inheritLayerSettings":false,"inheritSubLayers":true,"inheritVisibility":true,"layers":[],"name":"Background","properties":[],"resourceType":"GMRBackgroundLayer","resourceVersion":"2.0","spriteId":null,"stretch":false,"userdefinedAnimFPS":false,"userdefinedDepth":false,"visible":true,"vspeed":0.0,"vtiled":false,"x":0,"y":0,},
13
+ ],
14
+ "name":"Room1",
15
+ "parent":{
16
+ "name":"{PROJECT_NAME}",
17
+ "path":"{PROJECT_NAME}.yyp",
18
+ },
19
+ "parentRoom":null,
20
+ "physicsSettings":{
21
+ "inheritPhysicsSettings":false,
22
+ "PhysicsWorld":false,
23
+ "PhysicsWorldGravityX":0.0,
24
+ "PhysicsWorldGravityY":10.0,
25
+ "PhysicsWorldPixToMetres":0.1,
26
+ },
27
+ "resourceType":"GMRoom",
28
+ "resourceVersion":"2.0",
29
+ "roomSettings":{
30
+ "Height":768,
31
+ "inheritRoomSettings":false,
32
+ "persistent":false,
33
+ "Width":1366,
34
+ },
35
+ "sequenceId":null,
36
+ "views":[
37
+ {"hborder":32,"hport":768,"hspeed":-1,"hview":768,"inherit":false,"objectId":null,"vborder":32,"visible":false,"vspeed":-1,"wport":1366,"wview":1366,"xport":0,"xview":0,"yport":0,"yview":0,},
38
+ {"hborder":32,"hport":768,"hspeed":-1,"hview":768,"inherit":false,"objectId":null,"vborder":32,"visible":false,"vspeed":-1,"wport":1366,"wview":1366,"xport":0,"xview":0,"yport":0,"yview":0,},
39
+ {"hborder":32,"hport":768,"hspeed":-1,"hview":768,"inherit":false,"objectId":null,"vborder":32,"visible":false,"vspeed":-1,"wport":1366,"wview":1366,"xport":0,"xview":0,"yport":0,"yview":0,},
40
+ {"hborder":32,"hport":768,"hspeed":-1,"hview":768,"inherit":false,"objectId":null,"vborder":32,"visible":false,"vspeed":-1,"wport":1366,"wview":1366,"xport":0,"xview":0,"yport":0,"yview":0,},
41
+ {"hborder":32,"hport":768,"hspeed":-1,"hview":768,"inherit":false,"objectId":null,"vborder":32,"visible":false,"vspeed":-1,"wport":1366,"wview":1366,"xport":0,"xview":0,"yport":0,"yview":0,},
42
+ {"hborder":32,"hport":768,"hspeed":-1,"hview":768,"inherit":false,"objectId":null,"vborder":32,"visible":false,"vspeed":-1,"wport":1366,"wview":1366,"xport":0,"xview":0,"yport":0,"yview":0,},
43
+ {"hborder":32,"hport":768,"hspeed":-1,"hview":768,"inherit":false,"objectId":null,"vborder":32,"visible":false,"vspeed":-1,"wport":1366,"wview":1366,"xport":0,"xview":0,"yport":0,"yview":0,},
44
+ {"hborder":32,"hport":768,"hspeed":-1,"hview":768,"inherit":false,"objectId":null,"vborder":32,"visible":false,"vspeed":-1,"wport":1366,"wview":1366,"xport":0,"xview":0,"yport":0,"yview":0,},
45
+ ],
46
+ "viewSettings":{
47
+ "clearDisplayBuffer":true,
48
+ "clearViewBackground":false,
49
+ "enableViews":false,
50
+ "inheritViewSettings":false,
51
+ },
52
+ "volume":1.0,
53
+ }
@@ -0,0 +1,95 @@
1
+ # dependencies (bun install)
2
+ node_modules
3
+
4
+ # output
5
+ out
6
+ dist
7
+ *.tgz
8
+ .out
9
+
10
+ # code coverage
11
+ coverage
12
+ *.lcov
13
+
14
+ # logs
15
+ logs
16
+ _.log
17
+ report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json
18
+
19
+ # dotenv environment variable files
20
+ .env
21
+ .env.development.local
22
+ .env.test.local
23
+ .env.production.local
24
+ .env.local
25
+
26
+ # caches
27
+ .eslintcache
28
+ .cache
29
+ *.tsbuildinfo
30
+
31
+ # IntelliJ based IDEs
32
+ .idea
33
+
34
+ # Windows
35
+
36
+ # Windows thumbnail cache files
37
+ Thumbs.db
38
+ Thumbs.db:encryptable
39
+ ehthumbs.db
40
+ ehthumbs_vista.db
41
+
42
+ # Dump file
43
+ *.stackdump
44
+
45
+ # Folder config file
46
+ [Dd]esktop.ini
47
+
48
+ # Recycle Bin used on file shares
49
+ $RECYCLE.BIN/
50
+
51
+ # Windows Installer files
52
+ *.cab
53
+ *.msi
54
+ *.msix
55
+ *.msm
56
+ *.msp
57
+
58
+ # Windows shortcuts
59
+ *.lnk
60
+
61
+ # Mac
62
+
63
+ ## General
64
+ .DS_Store
65
+ .AppleDouble
66
+ .LSOverride
67
+
68
+ ## Icon must end with two \r
69
+ Icon
70
+
71
+ ## Thumbnails
72
+ ._*
73
+
74
+ ## Files that might appear in the root of a volume
75
+ .DocumentRevisions-V100
76
+ .fseventsd
77
+ .Spotlight-V100
78
+ .TemporaryItems
79
+ .Trashes
80
+ .VolumeIcon.icns
81
+ .com.apple.timemachine.donotpresent
82
+
83
+ ## Directories potentially created on remote AFP share
84
+ .AppleDB
85
+ .AppleDesktop
86
+ Network Trash Folder
87
+ Temporary Items
88
+ .apdisk
89
+
90
+ # GameMaker temporary files
91
+ *.resource_order
92
+ *.old
93
+
94
+ # GMRT build directory
95
+ Build
@@ -0,0 +1,36 @@
1
+ {
2
+ "name": "scaffscript-compiler",
3
+ "version": "0.1.1",
4
+ "lockfileVersion": 3,
5
+ "requires": true,
6
+ "packages": {
7
+ "node_modules/@scaffscript/core": {
8
+ "version": "0.1.5",
9
+ "resolved": "https://registry.npmjs.org/@scaffscript/core/-/core-0.1.5.tgz",
10
+ "integrity": "sha512-6v7qYkVQzDTh6MBmbT+A2PmsJjtUDETIzF7nAHvfR4E75uSLsdZtuMwrPLEVhV/1pnV9DuXCSmcYhnef2H2U6A==",
11
+ "dev": true,
12
+ "license": "MIT",
13
+ "bin": {
14
+ "scaff": "dist/index.cjs"
15
+ },
16
+ "peerDependencies": {
17
+ "typescript": "^5"
18
+ }
19
+ },
20
+ "node_modules/typescript": {
21
+ "version": "5.9.3",
22
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
23
+ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
24
+ "dev": true,
25
+ "license": "Apache-2.0",
26
+ "peer": true,
27
+ "bin": {
28
+ "tsc": "bin/tsc",
29
+ "tsserver": "bin/tsserver"
30
+ },
31
+ "engines": {
32
+ "node": ">=14.17"
33
+ }
34
+ }
35
+ }
36
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "name": "scaffscript-compiler",
3
+ "version": "0.1.2",
4
+ "description": "A ScaffScript compiler",
5
+ "license": "MIT",
6
+ "author": "Undervolta",
7
+ "type": "commonjs",
8
+ "scripts": {
9
+ "generate": "scaff gen ./src to ./my-game.yyp",
10
+ "help": "scaff help",
11
+ "scaff": "scaff"
12
+ },
13
+ "devDependencies": {
14
+ "@scaffscript/core": "^0.1.5"
15
+ }
16
+ }
@@ -0,0 +1,9 @@
1
+ module.exports = {
2
+ clearOutputDir: false,
3
+ noIntegration: true,
4
+ production: false,
5
+ tabType: "1t",
6
+ targetPlatform: "all",
7
+ useGmAssetPath: true
8
+ // add more as needed
9
+ };
@@ -0,0 +1,4 @@
1
+ intg { main } to "./scripts/scrHello"
2
+
3
+ #[main]
4
+ show_debug_message("Hello, World!");
@@ -0,0 +1,16 @@
1
+ {
2
+ "name": "scaffscript-compiler",
3
+ "version": "0.1.2",
4
+ "description": "A ScaffScript compiler",
5
+ "license": "MIT",
6
+ "author": "Undervolta",
7
+ "type": "commonjs",
8
+ "scripts": {
9
+ "generate": "scaff gen ./src to ./my-game.yyp",
10
+ "help": "scaff help",
11
+ "scaff": "scaff"
12
+ },
13
+ "devDependencies": {
14
+ "@scaffscript/core": "^0.1.5"
15
+ }
16
+ }
@@ -0,0 +1,34 @@
1
+ lockfileVersion: '9.0'
2
+
3
+ settings:
4
+ autoInstallPeers: true
5
+ excludeLinksFromLockfile: false
6
+
7
+ importers:
8
+
9
+ .:
10
+ devDependencies:
11
+ '@scaffscript/core':
12
+ specifier: ^0.1.5
13
+ version: 0.1.5(typescript@5.9.3)
14
+
15
+ packages:
16
+
17
+ '@scaffscript/core@0.1.5':
18
+ resolution: {integrity: sha512-6v7qYkVQzDTh6MBmbT+A2PmsJjtUDETIzF7nAHvfR4E75uSLsdZtuMwrPLEVhV/1pnV9DuXCSmcYhnef2H2U6A==}
19
+ hasBin: true
20
+ peerDependencies:
21
+ typescript: ^5
22
+
23
+ typescript@5.9.3:
24
+ resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==}
25
+ engines: {node: '>=14.17'}
26
+ hasBin: true
27
+
28
+ snapshots:
29
+
30
+ '@scaffscript/core@0.1.5(typescript@5.9.3)':
31
+ dependencies:
32
+ typescript: 5.9.3
33
+
34
+ typescript@5.9.3: {}
@@ -0,0 +1,9 @@
1
+ module.exports = {
2
+ clearOutputDir: false,
3
+ noIntegration: true,
4
+ production: false,
5
+ tabType: "1t",
6
+ targetPlatform: "all",
7
+ useGmAssetPath: true
8
+ // add more as needed
9
+ };
@@ -0,0 +1,4 @@
1
+ intg { main } to "./scripts/scrHello"
2
+
3
+ #[main]
4
+ show_debug_message("Hello, World!");
@@ -0,0 +1,4 @@
1
+ intg { main } to "./scripts/scrHello"
2
+
3
+ #[main]
4
+ show_debug_message("Hello, World!");