Implemented custom config of QFT
This commit is contained in:
parent
06f7ad9864
commit
013052f82c
12 changed files with 752 additions and 379 deletions
389
Codes.xml
389
Codes.xml
|
@ -1236,11 +1236,14 @@
|
|||
</source>
|
||||
</code>
|
||||
<code>
|
||||
<id>qft</id>
|
||||
<category>timer</category>
|
||||
<title lang="en-US">Quarterframe Timer (Experimental)</title>
|
||||
<author>Noki Doki</author>
|
||||
<version>0.5</version>
|
||||
<date>Nov 28, 2021</date>
|
||||
<title lang="ja-JP">QFタイマー</title>
|
||||
<author>Noki Doki, sup39(サポミク)</author>
|
||||
<version>1.0</version>
|
||||
<date>Apr 08, 2022</date>
|
||||
<dependencies version="GMSJ01">drawText</dependencies>
|
||||
<description lang="en-US">
|
||||
Adds an in-game timer to every level, starting on the last black frame after the
|
||||
loading screen and ending as soon as the 'Shine Get' animation starts
|
||||
|
@ -1250,382 +1253,10 @@
|
|||
The timer pauses during loading times and FMVs.
|
||||
:::
|
||||
</description>
|
||||
<source version="GMSJ01">
|
||||
C20ECE44 0000000B
|
||||
981A0260 3CE0817F
|
||||
880700B3 2C000000
|
||||
38000000 900700BC
|
||||
4182000C B00700B2
|
||||
900700B4 60E30110
|
||||
38800000 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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
C21BE474 00000004
|
||||
80AD9FB8 8005005C
|
||||
3CA0817F 900500B8
|
||||
3800001E 900500BC
|
||||
38A00000 00000000
|
||||
C21BE288 00000005
|
||||
7C030378 80A3005C
|
||||
38A50003 54A0003A
|
||||
3CA0817F 900500B8
|
||||
3800001E 900500BC
|
||||
60000000 00000000
|
||||
077F0094 0000001D
|
||||
00000010 000001A0
|
||||
00000280 000001E0
|
||||
25753A25 3032752E
|
||||
25303375 00000000
|
||||
</source>
|
||||
<source version="GMSP01">
|
||||
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
|
||||
C21B632C 00000004
|
||||
80AD9EE0 8005005C
|
||||
3CA0817F 900500B8
|
||||
3800001E 900500BC
|
||||
38A00000 00000000
|
||||
C21B6140 00000005
|
||||
7C030378 80A3005C
|
||||
38A50003 54A0003A
|
||||
3CA0817F 900500B8
|
||||
3800001E 900500BC
|
||||
60000000 00000000
|
||||
077F0094 0000001D
|
||||
00000010 000001A0
|
||||
00000280 000001E0
|
||||
25753A25 3032752E
|
||||
25303375 00000000
|
||||
</source>
|
||||
<source version="GMSJ0A">
|
||||
C2279570 0000000B
|
||||
981A0260 3CE0817F
|
||||
880700B3 2C000000
|
||||
38000000 900700BC
|
||||
4182000C B00700B2
|
||||
900700B4 60E30110
|
||||
38800000 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
|
||||
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
|
||||
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
|
||||
C219E1FC 00000004
|
||||
80AD9E78 8005005C
|
||||
3CA0817F 900500B8
|
||||
3800001E 900500BC
|
||||
38A00000 00000000
|
||||
C219E010 00000005
|
||||
7C030378 80A3005C
|
||||
38A50003 54A0003A
|
||||
3CA0817F 900500B8
|
||||
3800001E 900500BC
|
||||
60000000 00000000
|
||||
077F0094 0000001D
|
||||
00000010 000001A0
|
||||
00000280 000001E0
|
||||
25753A25 3032752E
|
||||
25303375 00000000
|
||||
</source>
|
||||
<source version="GMSJ01"></source>
|
||||
<source version="GMSE01"></source>
|
||||
<source version="GMSP01"></source>
|
||||
<source version="GMSJ0A"></source>
|
||||
</code>
|
||||
<code>
|
||||
<category>loader</category>
|
||||
|
|
|
@ -1,5 +1,9 @@
|
|||
# Changelog
|
||||
## Apr 08, 2022
|
||||
### Implemented custom config of QFT
|
||||
- Appearance: location, font size, font color, background color (GMSJ01 only)
|
||||
- Freezing the timer
|
||||
|
||||
### Implemented customizable code
|
||||
- Add code info in `Codes.xml` as other code,
|
||||
but you should specify `<id>` and available versions with `<source version="XXX"></source>`
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
import InstantRestart from './InstantRestart/codegen.js';
|
||||
import qft from './qft/codegen.js';
|
||||
|
||||
export default {
|
||||
InstantRestart,
|
||||
qft,
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
101
site/.vuepress/components/codes/qft/code/GMSE01.js
Normal file
101
site/.vuepress/components/codes/qft/code/GMSE01.js
Normal file
|
@ -0,0 +1,101 @@
|
|||
export const freezeCodegen = {
|
||||
redCoin: (s) => `
|
||||
C21BE474 00000004
|
||||
80AD9FB8 8005005C
|
||||
3CA0817F 900500B8
|
||||
3800${s} 900500BC
|
||||
38A00000 00000000
|
||||
`,
|
||||
blueCoin: (s) => `
|
||||
C21BE288 00000005
|
||||
7C030378 80A3005C
|
||||
38A50003 54A0003A
|
||||
3CA0817F 900500B8
|
||||
3800${s} 900500BC
|
||||
60000000 00000000
|
||||
`,
|
||||
};
|
||||
|
||||
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
|
||||
`;
|
136
site/.vuepress/components/codes/qft/code/GMSJ01.js
Normal file
136
site/.vuepress/components/codes/qft/code/GMSJ01.js
Normal file
|
@ -0,0 +1,136 @@
|
|||
export const freezeCodegen = {
|
||||
yellowCoin: (s) => `
|
||||
C2196B54 00000004
|
||||
806d97e8 8083005c
|
||||
3c60817f 908300b8
|
||||
3880${s} 908300bc
|
||||
8805000E 00000000
|
||||
`,
|
||||
redCoin: (s) => `
|
||||
C2196314 00000004
|
||||
80AD97E8 8005005C
|
||||
3CA0817F 900500B8
|
||||
3800${s} 900500BC
|
||||
38A00000 00000000
|
||||
`,
|
||||
blueCoin: (s) => `
|
||||
C2196128 00000005
|
||||
7C030378 80A3005C
|
||||
38A50003 54A0003A
|
||||
3CA0817F 900500B8
|
||||
3800${s} 900500BC
|
||||
60000000 00000000
|
||||
`,
|
||||
item: (s) => `
|
||||
C21971F8 00000004
|
||||
806d97e8 8083005c
|
||||
3c60817f 908300b8
|
||||
3880${s} 908300bc
|
||||
8001001C 00000000
|
||||
`,
|
||||
talk: (s) => `
|
||||
C20EB6E4 00000004
|
||||
807f005c 3c80817f
|
||||
906400b8 3860${s}
|
||||
906400bc 60000000
|
||||
807f00b0 00000000
|
||||
`,
|
||||
demo: (s) => `
|
||||
C20EB74C 00000004
|
||||
807f005c 3c80817f
|
||||
906400b8 3860${s}
|
||||
906400bc 60000000
|
||||
806DA8B0 00000000
|
||||
`,
|
||||
cleaned: (s) => `
|
||||
C217A3C0 00000004
|
||||
806d97e8 8083005c
|
||||
3c60817f 908300b8
|
||||
3880${s} 908300bc
|
||||
80010044 00000000
|
||||
`,
|
||||
bowser: (s) => `
|
||||
C21D3C78 00000004
|
||||
806d97e8 8083005c
|
||||
3c60817f 908300b8
|
||||
3880${s} 908300bc
|
||||
2c1d0003 00000000
|
||||
`,
|
||||
};
|
||||
|
||||
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
|
||||
`;
|
101
site/.vuepress/components/codes/qft/code/GMSJ0A.js
Normal file
101
site/.vuepress/components/codes/qft/code/GMSJ0A.js
Normal file
|
@ -0,0 +1,101 @@
|
|||
export const freezeCodegen = {
|
||||
redCoin: (s) => `
|
||||
C219E1FC 00000004
|
||||
80AD9E78 8005005C
|
||||
3CA0817F 900500B8
|
||||
3800${s} 900500BC
|
||||
38A00000 00000000
|
||||
`,
|
||||
blueCoin: (s) => `
|
||||
C219E010 00000005
|
||||
7C030378 80A3005C
|
||||
38A50003 54A0003A
|
||||
3CA0817F 900500B8
|
||||
3800${s} 900500BC
|
||||
60000000 00000000
|
||||
`,
|
||||
};
|
||||
|
||||
export const baseCode = `
|
||||
C2279570 0000000B
|
||||
981A0260 3CE0817F
|
||||
880700B3 2C000000
|
||||
38000000 900700BC
|
||||
4182000C B00700B2
|
||||
900700B4 60E30110
|
||||
38800000 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
|
||||
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
|
||||
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
|
||||
077F0094 0000001D
|
||||
00000010 000001A0
|
||||
00000280 000001E0
|
||||
25753A25 3032752E
|
||||
25303375 00000000
|
||||
`;
|
101
site/.vuepress/components/codes/qft/code/GMSP01.js
Normal file
101
site/.vuepress/components/codes/qft/code/GMSP01.js
Normal file
|
@ -0,0 +1,101 @@
|
|||
export const freezeCodegen = {
|
||||
redCoin: (s) => `
|
||||
C21B632C 00000004
|
||||
80AD9EE0 8005005C
|
||||
3CA0817F 900500B8
|
||||
3800${s} 900500BC
|
||||
38A00000 00000000
|
||||
`,
|
||||
blueCoin: (s) => `
|
||||
C21B6140 00000005
|
||||
7C030378 80A3005C
|
||||
38A50003 54A0003A
|
||||
3CA0817F 900500B8
|
||||
3800${s} 900500BC
|
||||
60000000 00000000
|
||||
`,
|
||||
};
|
||||
|
||||
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
|
||||
`;
|
85
site/.vuepress/components/codes/qft/codegen.js
Normal file
85
site/.vuepress/components/codes/qft/codegen.js
Normal file
|
@ -0,0 +1,85 @@
|
|||
import { parseJSON } from '../codegen.js';
|
||||
export const lskey = 'config/qft';
|
||||
|
||||
export const defaultConfig = {
|
||||
x: 16,
|
||||
y: 456,
|
||||
width: 112,
|
||||
fontSize: 20,
|
||||
fgRGB: 0xffffff,
|
||||
fgA: 0xff,
|
||||
fgRGB2: null,
|
||||
fgA2: null,
|
||||
bgRGB: 0x000000,
|
||||
bgA: 0x80,
|
||||
freeze: {
|
||||
yellowCoin: 0,
|
||||
redCoin: 30,
|
||||
blueCoin: 30,
|
||||
item: 30,
|
||||
talk: 30,
|
||||
demo: 30,
|
||||
cleaned: 30,
|
||||
bowser: 30, // onBathhubGripDestroyed
|
||||
},
|
||||
};
|
||||
|
||||
export function getConfig() {
|
||||
const config = parseJSON(localStorage.getItem(lskey)) ?? {};
|
||||
return {
|
||||
...defaultConfig,
|
||||
...config,
|
||||
freeze: {
|
||||
...defaultConfig.freeze,
|
||||
...config.freeze,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
const int16 = (x) => (x < 0 ? x + 0x10000 : x).toString(16).padStart(4, '0').slice(-4);
|
||||
const int32 = (x) => (x < 0 ? x + 0x100000000 : x).toString(16).padStart(8, '0').slice(-8);
|
||||
|
||||
import * as GMSJ01 from './code/GMSJ01.js';
|
||||
import * as GMSE01 from './code/GMSE01.js';
|
||||
import * as GMSP01 from './code/GMSP01.js';
|
||||
import * as GMSJ0A from './code/GMSJ0A.js';
|
||||
export const codes = { GMSJ01, GMSE01, GMSP01, GMSJ0A };
|
||||
|
||||
export default function codegen(version) {
|
||||
const config = getConfig();
|
||||
const { freezeCodegen, baseCode } = codes[version] ?? {};
|
||||
if (baseCode == null) return '';
|
||||
|
||||
let code = baseCode;
|
||||
|
||||
// freeze code
|
||||
Object.entries(config.freeze).forEach(
|
||||
([key, frame]) => (code += frame > 0 ? freezeCodegen[key]?.(int16(frame)) ?? '' : ''),
|
||||
);
|
||||
|
||||
// ui (GMSJ01 only)
|
||||
if (['GMSJ01'].includes(version)) {
|
||||
/* bounds */
|
||||
const { x, y, fontSize, width } = config;
|
||||
const scale = fontSize / 20;
|
||||
code += '077F0094 0000001D';
|
||||
code += [
|
||||
x, // x1
|
||||
y - fontSize - 2, // y1
|
||||
x + width * scale, // x2
|
||||
y, // y2
|
||||
]
|
||||
.map(int32)
|
||||
.join('');
|
||||
code += '25753a253032752e2530337500000000'; // fmt
|
||||
/* fontSize, fgColor, bgColor */
|
||||
code += '077F0110 00000010';
|
||||
const bgColor = (config.bgRGB & 0xffffff) * 256 + (config.bgA & 0xff);
|
||||
const fgColor = (config.fgRGB & 0xffffff) * 256 + (config.fgA & 0xff);
|
||||
const fgColor2 =
|
||||
((config.fgRGB2 ?? config.fgRGB) & 0xffffff) * 256 + ((config.fgA2 ?? config.fgA) & 0xff);
|
||||
code += [fontSize, fgColor, fgColor2, bgColor].map(int32).join('');
|
||||
}
|
||||
|
||||
return code.replace(/\s/g, '');
|
||||
}
|
154
site/.vuepress/components/codes/qft/config.vue
Normal file
154
site/.vuepress/components/codes/qft/config.vue
Normal file
|
@ -0,0 +1,154 @@
|
|||
<template>
|
||||
<div id="config">
|
||||
<section v-if="version=='GMSJ01'" class="appearance">
|
||||
<h3>{{l.h3}}</h3>
|
||||
<div>
|
||||
<span>{{l.location}}(</span><input type="number" min="0" max="600" v-model.number="x"><span>, </span><input type="number" min="16" max="464" v-model.number="y"><span>)</span>
|
||||
</div>
|
||||
<div>
|
||||
<span>{{l.fontSize}}</span><input type="number" min="0" v-model.number="fontSize">
|
||||
</div>
|
||||
<div>
|
||||
<span>{{fgRGB2==null ? l.fgColor : l.fgColor1}}</span><input type="color" :value="rgbI2S(fgRGB)" @change="fgRGB = rgbS2I($event.target.value)">
|
||||
<span>{{l.alpha}}</span><input type="number" min="0" max="255" v-model.number="fgA"><span>/255={{(fgA/2.55).toFixed(1)}}%</span>
|
||||
<input type="checkbox" :checked="fgRGB2!=null" @change="toggleGradient"><span>{{l.fgColorGrad}}</span>
|
||||
</div>
|
||||
<div v-if="fgRGB2 != null">
|
||||
<span>{{l.fgColor2}}</span><input type="color" :value="rgbI2S(fgRGB2)" @change="fgRGB2 = rgbS2I($event.target.value)">
|
||||
<span>{{l.alpha}}</span><input type="number" min="0" max="255" v-model.number="fgA2"><span>/255={{(fgA2/2.55).toFixed(1)}}%</span>
|
||||
</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>
|
||||
</div>
|
||||
<h4>{{l.preview}}</h4>
|
||||
<svg viewBox="0 16 600 448">
|
||||
<defs>
|
||||
<linearGradient id="fgColor" x1="0%" y1="0%" x2="0%" y2="100%">
|
||||
<stop offset="0%" :style="{stopColor: rgbI2S(fgRGB), stopOpacity: fgA/255}" />
|
||||
<stop offset="100%" :style="{
|
||||
stopColor: rgbI2S(fgRGB2 == null ? fgRGB : fgRGB2),
|
||||
stopOpacity: (fgA2 == null ? fgA : fgA2)/255,
|
||||
}" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<image href="/img/qft/preview-base.jpg" y="16" width="600" height="448" />
|
||||
<rect :x="x" :y="y-fontSize" :width="width*fontSize/20" :height="fontSize" :fill="rgbaI2S(bgRGB, bgA)" />
|
||||
<text :x="x+fontSize/10" :y="y-fontSize/10" fill="url(#fgColor)"
|
||||
:style="{fontSize: fontSize+'px', fontFamily: 'auto'}">0:00.000</text>
|
||||
</svg>
|
||||
<div style="white-space: pre">{{l.previewNote}}</div>
|
||||
</section>
|
||||
<section class="freeze">
|
||||
<h3>{{l.freeze.h3}}</h3>
|
||||
<table>
|
||||
<thead>
|
||||
<th v-for="s in l.freeze.th" :key="s">{{s}}</th>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr v-for="key in freezeKeys" :key="key">
|
||||
<td>{{l.freeze.rows[key]}}</td>
|
||||
<td><input type="number" :value="freeze[key]" @change="onChangeFreeze($event, key)"></td>
|
||||
<td class="right">{{(freeze[key]*1001/30000).toFixed(2)}}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</section>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {getConfig, lskey, buttonValues, codes} from './codegen.js';
|
||||
import labels from './labels.json';
|
||||
import {getLabels} from '../codegen.js';
|
||||
|
||||
function updateConfig() {
|
||||
const {x, y, fontSize, width, fgRGB, fgA, fgRGB2, fgA2, bgRGB, bgA, freeze} = this;
|
||||
localStorage.setItem(lskey, JSON.stringify({
|
||||
x, y, fontSize, width, fgRGB, fgA, fgRGB2, fgA2, bgRGB, bgA, freeze,
|
||||
}));
|
||||
}
|
||||
|
||||
export default {
|
||||
props: {
|
||||
version: {type: String},
|
||||
},
|
||||
methods: {
|
||||
updateConfig,
|
||||
onChangeFreeze($event, key) {
|
||||
this.freeze[key] = parseInt($event.target.value);
|
||||
this.updateConfig();
|
||||
},
|
||||
toggleGradient($event) {
|
||||
if ($event.target.checked) {
|
||||
this.fgRGB2 = this.fgRGB;
|
||||
this.fgA2 = this.fgA;
|
||||
} else {
|
||||
this.fgRGB2 = null;
|
||||
this.fgA2 = null;
|
||||
}
|
||||
},
|
||||
rgbI2S: (x) => '#'+x.toString(16).padStart(6, '0'),
|
||||
rgbS2I: (s) => parseInt(s.slice(1), 16),
|
||||
rgbaI2S: (rgb, a) => '#'+rgb.toString(16).padStart(6, '0')+a.toString(16).padStart(2, '0'),
|
||||
},
|
||||
data() {
|
||||
const {x, y, fontSize, width, fgRGB, fgA, fgRGB2, fgA2, bgRGB, bgA, freeze} = getConfig();
|
||||
return {
|
||||
x, y, fontSize, width,
|
||||
fgRGB, fgA, fgRGB2, fgA2, bgRGB, bgA,
|
||||
freeze,
|
||||
// const
|
||||
freezeKeys: Object.keys(codes[this.version]?.freezeCodegen ?? {}),
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
l() {
|
||||
return labels[this.$lang] ?? labels['en-US'];
|
||||
},
|
||||
},
|
||||
watch: {
|
||||
x: updateConfig,
|
||||
y: updateConfig,
|
||||
fontSize: updateConfig,
|
||||
width: updateConfig,
|
||||
fgRGB: updateConfig,
|
||||
fgA: updateConfig,
|
||||
fgRGB2: updateConfig,
|
||||
fgA2: updateConfig,
|
||||
bgRGB: updateConfig,
|
||||
bgA: updateConfig,
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
input[type=number], td.right {
|
||||
text-align: right;
|
||||
}
|
||||
.appearance input[type="number"] {
|
||||
width: 3em;
|
||||
margin: 0 2px;
|
||||
}
|
||||
.appearance > div {
|
||||
padding: 0 0 4px;
|
||||
}
|
||||
|
||||
th {
|
||||
text-align: center;
|
||||
}
|
||||
td > input[type=number] {
|
||||
width: 8em;
|
||||
max-width: 100%;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
input[type=number] {
|
||||
-moz-appearance: textfield;
|
||||
}
|
||||
input[type="number"]::-webkit-inner-spin-button,
|
||||
input[type="number"]::-webkit-outer-spin-button {
|
||||
-webkit-appearance: none;
|
||||
margin: 0;
|
||||
}
|
||||
</style>
|
56
site/.vuepress/components/codes/qft/labels.json
Normal file
56
site/.vuepress/components/codes/qft/labels.json
Normal file
|
@ -0,0 +1,56 @@
|
|||
{
|
||||
"ja-JP": {
|
||||
"h3": "見た目",
|
||||
"location": "位置:",
|
||||
"fontSize": "文字サイズ:",
|
||||
"fgColor": "文字色:",
|
||||
"fgColorGrad": "グラデーション",
|
||||
"fgColor1": "文字色(上):",
|
||||
"fgColor2": "文字色(下):",
|
||||
"bgColor": "背景色:",
|
||||
"alpha": "不透明度=",
|
||||
"preview": "プレビュー",
|
||||
"previewNote": "※ x座標の範囲は0~600、y座標の範囲は16~464です\n※ ゲーム内のフォントはプレビューのより幅が広いです",
|
||||
"freeze": {
|
||||
"h3": "一時停止",
|
||||
"th": ["タイミング", "停止フレーム数", "停止秒数"],
|
||||
"rows": {
|
||||
"yellowCoin": "黄コインを取った時",
|
||||
"redCoin": "赤コインを取った時",
|
||||
"blueCoin": "青コインを取った時",
|
||||
"item": "アイテム(ノズル等)を取った時",
|
||||
"talk": "会話開始時",
|
||||
"demo": "カットシーン開始時",
|
||||
"cleaned": "NPCを洗った時",
|
||||
"bowser": "クッパ戦の足場を破壊した時"
|
||||
}
|
||||
}
|
||||
},
|
||||
"en-US": {
|
||||
"h3": "Appearance",
|
||||
"location": "Location: ",
|
||||
"fontSize": "Font size: ",
|
||||
"fgColor": "Font color: ",
|
||||
"fgColorGrad": "Gradient",
|
||||
"fgColor1": "Font color(Top): ",
|
||||
"fgColor2": "Font color(Bottom): ",
|
||||
"bgColor": "Background color: ",
|
||||
"alpha": "Alpha=",
|
||||
"preview": "Preview",
|
||||
"previewNote": "※ x ranges from 0 to 600, and y ranges from 16 to 464.\n※ The font is wider in the game compared to the preview.",
|
||||
"freeze": {
|
||||
"h3": "Freezing the timer",
|
||||
"th": ["Timing", "Duration(frame)", "Duration(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"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,5 +1,7 @@
|
|||
import InstantRestart from './InstantRestart/config.vue';
|
||||
import qft from './qft/config.vue';
|
||||
|
||||
export default {
|
||||
InstantRestart,
|
||||
qft,
|
||||
};
|
||||
|
|
BIN
site/.vuepress/public/img/qft/preview-base.jpg
Normal file
BIN
site/.vuepress/public/img/qft/preview-base.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 80 KiB |
Loading…
Reference in a new issue