Merge branch 'main' into commit_object_link_boy

This commit is contained in:
Dragorn421 2025-05-25 18:34:41 +02:00
commit 6186acf2b8
No known key found for this signature in database
GPG Key ID: 381AEBAF3D429335
89 changed files with 846 additions and 527 deletions

View File

@ -3022,10 +3022,10 @@ LAYER_140B:
/* 0x1411 [0xCC 0x00 ] */ ldi 0
/* 0x1413 [0x76 ] */ stio IO_PORT_6
CHAN_1414:
/* 0x1414 [0xCB 0x14 0x2D ] */ ldseq UNK_142D
/* 0x1414 [0xCB 0x14 0x2D ] */ ldseq ARRAY_142D
/* 0x1417 [0xC7 0x00 0x14 0x5B ] */ stseq 0, LAYER_145A + STSEQ_TRANSPOSITION
/* 0x141B [0x66 ] */ ldio IO_PORT_6
/* 0x141C [0xCB 0x14 0x31 ] */ ldseq UNK_1431
/* 0x141C [0xCB 0x14 0x31 ] */ ldseq ARRAY_1431
/* 0x141F [0xC7 0x00 0x14 0x56 ] */ stseq 0, LAYER_1455 + STSEQ_NOTEDV_DELAY_HI
/* 0x1423 [0xCC 0x18 ] */ ldi 24
/* 0x1425 [0x71 ] */ stio IO_PORT_1
@ -3033,14 +3033,14 @@ CHAN_1414:
/* 0x1429 [0x89 0x14 0x35 ] */ ldlayer 1, LAYER_1435
/* 0x142C [0xFF ] */ end
UNK_142D:
.byte 0x00, 0x04, 0x08, 0x00
.array ARRAY_142D
.byte 0, 4, 8, 0
UNK_1431:
.array ARRAY_1431
#if !OOT_PAL_N64
.byte 0x60, 0x30, 0x18, 0x60
.byte 96, 48, 24, 96
#else
.byte 0x73, 0x3A, 0x1D, 0x60
.byte 115, 58, 29, 96
#endif
.layer LAYER_1435
@ -3943,15 +3943,15 @@ LAYER_1B5C:
CHAN_1BA1:
/* 0x1BA1 [0x66 ] */ ldio IO_PORT_6
/* 0x1BA2 [0xC9 0x03 ] */ and 3
/* 0x1BA4 [0xCB 0x1B 0xB6 ] */ ldseq UNK_1BB6
/* 0x1BA4 [0xCB 0x1B 0xB6 ] */ ldseq ARRAY_1BB6
/* 0x1BA7 [0xC7 0x00 0x1B 0xE7 ] */ stseq 0, LAYER_1BE6 + STSEQ_LDELAY
/* 0x1BAB [0xC7 0x08 0x1B 0xB0 ] */ stseq 8, STSEQ_HERE + STSEQ_LDI_IMM
/* 0x1BAF [0xCC 0x30 ] */ ldi 48
/* 0x1BB1 [0xFC 0x00 0x48 ] */ call CHAN_0048
/* 0x1BB4 [0xF4 0xEB ] */ rjump CHAN_1BA1
UNK_1BB6:
.byte 0x20, 0x0E, 0x05, 0x20
.array ARRAY_1BB6
.byte 32, 14, 5, 32
.layer LAYER_1BBA
/* 0x1BBA [0xC2 0x30 ] */ transpose 48
@ -4031,16 +4031,16 @@ CHAN_1C3B:
/* 0x1C3B [0x63 ] */ ldio IO_PORT_3
/* 0x1C3C [0xC9 0xF0 ] */ and 240
/* 0x1C3E [0xF3 0x0E ] */ rbeqz CHAN_1C4E
/* 0x1C40 [0xCE 0x00 0x00 ] */ ldptr SEQ_0000
/* 0x1C40 [0xCE 0x00 0x00 ] */ ldptri 0
/* 0x1C43 [0xCF 0x1C 0x80 ] */ stptrtoseq ENVELOPE_1C7A + STSEQ_ENVELOPE_POINT(3)
/* 0x1C46 [0xCE 0x7F 0xBC ] */ ldptr SEQ_0_END + 0x1538
/* 0x1C46 [0xCE 0x7F 0xBC ] */ ldptri 32700
/* 0x1C49 [0xCF 0x1C 0x8C ] */ stptrtoseq ENVELOPE_1C86 + STSEQ_ENVELOPE_POINT(3)
/* 0x1C4C [0xF4 0x0C ] */ rjump CHAN_1C5A
CHAN_1C4E:
/* 0x1C4E [0xCE 0x00 0x00 ] */ ldptr SEQ_0000
/* 0x1C4E [0xCE 0x00 0x00 ] */ ldptri 0
/* 0x1C51 [0xCF 0x1C 0x8C ] */ stptrtoseq ENVELOPE_1C86 + STSEQ_ENVELOPE_POINT(3)
/* 0x1C54 [0xCE 0x7F 0xBC ] */ ldptr SEQ_0_END + 0x1538
/* 0x1C54 [0xCE 0x7F 0xBC ] */ ldptri 32700
/* 0x1C57 [0xCF 0x1C 0x80 ] */ stptrtoseq ENVELOPE_1C7A + STSEQ_ENVELOPE_POINT(3)
CHAN_1C5A:
/* 0x1C5A [0xCC 0x01 ] */ ldi 1
@ -7056,9 +7056,9 @@ CHAN_2F7D:
/* 0x2F85 [0xB8 0x02 ] */ rand 2
/* 0x2F87 [0xC7 0x2F 0x2F 0xAC ] */ stseq 47, LAYER_2FAB + STSEQ_TRANSPOSITION
/* 0x2F8B [0xBD 0x00 0x6A 0x00 0x96] */ randptr 106, 150
/* 0x2F90 [0xCF 0x2F 0xB6 ] */ stptrtoseq UNK_2FB6
/* 0x2F90 [0xCF 0x2F 0xB6 ] */ stptrtoseq BUF_2FB6
/* 0x2F93 [0xCC 0x01 ] */ ldi 1
/* 0x2F95 [0xCB 0x2F 0xB6 ] */ ldseq UNK_2FB6
/* 0x2F95 [0xCB 0x2F 0xB6 ] */ ldseq BUF_2FB6
/* 0x2F98 [0xC7 0x00 0x2F 0xA0 ] */ stseq 0, CHAN_2F9F + STSEQ_LDI_IMM
/* 0x2F9C [0x88 0x2F 0xAB ] */ ldlayer 0, LAYER_2FAB
CHAN_2F9F:
@ -7077,8 +7077,8 @@ CHAN_2F9F:
/* 0x2FB2 [0xC0 0xFD 0x00 ] */ ldelay 32000
/* 0x2FB5 [0xFF ] */ end
UNK_2FB6:
.half 0x0000
BUF_2FB6:
.half 0
.channel CHAN_2FB8
/* 0x2FB8 [0x88 0x2F 0xBF ] */ ldlayer 0, LAYER_2FBF
@ -12265,9 +12265,9 @@ LAYER_53FD:
.channel CHAN_5403
/* 0x5403 [0xC1 0x7E ] */ instr FONTANY_INSTR_SFX
/* 0x5405 [0x64 ] */ ldio IO_PORT_SFX_INDEX_LOBITS
/* 0x5406 [0xC8 0xB0 ] */ sub 176
/* 0x5406 [0xC8 0xB0 ] */ sub NA_SE_EN_TWINROBA_LAUGH & 0xFF
/* 0x5408 [0xC7 0x00 0x54 0x17 ] */ stseq (ASEQ_OP_LAYER_NOTEDVG | PITCH_A0), LAYER_5417 + STSEQ_NOTEDVG_OPCODE_PITCH
/* 0x540C [0xCB 0x54 0x1C ] */ ldseq UNK_541C
/* 0x540C [0xCB 0x54 0x1C ] */ ldseq ARRAY_541C
/* 0x540F [0xC7 0x00 0x54 0x19 ] */ stseq 0, LAYER_5417 + STSEQ_NOTEDVG_DELAY_LO
/* 0x5413 [0x88 0x54 0x17 ] */ ldlayer 0, LAYER_5417
/* 0x5416 [0xFF ] */ end
@ -12276,10 +12276,10 @@ LAYER_53FD:
/* 0x5417 [0x00 0x00 0x64 0x00 ] */ notedvg PITCH_A0, 0, 100, 0
/* 0x541B [0xFF ] */ end
UNK_541C:
.byte 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64
.byte 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64
.byte 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64
.array ARRAY_541C
.byte 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100
.byte 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100
.byte 100, 100, 100, 100, 100, 100, 100
.channel CHAN_5443
/* 0x5443 [0x88 0x42 0x20 ] */ ldlayer 0, LAYER_4220
@ -13861,11 +13861,11 @@ CHAN_5EE2:
/* 0x5EF7 [0x71 ] */ stio IO_PORT_1
/* 0x5EF8 [0x67 ] */ ldio IO_PORT_7
/* 0x5EF9 [0xC9 0x07 ] */ and 7
/* 0x5EFB [0xCB 0x5F 0x30 ] */ ldseq UNK_5F30
/* 0x5EFB [0xCB 0x5F 0x30 ] */ ldseq ARRAY_5F30
/* 0x5EFE [0xC7 0x00 0x5F 0x0D ] */ stseq 0, CHAN_5F0C + STSEQ_INSTR
/* 0x5F02 [0x67 ] */ ldio IO_PORT_7
/* 0x5F03 [0xC9 0x07 ] */ and 7
/* 0x5F05 [0xCB 0x5F 0x38 ] */ ldseq UNK_5F38
/* 0x5F05 [0xCB 0x5F 0x38 ] */ ldseq ARRAY_5F38
/* 0x5F08 [0xC7 0x00 0x5F 0x2E ] */ stseq 0, LAYER_5F2B + STSEQ_NOTEDV_VELOCITY
CHAN_5F0C:
/* 0x5F0C [0xC1 0x34 ] */ instr SF0_INST_52
@ -13894,11 +13894,18 @@ LAYER_5F2B:
/* 0x5F2B [0x67 0x81 0xE0 0x7F ] */ notedv PITCH_C4, 480, 127
/* 0x5F2F [0xFF ] */ end
UNK_5F30:
.byte 0x34, 0x55, 0x56, 0x59, 0x53, 0x52, 0x34, 0x34
.array ARRAY_5F30
.byte SF0_INST_52
.byte SF0_INST_85
.byte SF0_INST_86
.byte SF0_INST_89
.byte SF0_INST_83
.byte SF0_INST_82
.byte SF0_INST_52
.byte SF0_INST_52
UNK_5F38:
.byte 0x73, 0x73, 0x64, 0x73, 0x64, 0x73, 0x73, 0x73
.array ARRAY_5F38
.byte 115, 115, 100, 115, 100, 115, 115, 115
.channel CHAN_5F40
/* 0x5F40 [0xCC 0x81 ] */ ldi 129
@ -14044,11 +14051,11 @@ CHAN_6116:
/* 0x6116 [0x3E 0x06 ] */ stcio 14, IO_PORT_6
/* 0x6118 [0x3F 0x06 ] */ stcio 15, IO_PORT_6
CHAN_611A:
/* 0x611A [0xCB 0x61 0x6D ] */ ldseq UNK_616D
/* 0x611D [0xC7 0x40 0x61 0x2D ] */ stseq (ASEQ_OP_LAYER_NOTEDV | PITCH_A0), LAYER_612D + STSEQ_NOTEDV_OPCODE_PITCH
/* 0x611A [0xCB 0x61 0x6D ] */ ldseq ARRAY_616D
/* 0x611D [0xC7 0x40 0x61 0x2D ] */ stseq (ASEQ_OP_LAYER_NOTEDV | SF0_EFFECT_0), LAYER_612D + STSEQ_NOTEDV_OPCODE_PITCH
/* 0x6121 [0x66 ] */ ldio IO_PORT_6
CHAN_6122:
/* 0x6122 [0xCB 0x61 0x71 ] */ ldseq UNK_6171
/* 0x6122 [0xCB 0x61 0x71 ] */ ldseq ARRAY_6171
CHAN_6125:
/* 0x6125 [0xC7 0x00 0x61 0x2F ] */ stseq 0, LAYER_612D + STSEQ_NOTEDV_VELOCITY_2
/* 0x6129 [0x88 0x61 0x2D ] */ ldlayer 0, LAYER_612D
@ -14080,7 +14087,7 @@ CHAN_613E:
// Reads the byte at (PTR + 0) into TR (the note)
/* 0x6147 [0xB6 ] */ dyntblv
// Store ASEQ_OP_LAYER_NOTEDV + TR into the pitch
/* 0x6148 [0xC7 0x40 0x61 0x2D ] */ stseq (ASEQ_OP_LAYER_NOTEDV | PITCH_A0), LAYER_612D + STSEQ_NOTEDV_OPCODE_PITCH
/* 0x6148 [0xC7 0x40 0x61 0x2D ] */ stseq (ASEQ_OP_LAYER_NOTEDV | SF0_EFFECT_0), LAYER_612D + STSEQ_NOTEDV_OPCODE_PITCH
// Load 1 into TR
/* 0x614C [0xCC 0x01 ] */ ldi 1
// Reads the byte at (PTR + 1) into TR (the velocity)
@ -14096,23 +14103,26 @@ CHAN_6151:
/* 0x615B [0xF4 0xBD ] */ rjump CHAN_611A
.channel CHAN_615D
/* 0x615D [0xCE 0x61 0x6D ] */ ldptr UNK_616D
/* 0x615D [0xCE 0x61 0x6D ] */ ldptr ARRAY_616D
/* 0x6160 [0xCF 0x61 0x1B ] */ stptrtoseq CHAN_611A + STSEQ_PTR_LDSEQ
/* 0x6163 [0xCE 0x61 0x71 ] */ ldptr UNK_6171
/* 0x6163 [0xCE 0x61 0x71 ] */ ldptr ARRAY_6171
/* 0x6166 [0xCF 0x61 0x23 ] */ stptrtoseq CHAN_6122 + STSEQ_PTR_LDSEQ
/* 0x6169 [0xCC 0x04 ] */ ldi 4
/* 0x616B [0xF4 0x85 ] */ rjump CHAN_60F2
UNK_616D:
.byte 0x00, 0x01, 0x02, 0x03
.array ARRAY_616D
.byte SF0_EFFECT_0
.byte SF0_EFFECT_1
.byte SF0_EFFECT_2
.byte SF0_EFFECT_3
UNK_6171:
.byte 0x69, 0x69, 0x69, 0x69
.array ARRAY_6171
.byte 105, 105, 105, 105
.channel CHAN_6175
/* 0x6175 [0xCE 0x61 0x97 ] */ ldptr UNK_6197
/* 0x6175 [0xCE 0x61 0x97 ] */ ldptr ARRAY_6197
/* 0x6178 [0xCF 0x61 0x1B ] */ stptrtoseq CHAN_611A + STSEQ_PTR_LDSEQ
/* 0x617B [0xCE 0x61 0x99 ] */ ldptr UNK_6199
/* 0x617B [0xCE 0x61 0x99 ] */ ldptr ARRAY_6199
/* 0x617E [0xCF 0x61 0x23 ] */ stptrtoseq CHAN_6122 + STSEQ_PTR_LDSEQ
/* 0x6181 [0xB8 0x02 ] */ rand 2
/* 0x6183 [0xF4 0xAF ] */ rjump CHAN_6134
@ -14132,16 +14142,17 @@ CHAN_618C:
CHAN_6196:
/* 0x6196 [0x76 ] */ stio IO_PORT_6
UNK_6197:
.byte 0x04, 0x05
.array ARRAY_6197
.byte SF0_EFFECT_4
.byte SF0_EFFECT_5
UNK_6199:
.byte 0x6E, 0x6E
.array ARRAY_6199
.byte 110, 110
.channel CHAN_619B
/* 0x619B [0xCE 0x61 0xBD ] */ ldptr UNK_61BD
/* 0x619B [0xCE 0x61 0xBD ] */ ldptr ARRAY_61BD
/* 0x619E [0xCF 0x61 0x1B ] */ stptrtoseq CHAN_611A + STSEQ_PTR_LDSEQ
/* 0x61A1 [0xCE 0x61 0xBF ] */ ldptr UNK_61BF
/* 0x61A1 [0xCE 0x61 0xBF ] */ ldptr ARRAY_61BF
/* 0x61A4 [0xCF 0x61 0x23 ] */ stptrtoseq CHAN_6122 + STSEQ_PTR_LDSEQ
/* 0x61A7 [0xB8 0x02 ] */ rand 2
/* 0x61A9 [0xF4 0x89 ] */ rjump CHAN_6134
@ -14161,109 +14172,119 @@ CHAN_61B2:
CHAN_61BC:
/* 0x61BC [0x76 ] */ stio IO_PORT_6
UNK_61BD:
.byte 0x15, 0x16
.array ARRAY_61BD
.byte SF0_EFFECT_21
.byte SF0_EFFECT_22
UNK_61BF:
.byte 0x69, 0x69
.array ARRAY_61BF
.byte 105, 105
.channel CHAN_61C1
/* 0x61C1 [0xCE 0x61 0xD1 ] */ ldptr UNK_61D1
/* 0x61C1 [0xCE 0x61 0xD1 ] */ ldptr ARRAY_61D1
/* 0x61C4 [0xCF 0x61 0x1B ] */ stptrtoseq CHAN_611A + STSEQ_PTR_LDSEQ
/* 0x61C7 [0xCE 0x61 0xD3 ] */ ldptr UNK_61D3
/* 0x61C7 [0xCE 0x61 0xD3 ] */ ldptr ARRAY_61D3
/* 0x61CA [0xCF 0x61 0x23 ] */ stptrtoseq CHAN_6122 + STSEQ_PTR_LDSEQ
/* 0x61CD [0xCC 0x00 ] */ ldi 0
/* 0x61CF [0xF4 0x80 ] */ rjump CHAN_6151
UNK_61D1:
.byte 0x06, 0x19
.array ARRAY_61D1
.byte SF0_EFFECT_6
.byte SF0_EFFECT_25
UNK_61D3:
.byte 0x5F, 0x69
.array ARRAY_61D3
.byte 95, 105
.channel CHAN_61D5
/* 0x61D5 [0xCE 0x61 0xE6 ] */ ldptr UNK_61E6
/* 0x61D5 [0xCE 0x61 0xE6 ] */ ldptr ARRAY_61E6
/* 0x61D8 [0xCF 0x61 0x1B ] */ stptrtoseq CHAN_611A + STSEQ_PTR_LDSEQ
/* 0x61DB [0xCE 0x61 0xE8 ] */ ldptr UNK_61E8
/* 0x61DB [0xCE 0x61 0xE8 ] */ ldptr ARRAY_61E8
/* 0x61DE [0xCF 0x61 0x23 ] */ stptrtoseq CHAN_6122 + STSEQ_PTR_LDSEQ
/* 0x61E1 [0xB8 0x02 ] */ rand 2
/* 0x61E3 [0xFB 0x61 0x34 ] */ jump CHAN_6134
UNK_61E6:
.byte 0x07, 0x08
.array ARRAY_61E6
.byte SF0_EFFECT_7
.byte SF0_EFFECT_8
UNK_61E8:
.byte 0x48, 0x50
.array ARRAY_61E8
.byte 72, 80
.channel CHAN_61EA
/* 0x61EA [0xCE 0x61 0xFB ] */ ldptr UNK_61FB
/* 0x61EA [0xCE 0x61 0xFB ] */ ldptr ARRAY_61FB
/* 0x61ED [0xCF 0x61 0x1B ] */ stptrtoseq CHAN_611A + STSEQ_PTR_LDSEQ
/* 0x61F0 [0xCE 0x61 0xFE ] */ ldptr UNK_61FE
/* 0x61F0 [0xCE 0x61 0xFE ] */ ldptr ARRAY_61FE
/* 0x61F3 [0xCF 0x61 0x23 ] */ stptrtoseq CHAN_6122 + STSEQ_PTR_LDSEQ
/* 0x61F6 [0xCC 0x03 ] */ ldi 3
/* 0x61F8 [0xFB 0x60 0xF2 ] */ jump CHAN_60F2
UNK_61FB:
.byte 0x09, 0x0A, 0x0B
.array ARRAY_61FB
.byte SF0_EFFECT_9
.byte SF0_EFFECT_10
.byte SF0_EFFECT_11
UNK_61FE:
.byte 0x75, 0x75, 0x75
.array ARRAY_61FE
.byte 117, 117, 117
.channel CHAN_6201
/* 0x6201 [0xCE 0x62 0x12 ] */ ldptr UNK_6212
/* 0x6201 [0xCE 0x62 0x12 ] */ ldptr ARRAY_6212
/* 0x6204 [0xCF 0x61 0x1B ] */ stptrtoseq CHAN_611A + STSEQ_PTR_LDSEQ
/* 0x6207 [0xCE 0x62 0x15 ] */ ldptr UNK_6215
/* 0x6207 [0xCE 0x62 0x15 ] */ ldptr ARRAY_6215
/* 0x620A [0xCF 0x61 0x23 ] */ stptrtoseq CHAN_6122 + STSEQ_PTR_LDSEQ
/* 0x620D [0xCC 0x03 ] */ ldi 3
/* 0x620F [0xFB 0x60 0xF2 ] */ jump CHAN_60F2
UNK_6212:
.byte 0x0C, 0x0D, 0x0E
.array ARRAY_6212
.byte SF0_EFFECT_12
.byte SF0_EFFECT_13
.byte SF0_EFFECT_14
UNK_6215:
.byte 0x71, 0x71, 0x71
.array ARRAY_6215
.byte 113, 113, 113
.channel CHAN_6218
/* 0x6218 [0xCE 0x62 0x29 ] */ ldptr UNK_6229
/* 0x6218 [0xCE 0x62 0x29 ] */ ldptr ARRAY_6229
/* 0x621B [0xCF 0x61 0x1B ] */ stptrtoseq CHAN_611A + STSEQ_PTR_LDSEQ
/* 0x621E [0xCE 0x62 0x2B ] */ ldptr UNK_622B
/* 0x621E [0xCE 0x62 0x2B ] */ ldptr ARRAY_622B
/* 0x6221 [0xCF 0x61 0x23 ] */ stptrtoseq CHAN_6122 + STSEQ_PTR_LDSEQ
/* 0x6224 [0xB8 0x02 ] */ rand 2
/* 0x6226 [0xFB 0x61 0x34 ] */ jump CHAN_6134
UNK_6229:
.byte 0x11, 0x12
.array ARRAY_6229
.byte SF0_EFFECT_17
.byte SF0_EFFECT_18
UNK_622B:
.byte 0x64, 0x64
.array ARRAY_622B
.byte 100, 100
.channel CHAN_622D
/* 0x622D [0xCE 0x62 0x3E ] */ ldptr UNK_623E
/* 0x622D [0xCE 0x62 0x3E ] */ ldptr ARRAY_623E
/* 0x6230 [0xCF 0x61 0x1B ] */ stptrtoseq CHAN_611A + STSEQ_PTR_LDSEQ
/* 0x6233 [0xCE 0x62 0x40 ] */ ldptr UNK_6240
/* 0x6233 [0xCE 0x62 0x40 ] */ ldptr ARRAY_6240
/* 0x6236 [0xCF 0x61 0x23 ] */ stptrtoseq CHAN_6122 + STSEQ_PTR_LDSEQ
/* 0x6239 [0xB8 0x02 ] */ rand 2
/* 0x623B [0xFB 0x61 0x34 ] */ jump CHAN_6134
UNK_623E:
.byte 0x0F, 0x10
.array ARRAY_623E
.byte SF0_EFFECT_15
.byte SF0_EFFECT_16
UNK_6240:
.byte 0x6E, 0x6E
.array ARRAY_6240
.byte 110, 110
.channel CHAN_6242
/* 0x6242 [0xCE 0x62 0x53 ] */ ldptr UNK_6253
/* 0x6242 [0xCE 0x62 0x53 ] */ ldptr ARRAY_6253
/* 0x6245 [0xCF 0x61 0x1B ] */ stptrtoseq CHAN_611A + STSEQ_PTR_LDSEQ
/* 0x6248 [0xCE 0x62 0x55 ] */ ldptr UNK_6255
/* 0x6248 [0xCE 0x62 0x55 ] */ ldptr ARRAY_6255
/* 0x624B [0xCF 0x61 0x23 ] */ stptrtoseq CHAN_6122 + STSEQ_PTR_LDSEQ
/* 0x624E [0xB8 0x02 ] */ rand 2
/* 0x6250 [0xFB 0x61 0x34 ] */ jump CHAN_6134
UNK_6253:
.byte 0x13, 0x17
.array ARRAY_6253
.byte SF0_EFFECT_19
.byte SF0_EFFECT_23
UNK_6255:
.byte 0x5A, 0x5A
.array ARRAY_6255
.byte 90, 90
.channel CHAN_6257
/* 0x6257 [0x88 0x62 0x5B ] */ ldlayer 0, LAYER_625B
@ -14285,18 +14306,19 @@ UNK_6255:
/* 0x626E [0xFF ] */ end
.channel CHAN_626F
/* 0x626F [0xCE 0x62 0x80 ] */ ldptr UNK_6280
/* 0x626F [0xCE 0x62 0x80 ] */ ldptr ARRAY_6280
/* 0x6272 [0xCF 0x61 0x1B ] */ stptrtoseq CHAN_611A + STSEQ_PTR_LDSEQ
/* 0x6275 [0xCE 0x62 0x82 ] */ ldptr UNK_6282
/* 0x6275 [0xCE 0x62 0x82 ] */ ldptr ARRAY_6282
/* 0x6278 [0xCF 0x61 0x23 ] */ stptrtoseq CHAN_6122 + STSEQ_PTR_LDSEQ
/* 0x627B [0xB8 0x02 ] */ rand 2
/* 0x627D [0xFB 0x61 0x34 ] */ jump CHAN_6134
UNK_6280:
.byte 0x0F, 0x10
.array ARRAY_6280
.byte SF0_EFFECT_15
.byte SF0_EFFECT_16
UNK_6282:
.byte 0x69, 0x69
.array ARRAY_6282
.byte 105, 105
.channel CHAN_6284
/* 0x6284 [0xFB 0x61 0xEA ] */ jump CHAN_61EA
@ -14343,37 +14365,40 @@ UNK_6282:
/* 0x62C5 [0xFF ] */ end
.channel CHAN_62C6
/* 0x62C6 [0xCE 0x62 0xCC ] */ ldptr UNK_62CC
/* 0x62C6 [0xCE 0x62 0xCC ] */ ldptr ARRAY_62CC
/* 0x62C9 [0xFB 0x61 0x3E ] */ jump CHAN_613E
UNK_62CC:
.byte 0x00, 0x64
.array ARRAY_62CC
.byte SF0_EFFECT_0
.byte 100
.channel CHAN_62CE
/* 0x62CE [0x66 ] */ ldio IO_PORT_6
/* 0x62CF [0xC8 0xFF ] */ sub 255
/* 0x62D1 [0x76 ] */ stio IO_PORT_6
/* 0x62D2 [0xC9 0x01 ] */ and 1
/* 0x62D4 [0xCB 0x62 0xE8 ] */ ldseq UNK_62E8
/* 0x62D7 [0xC7 0x40 0x64 0xBF ] */ stseq (ASEQ_OP_LAYER_NOTEDV | PITCH_A0), LAYER_64BF + STSEQ_NOTEDV_OPCODE_PITCH
/* 0x62D4 [0xCB 0x62 0xE8 ] */ ldseq ARRAY_62E8
/* 0x62D7 [0xC7 0x40 0x64 0xBF ] */ stseq (ASEQ_OP_LAYER_NOTEDV | SF0_EFFECT_0), LAYER_64BF + STSEQ_NOTEDV_OPCODE_PITCH
/* 0x62DB [0xB8 0x02 ] */ rand 2
/* 0x62DD [0xCB 0x62 0xEA ] */ ldseq UNK_62EA
/* 0x62DD [0xCB 0x62 0xEA ] */ ldseq ARRAY_62EA
/* 0x62E0 [0xC7 0x00 0x64 0xC1 ] */ stseq 0, LAYER_64BF + STSEQ_NOTEDV_VELOCITY_2
/* 0x62E4 [0x88 0x64 0xBF ] */ ldlayer 0, LAYER_64BF
/* 0x62E7 [0xFF ] */ end
UNK_62E8:
.byte 0x1A, 0x1B
.array ARRAY_62E8
.byte SF0_EFFECT_26
.byte SF0_EFFECT_27
UNK_62EA:
.byte 0x50, 0x55
.array ARRAY_62EA
.byte 80, 85
.channel CHAN_62EC
/* 0x62EC [0xCE 0x62 0xF2 ] */ ldptr UNK_62F2
/* 0x62EC [0xCE 0x62 0xF2 ] */ ldptr ARRAY_62F2
/* 0x62EF [0xFB 0x61 0x3E ] */ jump CHAN_613E
UNK_62F2:
.byte 0x05, 0x6E
.array ARRAY_62F2
.byte SF0_EFFECT_5
.byte 110
.channel CHAN_62F4
/* 0x62F4 [0x88 0x62 0xF8 ] */ ldlayer 0, LAYER_62F8
@ -14385,72 +14410,82 @@ UNK_62F2:
/* 0x62FD [0xFF ] */ end
.channel CHAN_62FE
/* 0x62FE [0xCE 0x63 0x04 ] */ ldptr UNK_6304
/* 0x62FE [0xCE 0x63 0x04 ] */ ldptr ARRAY_6304
/* 0x6301 [0xFB 0x61 0x3E ] */ jump CHAN_613E
UNK_6304:
.byte 0x04, 0x5F
.array ARRAY_6304
.byte SF0_EFFECT_4
.byte 95
.channel CHAN_6306
/* 0x6306 [0xCE 0x63 0x0C ] */ ldptr UNK_630C
/* 0x6306 [0xCE 0x63 0x0C ] */ ldptr ARRAY_630C
/* 0x6309 [0xFB 0x61 0x3E ] */ jump CHAN_613E
UNK_630C:
.byte 0x07, 0x52
.array ARRAY_630C
.byte SF0_EFFECT_7
.byte 82
.channel CHAN_630E
/* 0x630E [0xCE 0x63 0x14 ] */ ldptr UNK_6314
/* 0x630E [0xCE 0x63 0x14 ] */ ldptr ARRAY_6314
/* 0x6311 [0xFB 0x61 0x3E ] */ jump CHAN_613E
UNK_6314:
.byte 0x06, 0x5F
.array ARRAY_6314
.byte SF0_EFFECT_6
.byte 95
.channel CHAN_6316
/* 0x6316 [0xCE 0x63 0x1C ] */ ldptr UNK_631C
/* 0x6316 [0xCE 0x63 0x1C ] */ ldptr ARRAY_631C
/* 0x6319 [0xFB 0x61 0x3E ] */ jump CHAN_613E
UNK_631C:
.byte 0x18, 0x6E
.array ARRAY_631C
.byte SF0_EFFECT_24
.byte 110
.channel CHAN_631E
/* 0x631E [0xCE 0x63 0x24 ] */ ldptr UNK_6324
/* 0x631E [0xCE 0x63 0x24 ] */ ldptr ARRAY_6324
/* 0x6321 [0xFB 0x61 0x3E ] */ jump CHAN_613E
UNK_6324:
.byte 0x3C, 0x64
.array ARRAY_6324
.byte SF0_EFFECT_60
.byte 100
.channel CHAN_6326
/* 0x6326 [0xCE 0x63 0x2C ] */ ldptr UNK_632C
/* 0x6326 [0xCE 0x63 0x2C ] */ ldptr ARRAY_632C
/* 0x6329 [0xFB 0x61 0x3E ] */ jump CHAN_613E
UNK_632C:
.byte 0x3D, 0x6E
.array ARRAY_632C
.byte SF0_EFFECT_61
.byte 110
.channel CHAN_632E
/* 0x632E [0xCE 0x63 0x34 ] */ ldptr UNK_6334
/* 0x632E [0xCE 0x63 0x34 ] */ ldptr ARRAY_6334
/* 0x6331 [0xFB 0x61 0x3E ] */ jump CHAN_613E
UNK_6334:
.byte 0x0D, 0x71
.array ARRAY_6334
.byte SF0_EFFECT_13
.byte 113
.channel CHAN_6336
/* 0x6336 [0xCE 0x63 0x47 ] */ ldptr UNK_6347
/* 0x6336 [0xCE 0x63 0x47 ] */ ldptr ARRAY_6347
/* 0x6339 [0xCF 0x61 0x1B ] */ stptrtoseq CHAN_611A + STSEQ_PTR_LDSEQ
/* 0x633C [0xCE 0x63 0x4B ] */ ldptr UNK_634B
/* 0x633C [0xCE 0x63 0x4B ] */ ldptr ARRAY_634B
/* 0x633F [0xCF 0x61 0x23 ] */ stptrtoseq CHAN_6122 + STSEQ_PTR_LDSEQ
/* 0x6342 [0xCC 0x04 ] */ ldi 4
/* 0x6344 [0xFB 0x60 0xF2 ] */ jump CHAN_60F2
UNK_6347:
.byte 0x1C, 0x1D, 0x1E, 0x1F
.array ARRAY_6347
.byte SF0_EFFECT_28
.byte SF0_EFFECT_29
.byte SF0_EFFECT_30
.byte SF0_EFFECT_31
UNK_634B:
.byte 0x6E, 0x6E, 0x6E, 0x6E
.array ARRAY_634B
.byte 110, 110, 110, 110
.channel CHAN_634F
/* 0x634F [0xCE 0x63 0x72 ] */ ldptr UNK_6372
/* 0x634F [0xCE 0x63 0x72 ] */ ldptr ARRAY_6372
/* 0x6352 [0xCF 0x61 0x1B ] */ stptrtoseq CHAN_611A + STSEQ_PTR_LDSEQ
/* 0x6355 [0xCE 0x63 0x74 ] */ ldptr UNK_6374
/* 0x6355 [0xCE 0x63 0x74 ] */ ldptr ARRAY_6374
/* 0x6358 [0xCF 0x61 0x23 ] */ stptrtoseq CHAN_6122 + STSEQ_PTR_LDSEQ
/* 0x635B [0xB8 0x02 ] */ rand 2
/* 0x635D [0xFB 0x61 0x34 ] */ jump CHAN_6134
@ -14470,21 +14505,22 @@ CHAN_6367:
CHAN_6371:
/* 0x6371 [0x76 ] */ stio IO_PORT_6
UNK_6372:
.byte 0x20, 0x21
.array ARRAY_6372
.byte SF0_EFFECT_32
.byte SF0_EFFECT_33
UNK_6374:
.byte 0x6E, 0x6E
.array ARRAY_6374
.byte 110, 110
.channel CHAN_6376
/* 0x6376 [0x66 ] */ ldio IO_PORT_6
/* 0x6377 [0xC8 0xFF ] */ sub 255
/* 0x6379 [0x76 ] */ stio IO_PORT_6
/* 0x637A [0xC9 0x01 ] */ and 1
/* 0x637C [0xCB 0x63 0x96 ] */ ldseq UNK_6396
/* 0x637F [0xC7 0x40 0x63 0x90 ] */ stseq (ASEQ_OP_LAYER_NOTEDV | PITCH_A0), LAYER_6390 + STSEQ_NOTEDV_OPCODE_PITCH
/* 0x637C [0xCB 0x63 0x96 ] */ ldseq ARRAY_6396
/* 0x637F [0xC7 0x40 0x63 0x90 ] */ stseq (ASEQ_OP_LAYER_NOTEDV | SF0_EFFECT_0), LAYER_6390 + STSEQ_NOTEDV_OPCODE_PITCH
/* 0x6383 [0xB8 0x02 ] */ rand 2
/* 0x6385 [0xCB 0x63 0x98 ] */ ldseq UNK_6398
/* 0x6385 [0xCB 0x63 0x98 ] */ ldseq ARRAY_6398
/* 0x6388 [0xC7 0x00 0x63 0x92 ] */ stseq 0, LAYER_6390 + STSEQ_NOTEDV_VELOCITY_2
/* 0x638C [0x88 0x63 0x90 ] */ ldlayer 0, LAYER_6390
/* 0x638F [0xFF ] */ end
@ -14494,95 +14530,104 @@ UNK_6374:
/* 0x6393 [0xC0 0x30 ] */ ldelay 48
/* 0x6395 [0xFF ] */ end
UNK_6396:
.byte 0x22, 0x32
.array ARRAY_6396
.byte SF0_EFFECT_34
.byte SF0_EFFECT_50
UNK_6398:
.byte 0x64, 0x64
.array ARRAY_6398
.byte 100, 100
.channel CHAN_639A
/* 0x639A [0xCE 0x63 0xAB ] */ ldptr UNK_63AB
/* 0x639A [0xCE 0x63 0xAB ] */ ldptr ARRAY_63AB
/* 0x639D [0xCF 0x61 0x1B ] */ stptrtoseq CHAN_611A + STSEQ_PTR_LDSEQ
/* 0x63A0 [0xCE 0x63 0xAD ] */ ldptr UNK_63AD
/* 0x63A0 [0xCE 0x63 0xAD ] */ ldptr ARRAY_63AD
/* 0x63A3 [0xCF 0x61 0x23 ] */ stptrtoseq CHAN_6122 + STSEQ_PTR_LDSEQ
/* 0x63A6 [0xB8 0x02 ] */ rand 2
/* 0x63A8 [0xFB 0x61 0x34 ] */ jump CHAN_6134
UNK_63AB:
.byte 0x23, 0x24
.array ARRAY_63AB
.byte SF0_EFFECT_35
.byte SF0_EFFECT_36
UNK_63AD:
.byte 0x5A, 0x46
.array ARRAY_63AD
.byte 90, 70
.channel CHAN_63AF
/* 0x63AF [0xCE 0x63 0xC0 ] */ ldptr UNK_63C0
/* 0x63AF [0xCE 0x63 0xC0 ] */ ldptr ARRAY_63C0
/* 0x63B2 [0xCF 0x61 0x1B ] */ stptrtoseq CHAN_611A + STSEQ_PTR_LDSEQ
/* 0x63B5 [0xCE 0x63 0xC3 ] */ ldptr UNK_63C3
/* 0x63B5 [0xCE 0x63 0xC3 ] */ ldptr ARRAY_63C3
/* 0x63B8 [0xCF 0x61 0x23 ] */ stptrtoseq CHAN_6122 + STSEQ_PTR_LDSEQ
/* 0x63BB [0xCC 0x03 ] */ ldi 3
/* 0x63BD [0xFB 0x60 0xF2 ] */ jump CHAN_60F2
UNK_63C0:
.byte 0x25, 0x26, 0x27
.array ARRAY_63C0
.byte SF0_EFFECT_37
.byte SF0_EFFECT_38
.byte SF0_EFFECT_39
UNK_63C3:
.byte 0x6E, 0x6E, 0x6E
.array ARRAY_63C3
.byte 110, 110, 110
.channel CHAN_63C6
/* 0x63C6 [0xCE 0x63 0xD7 ] */ ldptr UNK_63D7
/* 0x63C6 [0xCE 0x63 0xD7 ] */ ldptr ARRAY_63D7
/* 0x63C9 [0xCF 0x61 0x1B ] */ stptrtoseq CHAN_611A + STSEQ_PTR_LDSEQ
/* 0x63CC [0xCE 0x63 0xDA ] */ ldptr UNK_63DA
/* 0x63CC [0xCE 0x63 0xDA ] */ ldptr ARRAY_63DA
/* 0x63CF [0xCF 0x61 0x23 ] */ stptrtoseq CHAN_6122 + STSEQ_PTR_LDSEQ
/* 0x63D2 [0xCC 0x03 ] */ ldi 3
/* 0x63D4 [0xFB 0x60 0xF2 ] */ jump CHAN_60F2
UNK_63D7:
.byte 0x28, 0x29, 0x2A
.array ARRAY_63D7
.byte SF0_EFFECT_40
.byte SF0_EFFECT_41
.byte SF0_EFFECT_42
UNK_63DA:
.byte 0x6E, 0x6E, 0x6E
.array ARRAY_63DA
.byte 110, 110, 110
.channel CHAN_63DD
/* 0x63DD [0xCE 0x63 0xEE ] */ ldptr UNK_63EE
/* 0x63DD [0xCE 0x63 0xEE ] */ ldptr ARRAY_63EE
/* 0x63E0 [0xCF 0x61 0x1B ] */ stptrtoseq CHAN_611A + STSEQ_PTR_LDSEQ
/* 0x63E3 [0xCE 0x63 0xF0 ] */ ldptr UNK_63F0
/* 0x63E3 [0xCE 0x63 0xF0 ] */ ldptr ARRAY_63F0
/* 0x63E6 [0xCF 0x61 0x23 ] */ stptrtoseq CHAN_6122 + STSEQ_PTR_LDSEQ
/* 0x63E9 [0xB8 0x02 ] */ rand 2
/* 0x63EB [0xFB 0x61 0x34 ] */ jump CHAN_6134
UNK_63EE:
.byte 0x2D, 0x2E
.array ARRAY_63EE
.byte SF0_EFFECT_45
.byte SF0_EFFECT_46
UNK_63F0:
.byte 0x64, 0x64
.array ARRAY_63F0
.byte 100, 100
.channel CHAN_63F2
/* 0x63F2 [0xCE 0x64 0x03 ] */ ldptr UNK_6403
/* 0x63F2 [0xCE 0x64 0x03 ] */ ldptr ARRAY_6403
/* 0x63F5 [0xCF 0x61 0x1B ] */ stptrtoseq CHAN_611A + STSEQ_PTR_LDSEQ
/* 0x63F8 [0xCE 0x64 0x05 ] */ ldptr UNK_6405
/* 0x63F8 [0xCE 0x64 0x05 ] */ ldptr ARRAY_6405
/* 0x63FB [0xCF 0x61 0x23 ] */ stptrtoseq CHAN_6122 + STSEQ_PTR_LDSEQ
/* 0x63FE [0xB8 0x02 ] */ rand 2
/* 0x6400 [0xFB 0x61 0x34 ] */ jump CHAN_6134
UNK_6403:
.byte 0x2B, 0x2C
.array ARRAY_6403
.byte SF0_EFFECT_43
.byte SF0_EFFECT_44
UNK_6405:
.byte 0x64, 0x64
.array ARRAY_6405
.byte 100, 100
.channel CHAN_6407
/* 0x6407 [0xCE 0x64 0x18 ] */ ldptr UNK_6418
/* 0x6407 [0xCE 0x64 0x18 ] */ ldptr ARRAY_6418
/* 0x640A [0xCF 0x61 0x1B ] */ stptrtoseq CHAN_611A + STSEQ_PTR_LDSEQ
/* 0x640D [0xCE 0x64 0x1A ] */ ldptr UNK_641A
/* 0x640D [0xCE 0x64 0x1A ] */ ldptr ARRAY_641A
/* 0x6410 [0xCF 0x61 0x23 ] */ stptrtoseq CHAN_6122 + STSEQ_PTR_LDSEQ
/* 0x6413 [0xB8 0x02 ] */ rand 2
/* 0x6415 [0xFB 0x61 0x34 ] */ jump CHAN_6134
UNK_6418:
.byte 0x2F, 0x30
.array ARRAY_6418
.byte SF0_EFFECT_47
.byte SF0_EFFECT_48
UNK_641A:
.byte 0x55, 0x55
.array ARRAY_641A
.byte 85, 85
.channel CHAN_641C
/* 0x641C [0x88 0x64 0x20 ] */ ldlayer 0, LAYER_6420
@ -14604,25 +14649,27 @@ UNK_641A:
/* 0x6433 [0xFF ] */ end
.channel CHAN_6434
/* 0x6434 [0xCE 0x64 0x45 ] */ ldptr UNK_6445
/* 0x6434 [0xCE 0x64 0x45 ] */ ldptr ARRAY_6445
/* 0x6437 [0xCF 0x61 0x1B ] */ stptrtoseq CHAN_611A + STSEQ_PTR_LDSEQ
/* 0x643A [0xCE 0x64 0x47 ] */ ldptr UNK_6447
/* 0x643A [0xCE 0x64 0x47 ] */ ldptr ARRAY_6447
/* 0x643D [0xCF 0x61 0x23 ] */ stptrtoseq CHAN_6122 + STSEQ_PTR_LDSEQ
/* 0x6440 [0xB8 0x02 ] */ rand 2
/* 0x6442 [0xFB 0x61 0x34 ] */ jump CHAN_6134
UNK_6445:
.byte 0x2B, 0x2C
.array ARRAY_6445
.byte SF0_EFFECT_43
.byte SF0_EFFECT_44
UNK_6447:
.byte 0x64, 0x64
.array ARRAY_6447
.byte 100, 100
.channel CHAN_6449
/* 0x6449 [0xCE 0x64 0x4F ] */ ldptr UNK_644F
/* 0x6449 [0xCE 0x64 0x4F ] */ ldptr ARRAY_644F
/* 0x644C [0xFB 0x61 0x3E ] */ jump CHAN_613E
UNK_644F:
.byte 0x14, 0x64
.array ARRAY_644F
.byte SF0_EFFECT_20
.byte 100
.channel CHAN_6451
/* 0x6451 [0x88 0x64 0x55 ] */ ldlayer 0, LAYER_6455
@ -14667,11 +14714,12 @@ UNK_644F:
/* 0x6492 [0xFF ] */ end
.channel CHAN_6493
/* 0x6493 [0xCE 0x64 0x99 ] */ ldptr UNK_6499
/* 0x6493 [0xCE 0x64 0x99 ] */ ldptr ARRAY_6499
/* 0x6496 [0xFB 0x61 0x3E ] */ jump CHAN_613E
UNK_6499:
.byte 0x1C, 0x64
.array ARRAY_6499
.byte SF0_EFFECT_28
.byte 100
.channel CHAN_649B
/* 0x649B [0x88 0x64 0x9F ] */ ldlayer 0, LAYER_649F
@ -14687,10 +14735,10 @@ UNK_6499:
/* 0x64A6 [0xC8 0xFF ] */ sub 255
/* 0x64A8 [0x76 ] */ stio IO_PORT_6
/* 0x64A9 [0xC9 0x01 ] */ and 1
/* 0x64AB [0xCB 0x64 0xC5 ] */ ldseq UNK_64C5
/* 0x64AE [0xC7 0x40 0x64 0xBF ] */ stseq (ASEQ_OP_LAYER_NOTEDV | PITCH_A0), LAYER_64BF + STSEQ_NOTEDV_OPCODE_PITCH
/* 0x64AB [0xCB 0x64 0xC5 ] */ ldseq ARRAY_64C5
/* 0x64AE [0xC7 0x40 0x64 0xBF ] */ stseq (ASEQ_OP_LAYER_NOTEDV | SF0_EFFECT_0), LAYER_64BF + STSEQ_NOTEDV_OPCODE_PITCH
/* 0x64B2 [0xB8 0x02 ] */ rand 2
/* 0x64B4 [0xCB 0x64 0xC7 ] */ ldseq UNK_64C7
/* 0x64B4 [0xCB 0x64 0xC7 ] */ ldseq ARRAY_64C7
/* 0x64B7 [0xC7 0x00 0x64 0xC1 ] */ stseq 0, LAYER_64BF + STSEQ_NOTEDV_VELOCITY_2
/* 0x64BB [0x88 0x64 0xBF ] */ ldlayer 0, LAYER_64BF
/* 0x64BE [0xFF ] */ end
@ -14700,18 +14748,20 @@ UNK_6499:
/* 0x64C2 [0xC0 0x30 ] */ ldelay 48
/* 0x64C4 [0xFF ] */ end
UNK_64C5:
.byte 0x35, 0x36
.array ARRAY_64C5
.byte SF0_EFFECT_53
.byte SF0_EFFECT_54
UNK_64C7:
.byte 0x50, 0x50
.array ARRAY_64C7
.byte 80, 80
.channel CHAN_64C9
/* 0x64C9 [0xCE 0x64 0xCF ] */ ldptr UNK_64CF
/* 0x64C9 [0xCE 0x64 0xCF ] */ ldptr ARRAY_64CF
/* 0x64CC [0xFB 0x61 0x3E ] */ jump CHAN_613E
UNK_64CF:
.byte 0x21, 0x6E
.array ARRAY_64CF
.byte SF0_EFFECT_33
.byte 110
.channel CHAN_64D1
/* 0x64D1 [0x88 0x64 0xD5 ] */ ldlayer 0, LAYER_64D5
@ -14723,53 +14773,60 @@ UNK_64CF:
/* 0x64DA [0xFF ] */ end
.channel CHAN_64DB
/* 0x64DB [0xCE 0x64 0xE1 ] */ ldptr UNK_64E1
/* 0x64DB [0xCE 0x64 0xE1 ] */ ldptr ARRAY_64E1
/* 0x64DE [0xFB 0x61 0x3E ] */ jump CHAN_613E
UNK_64E1:
.byte 0x20, 0x5F
.array ARRAY_64E1
.byte SF0_EFFECT_32
.byte 95
.channel CHAN_64E3
/* 0x64E3 [0xCE 0x64 0xE9 ] */ ldptr UNK_64E9
/* 0x64E3 [0xCE 0x64 0xE9 ] */ ldptr ARRAY_64E9
/* 0x64E6 [0xFB 0x61 0x3E ] */ jump CHAN_613E
UNK_64E9:
.byte 0x23, 0x5A
.array ARRAY_64E9
.byte SF0_EFFECT_35
.byte 90
.channel CHAN_64EB
/* 0x64EB [0xCE 0x64 0xF1 ] */ ldptr UNK_64F1
/* 0x64EB [0xCE 0x64 0xF1 ] */ ldptr ARRAY_64F1
/* 0x64EE [0xFB 0x61 0x3E ] */ jump CHAN_613E
UNK_64F1:
.byte 0x22, 0x64
.array ARRAY_64F1
.byte SF0_EFFECT_34
.byte 100
.channel CHAN_64F3
/* 0x64F3 [0xCE 0x64 0xF9 ] */ ldptr UNK_64F9
/* 0x64F3 [0xCE 0x64 0xF9 ] */ ldptr ARRAY_64F9
/* 0x64F6 [0xFB 0x61 0x3E ] */ jump CHAN_613E
UNK_64F9:
.byte 0x31, 0x73
.array ARRAY_64F9
.byte SF0_EFFECT_49
.byte 115
.channel CHAN_64FB
/* 0x64FB [0xCE 0x65 0x01 ] */ ldptr UNK_6501
/* 0x64FB [0xCE 0x65 0x01 ] */ ldptr ARRAY_6501
/* 0x64FE [0xFB 0x61 0x3E ] */ jump CHAN_613E
UNK_6501:
.byte 0x3E, 0x64
.array ARRAY_6501
.byte SF0_EFFECT_62
.byte 100
.channel CHAN_6503
/* 0x6503 [0xCE 0x65 0x09 ] */ ldptr UNK_6509
/* 0x6503 [0xCE 0x65 0x09 ] */ ldptr ARRAY_6509
/* 0x6506 [0xFB 0x61 0x3E ] */ jump CHAN_613E
UNK_6509:
.byte 0x3F, 0x6E
.array ARRAY_6509
.byte SF0_EFFECT_63
.byte 110
.channel CHAN_650B
/* 0x650B [0xCE 0x65 0x11 ] */ ldptr UNK_6511
/* 0x650B [0xCE 0x65 0x11 ] */ ldptr ARRAY_6511
/* 0x650E [0xFB 0x61 0x3E ] */ jump CHAN_613E
UNK_6511:
.byte 0x2C, 0x64
.array ARRAY_6511
.byte SF0_EFFECT_44
.byte 100
.channel CHAN_6513
/* 0x6513 [0xCC 0x20 ] */ ldi 32
@ -14784,9 +14841,9 @@ UNK_6511:
.channel CHAN_6520
/* 0x6520 [0x64 ] */ ldio IO_PORT_SFX_INDEX_LOBITS
/* 0x6521 [0xC8 0x50 ] */ sub 80
/* 0x6521 [0xC8 0x50 ] */ sub NA_SE_VO_TA_SLEEP & 0xFF
/* 0x6523 [0xC7 0x19 0x65 0x36 ] */ stseq (ASEQ_OP_LAYER_NOTEDVG | PITCH_BF2), LAYER_6536 + STSEQ_NOTEDVG_OPCODE_PITCH
/* 0x6527 [0xCB 0x65 0x3B ] */ ldseq UNK_653B
/* 0x6527 [0xCB 0x65 0x3B ] */ ldseq ARRAY_653B
/* 0x652A [0xC7 0x00 0x65 0x38 ] */ stseq 0, LAYER_6536 + STSEQ_NOTEDVG_DELAY_LO
/* 0x652E [0x88 0x65 0x34 ] */ ldlayer 0, LAYER_6534
/* 0x6531 [0xDC 0x60 ] */ panweight 96
@ -14798,16 +14855,16 @@ LAYER_6536:
/* 0x6536 [0x21 0x00 0x64 0x00 ] */ notedvg PITCH_GF3, 0, 100, 0
/* 0x653A [0xFF ] */ end
UNK_653B:
.byte 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x6E, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64
.byte 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64
.byte 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x6E
.array ARRAY_653B
.byte 100, 100, 100, 100, 100, 100, 100, 100, 110, 100, 100, 100, 100, 100, 100, 100
.byte 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100
.byte 100, 100, 100, 100, 100, 100, 110
.channel CHAN_6562
/* 0x6562 [0x64 ] */ ldio IO_PORT_SFX_INDEX_LOBITS
/* 0x6563 [0xC8 0x77 ] */ sub 119
/* 0x6563 [0xC8 0x77 ] */ sub NA_SE_VO_Z1_OPENDOOR & 0xFF
/* 0x6565 [0xC7 0x00 0x65 0x76 ] */ stseq (ASEQ_OP_LAYER_NOTEDVG | PITCH_A0), LAYER_6576 + STSEQ_NOTEDVG_OPCODE_PITCH
/* 0x6569 [0xCB 0x65 0x7B ] */ ldseq UNK_657B
/* 0x6569 [0xCB 0x65 0x7B ] */ ldseq ARRAY_657B
/* 0x656C [0xC7 0x00 0x65 0x78 ] */ stseq 0, LAYER_6576 + STSEQ_NOTEDVG_DELAY_LO
/* 0x6570 [0x88 0x65 0x74 ] */ ldlayer 0, LAYER_6574
/* 0x6573 [0xFF ] */ end
@ -14818,16 +14875,16 @@ LAYER_6576:
/* 0x6576 [0x00 0x00 0x64 0x00 ] */ notedvg PITCH_A0, 0, 100, 0
/* 0x657A [0xFF ] */ end
UNK_657B:
.byte 0x64, 0x64, 0x64, 0x64, 0x64, 0x64
.array ARRAY_657B
.byte 100, 100, 100, 100, 100, 100
.channel CHAN_6581
/* 0x6581 [0xCC 0x20 ] */ ldi 32
/* 0x6583 [0x71 ] */ stio IO_PORT_1
/* 0x6584 [0x89 0x65 0x98 ] */ ldlayer 1, LAYER_6598
/* 0x6587 [0xCE 0x65 0xA7 ] */ ldptr UNK_65A7
/* 0x6587 [0xCE 0x65 0xA7 ] */ ldptr ARRAY_65A7
/* 0x658A [0xCF 0x61 0x1B ] */ stptrtoseq CHAN_611A + STSEQ_PTR_LDSEQ
/* 0x658D [0xCE 0x65 0xAA ] */ ldptr UNK_65AA
/* 0x658D [0xCE 0x65 0xAA ] */ ldptr ARRAY_65AA
/* 0x6590 [0xCF 0x61 0x23 ] */ stptrtoseq CHAN_6122 + STSEQ_PTR_LDSEQ
/* 0x6593 [0xCC 0x03 ] */ ldi 3
/* 0x6595 [0xFB 0x60 0xF2 ] */ jump CHAN_60F2
@ -14840,11 +14897,13 @@ UNK_657B:
/* 0x65A3 [0x78 0x30 0x41 ] */ notedv PITCH_F5, 48, 65
/* 0x65A6 [0xFF ] */ end
UNK_65A7:
.byte 0x39, 0x3A, 0x3B
.array ARRAY_65A7
.byte SF0_EFFECT_57
.byte SF0_EFFECT_58
.byte SF0_EFFECT_59
UNK_65AA:
.byte 0x64, 0x5F, 0x69
.array ARRAY_65AA
.byte 100, 95, 105
.balign 16

