@lewismoten/gamemaker-sandbox-archives 0.0.0-stage → 3.2.0
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/CHANGELOG.md +22 -0
- package/LICENSE +24 -0
- package/NOTICE.md +11 -0
- package/README.md +100 -2
- package/dist/applyPatches-yRE1fvi0.js +86 -0
- package/dist/index.js +74 -0
- package/dist/pack.js +70 -0
- package/dist/player/applyPatches.js +10 -0
- package/dist/player/md5.js +25 -0
- package/dist/project/extensionNames.js +20 -0
- package/dist/project/importLeftovers.js +16 -0
- package/dist/project/importPlayer.js +599 -0
- package/dist/scan.js +263 -0
- package/dist/types/index.d.ts +25 -0
- package/dist/types/player/applyPatches.d.ts +25 -0
- package/dist/types/player/md5.d.ts +2 -0
- package/dist/types/player/patchSpans.d.ts +2 -0
- package/dist/types/player/playerBuild.d.ts +40 -0
- package/dist/types/player/playerBuildData.d.ts +13 -0
- package/dist/types/player/playerPreserve.d.ts +10 -0
- package/dist/types/player/preservedRegions.d.ts +19 -0
- package/dist/types/project/extensionNames.d.ts +4 -0
- package/dist/types/project/gamePack.d.ts +17 -0
- package/dist/types/project/importLeftovers.d.ts +3 -0
- package/dist/types/project/importPlayer.d.ts +39 -0
- package/dist/types/project/importScan.d.ts +133 -0
- package/dist/types/project/zip.d.ts +32 -0
- package/dist/zip.js +115 -0
- package/package.json +99 -4
|
@@ -0,0 +1,599 @@
|
|
|
1
|
+
import { normalize as K } from "@lewismoten/gamemaker-sandbox-engine/core/gameFiles";
|
|
2
|
+
import { parseGame as W, ADV_EXTS as E } from "@lewismoten/gamemaker-sandbox-engine/formats/game";
|
|
3
|
+
import { md5Hex as F } from "../player/md5.js";
|
|
4
|
+
import { fromCp437 as N } from "@lewismoten/gamemaker-sandbox-engine/text/cp437";
|
|
5
|
+
import { crc32 as V } from "../zip.js";
|
|
6
|
+
import { patchEntry as P, writePatch as H, writeStock as X, patchProblem as J, isStock as O } from "@lewismoten/gamemaker-sandbox-engine/player/patchRules";
|
|
7
|
+
import { extKind as G, extValueProblem as j, extId as I, withoutExtensions as S, renamedExtensions as U, EXT_KINDS as $, extensionClashes as _ } from "@lewismoten/gamemaker-sandbox-engine/player/fileExtensions";
|
|
8
|
+
import { r as nn, p as tn, t as en } from "../applyPatches-yRE1fvi0.js";
|
|
9
|
+
import { a as Tn } from "../applyPatches-yRE1fvi0.js";
|
|
10
|
+
import { rewriteNames as dn } from "./extensionNames.js";
|
|
11
|
+
const h = 128, M = [
|
|
12
|
+
{
|
|
13
|
+
id: "1.0",
|
|
14
|
+
size: 82803,
|
|
15
|
+
md5: "17ee7d6c3d3cc2fae33726e2589764a5",
|
|
16
|
+
owner: [77976, 40],
|
|
17
|
+
version: 78523,
|
|
18
|
+
about: [
|
|
19
|
+
78497,
|
|
20
|
+
78523,
|
|
21
|
+
78549,
|
|
22
|
+
78579,
|
|
23
|
+
78609,
|
|
24
|
+
78639,
|
|
25
|
+
78670,
|
|
26
|
+
78701,
|
|
27
|
+
78732,
|
|
28
|
+
78763,
|
|
29
|
+
78794,
|
|
30
|
+
78825,
|
|
31
|
+
78856,
|
|
32
|
+
78867,
|
|
33
|
+
78898,
|
|
34
|
+
78929,
|
|
35
|
+
78960,
|
|
36
|
+
78991,
|
|
37
|
+
79022,
|
|
38
|
+
79053,
|
|
39
|
+
79084,
|
|
40
|
+
79115
|
|
41
|
+
],
|
|
42
|
+
text: {
|
|
43
|
+
"str.menu.play": [78327, 4],
|
|
44
|
+
"str.menu.instructions": [78332, 17],
|
|
45
|
+
"str.menu.storyline": [78350, 14],
|
|
46
|
+
"str.menu.credits": [78365, 11],
|
|
47
|
+
"str.menu.highScores": [78377, 18],
|
|
48
|
+
"str.menu.quit": [78396, 4],
|
|
49
|
+
"str.menu.noStoryline": [78245, 30, "No game-specific storyline. "],
|
|
50
|
+
"str.hiscore.title": [81544, 30, " Top Ten Scores"],
|
|
51
|
+
"str.hiscore.congrats": [81408, 21, " Congratulations!"],
|
|
52
|
+
"str.hiscore.enterName": [81482, 17, "Enter Your Name: "],
|
|
53
|
+
"str.invent.score": [79203, 14],
|
|
54
|
+
"str.invent.money": [79218, 13],
|
|
55
|
+
"str.invent.hitpoints": [79232, 13],
|
|
56
|
+
"str.invent.lives": [79246, 13],
|
|
57
|
+
"str.invent.time": [79260, 37],
|
|
58
|
+
"str.drop.title": [79824, 21],
|
|
59
|
+
"str.drop.help1": [79846, 25],
|
|
60
|
+
"str.drop.help2": [79872, 25],
|
|
61
|
+
"str.drop.help3": [79898, 25],
|
|
62
|
+
"str.text.missingTitle": [79301, 13],
|
|
63
|
+
"str.text.missingFile": [79315, 14],
|
|
64
|
+
"str.text.missingTail": [79330, 28]
|
|
65
|
+
},
|
|
66
|
+
ext: { gam: [78086], bkd: [80820], txt: [78240, 78281, 78322, 78406, 78416], his: [81400], sav: [78421, 78489] },
|
|
67
|
+
crc: "bbAzWAyz9kvjSn1XpebI2tN8mcTcV1bgEl0D6VrNWcGsevzvamrcxnhaZOm2tCMyQDy/FjjP0h09PHnv5Mxqcp8infqd+p36uwBK3xnQ/7W85Kby0wPLW7C5BMfiXYm1x2QxBcl/Tnqrji3mUBw6VnKYO2FgC01MxucmKF5AzBDnIQ2OqCIV2/sr8Npr0cMWV82c2d8sKLMboNDLye5M4WGCQqdafmFiOVThFkH3O4dbeMrmQCZbEi6qV9op2tTtkRofIeu0PUeD0dJjBWy9t7eUbs+IglW9LKV8GeXiJ4N7DFHNOIskGK1k097JZ4TvIYBE7X3b/QYEKQueOypn/mddNx6QTnhzgugrnEL3ZdrLZOpscf/MfR5FnpI1s2DV9ez7B86JaaZQomMn3qMDPytzb8xCwAUE4dXA4T4FnfqVRAo60scG/DYHlaiVL3ZT87p8HTpHPXRPpQcPRwmPlpGLmr9JtAE7lSdGR+r30Hcsgtf3TRS8e26A0JFRYRvcRWPagc+Q+iQW0QKxybjLWOU3MiNMD+ulQaSOIEuYokGw/9irGrfH3xFDgeYIK7Ia0FPr63ij7PqxYKQ417LKWNWt7yA1iVXS/DV81Au0BCAyLBH2l2gGBtBZZ/VzCBORnUHrV83cHo/qsS3M4IMrcBEVSLlUrGPz1u2ATTi+m9IIkMInnUgxvk3uokShmcjzhv9rHvUBpDi43Fui5WM+6tnE7duv3FVgSfTIiqesK+PFpgKVGgCjmMF9G/xFJU9EtJg9lNXiLOvLLJ10antnMLy4yiNkazeaqO9+/SJt+VSe+eRlYa6bVMshkHXaM1mxfXgBEqxYlJtyJeq2jKcQfABQDlg48DVgcbEE0Q+HdobI3WOz9bQjrfX2OKcfQPQJL9rw2sCycd8AH2CTK7DFtosxc0TTSRVqwrk8buOAA9CHbbDlChYnV5YJEhTdkeAswbe3JkCEzgWOKcuBDlKb8aEJgbguK6DH/eWwwHbca+00hckF0FiR9p/BJ7/ZmSEJJTYThMXfL6bV8+lptMUqfzghwwnswfnZHGBsPKUmr63Mh//iMdB9BQ7caBXwSJCFDxSiQUrhfXFpDB6VWEFSg0bC39SiiQCdCRmR3sqIOr6eHDj5lQCXwKoQhSY5s9ouBty9gRnYXg28U4W6/sCMl3QW3QhKHOC+a9rPePHpUg6bP3p8WWyOsR+2IRH1jtfYXI3BBx5soW5QuHcVohZpjSpOnLkcdkwskyL5mC0dRBBM1CQL5HbREDVe0kohwlWjPtL7dUbFXxYBlVWbqgnbEKGaqa98hSfPLbC1FEQbkoQtGaUd8ejOQ6SDNxT7QRYvfRa2ZHR9I7eoi1jOmggbLl6b29bn9LeWg7LuuGcbfuZV+jUF77dCjMKeygLOnzhITFgEgLhi5tOTVRSR/0myLtetB3uvxzBMjiuha+4Dfrolj8NXHp8MTxvvaNJ7/rZAQx02xG3HlXXTqWfdwoq4iRBYqpZd8Q9cIHkM94YfdElYtfuoRNY9RuBO0KkE0kZN9QU+dgCg3s/fV0G5gafHmnyQ58SaE2c+uWiryKnAL5zhy0vCmwqEfDExBZ0wU09KPRvdSZ8tFssebOPUnhui9VhT8lMQwfBbviRKHTRQ+vl+90jg2TpOl3PcXNGcPZHlANtFEuf+XGcixlIumqxbVWLX3Ao37A9kkSmGSeteXkee9SMXbWbaQOOQklKz+w=="
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
id: "1.04",
|
|
71
|
+
size: 83136,
|
|
72
|
+
md5: "e94cb3d4507ad2c3030677dd3a625e7f",
|
|
73
|
+
owner: [77955, 40],
|
|
74
|
+
version: 78542,
|
|
75
|
+
about: [
|
|
76
|
+
78516,
|
|
77
|
+
78542,
|
|
78
|
+
78568,
|
|
79
|
+
78598,
|
|
80
|
+
78628,
|
|
81
|
+
78658,
|
|
82
|
+
78689,
|
|
83
|
+
78720,
|
|
84
|
+
78751,
|
|
85
|
+
78782,
|
|
86
|
+
78813,
|
|
87
|
+
78844,
|
|
88
|
+
78875,
|
|
89
|
+
78886,
|
|
90
|
+
78917,
|
|
91
|
+
78948,
|
|
92
|
+
78979,
|
|
93
|
+
79010,
|
|
94
|
+
79041,
|
|
95
|
+
79072,
|
|
96
|
+
79103,
|
|
97
|
+
79134,
|
|
98
|
+
79165
|
|
99
|
+
],
|
|
100
|
+
text: {
|
|
101
|
+
"str.menu.play": [78346, 4],
|
|
102
|
+
"str.menu.instructions": [78351, 17],
|
|
103
|
+
"str.menu.storyline": [78369, 14],
|
|
104
|
+
"str.menu.credits": [78384, 11],
|
|
105
|
+
"str.menu.highScores": [78396, 18],
|
|
106
|
+
"str.menu.quit": [78415, 4],
|
|
107
|
+
"str.menu.noStoryline": [78264, 30, "No game-specific storyline. "],
|
|
108
|
+
"str.hiscore.title": [81878, 30, " Top Ten Scores"],
|
|
109
|
+
"str.hiscore.congrats": [81742, 21, " Congratulations!"],
|
|
110
|
+
"str.hiscore.enterName": [81816, 17, "Enter Your Name: "],
|
|
111
|
+
"str.invent.score": [79253, 14],
|
|
112
|
+
"str.invent.money": [79268, 13],
|
|
113
|
+
"str.invent.hitpoints": [79282, 13],
|
|
114
|
+
"str.invent.lives": [79296, 13],
|
|
115
|
+
"str.invent.time": [79310, 37],
|
|
116
|
+
"str.drop.title": [79874, 21],
|
|
117
|
+
"str.drop.help1": [79896, 25],
|
|
118
|
+
"str.drop.help2": [79922, 25],
|
|
119
|
+
"str.drop.help3": [79948, 25],
|
|
120
|
+
"str.text.missingTitle": [79351, 13],
|
|
121
|
+
"str.text.missingFile": [79365, 14],
|
|
122
|
+
"str.text.missingTail": [79380, 28]
|
|
123
|
+
},
|
|
124
|
+
ext: { gam: [78091], bkd: [80878], txt: [78259, 78300, 78341, 78425, 78435], his: [81734], sav: [78440, 78508] },
|
|
125
|
+
crc: "uxNdTeEJrPO8rV6Vxuh7TF92pgqXMISAE9YQP6Ghp2a4N5NyKTH19GgiST1wcayiEEise7+hBnsO0AL41pNLjWF9X3Cd+p36bqCOccmR/7VJTQJ2qHDiH3GHBMccvom130l85/dDs4sJUC3mUBxIY3KYO2FgC01MxucmKKh2zBBoYQ2OqCIV277Tct9r0cMWdjfRAArjEKKysUfKKcq2ItW9ZTpEnNmvOVTEX4lnrMsJotJ0S7LHQRF18EUp2rlutr6XNZn8Yc3WiZ6eX938yk6XcC3S/MAsNkd8GYtfXyVMDVQVOIv8L61kNaHK/O+WIYBE7c0O3UQEKQueurB7MGddnGqH6N4QgugrnEheKpp2EHMKcf/MfR5FYAd3VA43g27cylle0jYN+p5krF45cYF8EO7RejcNBQIQd7Fg+uKd+neXpnAC2a0HmqDG28CdqGPIDZIzhn/7PzyFTzXKj3bcQ7c5fVOgXrwzdD9tdxT4h5SrnZnHnW8Dxvfgl4HJuPx06D3dqN5uDjLTnQT86cdvGMAnVuov123//Bh4qsXDd2DYZ8ypLq/l3eJEzUkj01+C2Sh2j5JWi3bwxnr2OrEZz+XcjMUN9stpyl8kD/JFza8aDDP7t1jztiYHkPdZnrPHndsq1lGJZQ4O3CZP78AavZuQveIbmDc4DDaezSBRcMn8WBcoD//k/zYfRqMWGdWHrLQzSv73o1hyhXmWz4y40k8lZW+5y/aloyqSRluRPmuSkTUVlTc62C3qRUcdV2sbMjRXTLCjuEeKYU8mSmSDbiYv/APzbD4utof6Uevm9WFEnynVLEmrFV8Cmk7FzA6wU1MLP37+6ZCzYcdf3FSXx6sZnnP3yFlBgkju4DqrYRpJQDqTEXlYaWW9sJCzESA61ge8zfqwHJvGf0CMqesRLk7pkM4GM6j81t93h0vwxKoAqK9/7mi93w9WyN1J/VFz2w36MtaPdYomSvWL5CLTvJ+YkvmVh3Y2CFrJyYpvRo5nkyJA8lfqlZcHVRa+h8SHasbRbZNgmbI3doVLT2k+3xsADUzfe+eXpjmIwmXSXLnIm+AyuP1iJCapGe8v7Y0LPmoo80fm6DMlLibD1wNCuf5ahP1NvLuCPk+h1kInQisvK/RxsFeOOQ01219WEcms6013WcRNWkE0mTh1IpfTGdohFO5vdND6BIDN6IsDd5j/BbCyG/Cq7T21Gtd2LqjxfEoob7xoeMuqyz/lI+KKKh30+8Mh83eGlJDR17eGcY/IBe64Xl9w2fSp7kG4/6f8/TVR3sR6T39+NjG7PV2KwfmgY7P2iY1tRucTApiNzjh+5ZUOSnw3ure/8iJDuM96Fcq8PaDCn6orZTV1eOn4tRdxPGgK2l43y39gGdrM0FOIH1BePg6puXG98SituSUS/ZF/DwCmPpEyDYpx2I6r/KKp5wb7eSAig+7M/JZHfA+Nn6gnEq/i+kSiI7w7o4lCus0ipxbBwjB8T6iU/kiKGprh77jMnFhd0yLZKASNGxNap66aUKWrSdxvtSVPB2iwkRF4Zq0q956YAQALq3mwNY00aoPqSKPHX8GtdzuLl0zw3Vtptu859mZ1hWM2lrAObH+Ksit2rPSZwPh5F5meW31ofvDiXiXFN4nEzHNL9HFihUFTVsLvegRNCACmgMGJM17orTAEXIJkGfRlPFuCTUiOLeT3ppjWj9SuQN6hyspvN+oGpgfJUd86b9tcidpHIg=="
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
id: "2.00",
|
|
129
|
+
size: 154980,
|
|
130
|
+
md5: "6b80ef5f4ce8394e10d68334b6843f27",
|
|
131
|
+
owner: [6144, 52],
|
|
132
|
+
version: 129361,
|
|
133
|
+
about: [
|
|
134
|
+
129335,
|
|
135
|
+
129361,
|
|
136
|
+
129387,
|
|
137
|
+
129417,
|
|
138
|
+
129447,
|
|
139
|
+
129477,
|
|
140
|
+
129508,
|
|
141
|
+
129539,
|
|
142
|
+
129570,
|
|
143
|
+
129601,
|
|
144
|
+
129632,
|
|
145
|
+
129663,
|
|
146
|
+
129694,
|
|
147
|
+
129705,
|
|
148
|
+
129736,
|
|
149
|
+
129767,
|
|
150
|
+
129798,
|
|
151
|
+
129829,
|
|
152
|
+
129860,
|
|
153
|
+
129891,
|
|
154
|
+
129922,
|
|
155
|
+
129953,
|
|
156
|
+
129984
|
|
157
|
+
],
|
|
158
|
+
text: {
|
|
159
|
+
"str.menu.play": [129036, 4],
|
|
160
|
+
"str.menu.instructions": [129041, 17],
|
|
161
|
+
"str.menu.storyline": [129059, 14],
|
|
162
|
+
"str.menu.credits": [129074, 11],
|
|
163
|
+
"str.menu.highScores": [129086, 18],
|
|
164
|
+
"str.menu.quit": [129105, 4],
|
|
165
|
+
"str.menu.noStoryline": [128954, 30, "No game-specific storyline. "],
|
|
166
|
+
"str.hiscore.title": [153606, 30, " Top Ten Scores"],
|
|
167
|
+
"str.hiscore.congrats": [153470, 21, " Congratulations!"],
|
|
168
|
+
"str.hiscore.enterName": [153544, 17, "Enter Your Name: "],
|
|
169
|
+
"str.invent.score": [130073, 14],
|
|
170
|
+
"str.invent.money": [130088, 13],
|
|
171
|
+
"str.invent.hitpoints": [130102, 13],
|
|
172
|
+
"str.invent.lives": [130116, 13],
|
|
173
|
+
"str.invent.time": [130130, 37],
|
|
174
|
+
"str.load.done": [129175, 16],
|
|
175
|
+
"str.save.done": [129323, 11],
|
|
176
|
+
"str.save.failed": [129298, 24],
|
|
177
|
+
"str.drop.title": [130657, 21],
|
|
178
|
+
"str.drop.help1": [130679, 25],
|
|
179
|
+
"str.drop.help2": [130705, 25],
|
|
180
|
+
"str.drop.help3": [130731, 25],
|
|
181
|
+
"str.text.more": [130229, 7],
|
|
182
|
+
"str.text.missingTitle": [130171, 13],
|
|
183
|
+
"str.text.missingFile": [130185, 14],
|
|
184
|
+
"str.text.missingTail": [130200, 28],
|
|
185
|
+
"str.missing.title": [130855, 30]
|
|
186
|
+
},
|
|
187
|
+
ext: { gam: [128761], bkd: [152359], txt: [128949, 128990, 129031, 129125, 129135, 130027, 130037], voc: [132313], his: [153462], sav: [129140, 129290] },
|
|
188
|
+
crc: "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nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqi9536nfqd+p36nfqhRJ36nfqd+p36nfqd+qddTSf6E3kYMWZQ59KbdfBlvMXnkCarEKAS124MtnBJ9+IYa5RNCmTQyj2q/L6rC536nfqd+p36nfqd+p36KCzy+5TNIZCd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfprWZW+2Oh21LKdnfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36VHyDA0DYe4JgeBFqf/bqBRFclW4HKfVC6gRAK7gax19PMZ36nfqYgj8DbEss0Q=="
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
id: "2.02",
|
|
192
|
+
size: 155156,
|
|
193
|
+
md5: "03f0c0552a735ebb32430be18a85cb5e",
|
|
194
|
+
owner: [6144, 52],
|
|
195
|
+
version: 129537,
|
|
196
|
+
about: [
|
|
197
|
+
129511,
|
|
198
|
+
129537,
|
|
199
|
+
129563,
|
|
200
|
+
129593,
|
|
201
|
+
129623,
|
|
202
|
+
129653,
|
|
203
|
+
129684,
|
|
204
|
+
129715,
|
|
205
|
+
129746,
|
|
206
|
+
129777,
|
|
207
|
+
129808,
|
|
208
|
+
129839,
|
|
209
|
+
129870,
|
|
210
|
+
129881,
|
|
211
|
+
129912,
|
|
212
|
+
129943,
|
|
213
|
+
129974,
|
|
214
|
+
130005,
|
|
215
|
+
130036,
|
|
216
|
+
130067,
|
|
217
|
+
130098,
|
|
218
|
+
130129,
|
|
219
|
+
130160
|
|
220
|
+
],
|
|
221
|
+
text: {
|
|
222
|
+
"str.menu.play": [129212, 4],
|
|
223
|
+
"str.menu.instructions": [129217, 17],
|
|
224
|
+
"str.menu.storyline": [129235, 14],
|
|
225
|
+
"str.menu.credits": [129250, 11],
|
|
226
|
+
"str.menu.highScores": [129262, 18],
|
|
227
|
+
"str.menu.quit": [129281, 4],
|
|
228
|
+
"str.menu.noStoryline": [129130, 30, "No game-specific storyline. "],
|
|
229
|
+
"str.hiscore.title": [153782, 30, " Top Ten Scores"],
|
|
230
|
+
"str.hiscore.congrats": [153646, 21, " Congratulations!"],
|
|
231
|
+
"str.hiscore.enterName": [153720, 17, "Enter Your Name: "],
|
|
232
|
+
"str.invent.score": [130249, 14],
|
|
233
|
+
"str.invent.money": [130264, 13],
|
|
234
|
+
"str.invent.hitpoints": [130278, 13],
|
|
235
|
+
"str.invent.lives": [130292, 13],
|
|
236
|
+
"str.invent.time": [130306, 37],
|
|
237
|
+
"str.load.done": [129351, 16],
|
|
238
|
+
"str.save.done": [129499, 11],
|
|
239
|
+
"str.save.failed": [129474, 24],
|
|
240
|
+
"str.drop.title": [130833, 21],
|
|
241
|
+
"str.drop.help1": [130855, 25],
|
|
242
|
+
"str.drop.help2": [130881, 25],
|
|
243
|
+
"str.drop.help3": [130907, 25],
|
|
244
|
+
"str.text.more": [130405, 7],
|
|
245
|
+
"str.text.missingTitle": [130347, 13],
|
|
246
|
+
"str.text.missingFile": [130361, 14],
|
|
247
|
+
"str.text.missingTail": [130376, 28],
|
|
248
|
+
"str.missing.title": [131031, 30]
|
|
249
|
+
},
|
|
250
|
+
ext: { gam: [128937], bkd: [152535], txt: [129125, 129166, 129207, 129301, 129311, 130203, 130213], voc: [132489], his: [153638], sav: [129316, 129466] },
|
|
251
|
+
crc: "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nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+odZnfqd+p36nfqd+ofVnfqd+p36nfqd+p36nfopgoyjt8HpgJhF+SEg7X6EI8fPmfKrfFCAdzGgxJ4ANvXMDGdIsBZ/S7CikIPc1Hed+p36nfqd+p36nfqd+omTc3qwhsvgnfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+vYI8UswxPGTq8Kd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+ikcWaoAwqwdburRMj4KNogSgjTrlZiD7TnYK2hNBVZW8g+d+pGUcTsZuzJWZ+4="
|
|
252
|
+
},
|
|
253
|
+
{
|
|
254
|
+
id: "2.04",
|
|
255
|
+
size: 119074,
|
|
256
|
+
md5: "71db32c11731289ca92aace78a51acb3",
|
|
257
|
+
owner: [6144, 52],
|
|
258
|
+
version: 92881,
|
|
259
|
+
about: [
|
|
260
|
+
92855,
|
|
261
|
+
92881,
|
|
262
|
+
92907,
|
|
263
|
+
92937,
|
|
264
|
+
92967,
|
|
265
|
+
92997,
|
|
266
|
+
93028,
|
|
267
|
+
93059,
|
|
268
|
+
93090,
|
|
269
|
+
93121,
|
|
270
|
+
93152,
|
|
271
|
+
93183,
|
|
272
|
+
93214,
|
|
273
|
+
93225,
|
|
274
|
+
93256,
|
|
275
|
+
93287,
|
|
276
|
+
93318,
|
|
277
|
+
93349,
|
|
278
|
+
93380,
|
|
279
|
+
93411,
|
|
280
|
+
93442,
|
|
281
|
+
93473,
|
|
282
|
+
93504
|
|
283
|
+
],
|
|
284
|
+
text: {
|
|
285
|
+
"str.menu.play": [92556, 4],
|
|
286
|
+
"str.menu.instructions": [92561, 17],
|
|
287
|
+
"str.menu.storyline": [92579, 14],
|
|
288
|
+
"str.menu.credits": [92594, 11],
|
|
289
|
+
"str.menu.highScores": [92606, 18],
|
|
290
|
+
"str.menu.quit": [92625, 4],
|
|
291
|
+
"str.menu.noStoryline": [92474, 30, "No game-specific storyline. "],
|
|
292
|
+
"str.hiscore.title": [96972, 30, " Top Ten Scores"],
|
|
293
|
+
"str.hiscore.congrats": [96836, 21, " Congratulations!"],
|
|
294
|
+
"str.hiscore.enterName": [96910, 17, "Enter Your Name: "],
|
|
295
|
+
"str.invent.score": [93593, 14],
|
|
296
|
+
"str.invent.money": [93608, 13],
|
|
297
|
+
"str.invent.hitpoints": [93622, 13],
|
|
298
|
+
"str.invent.lives": [93636, 13],
|
|
299
|
+
"str.invent.time": [93650, 37],
|
|
300
|
+
"str.load.done": [92695, 16],
|
|
301
|
+
"str.save.done": [92843, 11],
|
|
302
|
+
"str.save.failed": [92818, 24],
|
|
303
|
+
"str.drop.title": [94177, 21],
|
|
304
|
+
"str.drop.help1": [94199, 25],
|
|
305
|
+
"str.drop.help2": [94225, 25],
|
|
306
|
+
"str.drop.help3": [94251, 25],
|
|
307
|
+
"str.text.more": [93749, 7],
|
|
308
|
+
"str.text.missingTitle": [93691, 13],
|
|
309
|
+
"str.text.missingFile": [93705, 14],
|
|
310
|
+
"str.text.missingTail": [93720, 28],
|
|
311
|
+
"str.missing.title": [94375, 30]
|
|
312
|
+
},
|
|
313
|
+
ext: { gam: [92281], bkd: [95725], txt: [92469, 92510, 92551, 92645, 92655, 93547, 93557], voc: [94754], his: [96828], sav: [92660, 92810] },
|
|
314
|
+
crc: "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"
|
|
315
|
+
},
|
|
316
|
+
{
|
|
317
|
+
id: "3.00",
|
|
318
|
+
size: 160598,
|
|
319
|
+
md5: "fcaf47d50ececa0b59cd22b3fae3cda3",
|
|
320
|
+
version: 153773,
|
|
321
|
+
about: [
|
|
322
|
+
153747,
|
|
323
|
+
153773,
|
|
324
|
+
153799,
|
|
325
|
+
153829,
|
|
326
|
+
153859,
|
|
327
|
+
153889,
|
|
328
|
+
153920,
|
|
329
|
+
153951,
|
|
330
|
+
153982,
|
|
331
|
+
154013,
|
|
332
|
+
154044,
|
|
333
|
+
154075,
|
|
334
|
+
154106,
|
|
335
|
+
154117,
|
|
336
|
+
154148,
|
|
337
|
+
154179,
|
|
338
|
+
154210,
|
|
339
|
+
154241,
|
|
340
|
+
154272,
|
|
341
|
+
154303,
|
|
342
|
+
154334,
|
|
343
|
+
154365
|
|
344
|
+
],
|
|
345
|
+
crc: "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RMMimgxwHhuHhGBetHGC8CD8llOLhb4pMFhUzaezQuqXwXply9Ho251w7zGBtwLhQfTgYxEtZ/wJX1JviaQ8aDyl476W89duLtww/v1xh7JSTy5j5d/KBayOwALGVy0qHEVFnXGu6YcyVRSmueAw8d+s+fYAtITtEWctxVLKJg5tlE43rnBTPFd7vxgbq3RHxpk5s/mwZyGbgMfp55Kh5yuBIng9AvEaHuszlP4qcnq8/cDXFD5wXGtxBUHYRvzEdOv/C3MByviCIMOzmAareYeacKXcTROygxnrkQPBouTp+Tq0wtkU0y5GUtl11l0lx4vQgauIbNKMbK02GSyfWSt29DhJEA3wAWQ8pp36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfqd+p36nfp31PiuH8x+6beRG/BDwxXfGepj6bOv4qBZYEoJjv8u2G/LSdbYqCxf/vlJN3oIxN8xQZ9aNCdEQYCh5icdZ8MabZbJVjS9k+cLCuViYN3FBCLPLMB0qTBDmTiWZNho/2mj0gHq7+Gd+nVJnV9uGesyso4KcBGhpyBXh98Wd076WmyPDU4="
|
|
346
|
+
},
|
|
347
|
+
{
|
|
348
|
+
id: "3.00-playgame",
|
|
349
|
+
size: 163130,
|
|
350
|
+
md5: "118173fc449b85a7871895c231e299ab",
|
|
351
|
+
version: 156220,
|
|
352
|
+
about: [
|
|
353
|
+
156194,
|
|
354
|
+
156220,
|
|
355
|
+
156246,
|
|
356
|
+
156276,
|
|
357
|
+
156306,
|
|
358
|
+
156336,
|
|
359
|
+
156367,
|
|
360
|
+
156398,
|
|
361
|
+
156429,
|
|
362
|
+
156460,
|
|
363
|
+
156491,
|
|
364
|
+
156522,
|
|
365
|
+
156553,
|
|
366
|
+
156564,
|
|
367
|
+
156595,
|
|
368
|
+
156626,
|
|
369
|
+
156657,
|
|
370
|
+
156688,
|
|
371
|
+
156719,
|
|
372
|
+
156750,
|
|
373
|
+
156781,
|
|
374
|
+
156812
|
|
375
|
+
],
|
|
376
|
+
crc: "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"
|
|
377
|
+
}
|
|
378
|
+
], fn = "Recreational Software Designs", T = /^\s*Version (\d\.\d{1,2})\s*$/, pn = (n) => M.find((t) => t.id === n);
|
|
379
|
+
function m(n) {
|
|
380
|
+
return n === "3.00-playgame" ? "Game-Maker 3.00 (PLAYGAME.EXE)" : M.some((t) => t.id === n) ? `Game-Maker ${n}` : "an unknown Game-Maker build";
|
|
381
|
+
}
|
|
382
|
+
function y(n, t, f = 80) {
|
|
383
|
+
let s = "";
|
|
384
|
+
for (let o = t; o < n.length && n[o] && s.length < f; o++) s += String.fromCharCode(n[o]);
|
|
385
|
+
return s;
|
|
386
|
+
}
|
|
387
|
+
function sn(n, t) {
|
|
388
|
+
n: for (let f = 0; f + t.length <= n.length; f++) {
|
|
389
|
+
for (let s = 0; s < t.length; s++) if (n[f + s] !== t.charCodeAt(s)) continue n;
|
|
390
|
+
return f;
|
|
391
|
+
}
|
|
392
|
+
return -1;
|
|
393
|
+
}
|
|
394
|
+
function Q(n, t) {
|
|
395
|
+
const f = n.slice();
|
|
396
|
+
return t.owner && f.fill(0, t.owner[0], t.owner[0] + t.owner[1]), f;
|
|
397
|
+
}
|
|
398
|
+
function R(n, t) {
|
|
399
|
+
return t.about.map((f) => y(n, f, 40));
|
|
400
|
+
}
|
|
401
|
+
function rn(n) {
|
|
402
|
+
for (const t of n) {
|
|
403
|
+
const f = /(?:copyright|\(c\))\s*\d{4}\s+by\s+(.+)/i.exec(t);
|
|
404
|
+
if (f) return f[1].trim();
|
|
405
|
+
}
|
|
406
|
+
return n.map((t) => t.trim()).find((t) => /[A-Za-z]{2}/.test(t));
|
|
407
|
+
}
|
|
408
|
+
function x(n, t) {
|
|
409
|
+
const f = Uint8Array.from(atob(t.crc), (r) => r.charCodeAt(0)), s = Q(n, t), o = [];
|
|
410
|
+
for (let r = 0; r * h < s.length; r++) {
|
|
411
|
+
const d = V(s.subarray(r * h, (r + 1) * h));
|
|
412
|
+
((d & 255) !== f[r * 2] || (d >> 8 & 255) !== f[r * 2 + 1]) && o.push(r);
|
|
413
|
+
}
|
|
414
|
+
return o;
|
|
415
|
+
}
|
|
416
|
+
function on(n, t) {
|
|
417
|
+
const f = new Set(t);
|
|
418
|
+
return n.about.some((s) => f.has(Math.floor(s / h)));
|
|
419
|
+
}
|
|
420
|
+
function qn(n) {
|
|
421
|
+
const t = String.fromCharCode(...n.subarray(0, 120));
|
|
422
|
+
return /PKLITE|PKlite|LZ09|LZ91/.test(t);
|
|
423
|
+
}
|
|
424
|
+
function cn(n) {
|
|
425
|
+
const t = [], f = sn(n, fn), s = f >= 26 ? y(n, f - 26, 30) : void 0, o = s !== void 0 ? T.exec(s)?.[1] : void 0, r = M.filter((d) => d.size === n.length);
|
|
426
|
+
for (const d of r)
|
|
427
|
+
if (F(Q(n, d)) === d.md5)
|
|
428
|
+
return t.push(
|
|
429
|
+
`${n.length.toLocaleString("en-US")} bytes and every byte as ${m(d.id)}’s own copy has it${d.owner ? " (its owner field aside)" : ""}`
|
|
430
|
+
), { build: d.id, label: m(d.id), confidence: "high", reasons: t, stock: !0, versionLine: y(n, d.version, 30).trim() };
|
|
431
|
+
if (r.length) {
|
|
432
|
+
const d = r[0], e = y(n, d.version, 30), p = e.trim();
|
|
433
|
+
t.push(`${n.length.toLocaleString("en-US")} bytes, the size of ${m(d.id)}’s player`), t.push(`${x(n, d).length} of its ${Math.ceil(n.length / h)} 128-byte blocks differ from the stock copy`);
|
|
434
|
+
const i = { build: d.id, label: m(d.id), confidence: "medium", reasons: t, stock: !1, versionLine: p };
|
|
435
|
+
return f === d.version + 26 && T.exec(e)?.[1] === d.id.replace("-playgame", "") ? (t.push(`its About text says “${p}” where that build has it`), i.confidence = "high") : o ? t.push(`its About text says “${N(s).trim()}”${f === d.version + 26 ? ", an edited version line" : " at another offset"}`) : (i.aboutAuthor = rn(R(n, d)), t.push(
|
|
436
|
+
`RSD’s About text is replaced${i.aboutAuthor ? ` (by ${N(i.aboutAuthor)}, as the new text says)` : ""}, so no version line backs the size`
|
|
437
|
+
)), i;
|
|
438
|
+
}
|
|
439
|
+
if (o) {
|
|
440
|
+
const d = M.find((e) => e.id === o);
|
|
441
|
+
return t.push(`no known build is ${n.length.toLocaleString("en-US")} bytes, but its About text says “${s.trim()}”`), {
|
|
442
|
+
build: "unknown",
|
|
443
|
+
label: d ? `${m(d.id)} (a copy of another size)` : m("unknown"),
|
|
444
|
+
confidence: "low",
|
|
445
|
+
reasons: t,
|
|
446
|
+
stock: !1,
|
|
447
|
+
versionLine: s.trim()
|
|
448
|
+
};
|
|
449
|
+
}
|
|
450
|
+
return t.push(
|
|
451
|
+
qn(n) ? "it is compressed (PKLITE or LZEXE), so its size and text can’t be compared" : `no known build is ${n.length.toLocaleString("en-US")} bytes and it has no Game-Maker version line`
|
|
452
|
+
), { build: "unknown", label: m("unknown"), confidence: "low", reasons: t, stock: !1 };
|
|
453
|
+
}
|
|
454
|
+
function xn(n, t) {
|
|
455
|
+
const f = [], s = t.some((e) => e.length > 4 && e[0] === 71 && e[1] === 77), o = (e) => e.toLowerCase().replace(/^.*\./, ""), r = n.some((e) => o(e) === "cmf"), d = n.some((e) => /(^|[\\/])gmtitle\.gif$/i.test(e));
|
|
456
|
+
return s ? (f.push("its .gam starts with the “GM” header Game-Maker 3.00 writes"), { estimate: "3.00", confidence: "high", reasons: f }) : (t.length && f.push("its .gam has the pre-3.00 layout, which every build from 1.0 to 2.04 wrote alike"), r && f.push("it has CMF songs, which the 1.0 and 1.04 players can’t play (they have no FM music code)"), d && f.push("it has gmtitle.gif, the title picture the players before 3.00 show first"), r ? { estimate: "2.00 or later, before 3.00", confidence: t.length ? "medium" : "low", reasons: f } : t.length || d ? { estimate: "before 3.00", confidence: "medium", reasons: f } : (f.push("nothing in the folder names a build"), { estimate: "unknown", confidence: "low", reasons: f }));
|
|
457
|
+
}
|
|
458
|
+
function an(n, t) {
|
|
459
|
+
const f = {}, s = n.slice();
|
|
460
|
+
for (const [o, [r, d, e]] of Object.entries(t.text ?? {})) {
|
|
461
|
+
const p = P(o);
|
|
462
|
+
if (!p || p.kind !== "text" && p.kind !== "format") continue;
|
|
463
|
+
const i = e ?? p.stock.padEnd(d, " ");
|
|
464
|
+
let c = !0;
|
|
465
|
+
for (let q = 0; q < d; q++) c &&= n[r + q] === i.charCodeAt(q);
|
|
466
|
+
if (c) continue;
|
|
467
|
+
let u = "";
|
|
468
|
+
for (let q = 0; q < d && n[r + q]; q++) u += String.fromCharCode(n[r + q]);
|
|
469
|
+
const a = e ? u.trim() : u.trimEnd();
|
|
470
|
+
if (!J(p, a)) {
|
|
471
|
+
O(p, a) || (f[o] = a);
|
|
472
|
+
for (let q = 0; q < d; q++) s[r + q] = i.charCodeAt(q);
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
for (const [o, r] of Object.entries(t.ext ?? {})) {
|
|
476
|
+
const d = r.map((e) => n[e] === 46 ? String.fromCharCode(n[e + 1], n[e + 2], n[e + 3]).toLowerCase() : "");
|
|
477
|
+
if (!(!d[0] || d.some((e) => e !== d[0]) || d[0] === o || j(o, d[0]))) {
|
|
478
|
+
f[I(o)] = d[0];
|
|
479
|
+
for (const e of r) for (let p = 0; p < 3; p++) s[e + 1 + p] = o.charCodeAt(p);
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
return { patches: f, reverted: s };
|
|
483
|
+
}
|
|
484
|
+
function ln(n, t) {
|
|
485
|
+
const f = n.slice(), s = n.slice();
|
|
486
|
+
for (const [o, r] of Object.entries(t)) {
|
|
487
|
+
const d = P(o);
|
|
488
|
+
if (!d) continue;
|
|
489
|
+
H(s, d, r);
|
|
490
|
+
const e = tn(o);
|
|
491
|
+
e.every((p) => s[p] === n[p]) && X(f, d);
|
|
492
|
+
for (const p of e) s[p] = n[p];
|
|
493
|
+
}
|
|
494
|
+
for (const o of Object.keys(t)) {
|
|
495
|
+
const r = G(o);
|
|
496
|
+
if (r) for (const d of r.offsets) for (let e = 0; e < 3; e++) f[d + 1 + e] = r.ext.charCodeAt(e);
|
|
497
|
+
}
|
|
498
|
+
return f;
|
|
499
|
+
}
|
|
500
|
+
function un(n, t) {
|
|
501
|
+
let f = {}, s = n;
|
|
502
|
+
t.id === "3.00" ? (f = nn(n)?.patches ?? {}, s = ln(n, f)) : t.text && ({ patches: f, reverted: s } = an(n, t));
|
|
503
|
+
const o = Q(n, t), r = [];
|
|
504
|
+
let d = [];
|
|
505
|
+
const e = () => {
|
|
506
|
+
if (!d.length) return;
|
|
507
|
+
const p = d[0] * h;
|
|
508
|
+
r.push({ offset: p, data: en(o.subarray(p, Math.min(o.length, (d[d.length - 1] + 1) * h))) }), d = [];
|
|
509
|
+
};
|
|
510
|
+
for (const p of x(s, t))
|
|
511
|
+
d.length && p !== d[d.length - 1] + 1 && e(), d.push(p);
|
|
512
|
+
return e(), { patches: f, regions: r };
|
|
513
|
+
}
|
|
514
|
+
const C = (n) => (/\.([^.]*)$/.exec(n)?.[1] ?? "").toLowerCase(), L = (n) => K(n).replace(/\.[^.]*$/, "");
|
|
515
|
+
function mn(n, t) {
|
|
516
|
+
return n === 0 ? t === 1 || t === 3 || t === 5 ? "cmf" : t === 11 ? "rec" : void 0 : n === 1 ? t === 1 || t === 3 ? "cmf" : void 0 : t < 9 ? E[t] : void 0;
|
|
517
|
+
}
|
|
518
|
+
const hn = /* @__PURE__ */ new Set(["gam", "pal", "map", "bbl", "mon", "mbl", "chr", "cbl", "snd", "cmf", "gif", "bkd", "fli", "txt", "lst", "voc", "rec", "his", "sav"]);
|
|
519
|
+
function gn(n, t) {
|
|
520
|
+
return n === "fli" ? t.length >= 6 && t[5] === 175 && (t[4] === 17 || t[4] === 18) : n === "gif" ? t.length >= 4 && String.fromCharCode(...t.subarray(0, 4)) === "GIF8" : !0;
|
|
521
|
+
}
|
|
522
|
+
function bn(n, t) {
|
|
523
|
+
const f = /* @__PURE__ */ new Map();
|
|
524
|
+
for (const [e, p] of Object.entries(t)) p && f.set(p.slice(1), e.slice(1));
|
|
525
|
+
const s = t[".gam"] === "", o = n.names().filter((e) => f.get(C(e)) === "gam" || s && !e.includes(".")), r = /* @__PURE__ */ new Map();
|
|
526
|
+
for (const e of o)
|
|
527
|
+
try {
|
|
528
|
+
W(n.get(e)).scenes.forEach(
|
|
529
|
+
(p, i) => p.files.forEach((c, u) => {
|
|
530
|
+
const a = C(c), q = mn(i, u);
|
|
531
|
+
c && q && !hn.has(a) && !f.has(a) && (r.get(a) ?? r.set(a, /* @__PURE__ */ new Set()).get(a)).add(q);
|
|
532
|
+
})
|
|
533
|
+
);
|
|
534
|
+
} catch {
|
|
535
|
+
}
|
|
536
|
+
for (const [e, p] of r) p.size === 1 && f.set(e, [...p][0]);
|
|
537
|
+
const d = /* @__PURE__ */ new Map();
|
|
538
|
+
for (const e of n.names()) {
|
|
539
|
+
const p = C(e), i = f.get(p) ?? (s && o.includes(e) ? "gam" : void 0);
|
|
540
|
+
i && gn(i, n.get(e)) && d.set(e, p ? `${e.slice(0, -p.length)}${i}` : `${e}.gam`);
|
|
541
|
+
}
|
|
542
|
+
for (const [e, p] of d) {
|
|
543
|
+
const i = n.get(e);
|
|
544
|
+
n.delete(e), n.set(p, i);
|
|
545
|
+
}
|
|
546
|
+
for (const e of n.names()) /\.(gam|lst|bkd)$/.test(e) && n.set(e, dn(n.get(e), f));
|
|
547
|
+
return f;
|
|
548
|
+
}
|
|
549
|
+
const yn = (n) => Object.fromEntries(
|
|
550
|
+
Object.entries(n).filter(([t]) => G(t)).map(([t, f]) => [`.${G(t).ext}`, `.${f}`])
|
|
551
|
+
);
|
|
552
|
+
function Bn(n, t) {
|
|
553
|
+
if (!t.length) return;
|
|
554
|
+
const f = t.map((l) => ({ p: l, id: cn(l.bytes) })), s = f.filter((l) => l.id.build !== "unknown"), o = new Set(n.names().map(L)), r = (l) => (o.has(L(l.p.name)) ? 0 : 2) + (l.id.build === "3.00" ? 0 : 1), d = [...s.length ? s : f].sort((l, w) => r(l) - r(w))[0];
|
|
555
|
+
if (!s.length && !d.id.versionLine) return;
|
|
556
|
+
const e = d.p, p = e.name.replace(/^.*[\\/]/, "").toUpperCase(), i = pn(d.id.build), c = i && !d.id.stock && i.id !== "3.00-playgame" ? un(e.bytes, i) : { patches: {}, regions: [] }, u = i && !d.id.stock ? x(e.bytes, i) : [], a = {
|
|
557
|
+
...d.id,
|
|
558
|
+
exe: p,
|
|
559
|
+
size: e.bytes.length,
|
|
560
|
+
md5: F(e.bytes),
|
|
561
|
+
regions: c.regions,
|
|
562
|
+
importPatches: c.patches,
|
|
563
|
+
...i && on(i, u) ? { about: R(e.bytes, i) } : {}
|
|
564
|
+
};
|
|
565
|
+
if (d.id.stock || !i) return { exe: p, patches: {}, message: "", origin: a };
|
|
566
|
+
const q = [], Z = i.id !== "3.00" ? ` (Game-Maker ${i.id}’s, read by its 3.00 equivalents)` : "", v = Object.keys(S(c.patches)).length;
|
|
567
|
+
v && q.push(
|
|
568
|
+
`${p} is a hand-edited Game-Maker player: ${v} change${v === 1 ? "" : "s"} to its words, colors or timings${Z} are in the DOS player panel now.`
|
|
569
|
+
);
|
|
570
|
+
let g = c.patches;
|
|
571
|
+
const k = i.id === "3.00" ? U(e.bytes) : yn(c.patches);
|
|
572
|
+
if (Object.keys(k).length) {
|
|
573
|
+
const l = bn(n, k), w = Object.values(k).filter(Boolean).slice(0, 2), b = { ...g };
|
|
574
|
+
for (const [B, z] of l) {
|
|
575
|
+
const A = $.find((D) => D.ext === z && !D.offsets.length);
|
|
576
|
+
A && !j(A.ext, B) && (b[I(A.ext)] = B);
|
|
577
|
+
}
|
|
578
|
+
g = _(b).size ? S(b) : b;
|
|
579
|
+
const Y = Object.keys(g).length > Object.keys(S(g)).length;
|
|
580
|
+
q.push(
|
|
581
|
+
`${p} was changed to look for its files under other extensions (${w.join(", ")}…). Their ${l.size} kinds of file are renamed back to Game-Maker’s own, so they open here.${Y ? " The DOS player panel’s Files tab keeps their extensions, so the DOS download renames them again." : ""}`
|
|
582
|
+
);
|
|
583
|
+
}
|
|
584
|
+
return c.regions.length && q.push(
|
|
585
|
+
i.id === "3.00" ? "Its other changes (such as an About page of its own) are kept as they were: the project’s Player file shows them, and the DOS download writes them back." : "Its other changes (such as an About page of its own) are kept read-only in the project’s Player file; the DOS download uses Game-Maker 3.00’s player, so they aren’t in it."
|
|
586
|
+
), { exe: p, patches: g, message: q.join(" "), origin: a };
|
|
587
|
+
}
|
|
588
|
+
export {
|
|
589
|
+
h as BLOCK,
|
|
590
|
+
M as BUILD_DATA,
|
|
591
|
+
R as aboutLines,
|
|
592
|
+
Bn as adoptPlayer,
|
|
593
|
+
pn as buildData,
|
|
594
|
+
m as buildLabel,
|
|
595
|
+
xn as estimateFromFolder,
|
|
596
|
+
cn as identifyPlayer,
|
|
597
|
+
un as preservePlayer,
|
|
598
|
+
Tn as regionText
|
|
599
|
+
};
|