lots of stuff

This commit is contained in:
dark-samus 2020-10-12 21:28:01 -04:00
parent c79f950a04
commit 430ff41bc6
24 changed files with 525 additions and 454 deletions

View File

@ -1,77 +0,0 @@
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
glabel clear_script_list
/* E7B8C 802C31DC 3C028007 */ lui $v0, %hi(gGameStatusPtr)
/* E7B90 802C31E0 8C42419C */ lw $v0, %lo(gGameStatusPtr)($v0)
/* E7B94 802C31E4 27BDFFE8 */ addiu $sp, $sp, -0x18
/* E7B98 802C31E8 AFBF0010 */ sw $ra, 0x10($sp)
/* E7B9C 802C31EC 80420070 */ lb $v0, 0x70($v0)
/* E7BA0 802C31F0 1440000D */ bnez $v0, .L802C3228
/* E7BA4 802C31F4 00000000 */ nop
/* E7BA8 802C31F8 3C02802E */ lui $v0, %hi(gWorldScriptList)
/* E7BAC 802C31FC 2442A490 */ addiu $v0, $v0, %lo(gWorldScriptList)
/* E7BB0 802C3200 3C01802E */ lui $at, %hi(gCurrentScriptListPtr)
/* E7BB4 802C3204 AC22A890 */ sw $v0, %lo(gCurrentScriptListPtr)($at)
/* E7BB8 802C3208 3C02802E */ lui $v0, 0x802e
/* E7BBC 802C320C 2442BCA8 */ addiu $v0, $v0, -0x4358
/* E7BC0 802C3210 3C01802E */ lui $at, %hi(gMapVars)
/* E7BC4 802C3214 AC22A484 */ sw $v0, %lo(gMapVars)($at)
/* E7BC8 802C3218 3C02802E */ lui $v0, 0x802e
/* E7BCC 802C321C 2442BC70 */ addiu $v0, $v0, -0x4390
/* E7BD0 802C3220 080B0C94 */ j .L802C3250
/* E7BD4 802C3224 00000000 */ nop
.L802C3228:
/* E7BD8 802C3228 3C02802E */ lui $v0, %hi(gBattleScriptList)
/* E7BDC 802C322C 2442A690 */ addiu $v0, $v0, %lo(gBattleScriptList)
/* E7BE0 802C3230 3C01802E */ lui $at, %hi(gCurrentScriptListPtr)
/* E7BE4 802C3234 AC22A890 */ sw $v0, %lo(gCurrentScriptListPtr)($at)
/* E7BE8 802C3238 3C02802E */ lui $v0, 0x802e
/* E7BEC 802C323C 2442BCE8 */ addiu $v0, $v0, -0x4318
/* E7BF0 802C3240 3C01802E */ lui $at, %hi(gMapVars)
/* E7BF4 802C3244 AC22A484 */ sw $v0, %lo(gMapVars)($at)
/* E7BF8 802C3248 3C02802E */ lui $v0, 0x802e
/* E7BFC 802C324C 2442BD34 */ addiu $v0, $v0, -0x42cc
.L802C3250:
/* E7C00 802C3250 3C01802E */ lui $at, %hi(gMapFlags)
/* E7C04 802C3254 AC22A480 */ sw $v0, %lo(gMapFlags)($at)
/* E7C08 802C3258 3C02802E */ lui $v0, %hi(gCurrentScriptListPtr)
/* E7C0C 802C325C 8C42A890 */ lw $v0, %lo(gCurrentScriptListPtr)($v0)
/* E7C10 802C3260 2403007F */ addiu $v1, $zero, 0x7f
/* E7C14 802C3264 244201FC */ addiu $v0, $v0, 0x1fc
.L802C3268:
/* E7C18 802C3268 AC400000 */ sw $zero, ($v0)
/* E7C1C 802C326C 2463FFFF */ addiu $v1, $v1, -1
/* E7C20 802C3270 0461FFFD */ bgez $v1, .L802C3268
/* E7C24 802C3274 2442FFFC */ addiu $v0, $v0, -4
/* E7C28 802C3278 3C02802E */ lui $v0, %hi(gMapVars)
/* E7C2C 802C327C 8C42A484 */ lw $v0, %lo(gMapVars)($v0)
/* E7C30 802C3280 2403000F */ addiu $v1, $zero, 0xf
/* E7C34 802C3284 3C01802E */ lui $at, %hi(gNumScripts)
/* E7C38 802C3288 AC20A488 */ sw $zero, %lo(gNumScripts)($at)
/* E7C3C 802C328C 3C01802E */ lui $at, %hi(gScriptListCount)
/* E7C40 802C3290 AC20AC98 */ sw $zero, %lo(gScriptListCount)($at)
/* E7C44 802C3294 3C01802E */ lui $at, %hi(D_802D9CA4)
/* E7C48 802C3298 AC209CA4 */ sw $zero, %lo(D_802D9CA4)($at)
/* E7C4C 802C329C 2442003C */ addiu $v0, $v0, 0x3c
.L802C32A0:
/* E7C50 802C32A0 AC400000 */ sw $zero, ($v0)
/* E7C54 802C32A4 2463FFFF */ addiu $v1, $v1, -1
/* E7C58 802C32A8 0461FFFD */ bgez $v1, .L802C32A0
/* E7C5C 802C32AC 2442FFFC */ addiu $v0, $v0, -4
/* E7C60 802C32B0 3C02802E */ lui $v0, %hi(gMapFlags)
/* E7C64 802C32B4 8C42A480 */ lw $v0, %lo(gMapFlags)($v0)
/* E7C68 802C32B8 24030002 */ addiu $v1, $zero, 2
/* E7C6C 802C32BC 24420008 */ addiu $v0, $v0, 8
.L802C32C0:
/* E7C70 802C32C0 AC400000 */ sw $zero, ($v0)
/* E7C74 802C32C4 2463FFFF */ addiu $v1, $v1, -1
/* E7C78 802C32C8 0461FFFD */ bgez $v1, .L802C32C0
/* E7C7C 802C32CC 2442FFFC */ addiu $v0, $v0, -4
/* E7C80 802C32D0 0C0B5122 */ jal func_802D4488
/* E7C84 802C32D4 00000000 */ nop
/* E7C88 802C32D8 0C0B352D */ jal func_802CD4B4
/* E7C8C 802C32DC 00000000 */ nop
/* E7C90 802C32E0 8FBF0010 */ lw $ra, 0x10($sp)
/* E7C94 802C32E4 03E00008 */ jr $ra
/* E7C98 802C32E8 27BD0018 */ addiu $sp, $sp, 0x18

View File

@ -1,26 +0,0 @@
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
glabel func_802C3390
/* E7D40 802C3390 3C03800A */ lui $v1, %hi(D_8009A5D8)
/* E7D44 802C3394 8C63A5D8 */ lw $v1, %lo(D_8009A5D8)($v1)
/* E7D48 802C3398 27BDFFE8 */ addiu $sp, $sp, -0x18
/* E7D4C 802C339C 2C620005 */ sltiu $v0, $v1, 5
/* E7D50 802C33A0 1040000C */ beqz $v0, .L802C33D4
/* E7D54 802C33A4 AFBF0010 */ sw $ra, 0x10($sp)
/* E7D58 802C33A8 00031080 */ sll $v0, $v1, 2
/* E7D5C 802C33AC 3C01802E */ lui $at, 0x802e
/* E7D60 802C33B0 00220821 */ addu $at, $at, $v0
/* E7D64 802C33B4 8C229D80 */ lw $v0, -0x6280($at)
/* E7D68 802C33B8 00400008 */ jr $v0
/* E7D6C 802C33BC 00000000 */ nop
/* E7D70 802C33C0 080B0CF3 */ j .L802C33CC
/* E7D74 802C33C4 24040001 */ addiu $a0, $zero, 1
/* E7D78 802C33C8 24040002 */ addiu $a0, $zero, 2
.L802C33CC:
/* E7D7C 802C33CC 0C0B117A */ jal suspend_all_group
/* E7D80 802C33D0 00000000 */ nop
.L802C33D4:
/* E7D84 802C33D4 8FBF0010 */ lw $ra, 0x10($sp)
/* E7D88 802C33D8 03E00008 */ jr $ra
/* E7D8C 802C33DC 27BD0018 */ addiu $sp, $sp, 0x18

View File

