@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.
- package/README.md +45 -0
- package/dist/cli.js +225 -0
- package/package.json +35 -0
- package/src/index.ts +42 -0
- package/templates/bun/bun.lock +29 -0
- package/templates/bun/package.json +21 -0
- package/templates/bun/scaff.config.ts +11 -0
- package/templates/bun/tsconfig.json +33 -0
- package/templates/gamemaker/.gitattributes +8 -0
- package/templates/gamemaker/BLANK.resource_order +4 -0
- package/templates/gamemaker/BLANK.yyp +33 -0
- package/templates/gamemaker/options/android/options_android.yy +85 -0
- package/templates/gamemaker/options/html5/options_html5.yy +35 -0
- package/templates/gamemaker/options/ios/options_ios.yy +49 -0
- package/templates/gamemaker/options/linux/options_linux.yy +26 -0
- package/templates/gamemaker/options/mac/options_mac.yy +38 -0
- package/templates/gamemaker/options/main/options_main.yy +29 -0
- package/templates/gamemaker/options/operagx/options_operagx.yy +30 -0
- package/templates/gamemaker/options/reddit/options_reddit.yy +15 -0
- package/templates/gamemaker/options/tvos/options_tvos.yy +31 -0
- package/templates/gamemaker/options/windows/options_windows.yy +37 -0
- package/templates/gamemaker/rooms/Room1/Room1.yy +53 -0
- package/templates/gitignore +95 -0
- package/templates/npm/package-lock.json +36 -0
- package/templates/npm/package.json +16 -0
- package/templates/npm/scaff.config.cjs +9 -0
- package/templates/npm/src/index.ss +4 -0
- package/templates/pnpm/package.json +16 -0
- package/templates/pnpm/pnpm-lock.yaml +34 -0
- package/templates/pnpm/scaff.config.cjs +9 -0
- package/templates/pnpm/src/index.ss +4 -0
- 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,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,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: {}
|