View File

@ -1,8 +1,6 @@
#ifndef ATTRIBUTES_H
#define ATTRIBUTES_H
#include "versions.h"
#if !defined(__GNUC__) && !defined(__attribute__)
#define __attribute__(x)
#endif

View File

@ -741,6 +741,7 @@ _RESET_SECTION
/* Write the sequence name into a special .note.name section */
.pushsection .note.name, "", @note
.asciz "\name"
.balign 4
.popsection
/* Reset section and write start symbol. */
@ -826,7 +827,7 @@ _RESET_SECTION
.macro _wr_s16 value
/* Ensure the provided arg value fits in 16 bits (signed) */
_check_arg_bitwidth_s \value, 16
_wr16 \value
_wr16 \value & 0xFFFF
.endm
.macro _wr_u16 value
@ -1847,7 +1848,7 @@ $reladdr\@:
.endm
/**
* ptraddi <value:u16>
* ptraddi <value:s16>
*
* Like ptradd but for immediates instead of labels
*
@ -1855,7 +1856,7 @@ $reladdr\@:
*/
.macro ptraddi value
_wr_cmd_id ptradd, ,ASEQ_OP_CHAN_PTRADD,,,,,,, 0, 0
_wr_u16 \value
_wr_s16 \value
.endm
/**

View File

@ -1,7 +1,7 @@
#ifndef SOUNDFONT_FILE_H
#define SOUNDFONT_FILE_H
#include "libc/stdbool.h"
#include "stdbool.h"
#include "alignment.h"
#include "attributes.h"
#include "z64audio.h"

View File

@ -1,6 +1,8 @@
#ifndef FACE_CHANGE_H
#define FACE_CHANGE_H
#include "ultra64.h"
typedef struct FaceChange {
/* 0x00 */ s16 face;
/* 0x02 */ s16 timer;

View File

@ -3,6 +3,7 @@
#include "ultra64.h"
#include "ultra64/gbi.h"
#include "alignment.h"
#include "sched.h"
#include "thga.h"
#include "versions.h"

View File

@ -1,8 +1,8 @@
#ifndef INFLATE_H
#define INFLATE_H
#include "libc/stddef.h"
#include "libc/stdint.h"
#include "stddef.h"
#include "stdint.h"
#include "ultra64.h"
void gzip_decompress(uintptr_t romStart, u8* dst, size_t size);

View File

@ -1,7 +1,7 @@
#ifndef IS_DEBUG_H
#define IS_DEBUG_H
#include "libc/stddef.h"
#include "stddef.h"
#include "attributes.h"
#if DEBUG_FEATURES

View File

@ -1,8 +1,6 @@
#ifndef LIBC64_SPRINTF_H
#define LIBC64_SPRINTF_H
#include "ultra64.h"
#include "stdarg.h"
int vsprintf(char* dst, const char* fmt, va_list args);

View File

@ -4,7 +4,6 @@
#include "ultra64.h"
#include "libu64/pad.h"
#include "irqmgr.h"
#include "versions.h"
typedef enum ControllerPakType {
CONT_PAK_NONE,

View File

@ -1,7 +1,7 @@
#ifndef ROMFILE_H
#define ROMFILE_H
#include "ultra64.h"
#include "stdint.h"
typedef struct RomFile {
/* 0x00 */ uintptr_t vromStart;

View File

@ -4,7 +4,7 @@
#include "ultra64.h"
#include "versions.h"
#include "z64math.h"
#include "libc/assert.h"
#include "assert.h"
#define MAX_CHANNELS_PER_BANK 3

14
include/tex_len.h Normal file
View File

@ -0,0 +1,14 @@
#ifndef TEX_LEN_H
#define TEX_LEN_H
/**
* Compute a length for an array holding a texture.
* `type` is the array's element type.
* `width`, `height` are the texture dimensions.
* `bpp` is the texture's pixel size, in bits per pixels.
* The calculation computes the size of the texture in bits `width * height * bpp`,
* then divides by 8 to get the size in bytes, then divides by the element type size.
*/
#define TEX_LEN(type, width, height, bpp) ((width) * (height) * (bpp) / 8 / sizeof(type))
#endif

View File

@ -2,7 +2,6 @@
#define THA_H
#include "ultra64.h"
#include "alignment.h"
typedef struct TwoHeadArena {
/* 0x00 */ size_t size;

View File

@ -1,14 +1,14 @@
#ifndef ULTRA64_H
#define ULTRA64_H
#include "libc/assert.h"
#include "libc/math.h"
#include "libc/stdarg.h"
#include "libc/stdbool.h"
#include "libc/stddef.h"
#include "libc/stdint.h"
#include "libc/stdlib.h"
#include "libc/string.h"
#include "assert.h"
#include "math.h"
#include "stdarg.h"
#include "stdbool.h"
#include "stddef.h"
#include "stdint.h"
#include "stdlib.h"
#include "string.h"
#include "ultra64/ultratypes.h"
#include "unk.h"

View File

@ -1,8 +1,8 @@
#ifndef YAZ0_H
#define YAZ0_H
#include "libc/stddef.h"
#include "libc/stdint.h"
#include "stddef.h"
#include "stdint.h"
#include "ultra64.h"
void Yaz0_Decompress(uintptr_t romStart, u8* dst, size_t size);

View File

@ -2,7 +2,6 @@
#define Z64ACTOR_H
#include "color.h"
#include "romfile.h"
#include "z64actor_profile.h"
#include "z64animation.h"
#include "z64math.h"

View File

@ -1,8 +1,7 @@
#ifndef Z64_CURVE_H
#define Z64_CURVE_H
#include "ultra64/ultratypes.h"
#include "z64math.h"
#include "ultra64.h"
struct PlayState;
struct Actor;

View File

@ -5,7 +5,6 @@
#include "ultra64/ultratypes.h"
#include "libu64/pad.h"
#include "gamealloc.h"
#include "romfile.h"
#include "tha.h"
struct GraphicsContext;

View File

@ -4,7 +4,6 @@
#include "ultra64.h"
#include "ultra64/gbi.h"
#include "z64math.h"
#include "color.h"
struct GraphicsContext;
struct PlayState;

View File

@ -50,6 +50,8 @@ typedef enum PauseMenuPage {
#define PAUSE_EQUIP_PLAYER_WIDTH 64
#define PAUSE_EQUIP_PLAYER_HEIGHT 112
#define PAUSE_EQUIP_PLAYER_FRAG_HEIGHT (TMEM_SIZE / (PAUSE_EQUIP_PLAYER_WIDTH * G_IM_SIZ_16b_BYTES))
#define PAUSE_EQUIP_PLAYER_FRAG_NUM (((PAUSE_EQUIP_PLAYER_HEIGHT - 1) / PAUSE_EQUIP_PLAYER_FRAG_HEIGHT) + 1)
#define PAUSE_EQUIP_BUFFER_SIZE sizeof(u16[PAUSE_EQUIP_PLAYER_HEIGHT][PAUSE_EQUIP_PLAYER_WIDTH])
#define PAUSE_PLAYER_SEGMENT_GAMEPLAY_KEEP_BUFFER_SIZE 0x5000
@ -92,7 +94,7 @@ typedef enum PauseMainState {
/* 4 */ PAUSE_MAIN_STATE_SONG_PROMPT_INIT, // Start the prompt for the player to play the song.
/* 5 */ PAUSE_MAIN_STATE_SONG_PROMPT, // Waiting for the player to play the song.
/* 6 */ PAUSE_MAIN_STATE_SONG_PROMPT_DONE, // The song prompt is done, the player either played the song successfully or made a mistake.
/* 7 */ PAUSE_MAIN_STATE_7,
/* 7 */ PAUSE_MAIN_STATE_EQUIP_CHANGED,
/* 8 */ PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG, // Like PAUSE_MAIN_STATE_IDLE, but the quest page is active and the cursor is positioned on a song.
/* 9 */ PAUSE_MAIN_STATE_SONG_PLAYBACK_START // Start playing the song back to the player.
} PauseMainState;

View File

@ -4,8 +4,8 @@
#include "ultra64/ultratypes.h"
#include "ultra64/gbi.h"
#include "romfile.h"
#include "z64math.h"
#include "z64dma.h" // for RomFile
struct GameState;
struct GraphicsContext;

View File

@ -1,7 +1,7 @@
#ifndef Z64SS_SRAM_H
#define Z64SS_SRAM_H
#include "libc/stddef.h"
#include "stddef.h"
#include "ultra64/ultratypes.h"
void SsSram_Init(s32 addr, u8 handleType, u8 handleDomain, u8 handleLatency, u8 handlePageSize, u8 handleRelDuration,

View File

@ -2,7 +2,7 @@
#define Z64TRANSITION_H
#include "ultra64/ultratypes.h"
#include "ultra64/gbi.h" // for Gfx
#include "ultra64/gbi.h"
#include "transition_circle.h"
#include "transition_fade.h"
#include "transition_triforce.h"

View File

@ -1,7 +1,7 @@
#ifndef Z_LIB_H
#define Z_LIB_H
#include "libc/stddef.h"
#include "stddef.h"
#include "libu64/pad.h"
#include "z64math.h"
#include "color.h"

View File

@ -2,7 +2,6 @@
#define Z_LOCALE_H
#include "ultra64/ultratypes.h"
#include "region.h"
extern s32 gCurrentRegion;

View File

@ -1,3 +1,4 @@
#include "alignment.h"
#include "array_count.h"
#include "buffers.h"
#include "z64audio.h"

View File

@ -2,6 +2,7 @@
* Original Filename: system.c
*/
#include "alignment.h"
#include "array_count.h"
#include "attributes.h"
#include "buffers.h"

View File

@ -98,8 +98,8 @@
#include "inflate.h"
#include "ultra64/ultratypes.h"
#include "libc/stddef.h"
#include "libc/stdint.h"
#include "stddef.h"
#include "stdint.h"
#include "alignment.h"
#include "attributes.h"
#include "z64dma.h"

View File

@ -1,6 +1,7 @@
#include "is_debug.h"
#include "ultra64.h"
#include "versions.h"
typedef struct ISVDbg {
/* 0x00 */ u32 magic; // "IS64"

View File

@ -45,8 +45,8 @@
#include "z64dma.h"
#include "z64thread.h"
#pragma increment_block_number "gc-eu:0 gc-eu-mq:0 gc-jp:0 gc-jp-ce:0 gc-jp-mq:0 gc-us:0 gc-us-mq:0 ntsc-1.2:66" \
"pal-1.0:64 pal-1.1:64"
#pragma increment_block_number "gc-eu:0 gc-eu-mq:0 gc-jp:0 gc-jp-ce:0 gc-jp-mq:0 gc-us:0 gc-us-mq:0 ntsc-1.2:86" \
"pal-1.0:84 pal-1.1:84"
StackEntry sDmaMgrStackInfo;
OSMesgQueue sDmaMgrMsgQueue;

View File

@ -10,6 +10,7 @@
* with identical lifetime.
*/
#include "tha.h"
#include "alignment.h"
void* THA_GetHead(TwoHeadArena* tha) {
return tha->head;

View File

@ -1,4 +1,5 @@
#include "gfx.h"
#include "gfxalloc.h"
#include "alignment.h"
Gfx* Gfx_Open(Gfx* gfx) {
return gfx + 1;

View File

@ -44,7 +44,7 @@ extern struct IrqMgr gIrqMgr;
#include "z64thread.h"
#pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \
"ique-cn:0 ntsc-1.0:34 ntsc-1.1:34 ntsc-1.2:34 pal-1.0:32 pal-1.1:32"
"ique-cn:0 ntsc-1.0:54 ntsc-1.1:54 ntsc-1.2:54 pal-1.0:52 pal-1.1:52"
extern u8 _buffersSegmentEnd[];

View File

@ -7,7 +7,7 @@
#include "z64save.h"
#include "z64transition.h"
#pragma increment_block_number "gc-eu:192 gc-eu-mq:192 gc-jp:192 gc-jp-ce:192 gc-jp-mq:192 gc-us:192 gc-us-mq:192" \
#pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \
"ntsc-1.0:0 ntsc-1.1:0 ntsc-1.2:0 pal-1.0:0 pal-1.1:0"
ALIGNED(16) SaveContext gSaveContext;

View File

@ -160,8 +160,8 @@ void KaleidoSetup_Init(PlayState* play) {
pauseCtx->cursorY[PAUSE_MAP] = 0;
pauseCtx->cursorX[PAUSE_QUEST] = 0;
pauseCtx->cursorY[PAUSE_QUEST] = 0;
pauseCtx->cursorX[PAUSE_EQUIP] = 1;
pauseCtx->cursorY[PAUSE_EQUIP] = 0;
pauseCtx->cursorX[PAUSE_EQUIP] = EQUIP_VALUE_SWORD_KOKIRI;
pauseCtx->cursorY[PAUSE_EQUIP] = EQUIP_TYPE_SWORD;
pauseCtx->cursorItem[PAUSE_ITEM] = PAUSE_ITEM_NONE;
pauseCtx->cursorItem[PAUSE_MAP] = VREG(30) + 3;

View File

@ -2,7 +2,7 @@
#include "ultra64/leo.h"
#include "ultra64/leoappli.h"
#include "ultra64/leodrive.h"
#include "libc/stdint.h"
#include "stdint.h"
#include "attributes.h"
#include "ultra64.h"

View File

@ -2,7 +2,7 @@
#include "ultra64/leo.h"
#include "ultra64/leoappli.h"
#include "ultra64/leodrive.h"
#include "libc/stdint.h"
#include "stdint.h"
#include "attributes.h"
#include "ultra64.h"

View File

@ -1,5 +1,7 @@
#include "libaudio.h"
#include "synthInternals.h"
#include "stdbool.h"
#include "stddef.h"
// WARNING: THE FOLLOWING CONSTANT MUST BE KEPT IN SYNC WITH SCALING IN MICROCODE!!!
#define SCALE 16384

View File

@ -1,6 +1,7 @@
#include "libaudio.h"
#include "synthInternals.h"
#include "libc/math.h"
#include "stdbool.h"
#include "stddef.h"
#include "ultra64/convert.h"
#define EQPOWER_LENGTH 128

View File

@ -1,5 +1,6 @@
#include "libaudio.h"
#include "synthInternals.h"
#include "stddef.h"
void alFilterNew(ALFilter* f, ALCmdHandler h, ALSetParam s, s32 type) {
f->source = NULL;

View File

@ -1,5 +1,6 @@
#include "libaudio.h"
#include "synthInternals.h"
#include "stddef.h"
void* alHeapDBAlloc(u8* file, s32 line, ALHeap* hp, s32 num, s32 size) {
s32 bytes;

View File

@ -1,9 +1,6 @@
#ifndef __LIB_AUDIO__
#define __LIB_AUDIO__
#include "libc/stdbool.h"
#include "libc/stddef.h"
#include "libc/stdint.h"
#include "ultra64/ultratypes.h"
#include "libaudio_abi.h"

View File

@ -1,5 +1,8 @@
#include "libaudio.h"
#include "synthInternals.h"
#include "stdbool.h"
#include "stddef.h"
#include "stdint.h"
#include "ultra64/R4300.h"
#ifndef MIN

View File

@ -1,5 +1,7 @@
#include "libaudio.h"
#include "synthInternals.h"
#include "stdbool.h"
#include "stddef.h"
#include "ultra64/convert.h"
Acmd* alResamplePull(void* filter, s16* outp, s32 outCnt, s32 sampleOffset, Acmd* p) {

View File

@ -1,5 +1,8 @@
#include "libaudio.h"
#include "synthInternals.h"
#include "stdbool.h"
#include "stddef.h"
#include "stdint.h"
#include "ultra64/convert.h"
#define RANGE 2.0

View File

@ -1,4 +1,5 @@
#include "libaudio.h"
#include "stddef.h"
ALGlobals* alGlobals = NULL;

View File

@ -1,3 +1,4 @@
#include "libaudio.h"
#include "synthInternals.h"
ALFxRef* alSynAllocFX(ALSynth* s, s16 bus, ALSynConfig* c, ALHeap* hp) {

View File

@ -1,4 +1,5 @@
#include "synthInternals.h"
#include "libaudio.h"
#include "stddef.h"
void alSynDelete(ALSynth* drvr) {
drvr->head = NULL;

View File

@ -1,4 +1,6 @@
#include "libaudio.h"
#include "synthInternals.h"
#include "stddef.h"
#ifndef MIN
#define MIN(a, b) (((a) < (b)) ? (a) : (b))

View File

@ -1,4 +1,4 @@
#include "libc/stddef.h"
#include "stddef.h"
int strcmp(const char* s, const char* t) {
while (*s == *t) {

View File

@ -3,6 +3,7 @@
#include "libc64/aprintf.h"
#include "attributes.h"
#include "array_count.h"
#include "color.h"
// Draws text to framebuffer
typedef struct struct_801CA704 {

View File

@ -16,7 +16,7 @@
#include "z64audio.h"
#include "z64thread.h"
#pragma increment_block_number "ntsc-1.0:0 ntsc-1.1:0 ntsc-1.2:0 pal-1.0:0 pal-1.1:0"
#pragma increment_block_number "ntsc-1.0:64 ntsc-1.1:64 ntsc-1.2:64 pal-1.0:64 pal-1.1:64"
typedef struct struct_801D9C30 {
/* 0x000 */ s32 unk_000; // disk start

View File

@ -218,7 +218,6 @@ void BgMoriElevator_SetPosition(BgMoriElevator* this, PlayState* play) {
this->targetY = 233.0f;
BgMoriElevator_StopMovement(this);
} else {
// "Error:Forest Temple obj elevator Room setting is dangerous(%s %d)"
PRINTF(T("Error : 森の神殿 obj elevator 部屋設定が危険(%s %d)\n",
"Error : Forest Temple obj elevator room setting is dangerous(%s %d)\n"),
"../z_bg_mori_elevator.c", 479);

View File

@ -26,6 +26,7 @@
#include "sfx.h"
#include "sys_matrix.h"
#include "terminal.h"
#include "translation.h"
#include "z_lib.h"
#include "z64audio.h"
#include "z64effect.h"
@ -1785,20 +1786,17 @@ void BossMo_CoreCollisionCheck(BossMo* this, PlayState* play) {
}
if (this->coreCollider.base.acFlags & AC_HIT) {
ColliderElement* acHitElem = this->coreCollider.elem.acHitElem;
// "hit!!"
PRINTF("Core_Damage_check 当り!!\n");
PRINTF(T("Core_Damage_check 当り!!\n", "Core_Damage_check hit!!\n"));
this->coreCollider.base.acFlags &= ~AC_HIT;
if ((acHitElem->atDmgInfo.dmgFlags & DMG_MAGIC_FIRE) && (this->work[MO_TENT_ACTION_STATE] == MO_CORE_ATTACK)) {
this->work[MO_TENT_ACTION_STATE] = MO_CORE_RETREAT;
}
// "hit 2 !!"
PRINTF("Core_Damage_check 当り 2 \n");
PRINTF(T("Core_Damage_check 当り 2 \n", "Core_Damage_check hit 2 !!\n"));
if ((this->work[MO_TENT_ACTION_STATE] != MO_CORE_UNDERWATER) && (this->work[MO_TENT_INVINC_TIMER] == 0)) {
u8 damage = CollisionCheck_GetSwordDamage(acHitElem->atDmgInfo.dmgFlags);
if ((damage != 0) && (this->work[MO_TENT_ACTION_STATE] < MO_CORE_ATTACK)) {
// "sword hit !!"
PRINTF("Core_Damage_check 剣 当り!!\n");
PRINTF(T("Core_Damage_check 剣 当り!!\n", "Core_Damage_check sword hit!!\n"));
this->work[MO_TENT_ACTION_STATE] = MO_CORE_STUNNED;
this->timers[0] = 25;
@ -1868,8 +1866,7 @@ void BossMo_CoreCollisionCheck(BossMo* this, PlayState* play) {
}
}
}
// "end !!"
PRINTF("Core_Damage_check 終わり \n");
PRINTF(T("Core_Damage_check 終わり \n", "Core_Damage_check end !!\n"));
PRINTF_RST();
}

View File

@ -922,8 +922,8 @@ void DemoDu_CsCredits_HandleCues(DemoDu* this, PlayState* play) {
DemoDu_CsCredits_AdvanceTo04(this);
break;
default:
// "Demo_Du_inEnding_Check_DemoMode:There is no such operation!!!!!!!!"
PRINTF("Demo_Du_inEnding_Check_DemoMode:そんな動作は無い!!!!!!!!\n");
PRINTF(T("Demo_Du_inEnding_Check_DemoMode:そんな動作は無い!!!!!!!!\n",
"Demo_Du_inEnding_Check_DemoMode: There is no such action!!!!!!!!\n"));
break;
}
this->cueId = nextCueId;

View File

@ -169,7 +169,8 @@ void DemoEc_Init(Actor* thisx, PlayState* play) {
DemoEc* this = (DemoEc*)thisx;
if ((this->actor.params < 0) || (this->actor.params > 34)) {
PRINTF(VT_FGCOL(RED) "Demo_Ec_Actor_ct:arg_dataがおかしい!!!!!!!!!!!!\n" VT_RST);
PRINTF(VT_FGCOL(RED) T("Demo_Ec_Actor_ct:arg_dataがおかしい!!!!!!!!!!!!\n",
"Demo_Ec_Actor_ct:arg_data is strange!!!!!!!!!!!!\n") VT_RST);
Actor_Kill(&this->actor);
} else {
this->updateMode = EC_UPDATE_COMMON;
@ -702,7 +703,7 @@ Gfx* DemoEc_GetCarpenterPostLimbDList(DemoEc* this) {
case 13:
return object_daiku_DL_005880;
default:
PRINTF(VT_FGCOL(RED) "かつらが無い!!!!!!!!!!!!!!!!\n" VT_RST);
PRINTF(VT_FGCOL(RED) T("かつらが無い!!!!!!!!!!!!!!!!\n", "No wig!!!!!!!!!!!!!!!!\n") VT_RST);
return NULL;
}
}
@ -748,7 +749,7 @@ Gfx* DemoEc_GetGerudoPostLimbDList(DemoEc* this) {
case 18:
return gGerudoWhiteHairstyleSpikyDL;
default:
PRINTF(VT_FGCOL(RED) "かつらが無い!!!!!!!!!!!!!!!!\n" VT_RST);
PRINTF(VT_FGCOL(RED) T("かつらが無い!!!!!!!!!!!!!!!!\n", "No wig!!!!!!!!!!!!!!!!\n") VT_RST);
return NULL;
}
}
@ -1259,8 +1260,9 @@ void DemoEc_InitNpc(DemoEc* this, PlayState* play) {
s16 type = this->actor.params;
if (sInitFuncs[type] == NULL) {
// "Demo_Ec_main_init: Initialization process is wrong arg_data"
PRINTF(VT_FGCOL(RED) " Demo_Ec_main_init:初期化処理がおかしいarg_data = %d!\n" VT_RST, type);
PRINTF(VT_FGCOL(RED) T(" Demo_Ec_main_init:初期化処理がおかしいarg_data = %d!\n",
" Demo_Ec_main_init: Initialization process is wrong arg_data = %d!\n") VT_RST,
type);
Actor_Kill(&this->actor);
return;
}
@ -1284,8 +1286,9 @@ void DemoEc_InitCommon(DemoEc* this, PlayState* play) {
secondaryObjectSlot = Object_GetSlot(&play->objectCtx, sp28);
if ((secondaryObjectSlot < 0) || (primaryObjectSlot < 0)) {
// "Demo_Ec_main_bank: Bank unreadable arg_data = %d!"
PRINTF(VT_FGCOL(RED) "Demo_Ec_main_bank:バンクを読めない arg_data = %d!\n" VT_RST, type);
PRINTF(VT_FGCOL(RED) T("Demo_Ec_main_bank:バンクを読めない arg_data = %d!\n",
"Demo_Ec_main_bank: Bank unreadable arg_data = %d!\n") VT_RST,
type);
Actor_Kill(&this->actor);
return;
}

View File

@ -122,8 +122,8 @@ void DemoExt_HandleCues(DemoExt* this, PlayState* play) {
DemoExt_SetupDispellVortex(this);
break;
default:
// "Demo_Ext_Check_DemoMode: there is no such action!"
PRINTF("Demo_Ext_Check_DemoMode:そんな動作は無い!!!!!!!!\n");
PRINTF(T("Demo_Ext_Check_DemoMode:そんな動作は無い!!!!!!!!\n",
"Demo_Ext_Check_DemoMode: There is no such action!!!!!!!!\n"));
break;
}
this->cueId = nextCueId;

View File

@ -72,7 +72,8 @@ void DemoGeff_Init(Actor* thisx, PlayState* play) {
DemoGeff* this = (DemoGeff*)thisx;
if (this->actor.params < 0 || this->actor.params >= 9) {
PRINTF(VT_FGCOL(RED) "Demo_Geff_Actor_ct:arg_dataがおかしい!!!!!!!!!!!!\n" VT_RST);
PRINTF(VT_FGCOL(RED) T("Demo_Geff_Actor_ct:arg_dataがおかしい!!!!!!!!!!!!\n",
"Demo_Geff_Actor_ct:arg_data is strange!!!!!!!!!!!!\n") VT_RST);
Actor_Kill(&this->actor);
return;
}
@ -190,7 +191,9 @@ void func_80978370(DemoGeff* this, PlayState* play) {
s16 params = this->actor.params;
DemoGeffInitFunc initFunc = sInitFuncs[params];
if (initFunc == NULL) {
PRINTF(VT_FGCOL(RED) " Demo_Geff_main_init:初期化処理がおかしいarg_data = %d!\n" VT_RST, params);
PRINTF(VT_FGCOL(RED) T(" Demo_Geff_main_init:初期化処理がおかしいarg_data = %d!\n",
" Demo_Geff_main_init: Initialization process is wrong arg_data = %d!\n") VT_RST,
params);
Actor_Kill(&this->actor);
return;
}
@ -206,7 +209,9 @@ void func_809783D4(DemoGeff* this, PlayState* play) {
s32 pad;
if (objectSlot < 0) {
PRINTF(VT_FGCOL(RED) "Demo_Geff_main_bank:バンクを読めない arg_data = %d!\n" VT_RST, params);
PRINTF(VT_FGCOL(RED) T("Demo_Geff_main_bank:バンクを読めない arg_data = %d!\n",
"Demo_Geff_main_bank: Bank unreadable arg_data = %d!\n") VT_RST,
params);
Actor_Kill(thisx);
return;
}

View File

@ -239,15 +239,17 @@ s32 DemoGj_FindGanon(DemoGj* this, PlayState* play) {
if (actor->id == ACTOR_BOSS_GANON2) {
this->ganon = (BossGanon2*)actor;
// "Demo_Gj_Search_Boss_Ganon %d: Discover Ganon !!!!"
PRINTF("Demo_Gj_Search_Boss_Ganon %d:ガノン発見!!!!\n", this->dyna.actor.params);
PRINTF(T("Demo_Gj_Search_Boss_Ganon %d:ガノン発見!!!!\n",
"Demo_Gj_Search_Boss_Ganon %d: Ganon is discovered!!!!\n"),
this->dyna.actor.params);
return true;
}
actor = actor->next;
}
// "Demo_Gj_Search_Boss_Ganon %d: I couldn't find Ganon"
PRINTF("Demo_Gj_Search_Boss_Ganon %d:ガノン発見出来ず\n", this->dyna.actor.params);
PRINTF(T("Demo_Gj_Search_Boss_Ganon %d:ガノン発見出来ず\n",
"Demo_Gj_Search_Boss_Ganon %d: Unable to find Ganon\n"),
this->dyna.actor.params);
return false;
}
//! @bug Missing return value when `this->ganon` is already set. No caller uses the return value
@ -404,8 +406,8 @@ void DemoGj_SetupRotation(DemoGj* this, PlayState* play) {
break;
default:
// "Demo_Gj_common_Reflect : This arg_data is not supported = %d"
PRINTF(VT_FGCOL(RED) "Demo_Gj_common_Reflect : そんなarg_dataには対応していない = %d\n" VT_RST,
PRINTF(VT_FGCOL(RED) T("Demo_Gj_common_Reflect : そんなarg_dataには対応していない = %d\n",
"Demo_Gj_common_Reflect : This arg_data is not supported = %d\n") VT_RST,
this->dyna.actor.params);
return;
}
@ -558,8 +560,8 @@ void DemoGj_SetupMovement(DemoGj* this, PlayState* play) {
break;
default:
// "Demo_Gj_Setup_Move_common : This arg_data is not supported = %d"
PRINTF(VT_FGCOL(RED) "Demo_Gj_Setup_Move_common : そんなarg_dataには対応していない = %d\n" VT_RST,
PRINTF(VT_FGCOL(RED) T("Demo_Gj_Setup_Move_common : そんなarg_dataには対応していない = %d\n",
"Demo_Gj_Setup_Move_common : This arg_data is not supported = %d\n") VT_RST,
actor->params);
break;
}
@ -1435,8 +1437,8 @@ void DemoGj_Init(Actor* thisx, PlayState* play) {
break;
default:
// "Demo_Gj_Actor_ct There is no such argument!!!!!!!!!!!!!!!!!!!!!!"
PRINTF(VT_FGCOL(RED) "Demo_Gj_Actor_ct そんな引数は無い!!!!!!!!!!!!!!!!!!!!!!\n" VT_RST);
PRINTF(VT_FGCOL(RED) T("Demo_Gj_Actor_ct そんな引数は無い!!!!!!!!!!!!!!!!!!!!!!\n",
"Demo_Gj_Actor_ct There is no such argument!!!!!!!!!!!!!!!!!!!!!!\n") VT_RST);
Actor_Kill(&this->dyna.actor);
}
}

View File

@ -1774,8 +1774,8 @@ void DemoGt_Init(Actor* thisx, PlayState* play) {
func_80982054_Init24(this, play);
break;
default:
// "Demo_Gt_Actor_ct There is no such argument !"
PRINTF("Demo_Gt_Actor_ct そんな引数は無い!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n");
PRINTF(T("Demo_Gt_Actor_ct そんな引数は無い!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n",
"Demo_Gt_Actor_ct There is no such argument!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"));
Actor_Kill(&this->dyna.actor);
}
}

View File

@ -244,8 +244,8 @@ void func_809839D0(DemoIk* this, PlayState* play) {
case 6:
break;
default:
// "there is no such action"
PRINTF("Demo_Ik_Check_DemoMode:そんな動作は無い!!!!!!!!\n");
PRINTF(T("Demo_Ik_Check_DemoMode:そんな動作は無い!!!!!!!!\n",
"Demo_Ik_Check_DemoMode: There is no such action!!!!!!!!\n"));
}
this->cueId = nextCueId;
}
@ -393,8 +393,8 @@ void func_80984048(DemoIk* this, PlayState* play) {
Actor_Kill(&this->actor);
break;
default:
// "there is no such action"
PRINTF("Demo_Ik_inFace_Check_DemoMode:そんな動作は無い!!!!!!!!\n");
PRINTF(T("Demo_Ik_inFace_Check_DemoMode:そんな動作は無い!!!!!!!!\n",
"Demo_Ik_inFace_Check_DemoMode: There is no such action!!!!!!!!\n"));
}
this->cueId = nextCueId;
}

View File

@ -647,7 +647,8 @@ void func_809861C4(DemoIm* this, PlayState* play) {
this->action = 12;
break;
default:
PRINTF("Demo_Im_Ocarina_Check_DemoMode:そんな動作は無い!!!!!!!!\n");
PRINTF(T("Demo_Im_Ocarina_Check_DemoMode:そんな動作は無い!!!!!!!!\n",
"Demo_Im_Ocarina_Check_DemoMode: There is no such action!!!!!!!!\n"));
}
this->cueId = nextCueId;
}
@ -687,7 +688,8 @@ void func_809862E0(DemoIm* this, PlayState* play) {
func_80986148(this);
break;
default:
PRINTF("Demo_Im_Ocarina_Check_DemoMode:そんな動作は無い!!!!!!!!\n");
PRINTF(T("Demo_Im_Ocarina_Check_DemoMode:そんな動作は無い!!!!!!!!\n",
"Demo_Im_Ocarina_Check_DemoMode: There is no such action!!!!!!!!\n"));
}
this->cueId = nextCueId;
}
@ -815,7 +817,8 @@ void func_8098680C(DemoIm* this, PlayState* play) {
Actor_Kill(&this->actor);
break;
default:
PRINTF("Demo_Im_Spot00_Check_DemoMode:そんな動作は無い!!!!!!!!\n");
PRINTF(T("Demo_Im_Spot00_Check_DemoMode:そんな動作は無い!!!!!!!!\n",
"Demo_Im_Spot00_Check_DemoMode: There is no such action!!!!!!!!\n"));
}
this->cueId = nextCueId;
}
@ -1085,7 +1088,8 @@ void func_809871E8(DemoIm* this, PlayState* play) {
func_80987174(this);
break;
default:
PRINTF("Demo_Im_inEnding_Check_DemoMode:そんな動作は無い!!!!!!!!\n");
PRINTF(T("Demo_Im_inEnding_Check_DemoMode:そんな動作は無い!!!!!!!!\n",
"Demo_Im_inEnding_Check_DemoMode: There is no such action!!!!!!!!\n"));
}
this->cueId = nextCueId;
}

View File

@ -592,7 +592,8 @@ void func_8098F654(DemoSa* this, PlayState* play) {
func_8098F5D0(this);
break;
default:
PRINTF("Demo_Sa_inEnding_Check_DemoMode:そんな動作は無い!!!!!!!!\n");
PRINTF(T("Demo_Sa_inEnding_Check_DemoMode:そんな動作は無い!!!!!!!!\n",
"Demo_Sa_inEnding_Check_DemoMode: There is no such action!!!!!!!!\n"));
}
this->cueId = nextCueId;
}
@ -741,7 +742,8 @@ void func_8098FB68(DemoSa* this, PlayState* play) {
func_8098FAE0(this);
break;
default:
PRINTF("Demo_Sa_inPresent_Check_DemoMode:そんな動作は無い!!!!!!!!\n");
PRINTF(T("Demo_Sa_inPresent_Check_DemoMode:そんな動作は無い!!!!!!!!\n",
"Demo_Sa_inPresent_Check_DemoMode: There is no such action!!!!!!!!\n"));
}
this->cueId = nextCueId;
}

View File

@ -5,6 +5,7 @@
#include "gfx_setupdl.h"
#include "printf.h"
#include "sfx.h"
#include "translation.h"
#include "z64curve.h"
#include "z64play.h"
#include "z64save.h"
@ -58,8 +59,7 @@ void DemoTreLgt_Init(Actor* thisx, PlayState* play) {
DemoTreLgt* this = (DemoTreLgt*)thisx;
if (!SkelCurve_Init(play, &this->skelCurve, &gTreasureChestCurveSkel, sAnimations[0])) {
// "Demo_Tre_Lgt_Actor_ct (); Construct failed"
PRINTF("Demo_Tre_Lgt_Actor_ct();コンストラクト失敗\n");
PRINTF(T("Demo_Tre_Lgt_Actor_ct();コンストラクト失敗\n", "Demo_Tre_Lgt_Actor_ct(); Construct failed\n"));
}
ASSERT(true, "1", "../z_demo_tre_lgt.c", UNK_LINE);

View File

@ -1380,7 +1380,8 @@ void EnIk_HandleCsCues(EnIk* this, PlayState* play) {
break;
default:
PRINTF("En_Ik_inConfrontion_Check_DemoMode:そんな動作は無い!!!!!!!!\n");
PRINTF(T("En_Ik_inConfrontion_Check_DemoMode:そんな動作は無い!!!!!!!!\n",
"En_Ik_inConfrontion_Check_DemoMode: There is no such action!!!!!!!!\n"));
}
this->cueId = nextCueId;

View File

@ -695,8 +695,8 @@ void EnNb_CheckKidnapCsMode(EnNb* this, PlayState* play) {
Actor_Kill(&this->actor);
break;
default:
// "Operation Doesn't Exist!!!!!!!!"
PRINTF("En_Nb_Kidnap_Check_DemoMode:そんな動作は無い!!!!!!!!\n");
PRINTF(T("En_Nb_Kidnap_Check_DemoMode:そんな動作は無い!!!!!!!!\n",
"En_Nb_Kidnap_Check_DemoMode: There is no such action!!!!!!!!\n"));
break;
}
this->cueId = nextCueId;
@ -914,8 +914,8 @@ void EnNb_CheckConfrontationCsMode(EnNb* this, PlayState* play) {
EnNb_SetupConfrontationDestroy(this);
break;
default:
// "En_Nb_Confrontion_Check_DemoMode: Operation doesn't exist!!!!!!!!"
PRINTF("En_Nb_Confrontion_Check_DemoMode:そんな動作は無い!!!!!!!!\n");
PRINTF(T("En_Nb_Confrontion_Check_DemoMode:そんな動作は無い!!!!!!!!\n",
"En_Nb_Confrontion_Check_DemoMode: There is no such action!!!!!!!!\n"));
break;
}
this->cueId = nextCueId;
@ -1102,8 +1102,8 @@ void EnNb_CheckCreditsCsModeImpl(EnNb* this, PlayState* play) {
EnNb_SetupCreditsHeadTurn(this);
break;
default:
// "En_Nb_inEnding_Check_DemoMode: Operation doesn't exist!!!!!!!!"
PRINTF("En_Nb_inEnding_Check_DemoMode:そんな動作は無い!!!!!!!!\n");
PRINTF(T("En_Nb_inEnding_Check_DemoMode:そんな動作は無い!!!!!!!!\n",
"En_Nb_inEnding_Check_DemoMode: There is no such action!!!!!!!!\n"));
break;
}
this->cueId = nextCueId;

View File

@ -703,8 +703,8 @@ void EnRu2_NextCreditsAction(EnRu2* this, PlayState* play) {
EnRu2_SetupTurnHeadDownLeftAnimation(this);
break;
default:
// "There is no such action!"
PRINTF("En_Ru2_inEnding_Check_DemoMode:そんな動作は無い!!!!!!!!\n");
PRINTF(T("En_Ru2_inEnding_Check_DemoMode:そんな動作は無い!!!!!!!!\n",
"En_Ru2_inEnding_Check_DemoMode: There is no such action!!!!!!!!\n"));
break;
}
this->cueId = nextCueId;

View File

@ -2043,7 +2043,8 @@ s32 EnXc_SetupNocturneState(Actor* thisx, PlayState* play) {
Actor_Kill(thisx);
break;
default:
PRINTF("En_Oa2_Stalker_Check_DemoMode:そんな動作は無い!!!!!!!!\n");
PRINTF(T("En_Oa2_Stalker_Check_DemoMode:そんな動作は無い!!!!!!!!\n",
"En_Oa2_Stalker_Check_DemoMode: There is no such action!!!!!!!!\n"));
break;
}

View File

@ -1005,7 +1005,8 @@ void func_80B50A04(EnZl2* this, PlayState* play) {
func_80B50644(this, play);
break;
default:
PRINTF("En_Zl2_inAgain_Check_DemoMode:そんな動作は無い!!!!!!!!\n");
PRINTF(T("En_Zl2_inAgain_Check_DemoMode:そんな動作は無い!!!!!!!!\n",
"En_Zl2_inAgain_Check_DemoMode: There is no such action!!!!!!!!\n"));
}
this->cueId = nextCueId;
}
@ -1396,7 +1397,8 @@ void func_80B51948(EnZl2* this, PlayState* play) {
func_80B513A8(this, play);
break;
default:
PRINTF("En_Zl2_inEnding_Check_DemoMode:そんな動作は無い!!!!!!!!\n");
PRINTF(T("En_Zl2_inEnding_Check_DemoMode:そんな動作は無い!!!!!!!!\n",
"En_Zl2_inEnding_Check_DemoMode: There is no such action!!!!!!!!\n"));
}
this->cueId = nextCueId;
}
@ -1560,7 +1562,8 @@ void func_80B51FA8(EnZl2* this, PlayState* play) {
Actor_Kill(&this->actor);
break;
default:
PRINTF("En_Zl2_inRunning_Check_DemoMode:そんな動作は無い!!!!!!!!\n");
PRINTF(T("En_Zl2_inRunning_Check_DemoMode:そんな動作は無い!!!!!!!!\n",
"En_Zl2_inRunning_Check_DemoMode: There is no such action!!!!!!!!\n"));
break;
}
this->cueId = nextCueId;

View File

@ -968,7 +968,8 @@ void func_80B55444(EnZl3* this, PlayState* play) {
this->unk_328 = 1;
FALLTHROUGH;
default:
PRINTF("En_Zl3_inFinal_Check_DemoMode:そんな動作は無い!!!!!!!!\n");
PRINTF(T("En_Zl3_inFinal_Check_DemoMode:そんな動作は無い!!!!!!!!\n",
"En_Zl3_inFinal_Check_DemoMode: There is no such action!!!!!!!!\n"));
break;
}
this->unk_2F0 = temp_v0;
@ -1384,7 +1385,8 @@ void func_80B564A8(EnZl3* this, PlayState* play) {
Actor_Kill(&this->actor);
break;
default:
PRINTF("En_Zl3_inFinal2_Check_DemoMode:そんな動作は無い!!!!!!!!\n");
PRINTF(T("En_Zl3_inFinal2_Check_DemoMode:そんな動作は無い!!!!!!!!\n",
"En_Zl3_inFinal2_Check_DemoMode: There is no such action!!!!!!!!\n"));
}
this->unk_2F0 = temp_v0;
}

View File

@ -492,16 +492,17 @@ void ObjBean_Init(Actor* thisx, PlayState* play) {
path = PARAMS_GET_U(this->dyna.actor.params, 8, 5);
if (path == 0x1F) {
PRINTF_COLOR_ERROR();
// "No path data?"
PRINTF("パスデータが無い?(%s %d)(arg_data %xH)\n", "../z_obj_bean.c", 909, this->dyna.actor.params);
PRINTF(T("パスデータが無い?(%s %d)(arg_data %xH)\n", "No path data? (%s %d)(arg_data %xH)\n"),
"../z_obj_bean.c", 909, this->dyna.actor.params);
PRINTF_RST();
Actor_Kill(&this->dyna.actor);
return;
}
if (play->pathList[path].count < 3) {
PRINTF_COLOR_ERROR();
// "Incorrect number of path data"
PRINTF("パスデータ数が不正(%s %d)(arg_data %xH)\n", "../z_obj_bean.c", 921, this->dyna.actor.params);
PRINTF(T("パスデータ数が不正(%s %d)(arg_data %xH)\n",
"Path data count is invalid (%s %d)(arg_data %xH)\n"),
"../z_obj_bean.c", 921, this->dyna.actor.params);
PRINTF_RST();
Actor_Kill(&this->dyna.actor);
return;
@ -530,8 +531,8 @@ void ObjBean_Init(Actor* thisx, PlayState* play) {
ObjBean_SetupWaitForBean(this);
}
this->dyna.actor.world.rot.z = this->dyna.actor.home.rot.z = this->dyna.actor.shape.rot.z = 0;
// "Magic bean tree lift"
PRINTF("(魔法の豆の木リフト)(arg_data 0x%04x)\n", this->dyna.actor.params);
PRINTF(T("(魔法の豆の木リフト)(arg_data 0x%04x)\n", "(Magic beanstalk lift)(arg_data 0x%04x)\n"),
this->dyna.actor.params);
}
void ObjBean_Destroy(Actor* thisx, PlayState* play) {
@ -908,8 +909,7 @@ void ObjBean_Update(Actor* thisx, PlayState* play) {
if (ObjBean_CheckForHorseTrample(this, play)) {
PRINTF_COLOR_CYAN();
// "Horse and bean tree lift collision"
PRINTF("馬と豆の木リフト衝突!!!\n");
PRINTF(T("馬と豆の木リフト衝突!!!\n", "Horse and beanstalk lift collide!!!\n"));
PRINTF_RST();
ObjBean_Break(this, play);
DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);

View File

@ -11,6 +11,7 @@
#include "ichain.h"
#include "printf.h"
#include "sfx.h"
#include "translation.h"
#include "z_en_item00.h"
#include "z_lib.h"
#include "z64effect.h"
@ -108,8 +109,8 @@ void ObjKibako_Init(Actor* thisx, PlayState* play) {
ObjKibako_InitCollider(&this->actor, play);
CollisionCheck_SetInfo(&this->actor.colChkInfo, NULL, &sCCInfoInit);
ObjKibako_SetupIdle(this);
// "wooden box"
PRINTF("(dungeon keep 木箱)(arg_data 0x%04x)\n", this->actor.params);
PRINTF(T("(dungeon keep 木箱)(arg_data 0x%04x)\n", "(dungeon keep wooden box)(arg_data 0x%04x)\n"),
this->actor.params);
}
void ObjKibako_Destroy(Actor* thisx, PlayState* play2) {

View File

@ -11,6 +11,7 @@
#include "ichain.h"
#include "printf.h"
#include "sfx.h"
#include "translation.h"
#include "z_en_item00.h"
#include "z_lib.h"
#include "z64effect.h"
@ -140,9 +141,8 @@ void ObjKibako2_Init(Actor* thisx, PlayState* play) {
this->actionFunc = ObjKibako2_Idle;
this->dyna.actor.home.rot.z = this->dyna.actor.world.rot.z = this->dyna.actor.shape.rot.z =
this->dyna.actor.world.rot.x = this->dyna.actor.shape.rot.x = 0;
// "Wooden box (stationary)"
PRINTF("木箱(据置)(arg %04xH)(item %04xH %d)\n", this->dyna.actor.params, this->collectibleFlag,
this->dyna.actor.home.rot.x);
PRINTF(T("木箱(据置)(arg %04xH)(item %04xH %d)\n", "Wooden box (stationary)(arg %04xH)(item %04xH %d)\n"),
this->dyna.actor.params, this->collectibleFlag, this->dyna.actor.home.rot.x);
}
void ObjKibako2_Destroy(Actor* thisx, PlayState* play) {

View File

@ -17,6 +17,7 @@
#include "sfx.h"
#include "sys_matrix.h"
#include "terminal.h"
#include "translation.h"
#include "z_lib.h"
#include "z64effect.h"
#include "z64play.h"
@ -203,8 +204,9 @@ void ObjLightswitch_Init(Actor* thisx, PlayState* play) {
this->actor.home.pos.y, this->actor.home.pos.z, 0, this->actor.home.rot.y, 0,
(0xFF << 8) | PUSHBLOCK_SMALL_START_ON) == NULL) {
PRINTF_COLOR_ERROR();
// "Push-pull block occurrence failure"
PRINTF("押引ブロック発生失敗(%s %d)(arg_data 0x%04x)\n", "../z_obj_lightswitch.c", 452, this->actor.params);
PRINTF(T("押引ブロック発生失敗(%s %d)(arg_data 0x%04x)\n",
"Push/pull block failure(%s %d)(arg_data 0x%04x)\n"),
"../z_obj_lightswitch.c", 452, this->actor.params);
PRINTF_RST();
removeSelf = true;
}
@ -214,8 +216,7 @@ void ObjLightswitch_Init(Actor* thisx, PlayState* play) {
if (removeSelf) {
Actor_Kill(&this->actor);
}
// "Light switch"
PRINTF("(光スイッチ)(arg_data 0x%04x)\n", this->actor.params);
PRINTF(T("(光スイッチ)(arg_data 0x%04x)\n", "(Light switch)(arg_data 0x%04x)\n"), this->actor.params);
}
void ObjLightswitch_Destroy(Actor* thisx, PlayState* play2) {

View File

@ -8,6 +8,7 @@
#include "printf.h"
#include "terminal.h"
#include "translation.h"
#include "z64play.h"
#include "z64player.h"
@ -36,13 +37,12 @@ void ObjMakekinsuta_Init(Actor* thisx, PlayState* play) {
if (PARAMS_GET_NOSHIFT(this->actor.params, 13, 2) == 0x4000) {
PRINTF_COLOR_BLUE();
// "Gold Star Enemy(arg_data %x)"
PRINTF("金スタ発生敵(arg_data %x)\n", this->actor.params);
PRINTF(T("金スタ発生敵(arg_data %x)\n", "Gold Star Enemy(arg_data %x)\n"), this->actor.params);
PRINTF_RST();
} else {
PRINTF_COLOR_WARNING();
// "Invalid Argument (arg_data %x)(%s %d)"
PRINTF("引数不正 (arg_data %x)(%s %d)\n", this->actor.params, "../z_obj_makekinsuta.c", 119);
PRINTF(T("引数不正 (arg_data %x)(%s %d)\n", "Invalid Argument (arg_data %x)(%s %d)\n"), this->actor.params,
"../z_obj_makekinsuta.c", 119);
PRINTF_RST();
}
this->actionFunc = func_80B98320;

View File

@ -12,6 +12,7 @@
#include "sys_math3d.h"
#include "sys_matrix.h"
#include "terminal.h"
#include "translation.h"
#include "z_lib.h"
#include "z64play.h"
@ -78,9 +79,9 @@ void ObjMakeoshihiki_Init(Actor* thisx, PlayState* play) {
if (Actor_SpawnAsChild(&play->actorCtx, thisx, play, ACTOR_OBJ_OSHIHIKI, spawnPos->x, spawnPos->y, spawnPos->z, 0,
block->rotY, 0, ((block->color << 6) & 0xC0) | (block->type & 0xF) | 0xFF00) == NULL) {
// "Push-pull block failure"
PRINTF_COLOR_ERROR();
PRINTF(" : 押し引きブロック発生失敗(%s %d)\n", "../z_obj_makeoshihiki.c", 194);
PRINTF(T(" : 押し引きブロック発生失敗(%s %d)\n", "Error : Push/pull block failure (%s %d)\n"),
"../z_obj_makeoshihiki.c", 194);
PRINTF_RST();
Actor_Kill(thisx);
return;

View File

@ -10,6 +10,7 @@
#include "libc64/qrand.h"
#include "ichain.h"
#include "printf.h"
#include "translation.h"
#include "z64play.h"
#define FLAGS 0
@ -76,9 +77,9 @@ s32 ObjMure_SetCullingImpl(Actor* thisx, PlayState* play) {
result = true;
break;
default:
// "Error : Culling is not set.(%s %d)(arg_data 0x%04x)"
PRINTF("Error : カリングの設定がされていません。(%s %d)(arg_data 0x%04x)\n", "../z_obj_mure.c", 204,
this->actor.params);
PRINTF(T("Error : カリングの設定がされていません。(%s %d)(arg_data 0x%04x)\n",
"Error : Culling is not set. (%s %d)(arg_data 0x%04x)\n"),
"../z_obj_mure.c", 204, this->actor.params);
return false;
}
return result;
@ -100,11 +101,13 @@ void ObjMure_Init(Actor* thisx, PlayState* play) {
this->type = PARAMS_GET_U(thisx->params, 0, 5);
if (this->ptn >= 4) {
PRINTF("Error 群れな敵 (%s %d)(arg_data 0x%04x)\n", "../z_obj_mure.c", 237, thisx->params);
PRINTF(T("Error 群れな敵 (%s %d)(arg_data 0x%04x)\n", "Error Swarm of enemies (%s %d)(arg_data 0x%04x)\n"),
"../z_obj_mure.c", 237, thisx->params);
Actor_Kill(&this->actor);
return;
} else if (this->type >= 5) {
PRINTF("Error 群れな敵 (%s %d)(arg_data 0x%04x)\n", "../z_obj_mure.c", 245, thisx->params);
PRINTF(T("Error 群れな敵 (%s %d)(arg_data 0x%04x)\n", "Error Swarm of enemies (%s %d)(arg_data 0x%04x)\n"),
"../z_obj_mure.c", 245, thisx->params);
Actor_Kill(&this->actor);
return;
} else if (!ObjMure_SetCulling(thisx, play)) {
@ -112,12 +115,15 @@ void ObjMure_Init(Actor* thisx, PlayState* play) {
return;
}
this->actionFunc = ObjMure_InitialAction;
PRINTF("群れな敵 (arg_data 0x%04x)(chNum(%d) ptn(%d) svNum(%d) type(%d))\n", thisx->params, this->chNum, this->ptn,
this->svNum, this->type);
PRINTF(T("群れな敵 (arg_data 0x%04x)(chNum(%d) ptn(%d) svNum(%d) type(%d))\n",
"Swarm of enemies (arg_data 0x%04x)(chNum(%d) ptn(%d) svNum(%d) type(%d))\n"),
thisx->params, this->chNum, this->ptn, this->svNum, this->type);
#if DEBUG_FEATURES
if (ObjMure_GetMaxChildSpawns(this) <= 0) {
PRINTF("Warning : 個体数が設定されていません(%s %d)(arg_data 0x%04x)\n", "../z_obj_mure.c", 268, thisx->params);
PRINTF(T("Warning : 個体数が設定されていません(%s %d)(arg_data 0x%04x)\n",
"Warning : The number of individuals is not set(%s %d)(arg_data 0x%04x)\n"),
"../z_obj_mure.c", 268, thisx->params);
}
#endif
}
@ -135,7 +141,7 @@ s32 ObjMure_GetMaxChildSpawns(ObjMure* this) {
void ObjMure_GetSpawnPos(Vec3f* outPos, Vec3f* inPos, s32 ptn, s32 idx) {
#if DEBUG_FEATURES
if (ptn >= 4) {
PRINTF("おかしなの (%s %d)\n", "../z_obj_mure.c", 307);
PRINTF(T("おかしなの (%s %d)\n", "That's strange (%s %d)\n"), "../z_obj_mure.c", 307);
}
#endif
@ -152,8 +158,9 @@ void ObjMure_SpawnActors0(ObjMure* this, PlayState* play) {
for (i = 0; i < maxChildren; i++) {
#if DEBUG_FEATURES
if (this->children[i] != NULL) {
// "Error: I already have a child(%s %d)(arg_data 0x%04x)"
PRINTF("Error : 既に子供がいる(%s %d)(arg_data 0x%04x)\n", "../z_obj_mure.c", 333, actor->params);
PRINTF(T("Error : 既に子供がいる(%s %d)(arg_data 0x%04x)\n",
"Error : I already have a child (%s %d)(arg_data 0x%04x)\n"),
"../z_obj_mure.c", 333, actor->params);
}
#endif
@ -169,7 +176,8 @@ void ObjMure_SpawnActors0(ObjMure* this, PlayState* play) {
this->children[i]->flags |= ACTOR_FLAG_GRASS_DESTROYED;
this->children[i]->room = actor->room;
} else {
PRINTF("warning 発生失敗 (%s %d)\n", "../z_obj_mure.c", 359);
PRINTF(T("warning 発生失敗 (%s %d)\n", "warning failed to occur (%s %d)\n"), "../z_obj_mure.c",
359);
}
break;
default:
@ -180,7 +188,8 @@ void ObjMure_SpawnActors0(ObjMure* this, PlayState* play) {
if (this->children[i] != NULL) {
this->children[i]->room = actor->room;
} else {
PRINTF("warning 発生失敗 (%s %d)\n", "../z_obj_mure.c", 382);
PRINTF(T("warning 発生失敗 (%s %d)\n", "warning failed to occur (%s %d)\n"), "../z_obj_mure.c",
382);
}
break;
}
@ -197,7 +206,9 @@ void ObjMure_SpawnActors1(ObjMure* this, PlayState* play2) {
for (i = 0; i < maxChildren; i++) {
#if DEBUG_FEATURES
if (this->children[i] != NULL) {
PRINTF("Error : 既に子供がいる(%s %d)(arg_data 0x%04x)\n", "../z_obj_mure.c", 407, actor->params);
PRINTF(T("Error : 既に子供がいる(%s %d)(arg_data 0x%04x)\n",
"Error : I already have a child (%s %d)(arg_data 0x%04x)\n"),
"../z_obj_mure.c", 407, actor->params);
}
#endif
@ -210,7 +221,7 @@ void ObjMure_SpawnActors1(ObjMure* this, PlayState* play2) {
this->children[i]->room = actor->room;
} else {
this->childrenStates[i] = OBJMURE_CHILD_STATE_1;
PRINTF("warning 発生失敗 (%s %d)\n", "../z_obj_mure.c", 438);
PRINTF(T("warning 発生失敗 (%s %d)\n", "warning failed to occur (%s %d)\n"), "../z_obj_mure.c", 438);
}
}
}

View File

@ -9,6 +9,7 @@
#include "ichain.h"
#include "printf.h"
#include "sys_math3d.h"
#include "translation.h"
#include "z_lib.h"
#include "z64play.h"
@ -117,8 +118,9 @@ void ObjMure2_SpawnActors(ObjMure2* this, PlayState* play) {
for (i = 0; i < D_80B9A818[actorNum]; i++) {
if (this->actorSpawnPtrList[i] != NULL) {
// "Warning : I already have a child (%s %d)(arg_data 0x%04x)"
PRINTF("Warning : 既に子供がいる(%s %d)(arg_data 0x%04x)\n", "../z_obj_mure2.c", 269, this->actor.params);
PRINTF(T("Warning : 既に子供がいる(%s %d)(arg_data 0x%04x)\n",
"Warning : I already have a child (%s %d)(arg_data 0x%04x)\n"),
"../z_obj_mure2.c", 269, this->actor.params);
continue;
}

View File

@ -230,9 +230,9 @@ void ObjOshihiki_CheckType(ObjOshihiki* this, PlayState* play) {
ObjOshihiki_InitDynapoly(this, play, &gPushBlockCol, 1);
break;
default:
// "Error : type cannot be determined"
PRINTF("Error : タイプが判別できない(%s %d)(arg_data 0x%04x)\n", "../z_obj_oshihiki.c", 444,
this->dyna.actor.params);
PRINTF(T("Error : タイプが判別できない(%s %d)(arg_data 0x%04x)\n",
"Error : type cannot be determined (%s %d)(arg_data 0x%04x)\n"),
"../z_obj_oshihiki.c", 444, this->dyna.actor.params);
break;
}
}
@ -274,8 +274,9 @@ void ObjOshihiki_SetColor(ObjOshihiki* this, PlayState* play2) {
}
if (i >= ARRAY_COUNT(sColors)) {
// "Error : scene_data_ID cannot be determined"
PRINTF("Error : scene_data_ID が判別できない。(%s %d)\n", "../z_obj_oshihiki.c", 579);
PRINTF(T("Error : scene_data_ID が判別できない。(%s %d)\n",
"Error : scene_data_ID cannot be determined. (%s %d)\n"),
"../z_obj_oshihiki.c", 579);
color->r = color->g = color->b = 255;
} else {
src = &sColors[i][paramsColorIdx];
@ -320,8 +321,8 @@ void ObjOshihiki_Init(Actor* thisx, PlayState* play2) {
ObjOshihiki_SetColor(this, play);
ObjOshihiki_ResetFloors(this);
ObjOshihiki_SetupOnActor(this, play);
// "(dungeon keep push-pull block)"
PRINTF("(dungeon keep 押し引きブロック)(arg_data 0x%04x)\n", this->dyna.actor.params);
PRINTF(T("(dungeon keep 押し引きブロック)(arg_data 0x%04x)\n", "(dungeon keep push/pull block)(arg_data 0x%04x)\n"),
this->dyna.actor.params);
}
void ObjOshihiki_Destroy(Actor* thisx, PlayState* play) {
@ -387,9 +388,9 @@ s32 ObjOshihiki_CheckFloor(ObjOshihiki* this, PlayState* play) {
s32 ObjOshihiki_CheckGround(ObjOshihiki* this, PlayState* play) {
if (this->dyna.actor.world.pos.y <= BGCHECK_Y_MIN + 10.0f) {
// "Warning : Push-pull block fell too much"
PRINTF("Warning : 押し引きブロック落ちすぎた(%s %d)(arg_data 0x%04x)\n", "../z_obj_oshihiki.c", 809,
this->dyna.actor.params);
PRINTF(T("Warning : 押し引きブロック落ちすぎた(%s %d)(arg_data 0x%04x)\n",
"Warning : Push/pull block fell too much (%s %d)(arg_data 0x%04x)\n"),
"../z_obj_oshihiki.c", 809, this->dyna.actor.params);
Actor_Kill(&this->dyna.actor);
return 0;
}

View File

@ -339,7 +339,7 @@ void ObjSwitch_Init(Actor* thisx, PlayState* play) {
if (OBJSWITCH_FROZEN(&this->dyna.actor) && (ObjSwitch_SpawnIce(this, play) == NULL)) {
PRINTF_COLOR_RED();
PRINTF("Error : 氷発生失敗 (%s %d)\n", "../z_obj_switch.c", 732);
PRINTF(T("Error : 氷発生失敗 (%s %d)\n", "Error : Ice generation failure (%s %d)\n"), "../z_obj_switch.c", 732);
PRINTF_RST();
this->dyna.actor.params &= ~OBJSWITCH_FROZEN_FLAG;
}

View File

@ -13,6 +13,7 @@
#include "printf.h"
#include "sfx.h"
#include "sys_matrix.h"
#include "translation.h"
#include "z_lib.h"
#include "z64ocarina.h"
#include "z64play.h"
@ -149,10 +150,10 @@ void ObjTimeblock_Init(Actor* thisx, PlayState* play) {
ObjTimeblock_SetupAltBehaviourNotVisible(this);
}
// "Block of time"
PRINTF("時のブロック (<arg> %04xH <type> save:%d color:%d range:%d move:%d)\n", (u16)this->dyna.actor.params,
this->unk_177, this->dyna.actor.home.rot.z & 7, PARAMS_GET_U(this->dyna.actor.params, 11, 3),
PARAMS_GET_U(this->dyna.actor.params, 10, 1));
PRINTF(T("時のブロック (<arg> %04xH <type> save:%d color:%d range:%d move:%d)\n",
"Time Block (<arg> %04xH <type> save:%d color:%d range:%d move:%d)\n"),
(u16)this->dyna.actor.params, this->unk_177, this->dyna.actor.home.rot.z & 7,
PARAMS_GET_U(this->dyna.actor.params, 11, 3), PARAMS_GET_U(this->dyna.actor.params, 10, 1));
}
void ObjTimeblock_Destroy(Actor* thisx, PlayState* play) {
@ -233,8 +234,9 @@ void ObjTimeblock_Normal(ObjTimeblock* this, PlayState* play) {
// Possibly points the camera to this actor
OnePointCutscene_Attention(play, &this->dyna.actor);
// "◯◯◯◯ Time Block Attention Camera (frame counter %d)\n"
PRINTF("◯◯◯◯ Time Block 注目カメラ (frame counter %d)\n", play->state.frames);
PRINTF(T("◯◯◯◯ Time Block 注目カメラ (frame counter %d)\n",
"◯◯◯◯ Time Block Attention Camera (frame counter %d)\n"),
play->state.frames);
this->demoEffectFirstPartTimer = 12;
@ -291,8 +293,9 @@ void ObjTimeblock_AltBehaviorVisible(ObjTimeblock* this, PlayState* play) {
ObjTimeblock_SpawnDemoEffect(this, play);
this->demoEffectTimer = 160;
OnePointCutscene_Attention(play, &this->dyna.actor);
// "Time Block Attention Camera (frame counter)"
PRINTF("◯◯◯◯ Time Block 注目カメラ (frame counter %d)\n", play->state.frames);
PRINTF(T("◯◯◯◯ Time Block 注目カメラ (frame counter %d)\n",
"◯◯◯◯ Time Block Attention Camera (frame counter %d)\n"),
play->state.frames);
ObjTimeblock_ToggleSwitchFlag(play, PARAMS_GET_U(this->dyna.actor.params, 0, 6));
}

View File

@ -11,6 +11,7 @@
#include "ichain.h"
#include "printf.h"
#include "sfx.h"
#include "translation.h"
#include "z_en_item00.h"
#include "z_lib.h"
#include "z64effect.h"
@ -124,7 +125,7 @@ s32 ObjTsubo_SnapToFloor(ObjTsubo* this, PlayState* play) {
Math_Vec3f_Copy(&this->actor.home.pos, &this->actor.world.pos);
return true;
} else {
PRINTF("地面に付着失敗\n");
PRINTF(T("地面に付着失敗\n", "Failed to attach to ground\n"));
return false;
}
}
@ -149,11 +150,12 @@ void ObjTsubo_Init(Actor* thisx, PlayState* play) {
}
this->requiredObjectSlot = Object_GetSlot(&play->objectCtx, sObjectIds[PARAMS_GET_U(this->actor.params, 8, 1)]);
if (this->requiredObjectSlot < 0) {
PRINTF("Error : バンク危険! (arg_data 0x%04x)(%s %d)\n", this->actor.params, "../z_obj_tsubo.c", 410);
PRINTF(T("Error : バンク危険! (arg_data 0x%04x)(%s %d)\n", "Error : Bank danger! (arg_data 0x%04x)(%s %d)\n"),
this->actor.params, "../z_obj_tsubo.c", 410);
Actor_Kill(&this->actor);
} else {
ObjTsubo_SetupWaitForObject(this);
PRINTF("(dungeon keep 壷)(arg_data 0x%04x)\n", this->actor.params);
PRINTF(T("(dungeon keep 壷)(arg_data 0x%04x)\n", "(dungeon keep pot)(arg_data 0x%04x)\n"), this->actor.params);
}
}

View File

@ -15,6 +15,7 @@
#include "sys_math3d.h"
#include "sys_matrix.h"
#include "terminal.h"
#include "translation.h"
#include "z_lib.h"
#include "z64ocarina.h"
#include "z64play.h"
@ -234,7 +235,8 @@ void ObjWarp2block_Init(Actor* thisx, PlayState* play2) {
ObjWarp2block_SetInactive(this);
}
PRINTF("時のブロック(ワープ2) (<arg> %04xH <type> color:%d range:%d)\n",
PRINTF(T("時のブロック(ワープ2) (<arg> %04xH <type> color:%d range:%d)\n",
"Time Block (Warp 2) (<arg> %04xH <type> color:%d range:%d)\n"),
PARAMS_GET_U(this->dyna.actor.params, 0, 16), this->dyna.actor.home.rot.z & 7,
PARAMS_GET_U(this->dyna.actor.params, 11, 3));
}
@ -279,7 +281,9 @@ void func_80BA24F8(ObjWarp2block* this, PlayState* play) {
this->unk_174++;
if (this->unk_174 > 60) {
PRINTF_COLOR_ERROR();
PRINTF("Error : 時のブロック(ワープ2)が対でセットされていません(%s %d)\n", "../z_obj_warp2block.c", 505);
PRINTF(T("Error : 時のブロック(ワープ2)が対でセットされていません(%s %d)\n",
"Error : Time Blocks (Warp 2) are not set in pairs (%s %d)\n"),
"../z_obj_warp2block.c", 505);
PRINTF_RST();
Actor_Kill(&this->dyna.actor);
}

View File

@ -1,7 +1,7 @@
#ifndef FILE_SELECT_H
#define FILE_SELECT_H
#include "libc/stddef.h"
#include "stddef.h"
#include "ultra64.h"
#include "gfx.h"
#include "versions.h"

View File

@ -13,18 +13,60 @@
#include "assets/textures/icon_item_static/icon_item_static.h"
#include "assets/textures/parameter_static/parameter_static.h"
static u8 sChildUpgrades[] = { UPG_BULLET_BAG, UPG_BOMB_BAG, UPG_STRENGTH, UPG_SCALE };
static u8 sAdultUpgrades[] = { UPG_QUIVER, UPG_BOMB_BAG, UPG_STRENGTH, UPG_SCALE };
static u8 sChildUpgrades[] = {
UPG_BULLET_BAG, // EQUIP_QUAD_UPG_BULLETBAG_QUIVER
UPG_BOMB_BAG, // EQUIP_QUAD_UPG_BOMB_BAG
UPG_STRENGTH, // EQUIP_QUAD_UPG_STRENGTH
UPG_SCALE, // EQUIP_QUAD_UPG_SCALE
};
static u8 sAdultUpgrades[] = {
UPG_QUIVER, // EQUIP_QUAD_UPG_BULLETBAG_QUIVER
UPG_BOMB_BAG, // EQUIP_QUAD_UPG_BOMB_BAG
UPG_STRENGTH, // EQUIP_QUAD_UPG_STRENGTH
UPG_SCALE, // EQUIP_QUAD_UPG_SCALE
};
static u8 sChildUpgradeItemBases[] = { ITEM_BULLET_BAG_30, ITEM_BOMB_BAG_20, ITEM_STRENGTH_GORONS_BRACELET,
ITEM_SCALE_SILVER };
static u8 sAdultUpgradeItemBases[] = { ITEM_QUIVER_30, ITEM_BOMB_BAG_20, ITEM_STRENGTH_GORONS_BRACELET,
ITEM_SCALE_SILVER };
static u8 sChildUpgradeItemBases[] = {
ITEM_BULLET_BAG_30, // EQUIP_QUAD_UPG_BULLETBAG_QUIVER
ITEM_BOMB_BAG_20, // EQUIP_QUAD_UPG_BOMB_BAG
ITEM_STRENGTH_GORONS_BRACELET, // EQUIP_QUAD_UPG_STRENGTH
ITEM_SCALE_SILVER, // EQUIP_QUAD_UPG_SCALE
};
static u8 sAdultUpgradeItemBases[] = {
ITEM_QUIVER_30, // EQUIP_QUAD_UPG_BULLETBAG_QUIVER
ITEM_BOMB_BAG_20, // EQUIP_QUAD_UPG_BOMB_BAG
ITEM_STRENGTH_GORONS_BRACELET, // EQUIP_QUAD_UPG_STRENGTH
ITEM_SCALE_SILVER, // EQUIP_QUAD_UPG_SCALE
};
static u8 sUpgradeItemOffsets[] = { 0x00, 0x03, 0x06, 0x09 };
static u8 sUpgradeItemOffsets[] = {
0, // unused
ITEM_BOMB_BAG_20 - ITEM_QUIVER_30, // UPG_BOMB_BAG
ITEM_STRENGTH_GORONS_BRACELET - ITEM_QUIVER_30, // UPG_STRENGTH
ITEM_SCALE_SILVER - ITEM_QUIVER_30, // UPG_SCALE
};
static u8 sEquipmentItemOffsets[] = {
0x00, 0x00, 0x01, 0x02, 0x00, 0x03, 0x04, 0x05, 0x00, 0x06, 0x07, 0x08, 0x00, 0x09, 0x0A, 0x0B,
// EQUIP_TYPE_SWORD
0, // unused
ITEM_SWORD_KOKIRI - ITEM_SWORD_KOKIRI, // EQUIP_VALUE_SWORD_KOKIRI
ITEM_SWORD_MASTER - ITEM_SWORD_KOKIRI, // EQUIP_VALUE_SWORD_MASTER
ITEM_SWORD_BIGGORON - ITEM_SWORD_KOKIRI, // EQUIP_VALUE_SWORD_BIGGORON
// EQUIP_TYPE_SHIELD
0, // unused
ITEM_SHIELD_DEKU - ITEM_SWORD_KOKIRI, // EQUIP_VALUE_SHIELD_DEKU
ITEM_SHIELD_HYLIAN - ITEM_SWORD_KOKIRI, // EQUIP_VALUE_SHIELD_HYLIAN
ITEM_SHIELD_MIRROR - ITEM_SWORD_KOKIRI, // EQUIP_VALUE_SHIELD_MIRROR
// EQUIP_TYPE_TUNIC
0, // unused
ITEM_TUNIC_KOKIRI - ITEM_SWORD_KOKIRI, // EQUIP_VALUE_TUNIC_KOKIRI
ITEM_TUNIC_GORON - ITEM_SWORD_KOKIRI, // EQUIP_VALUE_TUNIC_GORON
ITEM_TUNIC_ZORA - ITEM_SWORD_KOKIRI, // EQUIP_VALUE_TUNIC_ZORA
// EQUIP_TYPE_BOOTS
0, // unused
ITEM_BOOTS_KOKIRI - ITEM_SWORD_KOKIRI, // EQUIP_VALUE_BOOTS_KOKIRI
ITEM_BOOTS_IRON - ITEM_SWORD_KOKIRI, // EQUIP_VALUE_BOOTS_IRON
ITEM_BOOTS_HOVER - ITEM_SWORD_KOKIRI, // EQUIP_VALUE_BOOTS_HOVER
};
void KaleidoScope_DrawEquipmentImage(PlayState* play, void* source, u32 width, u32 height) {
@ -46,15 +88,15 @@ void KaleidoScope_DrawEquipmentImage(PlayState* play, void* source, u32 width, u
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha);
curTexture = source;
remainingSize = width * height * 2;
textureHeight = 4096 / (width * 2);
textureSize = width * textureHeight * 2;
remainingSize = width * height * G_IM_SIZ_16b_BYTES;
textureHeight = TMEM_SIZE / (width * G_IM_SIZ_16b_BYTES);
textureSize = width * textureHeight * G_IM_SIZ_16b_BYTES;
textureCount = remainingSize / textureSize;
if ((remainingSize % textureSize) != 0) {
textureCount += 1;
}
vtxIndex = 80;
vtxIndex = EQUIP_QUAD_PLAYER_FIRST * 4;
gDPSetTileCustom(POLY_OPA_DISP++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0, width - 1, textureHeight - 1, 0,
G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD,
@ -76,7 +118,7 @@ void KaleidoScope_DrawEquipmentImage(PlayState* play, void* source, u32 width, u
if ((remainingSize - textureSize) < 0) {
if (remainingSize > 0) {
textureHeight = remainingSize / (s32)(width * 2);
textureHeight = remainingSize / (s32)(width * G_IM_SIZ_16b_BYTES);
remainingSize -= textureSize;
gDPSetTileCustom(POLY_OPA_DISP++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0, width - 1, textureHeight - 1, 0,
@ -156,7 +198,9 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, ZREG(39), ZREG(40), ZREG(41), pauseCtx->alpha);
gDPSetEnvColor(POLY_OPA_DISP++, ZREG(43), ZREG(44), ZREG(45), 0);
for (i = 0, j = 64; i < 4; i++, j += 4) {
// Draw EQUIP_QUAD_SELECTED_SWORD, EQUIP_QUAD_SELECTED_SHIELD, EQUIP_QUAD_SELECTED_TUNIC, EQUIP_QUAD_SELECTED_BOOTS
for (i = 0, j = EQUIP_QUAD_SELECTED_SWORD * 4; i < EQUIP_TYPE_MAX; i++, j += 4) {
if (CUR_EQUIP_VALUE(i) != 0) {
gDPPipeSync(POLY_OPA_DISP++);
gSPVertex(POLY_OPA_DISP++, &pauseCtx->equipVtx[j], 4, 0);
@ -170,6 +214,8 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
oldCursorPoint = pauseCtx->cursorPoint[PAUSE_EQUIP];
pauseCtx->cursorColorSet = 0;
// Handle moving the cursor with stick input
if (pauseCtx->cursorSpecialPos == 0) {
pauseCtx->nameColorSet = 0;
@ -185,12 +231,13 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
cursorMoveResult = 0;
do {
if (pauseCtx->stickAdjX < -30) {
if (pauseCtx->cursorX[PAUSE_EQUIP] != 0) {
if (pauseCtx->cursorX[PAUSE_EQUIP] != EQUIP_CURSOR_X_UPG) {
pauseCtx->cursorX[PAUSE_EQUIP]--;
pauseCtx->cursorPoint[PAUSE_EQUIP] -= 1;
if (pauseCtx->cursorX[PAUSE_EQUIP] == 0) {
if (pauseCtx->cursorY[PAUSE_EQUIP] == 0) {
if (pauseCtx->cursorX[PAUSE_EQUIP] == EQUIP_CURSOR_X_UPG) {
if (pauseCtx->cursorY[PAUSE_EQUIP] == EQUIP_CURSOR_Y_BULLETBAG_QUIVER) {
//! @bug Assumes adult always has bullet bag (as adult this should rely on `UPG_QUIVER`)
if (CUR_UPG_VALUE(UPG_BULLET_BAG) != 0) {
cursorMoveResult = 1;
}
@ -232,7 +279,7 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
pauseCtx->cursorX[PAUSE_EQUIP]++;
pauseCtx->cursorPoint[PAUSE_EQUIP] += 1;
if (pauseCtx->cursorX[PAUSE_EQUIP] == 0) {
if (pauseCtx->cursorX[PAUSE_EQUIP] == EQUIP_CURSOR_X_UPG) {
if (CUR_UPG_VALUE(pauseCtx->cursorY[PAUSE_EQUIP]) != 0) {
cursorMoveResult = 1;
}
@ -279,17 +326,21 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
pauseCtx->cursorY[PAUSE_EQUIP]--;
pauseCtx->cursorPoint[PAUSE_EQUIP] -= 4;
if (pauseCtx->cursorX[PAUSE_EQUIP] == 0) {
if (pauseCtx->cursorY[PAUSE_EQUIP] == 0) {
if (pauseCtx->cursorX[PAUSE_EQUIP] == EQUIP_CURSOR_X_UPG) {
if (pauseCtx->cursorY[PAUSE_EQUIP] == EQUIP_CURSOR_Y_BULLETBAG_QUIVER) {
if (CUR_UPG_VALUE(UPG_BULLET_BAG) != 0) {
cursorMoveResult = 1;
}
} else if (CUR_UPG_VALUE(pauseCtx->cursorY[PAUSE_EQUIP]) != 0) {
cursorMoveResult = 1;
} else {
if (CUR_UPG_VALUE(pauseCtx->cursorY[PAUSE_EQUIP]) != 0) {
cursorMoveResult = 1;
}
}
} else {
if (gBitFlags[pauseCtx->cursorPoint[PAUSE_EQUIP] - 1] &
gSaveContext.save.info.inventory.equipment) {
cursorMoveResult = 2;
}
} else if (gBitFlags[pauseCtx->cursorPoint[PAUSE_EQUIP] - 1] &
gSaveContext.save.info.inventory.equipment) {
cursorMoveResult = 2;
}
} else {
pauseCtx->cursorY[PAUSE_EQUIP] = cursorY;
@ -301,13 +352,15 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
pauseCtx->cursorY[PAUSE_EQUIP]++;
pauseCtx->cursorPoint[PAUSE_EQUIP] += 4;
if (pauseCtx->cursorX[PAUSE_EQUIP] == 0) {
if (pauseCtx->cursorX[PAUSE_EQUIP] == EQUIP_CURSOR_X_UPG) {
if (CUR_UPG_VALUE(pauseCtx->cursorY[PAUSE_EQUIP]) != 0) {
cursorMoveResult = 1;
}
} else if (gBitFlags[pauseCtx->cursorPoint[PAUSE_EQUIP] - 1] &
gSaveContext.save.info.inventory.equipment) {
cursorMoveResult = 2;
} else {
if (gBitFlags[pauseCtx->cursorPoint[PAUSE_EQUIP] - 1] &
gSaveContext.save.info.inventory.equipment) {
cursorMoveResult = 2;
}
}
} else {
pauseCtx->cursorY[PAUSE_EQUIP] = cursorY;
@ -328,25 +381,29 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
cursorPoint = cursorX = cursorY = 0;
while (true) {
if (cursorX == 0) {
if (cursorY == 0) {
if (cursorX == EQUIP_CURSOR_X_UPG) {
if (cursorY == EQUIP_CURSOR_Y_BULLETBAG_QUIVER) {
if (CUR_UPG_VALUE(UPG_BULLET_BAG) != 0) {
pauseCtx->cursorPoint[PAUSE_EQUIP] = cursorPoint;
pauseCtx->cursorX[PAUSE_EQUIP] = cursorX;
pauseCtx->cursorY[PAUSE_EQUIP] = cursorY;
break;
}
} else if (CUR_UPG_VALUE(cursorY) != 0) {
} else {
if (CUR_UPG_VALUE(cursorY) != 0) {
pauseCtx->cursorPoint[PAUSE_EQUIP] = cursorPoint;
pauseCtx->cursorX[PAUSE_EQUIP] = cursorX;
pauseCtx->cursorY[PAUSE_EQUIP] = cursorY;
break;
}
}
} else {
if (gBitFlags[cursorPoint - 1] & gSaveContext.save.info.inventory.equipment) {
pauseCtx->cursorPoint[PAUSE_EQUIP] = cursorPoint;
pauseCtx->cursorX[PAUSE_EQUIP] = cursorX;
pauseCtx->cursorY[PAUSE_EQUIP] = cursorY;
break;
}
} else if (gBitFlags[cursorPoint - 1] & gSaveContext.save.info.inventory.equipment) {
pauseCtx->cursorPoint[PAUSE_EQUIP] = cursorPoint;
pauseCtx->cursorX[PAUSE_EQUIP] = cursorX;
pauseCtx->cursorY[PAUSE_EQUIP] = cursorY;
break;
}
cursorY = cursorY + 1;
@ -362,7 +419,7 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
}
}
}
} else {
} else { // cursorSpecialPos == PAUSE_CURSOR_PAGE_RIGHT
if (pauseCtx->stickAdjX < -30) {
pauseCtx->nameDisplayTimer = 0;
pauseCtx->cursorSpecialPos = 0;
@ -372,18 +429,20 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
cursorPoint = cursorX = 3;
cursorY = 0;
while (true) {
if (cursorX == 0) {
if (cursorX == EQUIP_CURSOR_X_UPG) {
if (CUR_UPG_VALUE(cursorY) != 0) {
pauseCtx->cursorPoint[PAUSE_EQUIP] = cursorPoint;
pauseCtx->cursorX[PAUSE_EQUIP] = cursorX;
pauseCtx->cursorY[PAUSE_EQUIP] = cursorY;
break;
}
} else if (gBitFlags[cursorPoint - 1] & gSaveContext.save.info.inventory.equipment) {
pauseCtx->cursorPoint[PAUSE_EQUIP] = cursorPoint;
pauseCtx->cursorX[PAUSE_EQUIP] = cursorX;
pauseCtx->cursorY[PAUSE_EQUIP] = cursorY;
break;
} else {
if (gBitFlags[cursorPoint - 1] & gSaveContext.save.info.inventory.equipment) {
pauseCtx->cursorPoint[PAUSE_EQUIP] = cursorPoint;
pauseCtx->cursorX[PAUSE_EQUIP] = cursorX;
pauseCtx->cursorY[PAUSE_EQUIP] = cursorY;
break;
}
}
cursorY = cursorY + 1;
@ -401,11 +460,14 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
}
}
if (pauseCtx->cursorX[PAUSE_EQUIP] == 0) {
// set cursorItem
if (pauseCtx->cursorX[PAUSE_EQUIP] == EQUIP_CURSOR_X_UPG) {
pauseCtx->cursorColorSet = 0;
if (LINK_AGE_IN_YEARS == YEARS_CHILD) {
if ((pauseCtx->cursorY[PAUSE_EQUIP] == 0) && (CUR_UPG_VALUE(UPG_BULLET_BAG) != 0)) {
if ((pauseCtx->cursorY[PAUSE_EQUIP] == EQUIP_CURSOR_Y_BULLETBAG_QUIVER) &&
(CUR_UPG_VALUE(UPG_BULLET_BAG) != 0)) {
cursorItem = ITEM_BULLET_BAG_30 + CUR_UPG_VALUE(UPG_BULLET_BAG) - 1;
} else {
cursorItem = ITEM_QUIVER_30 + sUpgradeItemOffsets[pauseCtx->cursorY[PAUSE_EQUIP]] +
@ -413,7 +475,8 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
PRINTF("H_arrowcase_1 + non_equip_item_table = %d\n", cursorItem);
}
} else {
if ((pauseCtx->cursorY[PAUSE_EQUIP] == 0) && (CUR_UPG_VALUE(UPG_QUIVER) == 0)) {
if ((pauseCtx->cursorY[PAUSE_EQUIP] == EQUIP_CURSOR_Y_BULLETBAG_QUIVER) &&
(CUR_UPG_VALUE(UPG_QUIVER) == 0)) {
cursorItem = ITEM_BULLET_BAG_30 + CUR_UPG_VALUE(UPG_BULLET_BAG) - 1;
} else {
cursorItem = ITEM_QUIVER_30 + sUpgradeItemOffsets[pauseCtx->cursorY[PAUSE_EQUIP]] +
@ -430,8 +493,9 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
}
}
if ((pauseCtx->cursorY[PAUSE_EQUIP] == 0) && (pauseCtx->cursorX[PAUSE_EQUIP] == 3)) {
if (gSaveContext.save.info.playerData.bgsFlag != 0) {
if ((pauseCtx->cursorY[PAUSE_EQUIP] == EQUIP_TYPE_SWORD) &&
(pauseCtx->cursorX[PAUSE_EQUIP] == EQUIP_VALUE_SWORD_BIGGORON)) {
if (gSaveContext.save.info.playerData.bgsFlag) {
cursorItem = ITEM_HEART_PIECE_2;
} else if (CHECK_OWNED_EQUIP_ALT(EQUIP_TYPE_SWORD, EQUIP_INV_SWORD_BROKENGIANTKNIFE)) {
cursorItem = ITEM_GIANTS_KNIFE;
@ -445,6 +509,8 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
PRINTF("kscope->select_name[Display_Equipment] = %d\n", pauseCtx->cursorItem[PAUSE_EQUIP]);
// Handle age particularities
if (!CHECK_AGE_REQ_EQUIP(pauseCtx->cursorY[PAUSE_EQUIP], pauseCtx->cursorX[PAUSE_EQUIP])) {
pauseCtx->nameColorSet = 1;
}
@ -457,7 +523,8 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
}
}
if ((pauseCtx->cursorX[PAUSE_EQUIP] == 0) && (pauseCtx->cursorY[PAUSE_EQUIP] == 0)) {
if ((pauseCtx->cursorX[PAUSE_EQUIP] == EQUIP_CURSOR_X_UPG) &&
(pauseCtx->cursorY[PAUSE_EQUIP] == EQUIP_CURSOR_Y_BULLETBAG_QUIVER)) {
if (LINK_AGE_IN_YEARS != YEARS_CHILD) {
if ((cursorItem >= ITEM_BULLET_BAG_30) && (cursorItem <= ITEM_BULLET_BAG_50)) {
pauseCtx->nameColorSet = 1;
@ -469,20 +536,25 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
}
}
// Set cursor position
KaleidoScope_SetCursorPos(pauseCtx, cursorSlot * 4, pauseCtx->equipVtx);
// Handle input for changing equipment
if ((pauseCtx->cursorSpecialPos == 0) && (cursorItem != PAUSE_ITEM_NONE) &&
(pauseCtx->state == PAUSE_STATE_MAIN) && (pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE) &&
CHECK_BTN_ALL(input->press.button, BTN_A) && (pauseCtx->cursorX[PAUSE_EQUIP] != 0)) {
CHECK_BTN_ALL(input->press.button, BTN_A) && (pauseCtx->cursorX[PAUSE_EQUIP] != EQUIP_CURSOR_X_UPG)) {
if (CHECK_AGE_REQ_EQUIP(pauseCtx->cursorY[PAUSE_EQUIP], pauseCtx->cursorX[PAUSE_EQUIP])) {
Inventory_ChangeEquipment(pauseCtx->cursorY[PAUSE_EQUIP], pauseCtx->cursorX[PAUSE_EQUIP]);
if (pauseCtx->cursorY[PAUSE_EQUIP] == 0) {
if (pauseCtx->cursorY[PAUSE_EQUIP] == EQUIP_TYPE_SWORD) {
gSaveContext.save.info.infTable[INFTABLE_INDEX_1DX] = 0;
gSaveContext.save.info.equips.buttonItems[0] = cursorItem;
if ((pauseCtx->cursorX[PAUSE_EQUIP] == 3) && (gSaveContext.save.info.playerData.bgsFlag != 0)) {
if ((pauseCtx->cursorX[PAUSE_EQUIP] == EQUIP_VALUE_SWORD_BIGGORON) &&
gSaveContext.save.info.playerData.bgsFlag) {
gSaveContext.save.info.equips.buttonItems[0] = ITEM_SWORD_BIGGORON;
gSaveContext.save.info.playerData.swordHealth = 8;
} else {
@ -490,8 +562,7 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
gSaveContext.save.info.equips.buttonItems[0] = ITEM_SWORD_BIGGORON;
}
if ((gSaveContext.save.info.equips.buttonItems[0] == ITEM_SWORD_BIGGORON) &&
(gSaveContext.save.info.playerData.bgsFlag == 0) &&
!gSaveContext.save.info.playerData.bgsFlag &&
CHECK_OWNED_EQUIP_ALT(EQUIP_TYPE_SWORD, EQUIP_INV_SWORD_BROKENGIANTKNIFE)) {
gSaveContext.save.info.equips.buttonItems[0] = ITEM_GIANTS_KNIFE;
}
@ -502,7 +573,9 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
Audio_PlaySfxGeneral(NA_SE_SY_DECIDE, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
pauseCtx->mainState = PAUSE_MAIN_STATE_7;
// Wait 10 frames before accepting input again
pauseCtx->mainState = PAUSE_MAIN_STATE_EQUIP_CHANGED;
sEquipTimer = 10;
} else {
Audio_PlaySfxGeneral(NA_SE_SY_ERROR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
@ -514,7 +587,7 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
Audio_PlaySfxGeneral(NA_SE_SY_CURSOR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
}
} else if ((pauseCtx->mainState == PAUSE_MAIN_STATE_7) && (pauseCtx->pageIndex == PAUSE_EQUIP)) {
} else if ((pauseCtx->mainState == PAUSE_MAIN_STATE_EQUIP_CHANGED) && (pauseCtx->pageIndex == PAUSE_EQUIP)) {
KaleidoScope_SetCursorPos(pauseCtx, pauseCtx->cursorSlot[PAUSE_EQUIP] * 4, pauseCtx->equipVtx);
pauseCtx->cursorColorSet = 8;
@ -524,13 +597,19 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
}
}
for (rowStart = 0, i = 0, point = 4; i < 4; i++, rowStart += 4, point += 16) {
// Enlarge the equip item at the current cursor position, if it can be equipped
// for each row (one row per equip type)
for (rowStart = 0, i = 0, point = EQUIP_QUAD_SWORD_KOKIRI * 4; i < EQUIP_TYPE_MAX;
i++, rowStart += 4, point += 4 * 4) {
// for each equip column
for (k = 0, temp = rowStart + 1, bit = rowStart, j = point; k < 3; k++, bit++, j += 4, temp++) {
if ((gBitFlags[bit] & gSaveContext.save.info.inventory.equipment) && (pauseCtx->cursorSpecialPos == 0)) {
if (CHECK_AGE_REQ_EQUIP(i, k + 1)) {
if (temp == cursorSlot) {
pauseCtx->equipVtx[j].v.ob[0] = pauseCtx->equipVtx[j + 2].v.ob[0] =
pauseCtx->equipVtx[j].v.ob[0] - 2;
pauseCtx->equipVtx[j + 1].v.ob[0] = pauseCtx->equipVtx[j + 3].v.ob[0] =
@ -545,13 +624,19 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
}
}
// Draw upgrades and equips
Gfx_SetupDL_42Opa(play->state.gfxCtx);
gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha);
for (rowStart = 0, j = 0, temp = 0, i = 0; i < 4; i++, rowStart += 4, j += 16) {
gSPVertex(POLY_OPA_DISP++, &pauseCtx->equipVtx[j], 16, 0);
// for each row
for (rowStart = 0, j = 0, temp = 0, i = 0; i < 4; i++, rowStart += 4, j += 4 * 4) {
gSPVertex(POLY_OPA_DISP++, &pauseCtx->equipVtx[j], 4 * 4, 0);
// Draw upgrade `i`
// EQUIP_QUAD_UPG_BULLETBAG_QUIVER, EQUIP_QUAD_UPG_BOMB_BAG, EQUIP_QUAD_UPG_STRENGTH, EQUIP_QUAD_UPG_SCALE
if (LINK_AGE_IN_YEARS == YEARS_CHILD) {
point = CUR_UPG_VALUE(sChildUpgrades[i]);
@ -562,6 +647,8 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
}
} else {
if ((i == 0) && (CUR_UPG_VALUE(sAdultUpgrades[i]) == 0)) {
// Show bullet bag instead of quiver if player has no quiver
//! @bug This assumes adult always has bullet bag
KaleidoScope_DrawQuadTextureRGBA32(
play->state.gfxCtx, gItemIcons[sChildUpgradeItemBases[i] + CUR_UPG_VALUE(sChildUpgrades[i]) - 1],
ITEM_ICON_WIDTH, ITEM_ICON_HEIGHT, 0);
@ -572,12 +659,20 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
}
}
// Draw owned equips of type `i`
// EQUIP_QUAD_SWORD_KOKIRI, EQUIP_QUAD_SWORD_MASTER, EQUIP_QUAD_SWORD_BIGGORON
// EQUIP_QUAD_SHIELD_DEKU, EQUIP_QUAD_SHIELD_HYLIAN, EQUIP_QUAD_SHIELD_MIRROR
// EQUIP_QUAD_TUNIC_KOKIRI, EQUIP_QUAD_TUNIC_GORON, EQUIP_QUAD_TUNIC_ZORA
// EQUIP_QUAD_BOOTS_KOKIRI, EQUIP_QUAD_BOOTS_IRON, EQUIP_QUAD_BOOTS_HOVER
for (k = 0, bit = rowStart, point = 4; k < 3; k++, point += 4, temp++, bit++) {
if (((u32)i == 0) && (k == 2) && (gSaveContext.save.info.playerData.bgsFlag != 0)) {
if (((u32)i == EQUIP_TYPE_SWORD) && (k == EQUIP_INV_SWORD_BIGGORON) &&
gSaveContext.save.info.playerData.bgsFlag) {
KaleidoScope_DrawQuadTextureRGBA32(play->state.gfxCtx, gItemIconSwordBiggoronTex, ITEM_ICON_WIDTH,
ITEM_ICON_HEIGHT, point);
} else if ((i == 0) && (k == 2) && (gBitFlags[bit + 1] & gSaveContext.save.info.inventory.equipment)) {
} else if ((i == EQUIP_TYPE_SWORD) && (k == EQUIP_INV_SWORD_BIGGORON) &&
(gBitFlags[bit + 1] & gSaveContext.save.info.inventory.equipment)) {
KaleidoScope_DrawQuadTextureRGBA32(play->state.gfxCtx, gItemIconBrokenGiantsKnifeTex, ITEM_ICON_WIDTH,
ITEM_ICON_HEIGHT, point);
} else if (gBitFlags[bit] & gSaveContext.save.info.inventory.equipment) {
@ -587,13 +682,15 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
}
}
// Draw player to the player prerender buffer
KaleidoScope_DrawPlayerWork(play);
if ((pauseCtx->mainState == PAUSE_MAIN_STATE_7) && (sEquipTimer == 10)) {
if ((pauseCtx->mainState == PAUSE_MAIN_STATE_EQUIP_CHANGED) && (sEquipTimer == 10)) {
KaleidoScope_SetupPlayerPreRender(play);
}
if ((pauseCtx->mainState == PAUSE_MAIN_STATE_7) && (sEquipTimer == 9)) {
if ((pauseCtx->mainState == PAUSE_MAIN_STATE_EQUIP_CHANGED) && (sEquipTimer == 9)) {
#ifndef AVOID_UB
//! @bug: This function shouldn't take any arguments
KaleidoScope_ProcessPlayerPreRender(play);
@ -609,6 +706,8 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
gSPSegment(POLY_OPA_DISP++, 0x0B, interfaceCtx->mapSegment);
gSPSegment(POLY_OPA_DISP++, 0x0C, pauseCtx->iconItemAltSegment);
// Draw player prerender onto the equip page
Gfx_SetupDL_42Opa(play->state.gfxCtx);
KaleidoScope_DrawEquipmentImage(play, pauseCtx->playerSegment, PAUSE_EQUIP_PLAYER_WIDTH, PAUSE_EQUIP_PLAYER_HEIGHT);

View File

@ -1876,13 +1876,14 @@ void KaleidoScope_DrawInfoPanel(PlayState* play) {
(pauseCtx->nameDisplayTimer < WREG(89)) &&
(((u32)pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE) ||
(pauseCtx->mainState == PAUSE_MAIN_STATE_SONG_PLAYBACK) ||
((pauseCtx->mainState >= PAUSE_MAIN_STATE_SONG_PROMPT_INIT) && (pauseCtx->mainState <= PAUSE_MAIN_STATE_7)) ||
((pauseCtx->mainState >= PAUSE_MAIN_STATE_SONG_PROMPT_INIT) &&
(pauseCtx->mainState <= PAUSE_MAIN_STATE_EQUIP_CHANGED)) ||
(pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG)) &&
(pauseCtx->cursorSpecialPos == 0)) {
if (((u32)pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE) ||
(pauseCtx->mainState == PAUSE_MAIN_STATE_SONG_PLAYBACK) ||
((pauseCtx->mainState >= PAUSE_MAIN_STATE_SONG_PROMPT_INIT) &&
(pauseCtx->mainState <= PAUSE_MAIN_STATE_7)) ||
(pauseCtx->mainState <= PAUSE_MAIN_STATE_EQUIP_CHANGED)) ||
(pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG)) {
pauseCtx->infoPanelVtx[16].v.ob[0] = pauseCtx->infoPanelVtx[18].v.ob[0] = -63;
@ -1949,7 +1950,7 @@ void KaleidoScope_DrawInfoPanel(PlayState* play) {
QUEST_ICON_HEIGHT, 0);
}
}
} else if ((pauseCtx->mainState < PAUSE_MAIN_STATE_3) || (pauseCtx->mainState == PAUSE_MAIN_STATE_7) ||
} else if ((pauseCtx->mainState < PAUSE_MAIN_STATE_3) || (pauseCtx->mainState == PAUSE_MAIN_STATE_EQUIP_CHANGED) ||
(pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG)) {
pauseCtx->infoPanelVtx[20].v.ob[1] = pauseCtx->infoPanelVtx[21].v.ob[1] = temp;
@ -2156,7 +2157,7 @@ void KaleidoScope_UpdateNamePanel(PlayState* play) {
((pauseCtx->cursorSlot[PAUSE_QUEST] >= 6) && (pauseCtx->cursorSlot[PAUSE_QUEST] <= 0x11)) &&
(pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG)) ||
(pauseCtx->pageIndex == PAUSE_ITEM) ||
((pauseCtx->pageIndex == PAUSE_EQUIP) && (pauseCtx->cursorX[PAUSE_EQUIP] != 0))) {
((pauseCtx->pageIndex == PAUSE_EQUIP) && (pauseCtx->cursorX[PAUSE_EQUIP] != EQUIP_CURSOR_X_UPG))) {
if (pauseCtx->namedItem != ITEM_SOLD_OUT) {
pauseCtx->nameDisplayTimer++;
if (pauseCtx->nameDisplayTimer > WREG(88)) {
@ -2691,9 +2692,14 @@ static s16 sItemVtxQuadsWithAmmo[] = {
SLOT_MAGIC_BEAN * 4, // ITEM_QUAD_AMMO_BEAN_
};
static s16 D_8082B12C[] = { -114, 12, 44, 76 };
static s16 sEquipColumnsX[] = { -114, 12, 44, 76 };
static u8 D_8082B134[] = { 1, 5, 9, 13 };
static u8 sEquipQuadsFirstByEquipType[EQUIP_TYPE_MAX] = {
EQUIP_QUAD_SWORD_KOKIRI, // EQUIP_TYPE_SWORD
EQUIP_QUAD_SHIELD_DEKU, // EQUIP_TYPE_SHIELD
EQUIP_QUAD_TUNIC_KOKIRI, // EQUIP_TYPE_TUNIC
EQUIP_QUAD_BOOTS_KOKIRI, // EQUIP_TYPE_BOOTS
};
static s16 sQuestQuadsX[] = {
74, // QUEST_MEDALLION_FOREST
@ -3109,19 +3115,29 @@ void KaleidoScope_SetVertices(PlayState* play, GraphicsContext* gfxCtx) {
}
}
pauseCtx->equipVtx = GRAPH_ALLOC(gfxCtx, 112 * sizeof(Vtx));
pauseCtx->equipVtx = GRAPH_ALLOC(gfxCtx, (EQUIP_QUAD_MAX * 4) * sizeof(Vtx));
for (k = 0, i = 0, y = 58; i < 4; i++, y -= 32) {
// EQUIP_QUAD_UPG_BULLETBAG_QUIVER, EQUIP_QUAD_SWORD_KOKIRI, EQUIP_QUAD_SWORD_MASTER, EQUIP_QUAD_SWORD_BIGGORON,
// EQUIP_QUAD_UPG_BOMB_BAG, EQUIP_QUAD_SHIELD_DEKU, EQUIP_QUAD_SHIELD_HYLIAN, EQUIP_QUAD_SHIELD_MIRROR,
// EQUIP_QUAD_UPG_STRENGTH, EQUIP_QUAD_TUNIC_KOKIRI, EQUIP_QUAD_TUNIC_GORON, EQUIP_QUAD_TUNIC_ZORA,
// EQUIP_QUAD_UPG_SCALE, EQUIP_QUAD_BOOTS_KOKIRI, EQUIP_QUAD_BOOTS_IRON, EQUIP_QUAD_BOOTS_HOVER
// for each row
for (k = 0, i = 0, y = (EQUIP_TYPE_MAX * EQUIP_GRID_CELL_HEIGHT) / 2 - 6; i < EQUIP_TYPE_MAX;
i++, y -= EQUIP_GRID_CELL_HEIGHT) {
// for each column
for (j = 0; j < 4; j++, k += 4) {
pauseCtx->equipVtx[k + 0].v.ob[0] = pauseCtx->equipVtx[k + 2].v.ob[0] = D_8082B12C[j] + 2;
pauseCtx->equipVtx[k + 0].v.ob[0] = pauseCtx->equipVtx[k + 2].v.ob[0] =
sEquipColumnsX[j] + EQUIP_GRID_QUAD_MARGIN;
pauseCtx->equipVtx[k + 1].v.ob[0] = pauseCtx->equipVtx[k + 3].v.ob[0] =
pauseCtx->equipVtx[k + 0].v.ob[0] + 28;
pauseCtx->equipVtx[k + 0].v.ob[0] + EQUIP_GRID_QUAD_WIDTH;
pauseCtx->equipVtx[k + 0].v.ob[1] = pauseCtx->equipVtx[k + 1].v.ob[1] = y + pauseCtx->pagesYOrigin1 - 2;
pauseCtx->equipVtx[k + 0].v.ob[1] = pauseCtx->equipVtx[k + 1].v.ob[1] =
y + pauseCtx->pagesYOrigin1 - EQUIP_GRID_QUAD_MARGIN;
pauseCtx->equipVtx[k + 2].v.ob[1] = pauseCtx->equipVtx[k + 3].v.ob[1] =
pauseCtx->equipVtx[k + 0].v.ob[1] - 28;
pauseCtx->equipVtx[k + 0].v.ob[1] - EQUIP_GRID_QUAD_HEIGHT;
pauseCtx->equipVtx[k + 0].v.ob[2] = pauseCtx->equipVtx[k + 1].v.ob[2] = pauseCtx->equipVtx[k + 2].v.ob[2] =
pauseCtx->equipVtx[k + 3].v.ob[2] = 0;
@ -3133,7 +3149,7 @@ void KaleidoScope_SetVertices(PlayState* play, GraphicsContext* gfxCtx) {
pauseCtx->equipVtx[k + 2].v.tc[0] = 0;
pauseCtx->equipVtx[k + 1].v.tc[0] = pauseCtx->equipVtx[k + 2].v.tc[1] = pauseCtx->equipVtx[k + 3].v.tc[0] =
pauseCtx->equipVtx[k + 3].v.tc[1] = 0x400;
pauseCtx->equipVtx[k + 3].v.tc[1] = EQUIP_GRID_QUAD_TEX_SIZE * (1 << 5);
pauseCtx->equipVtx[k + 0].v.cn[0] = pauseCtx->equipVtx[k + 1].v.cn[0] = pauseCtx->equipVtx[k + 2].v.cn[0] =
pauseCtx->equipVtx[k + 3].v.cn[0] = pauseCtx->equipVtx[k + 0].v.cn[1] =
@ -3147,19 +3163,23 @@ void KaleidoScope_SetVertices(PlayState* play, GraphicsContext* gfxCtx) {
}
}
for (j = 0; j < 4; k += 4, j++) {
// EQUIP_QUAD_SELECTED_SWORD, EQUIP_QUAD_SELECTED_SHIELD, EQUIP_QUAD_SELECTED_TUNIC, EQUIP_QUAD_SELECTED_BOOTS
for (j = 0; j < EQUIP_TYPE_MAX; k += 4, j++) {
if (CUR_EQUIP_VALUE(j) != 0) {
i = (CUR_EQUIP_VALUE(j) + D_8082B134[j] - 1) * 4;
i = (CUR_EQUIP_VALUE(j) + sEquipQuadsFirstByEquipType[j] - 1) * 4;
pauseCtx->equipVtx[k + 0].v.ob[0] = pauseCtx->equipVtx[k + 2].v.ob[0] = pauseCtx->equipVtx[i].v.ob[0] - 2;
pauseCtx->equipVtx[k + 0].v.ob[0] = pauseCtx->equipVtx[k + 2].v.ob[0] =
pauseCtx->equipVtx[i].v.ob[0] + EQUIP_GRID_SELECTED_QUAD_MARGIN;
pauseCtx->equipVtx[k + 1].v.ob[0] = pauseCtx->equipVtx[k + 3].v.ob[0] =
pauseCtx->equipVtx[k + 0].v.ob[0] + 32;
pauseCtx->equipVtx[k + 0].v.ob[0] + EQUIP_GRID_SELECTED_QUAD_WIDTH;
pauseCtx->equipVtx[k + 0].v.ob[1] = pauseCtx->equipVtx[k + 1].v.ob[1] = pauseCtx->equipVtx[i].v.ob[1] + 2;
pauseCtx->equipVtx[k + 0].v.ob[1] = pauseCtx->equipVtx[k + 1].v.ob[1] =
pauseCtx->equipVtx[i].v.ob[1] - EQUIP_GRID_SELECTED_QUAD_MARGIN;
pauseCtx->equipVtx[k + 2].v.ob[1] = pauseCtx->equipVtx[k + 3].v.ob[1] =
pauseCtx->equipVtx[k + 0].v.ob[1] - 32;
pauseCtx->equipVtx[k + 0].v.ob[1] - EQUIP_GRID_SELECTED_QUAD_HEIGHT;
pauseCtx->equipVtx[k + 0].v.ob[2] = pauseCtx->equipVtx[k + 1].v.ob[2] = pauseCtx->equipVtx[k + 2].v.ob[2] =
pauseCtx->equipVtx[k + 3].v.ob[2] = 0;
@ -3171,7 +3191,7 @@ void KaleidoScope_SetVertices(PlayState* play, GraphicsContext* gfxCtx) {
pauseCtx->equipVtx[k + 2].v.tc[0] = 0;
pauseCtx->equipVtx[k + 1].v.tc[0] = pauseCtx->equipVtx[k + 2].v.tc[1] = pauseCtx->equipVtx[k + 3].v.tc[0] =
pauseCtx->equipVtx[k + 3].v.tc[1] = 0x400;
pauseCtx->equipVtx[k + 3].v.tc[1] = EQUIP_GRID_SELECTED_QUAD_TEX_SIZE * (1 << 5);
pauseCtx->equipVtx[k + 0].v.cn[0] = pauseCtx->equipVtx[k + 1].v.cn[0] = pauseCtx->equipVtx[k + 2].v.cn[0] =
pauseCtx->equipVtx[k + 3].v.cn[0] = pauseCtx->equipVtx[k + 0].v.cn[1] =
@ -3185,16 +3205,20 @@ void KaleidoScope_SetVertices(PlayState* play, GraphicsContext* gfxCtx) {
}
}
x = 112;
// EQUIP_QUAD_PLAYER_FIRST..EQUIP_QUAD_PLAYER_LAST
x = PAUSE_EQUIP_PLAYER_HEIGHT;
y = 50;
for (;;) {
pauseCtx->equipVtx[k + 0].v.ob[0] = pauseCtx->equipVtx[k + 2].v.ob[0] = -64;
pauseCtx->equipVtx[k + 1].v.ob[0] = pauseCtx->equipVtx[k + 3].v.ob[0] = pauseCtx->equipVtx[k + 0].v.ob[0] + 64;
pauseCtx->equipVtx[k + 1].v.ob[0] = pauseCtx->equipVtx[k + 3].v.ob[0] =
pauseCtx->equipVtx[k + 0].v.ob[0] + PAUSE_EQUIP_PLAYER_WIDTH;
pauseCtx->equipVtx[k + 0].v.ob[1] = pauseCtx->equipVtx[k + 1].v.ob[1] = y + pauseCtx->pagesYOrigin1;
pauseCtx->equipVtx[k + 2].v.ob[1] = pauseCtx->equipVtx[k + 3].v.ob[1] = pauseCtx->equipVtx[k + 0].v.ob[1] - 32;
pauseCtx->equipVtx[k + 2].v.ob[1] = pauseCtx->equipVtx[k + 3].v.ob[1] =
pauseCtx->equipVtx[k + 0].v.ob[1] - PAUSE_EQUIP_PLAYER_FRAG_HEIGHT;
pauseCtx->equipVtx[k + 0].v.ob[2] = pauseCtx->equipVtx[k + 1].v.ob[2] = pauseCtx->equipVtx[k + 2].v.ob[2] =
pauseCtx->equipVtx[k + 3].v.ob[2] = 0;
@ -3205,9 +3229,10 @@ void KaleidoScope_SetVertices(PlayState* play, GraphicsContext* gfxCtx) {
pauseCtx->equipVtx[k + 0].v.tc[0] = pauseCtx->equipVtx[k + 0].v.tc[1] = pauseCtx->equipVtx[k + 1].v.tc[1] =
pauseCtx->equipVtx[k + 2].v.tc[0] = 0;
pauseCtx->equipVtx[k + 1].v.tc[0] = pauseCtx->equipVtx[k + 3].v.tc[0] = 0x800;
pauseCtx->equipVtx[k + 1].v.tc[0] = pauseCtx->equipVtx[k + 3].v.tc[0] = PAUSE_EQUIP_PLAYER_WIDTH * (1 << 5);
pauseCtx->equipVtx[k + 2].v.tc[1] = pauseCtx->equipVtx[k + 3].v.tc[1] = 0x400;
pauseCtx->equipVtx[k + 2].v.tc[1] = pauseCtx->equipVtx[k + 3].v.tc[1] =
PAUSE_EQUIP_PLAYER_FRAG_HEIGHT * (1 << 5);
pauseCtx->equipVtx[k + 0].v.cn[0] = pauseCtx->equipVtx[k + 1].v.cn[0] = pauseCtx->equipVtx[k + 2].v.cn[0] =
pauseCtx->equipVtx[k + 3].v.cn[0] = pauseCtx->equipVtx[k + 0].v.cn[1] = pauseCtx->equipVtx[k + 1].v.cn[1] =
@ -3218,16 +3243,18 @@ void KaleidoScope_SetVertices(PlayState* play, GraphicsContext* gfxCtx) {
pauseCtx->equipVtx[k + 0].v.cn[3] = pauseCtx->equipVtx[k + 1].v.cn[3] = pauseCtx->equipVtx[k + 2].v.cn[3] =
pauseCtx->equipVtx[k + 3].v.cn[3] = pauseCtx->alpha;
x -= 32;
x -= PAUSE_EQUIP_PLAYER_FRAG_HEIGHT;
if (x < 0) {
pauseCtx->equipVtx[k + 2].v.ob[1] = pauseCtx->equipVtx[k + 3].v.ob[1] =
pauseCtx->equipVtx[k + 0].v.ob[1] - 0x10;
pauseCtx->equipVtx[k + 0].v.ob[1] - (PAUSE_EQUIP_PLAYER_HEIGHT % PAUSE_EQUIP_PLAYER_FRAG_HEIGHT);
pauseCtx->equipVtx[k + 2].v.tc[1] = pauseCtx->equipVtx[k + 3].v.tc[1] =
(PAUSE_EQUIP_PLAYER_HEIGHT % PAUSE_EQUIP_PLAYER_FRAG_HEIGHT) * (1 << 5);
pauseCtx->equipVtx[k + 2].v.tc[1] = pauseCtx->equipVtx[k + 3].v.tc[1] = 0x200;
break;
}
y -= 32;
y -= PAUSE_EQUIP_PLAYER_FRAG_HEIGHT;
k += 4;
}
@ -4144,7 +4171,7 @@ void KaleidoScope_Update(PlayState* play) {
}
break;
case PAUSE_MAIN_STATE_7:
case PAUSE_MAIN_STATE_EQUIP_CHANGED:
break;
case PAUSE_MAIN_STATE_IDLE_CURSOR_ON_SONG:

View File

@ -69,6 +69,55 @@ typedef enum QuestQuad {
/* 47 */ QUEST_QUAD_MAX
} QuestQuad;
#define EQUIP_CURSOR_X_UPG 0
#define EQUIP_CURSOR_Y_BULLETBAG_QUIVER 0
#define EQUIP_GRID_CELL_WIDTH 32
#define EQUIP_GRID_CELL_HEIGHT 32
#define EQUIP_GRID_QUAD_MARGIN 2
#define EQUIP_GRID_QUAD_WIDTH (EQUIP_GRID_CELL_WIDTH - (2 * EQUIP_GRID_QUAD_MARGIN))
#define EQUIP_GRID_QUAD_HEIGHT (EQUIP_GRID_CELL_HEIGHT - (2 * EQUIP_GRID_QUAD_MARGIN))
#define EQUIP_GRID_QUAD_TEX_SIZE 32 // both width and height
#define EQUIP_GRID_SELECTED_QUAD_MARGIN (-2)
#define EQUIP_GRID_SELECTED_QUAD_WIDTH (EQUIP_GRID_QUAD_WIDTH - (2 * EQUIP_GRID_SELECTED_QUAD_MARGIN))
#define EQUIP_GRID_SELECTED_QUAD_HEIGHT (EQUIP_GRID_QUAD_HEIGHT - (2 * EQUIP_GRID_SELECTED_QUAD_MARGIN))
#define EQUIP_GRID_SELECTED_QUAD_TEX_SIZE 32 // both width and height
typedef enum EquipQuad {
// Grid of upgrades and equips, left column is upgrades, others are equips, with one row per equip type
// Row 0
/* 0 */ EQUIP_QUAD_UPG_BULLETBAG_QUIVER,
/* 1 */ EQUIP_QUAD_SWORD_KOKIRI,
/* 2 */ EQUIP_QUAD_SWORD_MASTER,
/* 3 */ EQUIP_QUAD_SWORD_BIGGORON,
// Row 1
/* 4 */ EQUIP_QUAD_UPG_BOMB_BAG,
/* 5 */ EQUIP_QUAD_SHIELD_DEKU,
/* 6 */ EQUIP_QUAD_SHIELD_HYLIAN,
/* 7 */ EQUIP_QUAD_SHIELD_MIRROR,
// Row 2
/* 8 */ EQUIP_QUAD_UPG_STRENGTH,
/* 9 */ EQUIP_QUAD_TUNIC_KOKIRI,
/* 10 */ EQUIP_QUAD_TUNIC_GORON,
/* 11 */ EQUIP_QUAD_TUNIC_ZORA,
// Row 3
/* 12 */ EQUIP_QUAD_UPG_SCALE,
/* 13 */ EQUIP_QUAD_BOOTS_KOKIRI,
/* 14 */ EQUIP_QUAD_BOOTS_IRON,
/* 15 */ EQUIP_QUAD_BOOTS_HOVER,
// Markers indicating the currently selected equip
/* 16 */ EQUIP_QUAD_SELECTED_SWORD,
/* 17 */ EQUIP_QUAD_SELECTED_SHIELD,
/* 18 */ EQUIP_QUAD_SELECTED_TUNIC,
/* 19 */ EQUIP_QUAD_SELECTED_BOOTS,
// Player prerender
/* 20 */ EQUIP_QUAD_PLAYER_FIRST,
/* 23 */ EQUIP_QUAD_PLAYER_LAST = EQUIP_QUAD_PLAYER_FIRST + PAUSE_EQUIP_PLAYER_FRAG_NUM - 1,
// 24..27 are unused, probably meant for player prerender
/* 28 */ EQUIP_QUAD_MAX = EQUIP_QUAD_PLAYER_LAST + 4 + 1
} EquipQuad;
// The world map image is split into a number of quad fragments for drawing
#define WORLD_MAP_IMAGE_WIDTH 216
#define WORLD_MAP_IMAGE_HEIGHT 128

View File

@ -275,12 +275,19 @@ class TextureResource(Resource):
self.width_name = f"{self.symbol_name}_WIDTH"
self.height_name = f"{self.symbol_name}_HEIGHT"
def check_declare_length(self):
return (
hasattr(self, "HACK_IS_STATIC_ON") or EXPLICIT_DL_AND_TEX_SIZES
) and not self.is_tlut()
def get_c_declaration_base(self):
if hasattr(self, "HACK_IS_STATIC_ON") and self.is_tlut():
raise NotImplementedError
if hasattr(self, "HACK_IS_STATIC_ON") or EXPLICIT_DL_AND_TEX_SIZES:
if not self.is_tlut():
return f"{self.elem_type} {self.symbol_name}[{self.height_name} * {self.width_name} * {self.siz.bpp} / 8 / sizeof({self.elem_type})]"
if self.check_declare_length():
return (
f"{self.elem_type} {self.symbol_name}"
f"[TEX_LEN({self.elem_type}, {self.width_name}, {self.height_name}, {self.siz.bpp})]"
)
return f"{self.elem_type} {self.symbol_name}[]"
def get_c_reference(self, resource_offset: int):
@ -518,7 +525,10 @@ class TextureResource(Resource):
super().write_c_declaration(h)
def get_h_includes(self):
return ("ultra64.h",)
return (
"ultra64.h",
*(("tex_len.h",) if self.check_declare_length() else ()),
)
@reprlib.recursive_repr()
def __repr__(self):