@ -124,9 +124,9 @@ glabel func_802C39F8
/* E8564 802C3BB4 8E030144 */ lw $v1, 0x144($s0)
/* E8568 802C3BB8 24420001 */ addiu $v0, $v0, 1
/* E856C 802C3BBC ACA20000 */ sw $v0, ($a1)
/* E8570 802C3BC0 3C01802E */ lui $at, %hi(gScriptIndexList)
/* E8570 802C3BC0 3C01802E */ lui $at, %hi(gScriptIdList)
/* E8574 802C3BC4 00240821 */ addu $at, $at, $a0
/* E8578 802C3BC8 AC23AA98 */ sw $v1, %lo(gScriptIndexList)($at)
/* E8578 802C3BC8 AC23AA98 */ sw $v1, %lo(gScriptIdList)($at)
.L802C3BCC:
/* E857C 802C3BCC 3C03802E */ lui $v1, 0x802e
/* E8580 802C3BD0 24639CA0 */ addiu $v1, $v1, -0x6360

View File

@ -1,68 +0,0 @@
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
glabel func_802C3C10
/* E85C0 802C3C10 27BDFFE0 */ addiu $sp, $sp, -0x20
/* E85C4 802C3C14 AFB10014 */ sw $s1, 0x14($sp)
/* E85C8 802C3C18 0080882D */ daddu $s1, $a0, $zero
/* E85CC 802C3C1C AFBF0018 */ sw $ra, 0x18($sp)
/* E85D0 802C3C20 AFB00010 */ sw $s0, 0x10($sp)
/* E85D4 802C3C24 92220000 */ lbu $v0, ($s1)
/* E85D8 802C3C28 3C013F80 */ lui $at, 0x3f80
/* E85DC 802C3C2C 44810000 */ mtc1 $at, $f0
/* E85E0 802C3C30 8E240060 */ lw $a0, 0x60($s1)
/* E85E4 802C3C34 AE250008 */ sw $a1, 8($s1)
/* E85E8 802C3C38 AE25015C */ sw $a1, 0x15c($s1)
/* E85EC 802C3C3C AE250164 */ sw $a1, 0x164($s1)
/* E85F0 802C3C40 A2200002 */ sb $zero, 2($s1)
/* E85F4 802C3C44 AE200154 */ sw $zero, 0x154($s1)
/* E85F8 802C3C48 00461025 */ or $v0, $v0, $a2
/* E85FC 802C3C4C A2220000 */ sb $v0, ($s1)
/* E8600 802C3C50 10800004 */ beqz $a0, .L802C3C64
/* E8604 802C3C54 E6200150 */ swc1 $f0, 0x150($s1)
/* E8608 802C3C58 0C00AB4B */ jal heap_free
/* E860C 802C3C5C 00000000 */ nop
/* E8610 802C3C60 AE200060 */ sw $zero, 0x60($s1)
.L802C3C64:
/* E8614 802C3C64 8E240068 */ lw $a0, 0x68($s1)
/* E8618 802C3C68 10800003 */ beqz $a0, .L802C3C78
/* E861C 802C3C6C 0000802D */ daddu $s0, $zero, $zero
/* E8620 802C3C70 0C0B0FCF */ jal kill_script
/* E8624 802C3C74 00000000 */ nop
.L802C3C78:
/* E8628 802C3C78 3C03802E */ lui $v1, %hi(gCurrentScriptListPtr)
/* E862C 802C3C7C 8C63A890 */ lw $v1, %lo(gCurrentScriptListPtr)($v1)
/* E8630 802C3C80 00101080 */ sll $v0, $s0, 2
/* E8634 802C3C84 00431021 */ addu $v0, $v0, $v1
/* E8638 802C3C88 8C440000 */ lw $a0, ($v0)
/* E863C 802C3C8C 10800006 */ beqz $a0, .L802C3CA8
/* E8640 802C3C90 26100001 */ addiu $s0, $s0, 1
/* E8644 802C3C94 8C82006C */ lw $v0, 0x6c($a0)
/* E8648 802C3C98 14510003 */ bne $v0, $s1, .L802C3CA8
/* E864C 802C3C9C 00000000 */ nop
/* E8650 802C3CA0 0C0B0FCF */ jal kill_script
/* E8654 802C3CA4 00000000 */ nop
.L802C3CA8:
/* E8658 802C3CA8 2A020080 */ slti $v0, $s0, 0x80
/* E865C 802C3CAC 1440FFF2 */ bnez $v0, .L802C3C78
/* E8660 802C3CB0 2402FFFF */ addiu $v0, $zero, -1
/* E8664 802C3CB4 A2220006 */ sb $v0, 6($s1)
/* E8668 802C3CB8 A2220007 */ sb $v0, 7($s1)
/* E866C 802C3CBC 3C01802E */ lui $at, 0x802e
/* E8670 802C3CC0 C4209CA8 */ lwc1 $f0, -0x6358($at)
/* E8674 802C3CC4 0220202D */ daddu $a0, $s1, $zero
/* E8678 802C3CC8 AE200064 */ sw $zero, 0x64($s1)
/* E867C 802C3CCC AE20006C */ sw $zero, 0x6c($s1)
/* E8680 802C3CD0 AE200068 */ sw $zero, 0x68($s1)
/* E8684 802C3CD4 AE200154 */ sw $zero, 0x154($s1)
/* E8688 802C3CD8 AE200158 */ sw $zero, 0x158($s1)
/* E868C 802C3CDC 0C0B0C52 */ jal find_script_labels
/* E8690 802C3CE0 E6200150 */ swc1 $f0, 0x150($s1)
/* E8694 802C3CE4 0C0B0CE4 */ jal func_802C3390
/* E8698 802C3CE8 0220202D */ daddu $a0, $s1, $zero
/* E869C 802C3CEC 0220102D */ daddu $v0, $s1, $zero
/* E86A0 802C3CF0 8FBF0018 */ lw $ra, 0x18($sp)
/* E86A4 802C3CF4 8FB10014 */ lw $s1, 0x14($sp)
/* E86A8 802C3CF8 8FB00010 */ lw $s0, 0x10($sp)
/* E86AC 802C3CFC 03E00008 */ jr $ra
/* E86B0 802C3D00 27BD0020 */ addiu $sp, $sp, 0x20

View File

@ -9,10 +9,10 @@ glabel func_802C3EE4
/* E88A4 802C3EF4 3C08802E */ lui $t0, %hi(gCurrentScriptListPtr)
/* E88A8 802C3EF8 8D08A890 */ lw $t0, %lo(gCurrentScriptListPtr)($t0)
/* E88AC 802C3EFC 0040382D */ daddu $a3, $v0, $zero
/* E88B0 802C3F00 3C06802E */ lui $a2, %hi(gScriptIndexList)
/* E88B4 802C3F04 24C6AA98 */ addiu $a2, $a2, %lo(gScriptIndexList)
/* E88B8 802C3F08 3C05802E */ lui $a1, 0x802e
/* E88BC 802C3F0C 24A5A898 */ addiu $a1, $a1, -0x5768
/* E88B0 802C3F00 3C06802E */ lui $a2, %hi(gScriptIdList)
/* E88B4 802C3F04 24C6AA98 */ addiu $a2, $a2, %lo(gScriptIdList)
/* E88B8 802C3F08 3C05802E */ lui $a1, %hi(gScriptIndexList)
/* E88BC 802C3F0C 24A5A898 */ addiu $a1, $a1, %lo(gScriptIndexList)
.L802C3F10:
/* E88C0 802C3F10 8CA20000 */ lw $v0, ($a1)
/* E88C4 802C3F14 00021080 */ sll $v0, $v0, 2

View File

@ -1,7 +0,0 @@
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
glabel get_global_timespace
/* E8BBC 802C420C 3C01802E */ lui $at, 0x802e
/* E8BC0 802C4210 03E00008 */ jr $ra
/* E8BC4 802C4214 C4209CA8 */ lwc1 $f0, -0x6358($at)

View File

@ -1,47 +0,0 @@
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
glabel init_script_list
/* E7C9C 802C32EC 3C028007 */ lui $v0, %hi(gGameStatusPtr)
/* E7CA0 802C32F0 8C42419C */ lw $v0, %lo(gGameStatusPtr)($v0)
/* E7CA4 802C32F4 27BDFFE8 */ addiu $sp, $sp, -0x18
/* E7CA8 802C32F8 AFBF0010 */ sw $ra, 0x10($sp)
/* E7CAC 802C32FC 80420070 */ lb $v0, 0x70($v0)
/* E7CB0 802C3300 1440000D */ bnez $v0, .L802C3338
/* E7CB4 802C3304 00000000 */ nop
/* E7CB8 802C3308 3C02802E */ lui $v0, %hi(gWorldScriptList)
/* E7CBC 802C330C 2442A490 */ addiu $v0, $v0, %lo(gWorldScriptList)
/* E7CC0 802C3310 3C01802E */ lui $at, %hi(gCurrentScriptListPtr)
/* E7CC4 802C3314 AC22A890 */ sw $v0, %lo(gCurrentScriptListPtr)($at)
/* E7CC8 802C3318 3C02802E */ lui $v0, 0x802e
/* E7CCC 802C331C 2442BCA8 */ addiu $v0, $v0, -0x4358
/* E7CD0 802C3320 3C01802E */ lui $at, %hi(gMapVars)
/* E7CD4 802C3324 AC22A484 */ sw $v0, %lo(gMapVars)($at)
/* E7CD8 802C3328 3C02802E */ lui $v0, 0x802e
/* E7CDC 802C332C 2442BC70 */ addiu $v0, $v0, -0x4390
/* E7CE0 802C3330 080B0CD8 */ j .L802C3360
/* E7CE4 802C3334 00000000 */ nop
.L802C3338:
/* E7CE8 802C3338 3C02802E */ lui $v0, %hi(gBattleScriptList)
/* E7CEC 802C333C 2442A690 */ addiu $v0, $v0, %lo(gBattleScriptList)
/* E7CF0 802C3340 3C01802E */ lui $at, %hi(gCurrentScriptListPtr)
/* E7CF4 802C3344 AC22A890 */ sw $v0, %lo(gCurrentScriptListPtr)($at)
/* E7CF8 802C3348 3C02802E */ lui $v0, 0x802e
/* E7CFC 802C334C 2442BCE8 */ addiu $v0, $v0, -0x4318
/* E7D00 802C3350 3C01802E */ lui $at, %hi(gMapVars)
/* E7D04 802C3354 AC22A484 */ sw $v0, %lo(gMapVars)($at)
/* E7D08 802C3358 3C02802E */ lui $v0, 0x802e
/* E7D0C 802C335C 2442BD34 */ addiu $v0, $v0, -0x42cc
.L802C3360:
/* E7D10 802C3360 3C01802E */ lui $at, %hi(gMapFlags)
/* E7D14 802C3364 AC22A480 */ sw $v0, %lo(gMapFlags)($at)
/* E7D18 802C3368 3C01802E */ lui $at, %hi(gNumScripts)
/* E7D1C 802C336C AC20A488 */ sw $zero, %lo(gNumScripts)($at)
/* E7D20 802C3370 3C01802E */ lui $at, %hi(D_802D9CA4)
/* E7D24 802C3374 0C0B5158 */ jal func_802D4560
/* E7D28 802C3378 AC209CA4 */ sw $zero, %lo(D_802D9CA4)($at)
/* E7D2C 802C337C 0C0B355F */ jal func_802CD57C
/* E7D30 802C3380 00000000 */ nop
/* E7D34 802C3384 8FBF0010 */ lw $ra, 0x10($sp)
/* E7D38 802C3388 03E00008 */ jr $ra
/* E7D3C 802C338C 27BD0018 */ addiu $sp, $sp, 0x18

View File

@ -1,105 +0,0 @@
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
glabel kill_script
/* E88EC 802C3F3C 3C03802E */ lui $v1, %hi(gCurrentScriptListPtr)
/* E88F0 802C3F40 8C63A890 */ lw $v1, %lo(gCurrentScriptListPtr)($v1)
/* E88F4 802C3F44 27BDFFE0 */ addiu $sp, $sp, -0x20
/* E88F8 802C3F48 AFB20018 */ sw $s2, 0x18($sp)
/* E88FC 802C3F4C 0080902D */ daddu $s2, $a0, $zero
/* E8900 802C3F50 AFB00010 */ sw $s0, 0x10($sp)
/* E8904 802C3F54 0000802D */ daddu $s0, $zero, $zero
/* E8908 802C3F58 AFBF001C */ sw $ra, 0x1c($sp)
/* E890C 802C3F5C AFB10014 */ sw $s1, 0x14($sp)
.L802C3F60:
/* E8910 802C3F60 8C620000 */ lw $v0, ($v1)
/* E8914 802C3F64 10520006 */ beq $v0, $s2, .L802C3F80
/* E8918 802C3F68 2A020080 */ slti $v0, $s0, 0x80
/* E891C 802C3F6C 26100001 */ addiu $s0, $s0, 1
/* E8920 802C3F70 2A020080 */ slti $v0, $s0, 0x80
/* E8924 802C3F74 1440FFFA */ bnez $v0, .L802C3F60
/* E8928 802C3F78 24630004 */ addiu $v1, $v1, 4
/* E892C 802C3F7C 2A020080 */ slti $v0, $s0, 0x80
.L802C3F80:
/* E8930 802C3F80 10400044 */ beqz $v0, .L802C4094
/* E8934 802C3F84 00000000 */ nop
/* E8938 802C3F88 8E440068 */ lw $a0, 0x68($s2)
/* E893C 802C3F8C 10800003 */ beqz $a0, .L802C3F9C
/* E8940 802C3F90 0000882D */ daddu $s1, $zero, $zero
/* E8944 802C3F94 0C0B0FCF */ jal kill_script
/* E8948 802C3F98 00000000 */ nop
.L802C3F9C:
/* E894C 802C3F9C 3C03802E */ lui $v1, %hi(gCurrentScriptListPtr)
/* E8950 802C3FA0 8C63A890 */ lw $v1, %lo(gCurrentScriptListPtr)($v1)
/* E8954 802C3FA4 00111080 */ sll $v0, $s1, 2
/* E8958 802C3FA8 00431021 */ addu $v0, $v0, $v1
/* E895C 802C3FAC 8C440000 */ lw $a0, ($v0)
/* E8960 802C3FB0 10800006 */ beqz $a0, .L802C3FCC
/* E8964 802C3FB4 26310001 */ addiu $s1, $s1, 1
/* E8968 802C3FB8 8C82006C */ lw $v0, 0x6c($a0)
/* E896C 802C3FBC 14520003 */ bne $v0, $s2, .L802C3FCC
/* E8970 802C3FC0 00000000 */ nop
/* E8974 802C3FC4 0C0B0FCF */ jal kill_script
/* E8978 802C3FC8 00000000 */ nop
.L802C3FCC:
/* E897C 802C3FCC 2A220080 */ slti $v0, $s1, 0x80
/* E8980 802C3FD0 1440FFF2 */ bnez $v0, .L802C3F9C
/* E8984 802C3FD4 00000000 */ nop
/* E8988 802C3FD8 8E450064 */ lw $a1, 0x64($s2)
/* E898C 802C3FDC 10A00018 */ beqz $a1, .L802C4040
/* E8990 802C3FE0 0000882D */ daddu $s1, $zero, $zero
/* E8994 802C3FE4 0240202D */ daddu $a0, $s2, $zero
/* E8998 802C3FE8 90A20000 */ lbu $v0, ($a1)
/* E899C 802C3FEC 00A0182D */ daddu $v1, $a1, $zero
/* E89A0 802C3FF0 ACA00068 */ sw $zero, 0x68($a1)
/* E89A4 802C3FF4 304200EF */ andi $v0, $v0, 0xef
/* E89A8 802C3FF8 A0A20000 */ sb $v0, ($a1)
.L802C3FFC:
/* E89AC 802C3FFC 8C820084 */ lw $v0, 0x84($a0)
/* E89B0 802C4000 24840004 */ addiu $a0, $a0, 4
/* E89B4 802C4004 26310001 */ addiu $s1, $s1, 1
/* E89B8 802C4008 AC620084 */ sw $v0, 0x84($v1)
/* E89BC 802C400C 2A220010 */ slti $v0, $s1, 0x10
/* E89C0 802C4010 1440FFFA */ bnez $v0, .L802C3FFC
/* E89C4 802C4014 24630004 */ addiu $v1, $v1, 4
/* E89C8 802C4018 0000882D */ daddu $s1, $zero, $zero
/* E89CC 802C401C 0240202D */ daddu $a0, $s2, $zero
/* E89D0 802C4020 00A0182D */ daddu $v1, $a1, $zero
.L802C4024:
/* E89D4 802C4024 8C8200C4 */ lw $v0, 0xc4($a0)
/* E89D8 802C4028 24840004 */ addiu $a0, $a0, 4
/* E89DC 802C402C 26310001 */ addiu $s1, $s1, 1
/* E89E0 802C4030 AC6200C4 */ sw $v0, 0xc4($v1)
/* E89E4 802C4034 2A220003 */ slti $v0, $s1, 3
/* E89E8 802C4038 1440FFFA */ bnez $v0, .L802C4024
/* E89EC 802C403C 24630004 */ addiu $v1, $v1, 4
.L802C4040:
/* E89F0 802C4040 8E440060 */ lw $a0, 0x60($s2)
/* E89F4 802C4044 10800004 */ beqz $a0, .L802C4058
/* E89F8 802C4048 00000000 */ nop
/* E89FC 802C404C 0C00AB4B */ jal heap_free
/* E8A00 802C4050 00000000 */ nop
/* E8A04 802C4054 AE400060 */ sw $zero, 0x60($s2)
.L802C4058:
/* E8A08 802C4058 3C11802E */ lui $s1, %hi(gCurrentScriptListPtr)
/* E8A0C 802C405C 2631A890 */ addiu $s1, $s1, %lo(gCurrentScriptListPtr)
/* E8A10 802C4060 8E220000 */ lw $v0, ($s1)
/* E8A14 802C4064 00108080 */ sll $s0, $s0, 2
/* E8A18 802C4068 02021021 */ addu $v0, $s0, $v0
/* E8A1C 802C406C 0C00AB4B */ jal heap_free
/* E8A20 802C4070 8C440000 */ lw $a0, ($v0)
/* E8A24 802C4074 3C04802E */ lui $a0, %hi(gNumScripts)
/* E8A28 802C4078 2484A488 */ addiu $a0, $a0, %lo(gNumScripts)
/* E8A2C 802C407C 8E230000 */ lw $v1, ($s1)
/* E8A30 802C4080 8C820000 */ lw $v0, ($a0)
/* E8A34 802C4084 02038021 */ addu $s0, $s0, $v1
/* E8A38 802C4088 2442FFFF */ addiu $v0, $v0, -1
/* E8A3C 802C408C AE000000 */ sw $zero, ($s0)
/* E8A40 802C4090 AC820000 */ sw $v0, ($a0)
.L802C4094:
/* E8A44 802C4094 8FBF001C */ lw $ra, 0x1c($sp)
/* E8A48 802C4098 8FB20018 */ lw $s2, 0x18($sp)
/* E8A4C 802C409C 8FB10014 */ lw $s1, 0x14($sp)
/* E8A50 802C40A0 8FB00010 */ lw $s0, 0x10($sp)
/* E8A54 802C40A4 03E00008 */ jr $ra
/* E8A58 802C40A8 27BD0020 */ addiu $sp, $sp, 0x20

View File

@ -1,7 +0,0 @@
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
glabel set_global_timespace
/* E8BB0 802C4200 3C01802E */ lui $at, 0x802e
/* E8BB4 802C4204 03E00008 */ jr $ra
/* E8BB8 802C4208 E42C9CA8 */ swc1 $f12, -0x6358($at)

View File

@ -5,12 +5,12 @@ glabel sort_scripts
/* E79B0 802C3000 27BDFFF8 */ addiu $sp, $sp, -8
/* E79B4 802C3004 0000682D */ daddu $t5, $zero, $zero
/* E79B8 802C3008 01A0482D */ daddu $t1, $t5, $zero
/* E79BC 802C300C 3C05802E */ lui $a1, %hi(gScriptIndexList)
/* E79C0 802C3010 24A5AA98 */ addiu $a1, $a1, %lo(gScriptIndexList)
/* E79BC 802C300C 3C05802E */ lui $a1, %hi(gScriptIdList)
/* E79C0 802C3010 24A5AA98 */ addiu $a1, $a1, %lo(gScriptIdList)
/* E79C4 802C3014 3C06802E */ lui $a2, %hi(gCurrentScriptListPtr)
/* E79C8 802C3018 8CC6A890 */ lw $a2, %lo(gCurrentScriptListPtr)($a2)
/* E79CC 802C301C 3C04802E */ lui $a0, 0x802e
/* E79D0 802C3020 2484A898 */ addiu $a0, $a0, -0x5768
/* E79CC 802C301C 3C04802E */ lui $a0, %hi(gScriptIndexList)
/* E79D0 802C3020 2484A898 */ addiu $a0, $a0, %lo(gScriptIndexList)
/* E79D4 802C3024 AFB00000 */ sw $s0, ($sp)
.L802C3028:
/* E79D8 802C3028 8CC30000 */ lw $v1, ($a2)
@ -37,11 +37,11 @@ glabel sort_scripts
/* E7A28 802C3078 0000482D */ daddu $t1, $zero, $zero
/* E7A2C 802C307C 3C10802E */ lui $s0, %hi(gCurrentScriptListPtr)
/* E7A30 802C3080 2610A890 */ addiu $s0, $s0, %lo(gCurrentScriptListPtr)
/* E7A34 802C3084 3C0E802E */ lui $t6, %hi(gScriptIndexList)
/* E7A38 802C3088 25CEAA98 */ addiu $t6, $t6, %lo(gScriptIndexList)
/* E7A34 802C3084 3C0E802E */ lui $t6, %hi(gScriptIdList)
/* E7A38 802C3088 25CEAA98 */ addiu $t6, $t6, %lo(gScriptIdList)
/* E7A3C 802C308C 01C0C82D */ daddu $t9, $t6, $zero
/* E7A40 802C3090 3C18802E */ lui $t8, 0x802e
/* E7A44 802C3094 2718A898 */ addiu $t8, $t8, -0x5768
/* E7A40 802C3090 3C18802E */ lui $t8, %hi(gScriptIndexList)
/* E7A44 802C3094 2718A898 */ addiu $t8, $t8, %lo(gScriptIndexList)
/* E7A48 802C3098 0300782D */ daddu $t7, $t8, $zero
.L802C309C:
/* E7A4C 802C309C 25280001 */ addiu $t0, $t1, 1

View File

@ -129,9 +129,9 @@ glabel start_child_script
/* E8348 802C3998 8E030144 */ lw $v1, 0x144($s0)
/* E834C 802C399C 24420001 */ addiu $v0, $v0, 1
/* E8350 802C39A0 ACA20000 */ sw $v0, ($a1)
/* E8354 802C39A4 3C01802E */ lui $at, %hi(gScriptIndexList)
/* E8354 802C39A4 3C01802E */ lui $at, %hi(gScriptIdList)
/* E8358 802C39A8 00240821 */ addu $at, $at, $a0
/* E835C 802C39AC AC23AA98 */ sw $v1, %lo(gScriptIndexList)($at)
/* E835C 802C39AC AC23AA98 */ sw $v1, %lo(gScriptIdList)($at)
.L802C39B0:
/* E8360 802C39B0 0C0B0CE4 */ jal func_802C3390
/* E8364 802C39B4 0200202D */ daddu $a0, $s0, $zero

View File

@ -113,9 +113,9 @@ glabel start_script
/* E7F20 802C3570 8E030144 */ lw $v1, 0x144($s0)
/* E7F24 802C3574 24420001 */ addiu $v0, $v0, 1
/* E7F28 802C3578 ACA20000 */ sw $v0, ($a1)
/* E7F2C 802C357C 3C01802E */ lui $at, %hi(gScriptIndexList)
/* E7F2C 802C357C 3C01802E */ lui $at, %hi(gScriptIdList)
/* E7F30 802C3580 00240821 */ addu $at, $at, $a0
/* E7F34 802C3584 AC23AA98 */ sw $v1, %lo(gScriptIndexList)($at)
/* E7F34 802C3584 AC23AA98 */ sw $v1, %lo(gScriptIdList)($at)
.L802C3588:
/* E7F38 802C3588 0C0B0CE4 */ jal func_802C3390
/* E7F3C 802C358C 0200202D */ daddu $a0, $s0, $zero

View File

@ -114,9 +114,9 @@ glabel start_script_in_group
/* E8114 802C3764 8E030144 */ lw $v1, 0x144($s0)
/* E8118 802C3768 24420001 */ addiu $v0, $v0, 1
/* E811C 802C376C ACA20000 */ sw $v0, ($a1)
/* E8120 802C3770 3C01802E */ lui $at, %hi(gScriptIndexList)
/* E8120 802C3770 3C01802E */ lui $at, %hi(gScriptIdList)
/* E8124 802C3774 00240821 */ addu $at, $at, $a0
/* E8128 802C3778 AC23AA98 */ sw $v1, %lo(gScriptIndexList)($at)
/* E8128 802C3778 AC23AA98 */ sw $v1, %lo(gScriptIdList)($at)
.L802C377C:
/* E812C 802C377C 0C0B0CE4 */ jal func_802C3390
/* E8130 802C3780 0200202D */ daddu $a0, $s0, $zero

View File

@ -30,8 +30,8 @@ glabel update_scripts
/* E8788 802C3DD8 4481A800 */ mtc1 $at, $f21
/* E878C 802C3DDC 4480A000 */ mtc1 $zero, $f20
/* E8790 802C3DE0 2415FFFF */ addiu $s5, $zero, -1
/* E8794 802C3DE4 3C14802E */ lui $s4, %hi(gScriptIndexList)
/* E8798 802C3DE8 2694AA98 */ addiu $s4, $s4, %lo(gScriptIndexList)
/* E8794 802C3DE4 3C14802E */ lui $s4, %hi(gScriptIdList)
/* E8798 802C3DE8 2694AA98 */ addiu $s4, $s4, %lo(gScriptIdList)
/* E879C 802C3DEC 3C13802E */ lui $s3, 0x802e
/* E87A0 802C3DF0 2673A898 */ addiu $s3, $s3, -0x5768
.L802C3DF4:

View File

@ -1,6 +1,7 @@
#ifndef _COMMON_STRUCTS_H_
#define _COMMON_STRUCTS_H_
#include "macros.h"
#include "ultra64.h"
#include "types.h"
#include "si.h"
@ -238,9 +239,9 @@ typedef struct ScriptInstance {
/* 0x007 */ s8 switchDepth; /* how many nested switches we are in, max = 8 */
/* 0x008 */ Bytecode* ptrNextLine;
/* 0x00C */ Bytecode* ptrReadPos;
/* 0x010 */ u8 labelIndices[16];
/* 0x010 */ s8 labelIndices[16];
/* 0x020 */ UNK_PTR labelPositions[16];
/* 0x060 */ s32 deleted; /* set to zero in KillScript when malloc'd */
/* 0x060 */ UNK_PTR unk_60; /* unknown pointer; allocated on the heap, free'd in kill_script() */
/* 0x064 */ struct ScriptInstance* blockingParent; /* parent? */
/* 0x068 */ struct ScriptInstance* childScript;
/* 0x06C */ struct ScriptInstance* parentScript; /* brother? */
@ -266,6 +267,8 @@ typedef struct ScriptInstance {
/* 0x164 */ Bytecode* ptrCurrentLine;
} ScriptInstance; // size = 0x168
typedef ScriptInstance* ScriptList[MAX_SCRIPTS];
typedef struct Entity {
/* 0x00 */ s32 flags;
/* 0x04 */ char unk_04[2];

View File

@ -82,4 +82,7 @@ s32 set_music_track(s32 musicPlayer, s32 songID, s32 variation, s32 unk, s32 vol
ScriptInstance* get_script_by_index(s32 index);
void suspend_all_group(s32 groupFlags);
void kill_script(ScriptInstance* instanceToKill);
#endif

View File

@ -1,6 +1,8 @@
#ifndef _MACROS_H_
#define _MACROS_H_
#include "common.h"
#ifndef SPLAT
#define INCLUDE_ASM(TYPE, FOLDER, NAME, ARGS...) \
TYPE __attribute__((naked)) NAME(ARGS) { __asm__( ".include \"include/macro.inc\"\n.include \"asm/nonmatchings/"FOLDER"/"#NAME".s\"\n.set reorder\n.set at"); }
@ -16,6 +18,31 @@
#define GAME_STATUS (*gGameStatusPtr)
#define MAX_MAPVARS 16
#define MAX_MAPFLAGS 3
#define MAX_SCRIPTS 128
//NOTE: SCRIPT_ALLOC is probably not quite correct, but this is the closest thing to matching for the functions its used in. Needs more work.
#define SCRIPT_ALLOC(new, index) \
{ \
ScriptList** temp = &gCurrentScriptListPtr; \
s32 *numScripts = &gNumScripts; \
new = heap_malloc(sizeof(ScriptInstance)); \
(**temp)[index] = new; \
(*numScripts)++; \
ASSERT(new != NULL); \
}
#define SCRIPT_FREE(index) \
{ \
ScriptList** temp = &gCurrentScriptListPtr; \
s32 *numScripts = &gNumScripts; \
heap_free((**temp)[index]); \
(**temp)[index] = NULL; \
(*numScripts)--; \
}
#define SQ(x) (x*x)
#endif

View File

@ -4,6 +4,7 @@
#include "ultra64.h"
#include "common_structs.h"
#include "types.h"
#include "macros.h"
#include "enums.h"
extern UiStatus gUIStatus;
@ -20,19 +21,17 @@ extern UNK_FUN_PTR(gCurrentUpdateFunction);
extern BattleStatus gBattleStatus;
extern ScriptInstance* gWorldScriptList[128];
extern ScriptInstance* gBattleScriptList[128];
extern ScriptInstance** gCurrentScriptListPtr[128];
extern ScriptList gWorldScriptList;
extern ScriptList gBattleScriptList;
extern ScriptList* gCurrentScriptListPtr;
extern s32 gStaticScriptCounter;
extern s32 D_802D9CA4;
extern s32 gNumScripts;
extern s32 D_802DAC98;
extern s32 gScriptListCount;
extern s32 gScriptIdList[128];
extern s32 gScriptIndexList[128];
extern s32 gScriptIdList[MAX_SCRIPTS];
extern s32 gScriptIndexList[MAX_SCRIPTS];
extern Model* gWorldModelList[256];
extern Model* gBattleModelList[256];
@ -61,8 +60,6 @@ extern Shadow** gCurrentShadowListPtr[60];
extern Camera gCameras[4];
extern s32 gCurrentCameraID;
extern f32 gGlobalTimeSpace;
extern Npc* gPlayerNpcPtr;
extern s8 D_800A0900;
@ -124,4 +121,12 @@ extern s32 gNumScripts;
extern f32 D_80286540;
extern u32 gWorldMapVars[MAX_MAPVARS];
extern u32 gBattleMapVars[MAX_MAPVARS];
extern u32 gWorldMapFlags[MAX_MAPFLAGS];
extern u32 gBattleMapFlags[MAX_MAPFLAGS];
extern s32 D_8009A5D8;
#endif

View File

@ -214,7 +214,7 @@ SECTIONS
build/bin/code_E5830.o(.data);
}
/* 0x802C3000 E79B0-FEE30 (len 17480) */
/* 0x802C3000 E79B0-FE748 (len 16D98) */
.text_E79B0 0x802C3000 : AT(0xE79B0) {
build/src/code_e79b0_len_1920.o(.text);
build/src/code_e92d0_len_5da0.o(.text);
@ -225,7 +225,14 @@ SECTIONS
build/src/code_f8f60_len_1560.o(.text);
build/src/code_fa4c0_len_3bf0.o(.text);
build/src/code_fe0b0_len_5a0.o(.text);
build/bin/code_FE650.o(.data);
build/src/code_e79b0_len_1920.o(.data);
build/bin/code_FE660.o(.data);
build/src/code_e79b0_len_1920.o(.rodata);
}
/* 0x00000000 FE748-FEE30 [6E8] */
.data_FE748 0xFE748 : AT(0xFE748) {
build/bin/FE748.o(.data);
}
/* 0x802DBD40 FEE30-102610 (len 37E0) */

View File

@ -88,7 +88,7 @@ f32 signF(f32 val) {
return sign;
}
INCLUDE_ASM(s32, "code_42e0_len_1f60", round);
INCLUDE_ASM(s16, "code_42e0_len_1f60", round, f32 arg0);
INCLUDE_ASM(f32, "code_42e0_len_1f60", clamp_angle, f32 theta);

View File

@ -1,54 +1,334 @@
#include "common.h"
INCLUDE_ASM(s32, "code_e79b0_len_1920", sort_scripts);
s32 gStaticScriptCounter = 1;
s32 D_802D9CA4 = 0;
f32 gGlobalTimeSpace = 1.0f;
INCLUDE_ASM(s32, "code_e79b0_len_1920", find_script_labels);
INCLUDE_ASM(s32, "code_e79b0_len_1920", clear_script_list);
INCLUDE_ASM(s32, "code_e79b0_len_1920", init_script_list);
INCLUDE_ASM(s32, "code_e79b0_len_1920", func_802C3390);
INCLUDE_ASM(s32, "code_e79b0_len_1920", start_script);
INCLUDE_ASM(s32, "code_e79b0_len_1920", start_script_in_group);
INCLUDE_ASM(s32, "code_e79b0_len_1920", start_child_script);
<<<<<<< HEAD
#ifdef NON_MATCHING
//appears to be functionally equivalent, some ordering and regalloc issues
ScriptInstance* func_802C39F8(ScriptInstance* parentScript, Bytecode* nextLine, s32 newState) {
ScriptInstance** curScript = gCurrentScriptListPtr;
ScriptInstance* child;
ScriptInstance** temp3;
s32* temp6;
s32 temp2;
s32 temp7;
// regalloc issues.
void sort_scripts(void) {
s32 temp_a0;
s32 temp_a1;
s32 tempID;
ScriptInstance* curScript;
ScriptList** currentScriptListPtr;
s32 i;
s32 j;
s32 numValidScripts = 0;
s32 *scriptIndexList = gScriptIndexList;
s32 *scriptIdList = gScriptIdList;
for(i = 0; i < MAX_SCRIPTS; i++) {
curScript = (*gCurrentScriptListPtr)[i];
if (curScript != NULL) {
if (curScript->state != 0) {
scriptIndexList[numValidScripts] = i;
scriptIdList[numValidScripts] = curScript->uniqueID;
numValidScripts++;
}
}
}
gScriptListCount = numValidScripts;
j = numValidScripts;
for(i = 0; i < (j - 1); i++) {
currentScriptListPtr = &gCurrentScriptListPtr;
scriptIdList = gScriptIdList;
scriptIndexList = gScriptIndexList;
for(j = i + 1; j < numValidScripts; j++) {
temp_a1 = scriptIndexList[i];
temp_a0 = scriptIndexList[j];
if ((**currentScriptListPtr)[temp_a1]->priority > (**currentScriptListPtr)[temp_a0]->priority) {
scriptIndexList[i] = temp_a0;
scriptIndexList[j] = temp_a1;
tempID = scriptIdList[i];
scriptIdList[i] = scriptIdList[j];
scriptIdList[j] = tempID;
}
}
}
}
#else
INCLUDE_ASM(s32, "code_e79b0_len_1920", sort_scripts);
#endif
#ifdef NON_MATCHING
// Very close. Reordering/branch likely issues
void find_script_labels(ScriptInstance *script) {
Bytecode *curLine;
s32 type;
s32 label;
s32 numArgs;
s32 i;
s32 j;
for(i = 0; i < ARRAY_COUNT(script->labelIndices); i++){
script->labelIndices[i] = -1;
script->labelPositions[i] = 0;
}
j = 0;
curLine = script->ptrNextLine;
for(j; j < ARRAY_COUNT(script->labelIndices); j++) {
type = *curLine++;
numArgs = *curLine++;
label = *curLine;
curLine += numArgs;
if (type == 1) {
return;
}
if (type == 3) {
script->labelIndices[j] = label;
script->labelPositions[j] = curLine;
}
}
PANIC();
}
#else
INCLUDE_ASM(void, "code_e79b0_len_1920", find_script_labels);
#endif
void clear_script_list(void) {
s32 i;
for(i = 0; i < ARRAY_COUNT(gCurrentScriptListPtr); i++){
if (curScript[i] == NULL) {
if (GAME_STATUS->isBattle == 0) {
gCurrentScriptListPtr = &gWorldScriptList;
gMapVars = gWorldMapVars;
gMapFlags = gWorldMapFlags;
} else {
gCurrentScriptListPtr = &gBattleScriptList;
gMapVars = gBattleMapVars;
gMapFlags = gBattleMapFlags;
}
for(i = 0; i < MAX_SCRIPTS; i++) {
(*gCurrentScriptListPtr)[i] = NULL;
}
gNumScripts = 0;
gScriptListCount = 0;
D_802D9CA4 = 0;
for(i = 0; i < MAX_MAPVARS; i++) {
gMapVars[i] = 0;
}
for(i = 0; i < MAX_MAPFLAGS; i++) {
gMapFlags[i] = 0;
}
func_802D4488();
func_802CD4B4();
}
void init_script_list(void) {
if (GAME_STATUS->isBattle == 0) {
gCurrentScriptListPtr = &gWorldScriptList;
gMapVars = gWorldMapVars;
gMapFlags = gWorldMapFlags;
} else {
gCurrentScriptListPtr = &gBattleScriptList;
gMapVars = gBattleMapVars;
gMapFlags = gBattleMapFlags;
}
gNumScripts = 0;
D_802D9CA4 = 0;
func_802D4560();
func_802CD57C();
}
void func_802C3390(ScriptInstance* script) {
s32 arg;
switch(D_8009A5D8) {
default:
case 0:
case 4:
return;
case 1:
arg = 1;
break;
case 2:
case 3:
arg = 2;
break;
}
suspend_all_group(arg);
}
#ifdef NON_MATCHING
ScriptInstance* start_script(Bytecode *initialLine, u8 priority, s32 initialState) {
ScriptInstance *newScript;
s32 curScriptIndex;
s32 scriptListCount;
s32 i;
for(i = 0; i < MAX_SCRIPTS; i++) {
if ((*gCurrentScriptListPtr)[i] == NULL) {
break;
}
}
temp3 = gCurrentScriptListPtr;
ASSERT(i < ARRAY_COUNT(gCurrentScriptListPtr));
temp2 = i;
ASSERT(i < MAX_SCRIPTS);
curScriptIndex = i;
child = heap_malloc(sizeof(ScriptInstance));
temp3[temp2] = child;
temp7 = gNumScripts++;
ASSERT(child != NULL);
SCRIPT_ALLOC(newScript, curScriptIndex);
newScript->state = initialState | 1;
newScript->currentOpcode = 0;
newScript->priority = priority;
newScript->ptrNextLine = initialLine;
newScript->ptrFirstLine = initialLine;
newScript->ptrCurrentLine = initialLine;
newScript->unk_60 = NULL;
newScript->blockingParent = NULL;
newScript->childScript = NULL;
newScript->parentScript = NULL;
newScript->uniqueID = gStaticScriptCounter++;
newScript->ownerActorID = -1;
newScript->ownerID = -1;
newScript->loopDepth = -1;
newScript->switchDepth = -1;
newScript->groupFlags = ~0x10;
newScript->ptrSavedPosition = NULL;
newScript->frameCounter = 0.0f;
newScript->unk_158 = 0;
newScript->timeScale = gGlobalTimeSpace;
scriptListCount = 0;
for(i = 0; i < 16; i++) {
newScript->varTable[i] = 0;
}
for(i = 0; i < 3; i++){
newScript->varFlags[i] = 0;
}
find_script_labels(newScript);
if ((D_802D9CA4 != 0) && ((newScript->state & 0x20) != 0)) {
scriptListCount = gScriptListCount++;
gScriptIndexList[scriptListCount] = curScriptIndex;
gScriptIdList[scriptListCount] = newScript->uniqueID;
}
func_802C3390(newScript);
{
s32* tempCounter = &gStaticScriptCounter;
if (*tempCounter == 0) {
*tempCounter = 1;
}
}
return newScript;
}
#else
INCLUDE_ASM(ScriptInstance*, "code_e79b0_len_1920", start_script, Bytecode *initialLine, u8 priority, s32 initialState);
#endif
#ifdef NON_MATCHING
ScriptInstance* start_script_in_group(Bytecode* initialLine, s8 priority, s32 initialState, s8 groupFlags) {
ScriptInstance *newScript;
s32 scriptListCount;
s32 i;
s32 curScriptIndex;
s32* tempCounter;
for(i = 0; i < MAX_SCRIPTS; i++) {
if ((*gCurrentScriptListPtr)[i] == NULL) {
break;
}
}
ASSERT(i < MAX_SCRIPTS);
curScriptIndex = i;
SCRIPT_ALLOC(newScript, curScriptIndex);
newScript->state = (initialState | 1);
newScript->ptrNextLine = initialLine;
newScript->ptrFirstLine = initialLine;
newScript->ptrCurrentLine = initialLine;
newScript->currentOpcode = 0;
newScript->priority = priority;
newScript->unk_60 = NULL;
newScript->blockingParent = NULL;
newScript->childScript = NULL;
newScript->parentScript = NULL;
newScript->uniqueID = gStaticScriptCounter++;
newScript->ownerActorID = -1;
newScript->ownerID = -1;
newScript->loopDepth = -1;
newScript->switchDepth = -1;
newScript->groupFlags = groupFlags;
newScript->ptrSavedPosition = NULL;
newScript->frameCounter = 0.0f;
newScript->unk_158 = 0;
newScript->timeScale = gGlobalTimeSpace;
scriptListCount = 0;
for(i = 0; i < 16; i++) {
newScript->varTable[i] = 0;
}
for(i = 0; i < 3; i++){
newScript->varFlags[i] = 0;
}
find_script_labels(newScript);
if ((D_802D9CA4 != 0) && ((newScript->state & 0x20) != 0)) {
scriptListCount = gScriptListCount++;
gScriptIndexList[scriptListCount] = curScriptIndex;
gScriptIdList[scriptListCount] = newScript->uniqueID;
}
func_802C3390(newScript);
{
s32* tempCounter = &gStaticScriptCounter;
if (*tempCounter == 0) {
*tempCounter = 1;
}
}
return newScript;
}
#else
INCLUDE_ASM(s32, "code_e79b0_len_1920", start_script_in_group);
#endif
INCLUDE_ASM(s32, "code_e79b0_len_1920", start_child_script);
#ifdef NON_MATCHING
// appears to be functionally equivalent, some ordering and regalloc issues
ScriptInstance* func_802C39F8(ScriptInstance* parentScript, Bytecode* nextLine, s32 newState) {
ScriptInstance* child;
s32* temp6;
s32 curScriptIndex;
s32 i;
s32 scriptListCount;
for(i = 0; i < MAX_SCRIPTS; i++) {
if ((*gCurrentScriptListPtr)[i] == NULL) {
break;
}
}
ASSERT(i < MAX_SCRIPTS);
curScriptIndex = i;
SCRIPT_ALLOC(child, curScriptIndex);
child->state = newState | 1;
child->ptrNextLine = nextLine;
child->ptrFirstLine = nextLine;
child->ptrCurrentLine = nextLine;
child->currentOpcode = 0;
child->deleted = 0;
child->unk_60 = NULL;
child->blockingParent = NULL;
child->parentScript = parentScript;
child->childScript = NULL;
@ -63,9 +343,11 @@ ScriptInstance* func_802C39F8(ScriptInstance* parentScript, Bytecode* nextLine,
child->array = parentScript->array;
child->flagArray = parentScript->flagArray;
child->timeScale = gGlobalTimeSpace;
child->frameCounter = 0;
child->frameCounter = 0.0f;
child->unk_158 = 0;
scriptListCount = 0;
for(i = 0; i < ARRAY_COUNT(child->varTable); i++) {
child->varTable[i] = parentScript->varTable[i];
}
@ -76,9 +358,9 @@ ScriptInstance* func_802C39F8(ScriptInstance* parentScript, Bytecode* nextLine,
find_script_labels(child);
if (D_802D9CA4 != 0) {
temp7 = D_802DAC98++;
gScriptIdList[temp7] = temp2;
gScriptIndexList[temp7] = child->uniqueID;
scriptListCount = gScriptListCount++;
gScriptIndexList[scriptListCount] = curScriptIndex;
gScriptIdList[scriptListCount] = child->uniqueID;
}
temp6 = &gStaticScriptCounter;
@ -92,12 +374,46 @@ ScriptInstance* func_802C39F8(ScriptInstance* parentScript, Bytecode* nextLine,
INCLUDE_ASM(ScriptInstance*, "code_e79b0_len_1920", func_802C39F8, ScriptInstance* parentScript, Bytecode* nextLine, s32 newState);
#endif
INCLUDE_ASM("code_e79b0_len_1920", func_802C3C10);
=======
INCLUDE_ASM(s32, "code_e79b0_len_1920", func_802C39F8);
ScriptInstance* func_802C3C10(ScriptInstance *script, Bytecode* line, s32 arg2) {
ScriptInstance *curScript;
s32 i;
INCLUDE_ASM(s32, "code_e79b0_len_1920", func_802C3C10);
>>>>>>> 3bf3c987d710d9a78dfbc0505eb69843053cda25
script->ptrNextLine = line;
script->ptrFirstLine = line;
script->ptrCurrentLine = line;
script->currentOpcode = 0;
script->frameCounter = 0;
script->state |= arg2;
script->timeScale = 1.0f;
if (script->unk_60 != NULL) {
heap_free(script->unk_60);
script->unk_60 = NULL;
}
if (script->childScript != 0) {
kill_script(script->childScript);
}
for(i = 0; i < MAX_SCRIPTS; i++) {
curScript = (*gCurrentScriptListPtr)[i];
if ((curScript != 0) && (curScript->parentScript == script)) {
kill_script(curScript);
}
}
script->loopDepth = -1;
script->switchDepth = -1;
script->blockingParent = NULL;
script->parentScript = NULL;
script->childScript = NULL;
script->frameCounter = 0.0f;
script->unk_158 = 0;
script->timeScale = gGlobalTimeSpace;
find_script_labels(script);
func_802C3390(script);
return script;
}
ScriptInstance* restart_script(ScriptInstance* script) {
Bytecode* ptrFirstLine = script->ptrFirstLine;
@ -116,7 +432,7 @@ ScriptInstance* restart_script(ScriptInstance* script) {
script->timeScale = gGlobalTimeSpace;
find_script_labels();
find_script_labels(script);
func_802C3390(script);
return script;
@ -124,15 +440,66 @@ ScriptInstance* restart_script(ScriptInstance* script) {
INCLUDE_ASM(s32, "code_e79b0_len_1920", update_scripts);
// this function is evil.
INCLUDE_ASM(s32, "code_e79b0_len_1920", func_802C3EE4);
INCLUDE_ASM(s32, "code_e79b0_len_1920", kill_script);
void kill_script(ScriptInstance* instanceToKill) {
ScriptInstance* childScript;
ScriptInstance* blockingParent;
s32 j;
s32 i;
for(i = 0; i < MAX_SCRIPTS; i++) {
if ((*gCurrentScriptListPtr)[i] == instanceToKill) {
break;
}
}
if (i >= MAX_SCRIPTS) {
return;
}
childScript = instanceToKill->childScript;
if (childScript != NULL) {
kill_script(childScript);
}
for(j = 0; j < MAX_SCRIPTS; j++) {
ScriptInstance* tempScriptInstance = (*gCurrentScriptListPtr)[j];
if (tempScriptInstance != NULL) {
if (tempScriptInstance->parentScript == instanceToKill) {
kill_script(tempScriptInstance);
}
}
}
blockingParent = instanceToKill->blockingParent;
if (blockingParent != NULL) {
blockingParent->childScript = NULL;
blockingParent->state &= ~0x10;
for(j = 0; j < ARRAY_COUNT(blockingParent->varTable); j++) {
blockingParent->varTable[j] = instanceToKill->varTable[j];
}
for(j = 0; j < ARRAY_COUNT(blockingParent->varFlags); j++) {
blockingParent->varFlags[j] = instanceToKill->varFlags[j];
}
}
if (instanceToKill->unk_60 != NULL) {
heap_free(instanceToKill->unk_60);
instanceToKill->unk_60 = NULL;
}
SCRIPT_FREE(i);
}
void kill_script_by_ID(s32 id) {
s32 i;
ScriptInstance* scriptContextPtr;
for (i = 0; i < ARRAY_COUNT(gCurrentScriptListPtr); i++) {
for (i = 0; i < MAX_SCRIPTS; i++) {
scriptContextPtr = (*gCurrentScriptListPtr)[i];
if (scriptContextPtr != NULL && scriptContextPtr->uniqueID == id) {
kill_script(scriptContextPtr);
@ -140,11 +507,12 @@ void kill_script_by_ID(s32 id) {
}
}
void kill_all_scripts(void) {
s32 i;
ScriptInstance* scriptContextPtr;
for (i = 0; i < ARRAY_COUNT(gCurrentScriptListPtr); i++) {
for (i = 0; i < MAX_SCRIPTS; i++) {
scriptContextPtr = (*gCurrentScriptListPtr)[i];
if (scriptContextPtr != NULL) {
kill_script(scriptContextPtr);
@ -156,7 +524,7 @@ s32 does_script_exist(s32 id) {
s32 i;
ScriptInstance* scriptContextPtr;
for (i = 0; i < ARRAY_COUNT(gCurrentScriptListPtr); i++) {
for (i = 0; i < MAX_SCRIPTS; i++) {
scriptContextPtr = (*gCurrentScriptListPtr)[i];
if (scriptContextPtr != NULL && scriptContextPtr->uniqueID == id) {
return 1;
@ -168,7 +536,7 @@ s32 does_script_exist(s32 id) {
s32 does_script_exist_by_ref(ScriptInstance* script) {
s32 i;
for (i = 0; i < ARRAY_COUNT(gCurrentScriptListPtr); i++) {
for (i = 0; i < MAX_SCRIPTS; i++) {
if (script == (*gCurrentScriptListPtr)[i]) {
return 1;
}
@ -184,23 +552,13 @@ void set_script_timescale(ScriptInstance* script, f32 timescale) {
script->timeScale = timescale * gGlobalTimeSpace;
}
#ifdef NON_MATCHING
// TODO: figure out why compiler/assembler isn't putting SWC1 in delay slot
void set_global_timespace(f32 timeScale) {
gGlobalTimeSpace = timeScale;
}
#else
INCLUDE_ASM(s32, "code_e79b0_len_1920", set_global_timespace);
#endif
#ifdef NON_MATCHING
// TODO: figure out why compiler/assembler isn't putting LWC1 in delay slot
f32 get_global_timespace(void) {
return gGlobalTimeSpace;
}
#else
INCLUDE_ASM(s32, "code_e79b0_len_1920", get_global_timespace);
#endif
void set_script_group(ScriptInstance* script, s8 groupFlags) {
script->groupFlags = groupFlags;
@ -240,7 +598,7 @@ void suspend_group_script(ScriptInstance* script, s32 groupFlags) {
suspend_group_script(childScript, groupFlags);
}
for (i = 0; i < ARRAY_COUNT(gCurrentScriptListPtr); i++) {
for (i = 0; i < MAX_SCRIPTS; i++) {
scriptContextPtr = (*gCurrentScriptListPtr)[i];
if (scriptContextPtr != NULL && scriptContextPtr->parentScript == script) {
suspend_group_script(scriptContextPtr, groupFlags);
@ -261,7 +619,7 @@ void resume_group_script(ScriptInstance* script, s32 groupFlags) {
resume_group_script(childScript, groupFlags);
}
for (i = 0; i < ARRAY_COUNT(gCurrentScriptListPtr); i++) {
for (i = 0; i < MAX_SCRIPTS; i++) {
scriptContextPtr = (*gCurrentScriptListPtr)[i];
if (scriptContextPtr != NULL && scriptContextPtr->parentScript == script) {
suspend_group_script(scriptContextPtr, groupFlags);
@ -277,7 +635,7 @@ s32 suspend_all_script(s32 id) {
s32 i;
ScriptInstance* scriptContextPtr;
for (i = 0; i < ARRAY_COUNT(gCurrentScriptListPtr); i++) {
for (i = 0; i < MAX_SCRIPTS; i++) {
scriptContextPtr = (*gCurrentScriptListPtr)[i];
if (scriptContextPtr != NULL && scriptContextPtr->uniqueID == id) {
suspend_group_script(scriptContextPtr, 0xEF);
@ -289,7 +647,7 @@ s32 resume_all_script(s32 id) {
s32 i;
ScriptInstance* scriptContextPtr;
for (i = 0; i < ARRAY_COUNT(gCurrentScriptListPtr); i++) {
for (i = 0; i < MAX_SCRIPTS; i++) {
scriptContextPtr = (*gCurrentScriptListPtr)[i];
if (scriptContextPtr != NULL && scriptContextPtr->uniqueID == id) {
resume_group_script(scriptContextPtr, 0xEF);
@ -301,7 +659,7 @@ void suspend_group_script_index(s32 id, s32 groupFlags) {
s32 i;
ScriptInstance* scriptContextPtr;
for (i = 0; i < ARRAY_COUNT(gCurrentScriptListPtr); i++) {
for (i = 0; i < MAX_SCRIPTS; i++) {
scriptContextPtr = (*gCurrentScriptListPtr)[i];
if (scriptContextPtr != NULL && scriptContextPtr->uniqueID == id) {
suspend_group_script(scriptContextPtr, groupFlags);
@ -313,7 +671,7 @@ void resume_group_script_index(s32 id, s32 groupFlags) {
s32 i;
ScriptInstance* scriptContextPtr;
for (i = 0; i < ARRAY_COUNT(gCurrentScriptListPtr); i++) {
for (i = 0; i < MAX_SCRIPTS; i++) {
scriptContextPtr = (*gCurrentScriptListPtr)[i];
if (scriptContextPtr != NULL && scriptContextPtr->uniqueID == id) {
resume_group_script(scriptContextPtr, groupFlags);
@ -321,11 +679,11 @@ void resume_group_script_index(s32 id, s32 groupFlags) {
}
}
s32 suspend_all_group(s32 groupFlags) {
void suspend_all_group(s32 groupFlags) {
s32 i;
ScriptInstance* scriptContextPtr;
for (i = 0; i < ARRAY_COUNT(gCurrentScriptListPtr); i++) {
for (i = 0; i < MAX_SCRIPTS; i++) {
scriptContextPtr = (*gCurrentScriptListPtr)[i];
if (scriptContextPtr != NULL) {
suspend_group_script(scriptContextPtr, groupFlags);
@ -337,7 +695,7 @@ s32 resume_all_group(s32 groupFlags) {
s32 i;
ScriptInstance* scriptContextPtr;
for (i = 0; i < ARRAY_COUNT(gCurrentScriptListPtr); i++) {
for (i = 0; i < MAX_SCRIPTS; i++) {
scriptContextPtr = (*gCurrentScriptListPtr)[i];
if (scriptContextPtr != NULL) {
resume_group_script(scriptContextPtr, groupFlags);
@ -349,7 +707,7 @@ void suspend_group_others(ScriptInstance* script, s32 groupFlags) {
s32 i;
ScriptInstance* scriptContextPtr;
for (i = 0; i < ARRAY_COUNT(gCurrentScriptListPtr); i++) {
for (i = 0; i < MAX_SCRIPTS; i++) {
scriptContextPtr = (*gCurrentScriptListPtr)[i];
if (scriptContextPtr != NULL && scriptContextPtr != script) {
suspend_group_script(scriptContextPtr, groupFlags);
@ -361,7 +719,7 @@ void resume_group_others(ScriptInstance* script, s32 groupFlags) {
s32 i;
ScriptInstance* scriptContextPtr;
for (i = 0; i < ARRAY_COUNT(gCurrentScriptListPtr); i++) {
for (i = 0; i < MAX_SCRIPTS; i++) {
scriptContextPtr = (*gCurrentScriptListPtr)[i];
if (scriptContextPtr != NULL && scriptContextPtr != script) {
resume_group_script(scriptContextPtr, groupFlags);
@ -377,7 +735,7 @@ ScriptInstance* get_script_by_id(s32 id) {
s32 i;
ScriptInstance* scriptContextPtr;
for (i = 0; i < ARRAY_COUNT(gCurrentScriptListPtr); i++) {
for (i = 0; i < MAX_SCRIPTS; i++) {
if ((*gCurrentScriptListPtr)[i] != NULL) {
scriptContextPtr = (*gCurrentScriptListPtr)[i];
if (scriptContextPtr->uniqueID == id) {
@ -398,7 +756,7 @@ void set_script_flags(ScriptInstance* script, s32 flags) {
set_script_flags(childScript, flags);
}
for (i = 0; i < ARRAY_COUNT(gCurrentScriptListPtr); i++) {
for (i = 0; i < MAX_SCRIPTS; i++) {
scriptContextPtr = (*gCurrentScriptListPtr)[i];
if (scriptContextPtr != NULL && scriptContextPtr->parentScript == script) {
set_script_flags(script->parentScript, flags);
@ -406,7 +764,6 @@ void set_script_flags(ScriptInstance* script, s32 flags) {
}
}
void clear_script_flags(ScriptInstance* script, s32 flags) {
int i;
ScriptInstance* scriptContextPtr;
@ -417,7 +774,7 @@ void clear_script_flags(ScriptInstance* script, s32 flags) {
clear_script_flags(childScript, flags);
}
for (i = 0; i < ARRAY_COUNT(gCurrentScriptListPtr); i++) {
for (i = 0; i < MAX_SCRIPTS; i++) {
scriptContextPtr = (*gCurrentScriptListPtr)[i];
if (scriptContextPtr != NULL && scriptContextPtr->parentScript == script) {
clear_script_flags(scriptContextPtr, flags);

View File

@ -737,12 +737,11 @@ ApiStatus func_802C73B0(ScriptInstance* script) {
s32 func_802C73B8(ScriptInstance* script) {
s32 i;
for (i = 0; i < ARRAY_COUNT(gCurrentScriptListPtr); i++) {
for (i = 0; i < 128; i++) { // replace with MAX_SCRIPTS define
if (script == get_script_by_index(i)) {
break;
}
}
return 1;
}

View File

@ -236,7 +236,10 @@ segments:
- [0xf8f60, "c", "code_f8f60_len_1560"]
- [0xfa4c0, "c", "code_fa4c0_len_3bf0"]
- [0xfe0b0, "c", "code_fe0b0_len_5a0"]
- [0xFE650, "bin"]
- [0xFE650, ".data", "code_e79b0_len_1920"]
- [0xFE660, "bin"]
- [0xFE730, ".rodata", "code_e79b0_len_1920"]
- [0xFE748, "bin"] # rodata chunk for above overlay; here to avoid the 0x10 alignment
- name: code
type: code
start: 0xFEE30

View File

@ -11,7 +11,6 @@ gWorldScriptList = 0x802DA490;
gBattleScriptList = 0x802DA690;
gNumScripts = 0x802DA488;
gCurrentScriptListPtr = 0x802DA890;
D_802DAC98 = 0x802DAC98;
gStaticScriptCounter = 0x802D9CA0;
D_802D9CA4 = 0x802D9CA4;
gGlobalTimeSpace = 0x802D9CA8;
@ -21,6 +20,12 @@ D_8010EBB0 = 0x8010EBB0;
D_8010F250 = 0x8010F250;
D_80159D50 = 0x80159D50;
gWorldMapVars = 0x802DBCA8;
gBattleMapVars = 0x802DBCE8;
gWorldMapFlags = 0x802DBC70;
gBattleMapFlags = 0x802DBD34;
gMapTransitionAlpha = 0x800A0940;
D_800E92D8 = 0x800E92D8;
D_80147474 = 0x80147474;
@ -41,7 +46,6 @@ gBattleStatus = 0x800DC070;
gStaticScriptCounter = 0x802D9CA0;
D_802D9CA4 = 0x802D9CA4;
gNumScripts = 0x802DA488;
D_802DAC98 = 0x802DAC98;
D_000759B0 = 0x000759B0;
D_000759B0_end = 0x000A5DD0;
@ -138,8 +142,8 @@ gWorldDynamicEntityList = 0x801543A0;
gBattleDynamicEntityList = 0x801543E0;
gCurrentDynamicEntityListPtr = 0x80154420;
gScriptIdList = 0x802DA898;
gScriptIndexList = 0x802DAA98;
gScriptIndexList = 0x802DA898;
gScriptIdList = 0x802DAA98;
gScriptListCount = 0x802DAC98;
gCurrentSaveFile = 0x800DACC0;