QFT 1.3
This commit is contained in:
parent
375ba5eb73
commit
313ee79416
10 changed files with 261 additions and 598 deletions
348
Codes.xml
348
Codes.xml
|
@ -1237,12 +1237,14 @@
|
|||
<title lang="en-US">Quarterframe Timer (Experimental)</title>
|
||||
<title lang="ja-JP">QFタイマー</title>
|
||||
<author>Noki Doki, sup39(サポミク)</author>
|
||||
<version>1.2</version>
|
||||
<date>Oct 16, 2022</date>
|
||||
<version>1.3</version>
|
||||
<date>Dec 16, 2022</date>
|
||||
<dependencies version="GMSJ01">drawText</dependencies>
|
||||
<dependencies version="GMSE01">drawText</dependencies>
|
||||
<dependencies version="GMSP01">drawText</dependencies>
|
||||
<dependencies version="GMSJ0A">drawText</dependencies>
|
||||
<description lang="en-US">
|
||||
Adds an in-game timer to every level, starting on the last black frame after the
|
||||
Adds an in-game timer to every level, starting on the last black frame of the
|
||||
loading screen and ending as soon as the 'Shine Get' animation starts
|
||||
(similar to the x-cam timer of SM64).
|
||||
|
||||
|
@ -1251,46 +1253,45 @@
|
|||
:::
|
||||
</description>
|
||||
<source version="GMSJ01">
|
||||
C20ECE44 0000000B
|
||||
C20ECE44 00000006
|
||||
981A0260 3CE0817F
|
||||
880700B3 2C000000
|
||||
38800000 908700BC
|
||||
41820010 B08700B2
|
||||
38000000 900700BC
|
||||
41820010 B00700B2
|
||||
3800FFFC 900700B4
|
||||
60E30110 60E50094
|
||||
80CD97F8 80C60048
|
||||
60E700A4 39000002
|
||||
39200000 3D808001
|
||||
618C9904 7D8803A6
|
||||
4E800021 00000000
|
||||
C2206738 0000001B
|
||||
3C60817F 888300B2
|
||||
810300B4 2C040000
|
||||
40A20030 808300BC
|
||||
2C040000 40A20010
|
||||
810D97E8 8108005C
|
||||
48000010 3884FFFF
|
||||
908300BC 810300B8
|
||||
800300B4 7D080214
|
||||
3CE0000A 60E7F9B0
|
||||
7C074000 40A00010
|
||||
7CE83B78 98E300B2
|
||||
90E300B4 1D0803E9
|
||||
38000078 7D080396
|
||||
60000000 00000000
|
||||
C2206738 0000001F
|
||||
3C60817F 6064011C
|
||||
38630094 3D808020
|
||||
398C1EA8 7D8803A6
|
||||
4E800021 3C60817F
|
||||
888300B2 810300B4
|
||||
2C040000 40A20030
|
||||
808300BC 2C040000
|
||||
40A20010 810D97E8
|
||||
8108005C 48000010
|
||||
3884FFFF 908300BC
|
||||
810300B8 800300B4
|
||||
7D080214 3CE0000A
|
||||
60E7F9B0 7C074000
|
||||
40A00010 7CE83B78
|
||||
98E300B2 90E300B4
|
||||
1D0803E9 38000078
|
||||
7D080396 9421FFF0
|
||||
380003E8 7CE80396
|
||||
7C0701D6 7D004050
|
||||
3800003C 7CC70396
|
||||
7C0601D6 7CE03850
|
||||
38A300A4 3880000F
|
||||
80630210 4CC63182
|
||||
3D808008 618C40C4
|
||||
7D8803A6 4E800021
|
||||
3C60817F 60630110
|
||||
38800000 38A00000
|
||||
38C10E90 38E00081
|
||||
3D808001 618C8E64
|
||||
7D8803A6 4E800021
|
||||
881F0046 00000000
|
||||
91010008 3800003C
|
||||
7D270396 7C0901D6
|
||||
7D403850 80E30118
|
||||
390300A4 80C30114
|
||||
3D80817F 80A30110
|
||||
618C0238 808300A0
|
||||
7D8803A6 80630094
|
||||
4E800021 38210010
|
||||
38610E90 3D808003
|
||||
398C5228 7D8803A6
|
||||
4E800021 881F0046
|
||||
60000000 00000000
|
||||
C20EFA30 00000005
|
||||
3CA0817F A00500B2
|
||||
2C000000 40820014
|
||||
|
@ -1327,64 +1328,47 @@
|
|||
5400003A 900500B8
|
||||
3800FFFF 900500BC
|
||||
60000000 00000000
|
||||
C2196314 00000004
|
||||
80AD97E8 8005005C
|
||||
3CA0817F 900500B8
|
||||
3800001E 900500BC
|
||||
38A00000 00000000
|
||||
C2196128 00000005
|
||||
7C030378 80A3005C
|
||||
38A50003 54A0003A
|
||||
3CA0817F 900500B8
|
||||
3800001E 900500BC
|
||||
60000000 00000000
|
||||
077F0094 0000001D
|
||||
00000010 000001A0
|
||||
00000280 000001E0
|
||||
25753A25 3032752E
|
||||
25303375 00000000
|
||||
</source>
|
||||
<source version="GMSE01">
|
||||
C22998C0 0000000B
|
||||
C22998C0 00000006
|
||||
981A0260 3CE0817F
|
||||
880700B3 2C000000
|
||||
38800000 908700BC
|
||||
41820010 B08700B2
|
||||
38000000 900700BC
|
||||
41820010 B00700B2
|
||||
3800FFFC 900700B4
|
||||
60E30110 60E50094
|
||||
80CD9FC8 80C60048
|
||||
60E700A4 39000002
|
||||
39200000 3D80802D
|
||||
618C0848 7D8803A6
|
||||
4E800021 00000000
|
||||
C2143F18 0000001B
|
||||
3C60817F 888300B2
|
||||
810300B4 2C040000
|
||||
40A20030 808300BC
|
||||
2C040000 40A20010
|
||||
810D9FB8 8108005C
|
||||
48000010 3884FFFF
|
||||
908300BC 810300B8
|
||||
800300B4 7D080214
|
||||
3CE0000A 60E7F9B0
|
||||
7C074000 40A00010
|
||||
7CE83B78 98E300B2
|
||||
90E300B4 1D0803E9
|
||||
38000078 7D080396
|
||||
60000000 00000000
|
||||
C2143F18 0000001F
|
||||
3C60817F 6064011C
|
||||
38630094 3D808014
|
||||
398C0390 7D8803A6
|
||||
4E800021 3C60817F
|
||||
888300B2 810300B4
|
||||
2C040000 40A20030
|
||||
808300BC 2C040000
|
||||
40A20010 810D9FB8
|
||||
8108005C 48000010
|
||||
3884FFFF 908300BC
|
||||
810300B8 800300B4
|
||||
7D080214 3CE0000A
|
||||
60E7F9B0 7C074000
|
||||
40A00010 7CE83B78
|
||||
98E300B2 90E300B4
|
||||
1D0803E9 38000078
|
||||
7D080396 9421FFF0
|
||||
380003E8 7CE80396
|
||||
7C0701D6 7D004050
|
||||
3800003C 7CC70396
|
||||
7C0601D6 7CE03850
|
||||
38A300A4 3880000F
|
||||
80630210 4CC63182
|
||||
3D808033 618C97A4
|
||||
7D8803A6 4E800021
|
||||
3C60817F 60630110
|
||||
38800000 38A00000
|
||||
38C10BD0 38E00081
|
||||
3D80802C 618CFDA8
|
||||
7D8803A6 4E800021
|
||||
881F0046 00000000
|
||||
91010008 3800003C
|
||||
7D270396 7C0901D6
|
||||
7D403850 80E30118
|
||||
390300A4 80C30114
|
||||
3D80817F 80A30110
|
||||
618C0238 808300A0
|
||||
7D8803A6 80630094
|
||||
4E800021 38210010
|
||||
38610BD0 3D80802F
|
||||
398CB6BC 7D8803A6
|
||||
4E800021 881F0046
|
||||
60000000 00000000
|
||||
C229C520 00000005
|
||||
3CA0817F A00500B2
|
||||
2C000000 40820014
|
||||
|
@ -1421,64 +1405,47 @@
|
|||
5400003A 900500B8
|
||||
3800FFFF 900500BC
|
||||
60000000 00000000
|
||||
077F0094 0000001D
|
||||
00000010 000001A0
|
||||
00000280 000001E0
|
||||
25753A25 3032752E
|
||||
25303375 00000000
|
||||
C21BE474 00000004
|
||||
80AD9FB8 8005005C
|
||||
3CA0817F 900500B8
|
||||
3800001E 900500BC
|
||||
38A00000 00000000
|
||||
C21BE288 00000005
|
||||
7C030378 80A3005C
|
||||
38A50003 54A0003A
|
||||
3CA0817F 900500B8
|
||||
3800001E 900500BC
|
||||
60000000 00000000
|
||||
</source>
|
||||
<source version="GMSP01">
|
||||
C2291758 0000000B
|
||||
C2291758 00000006
|
||||
981A0260 3CE0817F
|
||||
880700B3 2C000000
|
||||
38800000 908700BC
|
||||
41820010 B08700B2
|
||||
38000000 900700BC
|
||||
41820010 B00700B2
|
||||
3800FFFC 900700B4
|
||||
60E30110 60E50094
|
||||
80CD9EF0 80C60048
|
||||
60E700A4 39000002
|
||||
39200000 3D80802C
|
||||
618C89F0 7D8803A6
|
||||
4E800021 00000000
|
||||
C2138B54 0000001B
|
||||
3C60817F 888300B2
|
||||
810300B4 2C040000
|
||||
40A20030 808300BC
|
||||
2C040000 40A20010
|
||||
810D9EE0 8108005C
|
||||
48000010 3884FFFF
|
||||
908300BC 810300B8
|
||||
800300B4 7D080214
|
||||
3CE0000A 60E7F9B0
|
||||
7C074000 40A00010
|
||||
7CE83B78 98E300B2
|
||||
90E300B4 1D0803E9
|
||||
38000078 7D080396
|
||||
60000000 00000000
|
||||
C2138B54 0000001F
|
||||
3C60817F 6064011C
|
||||
38630094 3D808013
|
||||
398C4F0C 7D8803A6
|
||||
4E800021 3C60817F
|
||||
888300B2 810300B4
|
||||
2C040000 40A20030
|
||||
808300BC 2C040000
|
||||
40A20010 810D9EE0
|
||||
8108005C 48000010
|
||||
3884FFFF 908300BC
|
||||
810300B8 800300B4
|
||||
7D080214 3CE0000A
|
||||
60E7F9B0 7C074000
|
||||
40A00010 7CE83B78
|
||||
98E300B2 90E300B4
|
||||
1D0803E9 38000078
|
||||
7D080396 9421FFF0
|
||||
380003E8 7CE80396
|
||||
7C0701D6 7D004050
|
||||
3800003C 7CC70396
|
||||
7C0601D6 7CE03850
|
||||
38A300A4 3880000F
|
||||
80630210 4CC63182
|
||||
3D808033 618C1924
|
||||
7D8803A6 4E800021
|
||||
3C60817F 60630110
|
||||
38800000 38A00000
|
||||
38C10BE4 38E00081
|
||||
3D80802C 618C7F50
|
||||
7D8803A6 4E800021
|
||||
881F0046 00000000
|
||||
91010008 3800003C
|
||||
7D270396 7C0901D6
|
||||
7D403850 80E30118
|
||||
390300A4 80C30114
|
||||
3D80817F 80A30110
|
||||
618C0238 808300A0
|
||||
7D8803A6 80630094
|
||||
4E800021 38210010
|
||||
38610BE4 3D80802E
|
||||
398C3864 7D8803A6
|
||||
4E800021 881F0046
|
||||
60000000 00000000
|
||||
C22943FC 00000005
|
||||
3CA0817F A00500B2
|
||||
2C000000 40820014
|
||||
|
@ -1515,64 +1482,47 @@
|
|||
5400003A 900500B8
|
||||
3800FFFF 900500BC
|
||||
60000000 00000000
|
||||
077F0094 0000001D
|
||||
00000010 000001A0
|
||||
00000280 000001E0
|
||||
25753A25 3032752E
|
||||
25303375 00000000
|
||||
C21B632C 00000004
|
||||
80AD9EE0 8005005C
|
||||
3CA0817F 900500B8
|
||||
3800001E 900500BC
|
||||
38A00000 00000000
|
||||
C21B6140 00000005
|
||||
7C030378 80A3005C
|
||||
38A50003 54A0003A
|
||||
3CA0817F 900500B8
|
||||
3800001E 900500BC
|
||||
60000000 00000000
|
||||
</source>
|
||||
<source version="GMSJ0A">
|
||||
C2279570 0000000B
|
||||
C2279570 00000006
|
||||
981A0260 3CE0817F
|
||||
880700B3 2C000000
|
||||
38800000 908700BC
|
||||
41820010 B08700B2
|
||||
38000000 900700BC
|
||||
41820010 B00700B2
|
||||
3800FFFC 900700B4
|
||||
60E30110 60E50094
|
||||
80CD9E88 80C60048
|
||||
60E700A4 39000002
|
||||
39200000 3D80802B
|
||||
618C0058 7D8803A6
|
||||
4E800021 00000000
|
||||
C21252A4 0000001B
|
||||
3C60817F 888300B2
|
||||
810300B4 2C040000
|
||||
40A20030 808300BC
|
||||
2C040000 40A20010
|
||||
810D9E78 8108005C
|
||||
48000010 3884FFFF
|
||||
908300BC 810300B8
|
||||
800300B4 7D080214
|
||||
3CE0000A 60E7F9B0
|
||||
7C074000 40A00010
|
||||
7CE83B78 98E300B2
|
||||
90E300B4 1D0803E9
|
||||
38000078 7D080396
|
||||
60000000 00000000
|
||||
C21252A4 0000001F
|
||||
3C60817F 6064011C
|
||||
38630094 3D808012
|
||||
398C1660 7D8803A6
|
||||
4E800021 3C60817F
|
||||
888300B2 810300B4
|
||||
2C040000 40A20030
|
||||
808300BC 2C040000
|
||||
40A20010 810D9E78
|
||||
8108005C 48000010
|
||||
3884FFFF 908300BC
|
||||
810300B8 800300B4
|
||||
7D080214 3CE0000A
|
||||
60E7F9B0 7C074000
|
||||
40A00010 7CE83B78
|
||||
98E300B2 90E300B4
|
||||
1D0803E9 38000078
|
||||
7D080396 9421FFF0
|
||||
380003E8 7CE80396
|
||||
7C0701D6 7D004050
|
||||
3800003C 7CC70396
|
||||
7C0601D6 7CE03850
|
||||
38A300A4 3880000F
|
||||
80630210 4CC63182
|
||||
3D808031 618C90A4
|
||||
7D8803A6 4E800021
|
||||
3C60817F 60630110
|
||||
38800000 38A00000
|
||||
38C10BEC 38E00081
|
||||
3D80802A 618CF5B8
|
||||
7D8803A6 4E800021
|
||||
881F0046 00000000
|
||||
91010008 3800003C
|
||||
7D270396 7C0901D6
|
||||
7D403850 80E30118
|
||||
390300A4 80C30114
|
||||
3D80817F 80A30110
|
||||
618C0238 808300A0
|
||||
7D8803A6 80630094
|
||||
4E800021 38210010
|
||||
38610BEC 3D80802D
|
||||
398CAECC 7D8803A6
|
||||
4E800021 881F0046
|
||||
60000000 00000000
|
||||
C227C214 00000005
|
||||
3CA0817F A00500B2
|
||||
2C000000 40820014
|
||||
|
@ -1609,22 +1559,6 @@
|
|||
5400003A 900500B8
|
||||
3800FFFF 900500BC
|
||||
60000000 00000000
|
||||
077F0094 0000001D
|
||||
00000010 000001A0
|
||||
00000280 000001E0
|
||||
25753A25 3032752E
|
||||
25303375 00000000
|
||||
C219E1FC 00000004
|
||||
80AD9E78 8005005C
|
||||
3CA0817F 900500B8
|
||||
3800001E 900500BC
|
||||
38A00000 00000000
|
||||
C219E010 00000005
|
||||
7C030378 80A3005C
|
||||
38A50003 54A0003A
|
||||
3CA0817F 900500B8
|
||||
3800001E 900500BC
|
||||
60000000 00000000
|
||||
</source>
|
||||
</code>
|
||||
<code>
|
||||
|
|
|
@ -1,4 +1,10 @@
|
|||
# Changelog
|
||||
|
||||
## Dec 16, 2022
|
||||
### Updated 'Quarterframe Timer'
|
||||
- Gave the timer a 1 frame headstart to make it more accurate to SGT and IL retiming rules
|
||||
- Ported the customizable visuals and freeze conditions to the US and PAL versions
|
||||
|
||||
## Nov 19, 2022
|
||||
Added `CAngle` for 'Customized Display' to show camera angle
|
||||
|
||||
|
|
|
@ -66,12 +66,12 @@ export default {
|
|||
for (const code of c) {
|
||||
const codegen = codegens[code.id];
|
||||
if (codegen) {
|
||||
code.source = codegen(this.versionIdentifier);
|
||||
code.source = codegen(this.versionIdentifier, code.source);
|
||||
}
|
||||
}
|
||||
|
||||
// generate file
|
||||
const codeSize = c.reduce((a, e) => a+e.source.length, 0)/2 + 16; // 8(00D0)+8(F000)
|
||||
const codeSize = c.reduce((a, e) => a + e.source.length, 0) / 2 + 16; // 8(00D0)+8(F000)
|
||||
// console.log(codeSize, c);
|
||||
switch (this.format) {
|
||||
case 'gct':
|
||||
|
@ -94,9 +94,12 @@ export default {
|
|||
}
|
||||
},
|
||||
alertDolphinCodeSize(size) {
|
||||
if (size > 3272) { // 0x3000-0x2338
|
||||
if (size > 3272) {
|
||||
// 0x3000-0x2338
|
||||
// excluding header+footer
|
||||
alert(translate('generatorconfig.alert.dolphin', this.$lang).replaceAll('{size}', size-16));
|
||||
alert(
|
||||
translate('generatorconfig.alert.dolphin', this.$lang).replaceAll('{size}', size - 16),
|
||||
);
|
||||
}
|
||||
},
|
||||
generateGCT(codes, version) {
|
||||
|
|
|
@ -4,90 +4,12 @@ export const r13off = -0x6048;
|
|||
* @type {{[key: string]: {addr: number, orig: number}}}
|
||||
*/
|
||||
export const freezeCodeInfo = {
|
||||
yellowCoin: { addr: 0x801becb4, orig: 0x8805000e },
|
||||
redCoin: { addr: 0x801be474, orig: 0x38a00000 },
|
||||
blueCoin: { addr: 0x801be288, orig: 0x7c030378 },
|
||||
item: { addr: 0x801bf3b4, orig: 0x8001001c },
|
||||
talk: { addr: 0x80298128, orig: 0x807f00b0 },
|
||||
demo: { addr: 0x802981a4, orig: 0x88e7013c },
|
||||
cleaned: { addr: 0x80215c58, orig: 0x80010044 },
|
||||
bowser: { addr: 0x801fc0a4, orig: 0x2c1d0003 },
|
||||
};
|
||||
|
||||
export const baseCode = `
|
||||
C22998C0 0000000B
|
||||
981A0260 3CE0817F
|
||||
880700B3 2C000000
|
||||
38000000 900700BC
|
||||
4182000C B00700B2
|
||||
900700B4 60E30110
|
||||
38800000 60E50094
|
||||
80CD9FC8 80C60048
|
||||
60E700A4 39000002
|
||||
39200000 3D80802D
|
||||
618C0848 7D8803A6
|
||||
4E800021 00000000
|
||||
C2143F18 0000001B
|
||||
3C60817F 888300B2
|
||||
810300B4 2C040000
|
||||
40A20030 808300BC
|
||||
2C040000 40A20010
|
||||
810D9FB8 8108005C
|
||||
48000010 3884FFFF
|
||||
908300BC 810300B8
|
||||
800300B4 7D080214
|
||||
3CE0000A 60E7F9B0
|
||||
7C074000 40A00010
|
||||
7CE83B78 98E300B2
|
||||
90E300B4 1D0803E9
|
||||
38000078 7D080396
|
||||
380003E8 7CE80396
|
||||
7C0701D6 7D004050
|
||||
3800003C 7CC70396
|
||||
7C0601D6 7CE03850
|
||||
38A300A4 3880000F
|
||||
80630210 4CC63182
|
||||
3D808033 618C97A4
|
||||
7D8803A6 4E800021
|
||||
3C60817F 60630110
|
||||
38800000 38A00000
|
||||
38C10BD0 38E00081
|
||||
3D80802C 618CFDA8
|
||||
7D8803A6 4E800021
|
||||
881F0046 00000000
|
||||
C229C520 00000005
|
||||
3CA0817F A00500B2
|
||||
2C000000 40820014
|
||||
800500B4 80C3005C
|
||||
7C003214 900500B4
|
||||
7C0802A6 00000000
|
||||
C229A5AC 00000005
|
||||
3CA0817F 80C500B4
|
||||
8003005C 7CC60214
|
||||
38C60004 54C6003A
|
||||
90C500B4 38C0FFFF
|
||||
B0C500B2 00000000
|
||||
C21FA380 00000005
|
||||
3D00817F 80C800B4
|
||||
8003005C 7CC60214
|
||||
38C60004 54C6003A
|
||||
90C800B4 38C0FFFF
|
||||
B0C800B2 00000000
|
||||
C2164E24 00000002
|
||||
2C030001 3C60817F
|
||||
98A300B3 00000000
|
||||
C229880C 00000002
|
||||
389C0001 3CA0817F
|
||||
988500B3 00000000
|
||||
C22991A8 00000005
|
||||
3CA0817F 38600001
|
||||
986500B3 807F005C
|
||||
38630003 5463003A
|
||||
906500B8 3860FFFF
|
||||
906500BC 00000000
|
||||
C229A36C 00000005
|
||||
3CA0817F 980500B3
|
||||
801E005C 30000004
|
||||
5400003A 900500B8
|
||||
3800FFFF 900500BC
|
||||
60000000 00000000
|
||||
077F0094 0000001D
|
||||
00000010 000001A0
|
||||
00000280 000001E0
|
||||
25753A25 3032752E
|
||||
25303375 00000000
|
||||
`;
|
||||
|
|
|
@ -13,80 +13,3 @@ export const freezeCodeInfo = {
|
|||
cleaned: { addr: 0x8017a3c0, orig: 0x80010044 },
|
||||
bowser: { addr: 0x801d3c78, orig: 0x2c1d0003 },
|
||||
};
|
||||
|
||||
export const baseCode = `
|
||||
C20ECE44 00000005
|
||||
981A0260 3CE0817F
|
||||
880700B3 2C000000
|
||||
38000000 900700BC
|
||||
4182000C B00700B2
|
||||
900700B4 00000000
|
||||
C2206738 0000001F
|
||||
3C60817F 6064011C
|
||||
38630094 3D808020
|
||||
398C1EA8 7D8803A6
|
||||
4E800021 3C60817F
|
||||
888300B2 810300B4
|
||||
2C040000 40820030
|
||||
808300BC 2C040000
|
||||
40820010 810D97E8
|
||||
8108005C 48000010
|
||||
3884FFFF 908300BC
|
||||
810300B8 800300B4
|
||||
7D080214 3CE0000A
|
||||
60E7F9B0 7C074000
|
||||
40800010 7CE83B78
|
||||
98E300B2 90E300B4
|
||||
3C60817F 1D0803E9
|
||||
38000078 7D080396
|
||||
9421FFF0 380003E8
|
||||
7CE80396 7C0701D6
|
||||
7D004050 91010008
|
||||
3800003C 7D270396
|
||||
7C0901D6 7D403850
|
||||
80E30118 390300A4
|
||||
80C30114 3D80817F
|
||||
80A30110 618C0238
|
||||
808300A0 7D8803A6
|
||||
80630094 4E800021
|
||||
38210010 38610E90
|
||||
3D808003 398C5228
|
||||
7D8803A6 4E800021
|
||||
881F0046 00000000
|
||||
C20EFA30 00000005
|
||||
3CA0817F A00500B2
|
||||
2C000000 40820014
|
||||
800500B4 80C3005C
|
||||
7C003214 900500B4
|
||||
7C0802A6 00000000
|
||||
C20EDB30 00000005
|
||||
3CA0817F 80C500B4
|
||||
8003005C 7CC60214
|
||||
38C60004 54C6003A
|
||||
90C500B4 38C0FFFF
|
||||
B0C500B2 00000000
|
||||
C21D1F38 00000005
|
||||
3D00817F 80C800B4
|
||||
8003005C 7CC60214
|
||||
38C60004 54C6003A
|
||||
90C800B4 38C0FFFF
|
||||
B0C800B2 00000000
|
||||
C22257CC 00000002
|
||||
2C030001 3C60817F
|
||||
98A300B3 00000000
|
||||
C20EBD78 00000002
|
||||
389C0001 3CA0817F
|
||||
988500B3 00000000
|
||||
C20EC72C 00000005
|
||||
3CA0817F 38600001
|
||||
986500B3 807F005C
|
||||
38630003 5463003A
|
||||
906500B8 3860FFFF
|
||||
906500BC 00000000
|
||||
C20ED8F0 00000005
|
||||
3CA0817F 980500B3
|
||||
801E005C 30000004
|
||||
5400003A 900500B8
|
||||
3800FFFF 900500BC
|
||||
60000000 00000000
|
||||
`;
|
||||
|
|
|
@ -13,80 +13,3 @@ export const freezeCodeInfo = {
|
|||
cleaned: { addr: 0x801f5af8, orig: 0x80010044 },
|
||||
bowser: { addr: 0x801dbe48, orig: 0x2c1d0003 },
|
||||
};
|
||||
|
||||
export const baseCode = `
|
||||
C2279570 00000005
|
||||
981A0260 3CE0817F
|
||||
880700B3 2C000000
|
||||
38000000 900700BC
|
||||
4182000C B00700B2
|
||||
900700B4 00000000
|
||||
C21252A4 0000001F
|
||||
3C60817F 6064011C
|
||||
38630094 3D808012
|
||||
398C1660 7D8803A6
|
||||
4E800021 3C60817F
|
||||
888300B2 810300B4
|
||||
2C040000 40820030
|
||||
808300BC 2C040000
|
||||
40820010 810D9E78
|
||||
8108005C 48000010
|
||||
3884FFFF 908300BC
|
||||
810300B8 800300B4
|
||||
7D080214 3CE0000A
|
||||
60E7F9B0 7C074000
|
||||
40800010 7CE83B78
|
||||
98E300B2 90E300B4
|
||||
3C60817F 1D0803E9
|
||||
38000078 7D080396
|
||||
9421FFF0 380003E8
|
||||
7CE80396 7C0701D6
|
||||
7D004050 91010008
|
||||
3800003C 7D270396
|
||||
7C0901D6 7D403850
|
||||
80E30118 390300A4
|
||||
80C30114 3D80817F
|
||||
80A30110 618C0238
|
||||
808300A0 7D8803A6
|
||||
80630094 4E800021
|
||||
38210010 38610E90
|
||||
3D80802D 398CAECC
|
||||
7D8803A6 4E800021
|
||||
881F0046 00000000
|
||||
C227C214 00000005
|
||||
3CA0817F A00500B2
|
||||
2C000000 40820014
|
||||
800500B4 80C3005C
|
||||
7C003214 900500B4
|
||||
7C0802A6 00000000
|
||||
C227A298 00000005
|
||||
3CA0817F 80C500B4
|
||||
8003005C 7CC60214
|
||||
38C60004 54C6003A
|
||||
90C500B4 38C0FFFF
|
||||
B0C500B2 00000000
|
||||
C21DA0FC 00000005
|
||||
3D00817F 80C800B4
|
||||
8003005C 7CC60214
|
||||
38C60004 54C6003A
|
||||
90C800B4 38C0FFFF
|
||||
B0C800B2 00000000
|
||||
C2145EBC 00000002
|
||||
2C030001 3C60817F
|
||||
98A300B3 00000000
|
||||
C22784B4 00000002
|
||||
389C0001 3CA0817F
|
||||
988500B3 00000000
|
||||
C2278E58 00000005
|
||||
3CA0817F 38600001
|
||||
986500B3 807F005C
|
||||
38630003 5463003A
|
||||
906500B8 3860FFFF
|
||||
906500BC 00000000
|
||||
C227A01C 00000005
|
||||
3CA0817F 980500B3
|
||||
801E005C 30000004
|
||||
5400003A 900500B8
|
||||
3800FFFF 900500BC
|
||||
60000000 00000000
|
||||
`;
|
||||
|
|
|
@ -4,90 +4,12 @@ export const r13off = -0x6120;
|
|||
* @type {{[key: string]: {addr: number, orig: number}}}
|
||||
*/
|
||||
export const freezeCodeInfo = {
|
||||
yellowCoin: { addr: 0x801b6b6c, orig: 0x8805000e },
|
||||
redCoin: { addr: 0x801b632c, orig: 0x38a00000 },
|
||||
blueCoin: { addr: 0x801b6140, orig: 0x7c030378 },
|
||||
item: { addr: 0x801b726c, orig: 0x8001001c },
|
||||
talk: { addr: 0x8028ffc0, orig: 0x807f00b0 },
|
||||
demo: { addr: 0x8029003c, orig: 0x88e7013c },
|
||||
cleaned: { addr: 0x8020db3c, orig: 0x80010044 },
|
||||
bowser: { addr: 0x801f3f88, orig: 0x2c1d0003 },
|
||||
};
|
||||
|
||||
export const baseCode = `
|
||||
C2291758 0000000B
|
||||
981A0260 3CE0817F
|
||||
880700B3 2C000000
|
||||
38000000 900700BC
|
||||
4182000C B00700B2
|
||||
900700B4 60E30110
|
||||
38800000 60E50094
|
||||
80CD9EF0 80C60048
|
||||
60E700A4 39000002
|
||||
39200000 3D80802C
|
||||
618C89F0 7D8803A6
|
||||
4E800021 00000000
|
||||
C2138B54 0000001B
|
||||
3C60817F 888300B2
|
||||
810300B4 2C040000
|
||||
40A20030 808300BC
|
||||
2C040000 40A20010
|
||||
810D9EE0 8108005C
|
||||
48000010 3884FFFF
|
||||
908300BC 810300B8
|
||||
800300B4 7D080214
|
||||
3CE0000A 60E7F9B0
|
||||
7C074000 40A00010
|
||||
7CE83B78 98E300B2
|
||||
90E300B4 1D0803E9
|
||||
38000078 7D080396
|
||||
380003E8 7CE80396
|
||||
7C0701D6 7D004050
|
||||
3800003C 7CC70396
|
||||
7C0601D6 7CE03850
|
||||
38A300A4 3880000F
|
||||
80630210 4CC63182
|
||||
3D808033 618C1924
|
||||
7D8803A6 4E800021
|
||||
3C60817F 60630110
|
||||
38800000 38A00000
|
||||
38C10BE4 38E00081
|
||||
3D80802C 618C7F50
|
||||
7D8803A6 4E800021
|
||||
881F0046 00000000
|
||||
C22943FC 00000005
|
||||
3CA0817F A00500B2
|
||||
2C000000 40820014
|
||||
800500B4 80C3005C
|
||||
7C003214 900500B4
|
||||
7C0802A6 00000000
|
||||
C2292480 00000005
|
||||
3CA0817F 80C500B4
|
||||
8003005C 7CC60214
|
||||
38C60004 54C6003A
|
||||
90C500B4 38C0FFFF
|
||||
B0C500B2 00000000
|
||||
C21F2258 00000005
|
||||
3D00817F 80C800B4
|
||||
8003005C 7CC60214
|
||||
38C60004 54C6003A
|
||||
90C800B4 38C0FFFF
|
||||
B0C800B2 00000000
|
||||
C2159E9C 00000002
|
||||
2C030001 3C60817F
|
||||
98A300B3 00000000
|
||||
C22906A4 00000002
|
||||
389C0001 3CA0817F
|
||||
988500B3 00000000
|
||||
C2291040 00000005
|
||||
3CA0817F 38600001
|
||||
986500B3 807F005C
|
||||
38630003 5463003A
|
||||
906500B8 3860FFFF
|
||||
906500BC 00000000
|
||||
C2292204 00000005
|
||||
3CA0817F 980500B3
|
||||
801E005C 30000004
|
||||
5400003A 900500B8
|
||||
3800FFFF 900500BC
|
||||
60000000 00000000
|
||||
077F0094 0000001D
|
||||
00000010 000001A0
|
||||
00000280 000001E0
|
||||
25753A25 3032752E
|
||||
25303375 00000000
|
||||
`;
|
||||
|
|
|
@ -67,11 +67,15 @@ export const codes = { GMSJ01, GMSE01, GMSP01, GMSJ0A };
|
|||
bl 817fxxxx
|
||||
****/
|
||||
const freezeCodeAddr = 0x817f0348;
|
||||
/** @param {keyof typeof codes} version */
|
||||
export default function codegen(version) {
|
||||
/**
|
||||
* @param {keyof typeof codes} version
|
||||
* @param {string=} baseCode
|
||||
*/
|
||||
export default function codegen(version, baseCode) {
|
||||
if (!baseCode) return '';
|
||||
|
||||
const config = getConfig();
|
||||
const { freezeCodeInfo, baseCode, r13off } = codes[version] ?? {};
|
||||
if (baseCode == null) return '';
|
||||
const { freezeCodeInfo, r13off } = codes[version] ?? {};
|
||||
|
||||
let code = baseCode;
|
||||
const { freezeDuration: frame } = config;
|
||||
|
@ -163,8 +167,7 @@ export default function codegen(version) {
|
|||
code += [...code04, ...code07].map(inst2gecko).join('');
|
||||
}
|
||||
|
||||
// ui (GMSJ01/GMSJ0A only)
|
||||
if (['GMSJ01', 'GMSJ0A'].includes(version)) {
|
||||
// ui
|
||||
/* bounds */
|
||||
const { x, y, fontSize, width } = config;
|
||||
const scale = fontSize / 20;
|
||||
|
@ -185,7 +188,6 @@ export default function codegen(version) {
|
|||
const fgColor2 =
|
||||
((config.fgRGB2 ?? config.fgRGB) & 0xffffff) * 256 + ((config.fgA2 ?? config.fgA) & 0xff);
|
||||
code += [fontSize, fgColor, fgColor2, bgColor].map(inst2gecko).join('');
|
||||
}
|
||||
|
||||
return code.replace(/\s/g, '');
|
||||
}
|
||||
|
|
|
@ -1,26 +1,32 @@
|
|||
<template>
|
||||
<div id="config">
|
||||
<section v-if="['GMSJ01', 'GMSJ0A'].includes(version)" class="appearance">
|
||||
<h3>{{l.h3}}</h3>
|
||||
<section class="appearance">
|
||||
<h3>{{ l.h3 }}</h3>
|
||||
<div>
|
||||
<TextConfig v-model="textConfig" />
|
||||
</div>
|
||||
<div>
|
||||
<span>{{l.bgColor}}</span><input type="color" :value="rgbI2S(bgRGB)" @change="bgRGB = rgbS2I($event.target.value)">
|
||||
<span>{{l.alpha}}</span><input type="number" min="0" max="255" v-model.number="bgA"><span>/255={{(bgA/2.55).toFixed(1)}}%</span>
|
||||
<span>{{ l.bgColor }}</span
|
||||
><input type="color" :value="rgbI2S(bgRGB)" @change="bgRGB = rgbS2I($event.target.value)" />
|
||||
<span>{{ l.alpha }}</span
|
||||
><input type="number" min="0" max="255" v-model.number="bgA" /><span
|
||||
>/255={{ (bgA / 2.55).toFixed(1) }}%</span
|
||||
>
|
||||
</div>
|
||||
</section>
|
||||
<section class="freeze">
|
||||
<h3>{{l.freeze.h3}}</h3>
|
||||
<h3>{{ l.freeze.h3 }}</h3>
|
||||
<div>
|
||||
{{l.freeze.duration}}<input type="number" min="0" max="32767" v-model="freezeDuration"> {{l.freeze.frame}}
|
||||
= {{(freezeDuration*1001/30000).toFixed(2)}} {{l.freeze.sec}}
|
||||
{{ l.freeze.duration }}<input type="number" min="0" max="32767" v-model="freezeDuration" />
|
||||
{{ l.freeze.frame }} = {{ ((freezeDuration * 1001) / 30000).toFixed(2) }} {{ l.freeze.sec }}
|
||||
</div>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr v-for="key in freezeKeys" :key="key">
|
||||
<td>{{l.freeze.rows[key]}}</td>
|
||||
<td><input type="checkbox" :checked="freeze[key]" @change="onChangeFreeze($event, key)"></td>
|
||||
<td>{{ l.freeze.rows[key] }}</td>
|
||||
<td>
|
||||
<input type="checkbox" :checked="freeze[key]" @change="onChangeFreeze($event, key)" />
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
@ -29,15 +35,27 @@
|
|||
</template>
|
||||
|
||||
<script>
|
||||
import {getConfig, lskey, codes} from './codegen.js';
|
||||
import {rgbI2S, rgbS2I, rgbaI2S} from '../utils';
|
||||
import { getConfig, lskey, codes } from './codegen.js';
|
||||
import { rgbI2S, rgbS2I, rgbaI2S } from '../utils';
|
||||
import labels from './labels.json';
|
||||
import TextConfig from '../TextConfig.vue';
|
||||
|
||||
function updateConfig() {
|
||||
const {x, y, fontSize, width, fgRGB, fgA, fgRGB2, fgA2, bgRGB, bgA, freeze, freezeDuration} = this;
|
||||
const { x, y, fontSize, width, fgRGB, fgA, fgRGB2, fgA2, bgRGB, bgA, freeze, freezeDuration } =
|
||||
this;
|
||||
const config = {
|
||||
x, y, fontSize, width, fgRGB, fgA, fgRGB2, fgA2, bgRGB, bgA, freeze, freezeDuration
|
||||
x,
|
||||
y,
|
||||
fontSize,
|
||||
width,
|
||||
fgRGB,
|
||||
fgA,
|
||||
fgRGB2,
|
||||
fgA2,
|
||||
bgRGB,
|
||||
bgA,
|
||||
freeze,
|
||||
freezeDuration,
|
||||
};
|
||||
localStorage.setItem(lskey, JSON.stringify(config));
|
||||
this.$emit('config', config);
|
||||
|
@ -48,7 +66,7 @@ export default {
|
|||
TextConfig,
|
||||
},
|
||||
props: {
|
||||
version: {type: String},
|
||||
version: { type: String },
|
||||
},
|
||||
methods: {
|
||||
onChangeFreeze($event, key) {
|
||||
|
@ -70,12 +88,21 @@ export default {
|
|||
rgbaI2S,
|
||||
},
|
||||
data() {
|
||||
const {x, y, fontSize, width, fgRGB, fgA, fgRGB2, fgA2, bgRGB, bgA, freeze, freezeDuration} = getConfig();
|
||||
const { x, y, fontSize, width, fgRGB, fgA, fgRGB2, fgA2, bgRGB, bgA, freeze, freezeDuration } =
|
||||
getConfig();
|
||||
return {
|
||||
x, y, fontSize,
|
||||
fgRGB, fgA, fgRGB2, fgA2,
|
||||
width, bgRGB, bgA,
|
||||
freeze, freezeDuration,
|
||||
x,
|
||||
y,
|
||||
fontSize,
|
||||
fgRGB,
|
||||
fgA,
|
||||
fgRGB2,
|
||||
fgA2,
|
||||
width,
|
||||
bgRGB,
|
||||
bgA,
|
||||
freeze,
|
||||
freezeDuration,
|
||||
// const
|
||||
freezeKeys: Object.keys(codes[this.version]?.freezeCodeInfo ?? {}),
|
||||
};
|
||||
|
@ -86,8 +113,8 @@ export default {
|
|||
},
|
||||
textConfig: {
|
||||
get() {
|
||||
const {x, y, fontSize, fgRGB, fgA, fgRGB2, fgA2} = this;
|
||||
return {x, y, fontSize, fgRGB, fgA, fgRGB2, fgA2};
|
||||
const { x, y, fontSize, fgRGB, fgA, fgRGB2, fgA2 } = this;
|
||||
return { x, y, fontSize, fgRGB, fgA, fgRGB2, fgA2 };
|
||||
},
|
||||
set(value) {
|
||||
Object.assign(this, value);
|
||||
|
@ -101,14 +128,15 @@ export default {
|
|||
bgA: updateConfig,
|
||||
freezeDuration: updateConfig,
|
||||
},
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
input[type=number], td.right {
|
||||
input[type='number'],
|
||||
td.right {
|
||||
text-align: right;
|
||||
}
|
||||
input[type="number"] {
|
||||
input[type='number'] {
|
||||
width: 3em;
|
||||
margin: 0 2px;
|
||||
}
|
||||
|
@ -116,11 +144,11 @@ input[type="number"] {
|
|||
padding: 0 0 4px;
|
||||
}
|
||||
|
||||
input[type=number] {
|
||||
input[type='number'] {
|
||||
-moz-appearance: textfield;
|
||||
}
|
||||
input[type="number"]::-webkit-inner-spin-button,
|
||||
input[type="number"]::-webkit-outer-spin-button {
|
||||
input[type='number']::-webkit-inner-spin-button,
|
||||
input[type='number']::-webkit-outer-spin-button {
|
||||
-webkit-appearance: none;
|
||||
margin: 0;
|
||||
}
|
||||
|
|
|
@ -34,8 +34,8 @@
|
|||
"fontSize": "Font size: ",
|
||||
"fgColor": "Font color: ",
|
||||
"fgColorGrad": "Gradient",
|
||||
"fgColor1": "Font color(Top): ",
|
||||
"fgColor2": "Font color(Bottom): ",
|
||||
"fgColor1": "Font color (top): ",
|
||||
"fgColor2": "Font color (bottom): ",
|
||||
"bgColor": "Background color: ",
|
||||
"alpha": "Alpha=",
|
||||
"preview": "Preview",
|
||||
|
@ -43,17 +43,17 @@
|
|||
"freeze": {
|
||||
"h3": "Freezing the timer",
|
||||
"duration": "Duration: ",
|
||||
"frame": "(frame)",
|
||||
"frame": "(frames)",
|
||||
"sec": "(sec)",
|
||||
"rows": {
|
||||
"yellowCoin": "When collected a yellow coin",
|
||||
"redCoin": "When collected a red coin",
|
||||
"blueCoin": "When collected a blue coin",
|
||||
"item": "When collected an item (e.g. nozzle)",
|
||||
"talk": "When dialogue started",
|
||||
"demo": "When cutscene started",
|
||||
"cleaned": "When NPC is cleaned",
|
||||
"bowser": "When destroyed platform in Bowser fight"
|
||||
"yellowCoin": "When a yellow coin is collected",
|
||||
"redCoin": "When a red coin is collected",
|
||||
"blueCoin": "When a blue coin is collected",
|
||||
"item": "When an item (e.g. nozzle) is collected",
|
||||
"talk": "When dialogue starts",
|
||||
"demo": "When a cutscene starts",
|
||||
"cleaned": "When an NPC is cleaned",
|
||||
"bowser": "When a platform is destroyed in the Bowser fight"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue