Load Scenario Conditionals

From Final Fantasy Hacktics Wiki
Jump to navigation Jump to search
#   ROUTINE: LOAD SCENARIO CONDITIONALS
#   No parameters.

801c34b4: 27bdffb8 addiu r29,r29,-0x0048
801c34b8: 34040064 ori r4,r0,0x0064
801c34bc: afbf0044 sw r31,0x0044(r29)
801c34c0: afb60040 sw r22,0x0040(r29)
801c34c4: afb5003c sw r21,0x003c(r29)
801c34c8: afb40038 sw r20,0x0038(r29)
801c34cc: afb30034 sw r19,0x0034(r29)
801c34d0: afb20030 sw r18,0x0030(r29)
801c34d4: afb1002c sw r17,0x002c(r29)
801c34d8: 0c04ed64 jal 0x8013b590                   #   var_0x64 = Get Script Variable (0x64);              //  0x64 = Next Scenario? New Game?
801c34dc: afb00028 sw r16,0x0028(r29)
801c34e0: 10400010 beq r2,r0,0x801c3524             #   if (var_0x64 != 0) {
801c34e4: 00000000 nop
801c34e8: 0c04ed64 jal 0x8013b590                   #       currentEventID =  Get Script Variable (0x27);   //  0x27 = Current Event
801c34ec: 34040027 ori r4,r0,0x0027
801c34f0: 34030008 ori r3,r0,0x0008
801c34f4: 1443000b bne r2,r3,0x801c3524             #       if (currentEventID == 0x08) {                       //  0x08 = Military Academy
801c34f8: 34040027 ori r4,r0,0x0027
801c34fc: 0c04ed91 jal 0x8013b644                   #           Set Script Variable (0x27, 0x09);           //  0x09 = Gariland Fight (Setup)
801c3500: 34050009 ori r5,r0,0x0009
801c3504: 34040064 ori r4,r0,0x0064
801c3508: 0c04ed91 jal 0x8013b644                   #           Set Script Variable (0x64, 0);              //  0x64 = Next Scenario? New Game?
801c350c: 00002821 addu r5,r0,r0
801c3510: 34020001 ori r2,r0,0x0001
801c3514: 3c018016 lui r1,0x8016
801c3518: a4225fda sh r2,0x5fda(r1)                 #           *0x80165fda = 1
801c351c: 3c018004 lui r1,0x8004
801c3520: a02073a0 sb r0,0x73a0(r1)                 #           *0x800473a0 = 0
                                                    #       }
                                                    #   }
801c3524: 3c038016 lui r3,0x8016
801c3528: 94635fda lhu r3,0x5fda(r3)                #   *0x80165fda
801c352c: 34020002 ori r2,r0,0x0002
801c3530: 14620029 bne r3,r2,0x801c35d8
801c3534: 34100070 ori r16,r0,0x0070                #   scriptVarID = 0x70
                                                    #   if (*0x80165fda == 2) {
801c3538: 3c018005 lui r1,0x8005
801c353c: a020d9ac sb r0,-0x2654(r1)                #       *0x8004d9ac = 0
801c3540: 3c018005 lui r1,0x8005
801c3544: a020d954 sb r0,-0x26ac(r1)                #       *0x8004d954 = 0
801c3548: 0c04ed64 jal 0x8013b590                   #       currentEventID =  Get Script Variable (0x27);   //  0x27 = Current Event       
801c354c: 34040027 ori r4,r0,0x0027
801c3550: 00021040 sll r2,r2,0x01                   #       currentEventID * 2
801c3554: 3c018005 lui r1,0x8005
801c3558: 00220821 addu r1,r1,r2
801c355c: 9423e5d0 lhu r3,-0x1a30(r1)               #       value = *(0x8004e5d0 + (currentEventID * 2))
801c3560: 00000000 nop
801c3564: 1060015b beq r3,r0,0x801c3ad4             #       if (value == 0) return currentEventID * 2;
801c3568: 00008021 addu r16,r0,r0                   #       count = 0
801c356c: 30620c00 andi r2,r3,0x0c00                #       value & 0x0c00
801c3570: 00021083 sra r2,r2,0x02                   #       (value & 0x0c00) / 4
801c3574: 306300ff andi r3,r3,0x00ff                #       value & 0xff
801c3578: 00439021 addu r18,r2,r3                   #       checkValue = ((value & 0x0c00) / 4) + (value & 0xff)
801c357c: 3c11801d lui r17,0x801d
801c3580: 2631f938 addiu r17,r17,-0x06c8            #       scenarioDataPtr = 0x801cf938                        //  Start of scenario data in ATTACK.OUT (0x10938)
                                                    #       do {
801c3584: 92220001 lbu r2,0x0001(r17)               #           highByte = *(scenarioDataPtr + 1)
801c3588: 92230000 lbu r3,0x0000(r17)               #           lowByte = *scenarioDataPtr
801c358c: 00021200 sll r2,r2,0x08                   #           highByte << 8
801c3590: 00623021 addu r6,r3,r2                    #           scenarioID = (highByte << 8) + lowByte
801c3594: 10d20006 beq r6,r18,0x801c35b0            #           if (scenarioID == checkValue) break;
801c3598: 00000000 nop
801c359c: 10c0014d beq r6,r0,0x801c3ad4             #           if (scenarioID == 0) return highByte << 8;
801c35a0: 26100001 addiu r16,r16,0x0001             #           count = count + 1
801c35a4: 2a0201f4 slti r2,r16,0x01f4
801c35a8: 1440fff6 bne r2,r0,0x801c3584
801c35ac: 26310018 addiu r17,r17,0x0018             #           scenarioDataPtr = scenarioDataPtr + 24          //  24 == sizeof(scenario)
                                                    #       } while (count < 0x1f4);
801c35b0: 10c00148 beq r6,r0,0x801c3ad4             #       if (scenarioID == 0) return 0;
801c35b4: 00000000 nop
801c35b8: 9222000d lbu r2,0x000d(r17)               #       scenarioDataPtr.portraitID
801c35bc: 3c018005 lui r1,0x8005
801c35c0: a022d9ac sb r2,-0x2654(r1)                #       *0x8004d9ac = scenarioDataPtr.portraitID
801c35c4: 9222000e lbu r2,0x000e(r17)               #       scenarioDataPtr.unitID
801c35c8: 3c018005 lui r1,0x8005
801c35cc: a022d954 sb r2,-0x26ac(r1)                #       *0x8004d954 = scenarioDataPtr.unitID
801c35d0: 08070eb5 j 0x801c3ad4
801c35d4: 00000000 nop
                                                    #   }
801c35d8: 3c018017 lui r1,0x8017
801c35dc: a4203cb0 sh r0,0x3cb0(r1)                 #   *0x80173cb0 = 0
                                                    #   do {
801c35e0: 02002021 addu r4,r16,r0                       
801c35e4: 0c04ed91 jal 0x8013b644                   #       Set Script Variable (scriptVarID, 0);
801c35e8: 00002821 addu r5,r0,r0
801c35ec: 26100001 addiu r16,r16,0x0001             #       scriptVarID = scriptVarID + 1
801c35f0: 2a020090 slti r2,r16,0x0090
801c35f4: 1440fffa bne r2,r0,0x801c35e0
801c35f8: 340401fd ori r4,r0,0x01fd
                                                    #   } while (scriptVarID < 0x90);
801c35fc: 0c04ed91 jal 0x8013b644                   #   Set Script Variable (0x1fd, 1);
801c3600: 34050001 ori r5,r0,0x0001
801c3604: 0c04ed64 jal 0x8013b590                   #   var_0xa0 = Get Script Variable (0xa0);                  //  0xa0 = Olan saw Ramza at his own funeral
801c3608: 340400a0 ori r4,r0,0x00a0
801c360c: 1040000e beq r2,r0,0x801c3648             #   if ((var_0xa0 != 0)
801c3610: 00000000 nop
801c3614: 0c04ed64 jal 0x8013b590                   #           var_0x64 =  Get Script Variable (0x64);         //  0x64 = Next Scenario? New Game?
801c3618: 34040064 ori r4,r0,0x0064
801c361c: 1040000a beq r2,r0,0x801c3648             #       and (var_0x64 != 0))
801c3620: 00000000 nop
801c3624: 0c04ed64 jal 0x8013b590                   #           currentEventID =  Get Script Variable (0x27);   //  0x27 = Current Event
801c3628: 34040027 ori r4,r0,0x0027
801c362c: 3403012a ori r3,r0,0x012a
801c3630: 14430005 bne r2,r3,0x801c3648             #       and (currentEventID == 0x12a)) {
801c3634: 34040027 ori r4,r0,0x0027
801c3638: 0c04ed91 jal 0x8013b644                   #           Set Script Variable (0x27, 0x012b);             //  0x27 = Current Event; 0x12b = Final scene Delita/Ovelia
801c363c: 3405012b ori r5,r0,0x012b
801c3640: 08070dbc j 0x801c36f0
801c3644: 00000000 nop
                                                    #   } else {
801c3648: 0c04ed64 jal 0x8013b590
801c364c: 34040064 ori r4,r0,0x0064                 #       var_0x64 =  Get Script Variable (0x64);             //  0x64 = Next Scenario? New Game?
801c3650: 10400018 beq r2,r0,0x801c36b4             #       if (var_0x64 != 0) {
801c3654: 00000000 nop
801c3658: 0c04ed64 jal 0x8013b590
801c365c: 34040027 ori r4,r0,0x0027                 #           currentEventID = Get Script Variable (0x27);    //  0x27 = Current Event
801c3660: 00403021 addu r6,r2,r0                    #           currentEventID
801c3664: 3402005a ori r2,r0,0x005a
801c3668: 14c20006 bne r6,r2,0x801c3684
801c366c: 3402012a ori r2,r0,0x012a
                                                    #           if (currentEventID == 0x5a) {                       //  0x5a = Fort Zeakden end scene (End Ch. 1)
801c3670: 34040027 ori r4,r0,0x0027
801c3674: 0c04ed91 jal 0x8013b644                   #               Set Script Variable (0x27, 0x74);           //  0x74 = Ch. 2 Start Orbonne
801c3678: 34050074 ori r5,r0,0x0074
801c367c: 08070dbc j 0x801c36f0
801c3680: 00000000 nop                              
801c3684: 14c20006 bne r6,r2,0x801c36a0             #           } else if (currentEventID == 0x12a) {               //  0x12a = Riovanes Castle Ch.3 End (Ramza finds Pisces stone)
801c3688: 00000000 nop
801c368c: 34040027 ori r4,r0,0x0027
801c3690: 0c04ed91 jal 0x8013b644                   #               Set Script Variable (0x27, 0x148);          //  0x148 = Riovanes Castle Ch.3 End (Ramza/Rafa/Malak conversation)
801c3694: 34050148 ori r5,r0,0x0148
801c3698: 08070dbc j 0x801c36f0
801c369c: 00000000 nop                              #           } else {
801c36a0: 34040027 ori r4,r0,0x0027
801c36a4: 0c04ed91 jal 0x8013b644                   #               Set Script Variable (0x27, currentEventID + 1);
801c36a8: 24c50001 addiu r5,r6,0x0001
801c36ac: 08070dbc j 0x801c36f0
801c36b0: 00000000 nop                              
                                                    #           }
                                                    #       } else {
801c36b4: 3c028004 lui r2,0x8004
801c36b8: 904273a0 lbu r2,0x73a0(r2)                #           *0x800473a0
801c36bc: 00000000 nop
801c36c0: 1040000b beq r2,r0,0x801c36f0             #           if (*0x800473a0 != 0) {
801c36c4: 00000000 nop
801c36c8: 34040027 ori r4,r0,0x0027
801c36cc: 0c04ed91 jal 0x8013b644                   #               Set Script Variable (0x27, 1);          //  0x27 = Current Event
801c36d0: 34050001 ori r5,r0,0x0001
801c36d4: 34100001 ori r16,r0,0x0001                #               unitIndex = 1
                                                    #               do {
801c36d8: 0c0167f8 jal 0x80059fe0                   #                   Remove Unit from Party (unitIndex);
801c36dc: 02002021 addu r4,r16,r0
801c36e0: 26100001 addiu r16,r16,0x0001             #                   unitIndex = unitIndex + 1
801c36e4: 2a020014 slti r2,r16,0x0014
801c36e8: 1440fffb bne r2,r0,0x801c36d8             
801c36ec: 00000000 nop
                                                    #               } while (unitIndex < 20);
                                                    #           }
                                                    #       }
                                                    #   }
801c36f0: 3c018004 lui r1,0x8004
801c36f4: a02073a0 sb r0,0x73a0(r1)                 #   0x800473a0 = 0
801c36f8: 34040064 ori r4,r0,0x0064
801c36fc: 0c04ed91 jal 0x8013b644                   #   Set Script Variable (0x64, 0)               //  0x64 = Next Scenario? New Game?
801c3700: 00002821 addu r5,r0,r0
801c3704: 0c04ed64 jal 0x8013b590                   #   currentEventID = Get Script Variable (0x27);
801c3708: 34040027 ori r4,r0,0x0027                 
801c370c: 00409021 addu r18,r2,r0                   #   currentEventID
801c3710: 3c11801d lui r17,0x801d
801c3714: 2631f938 addiu r17,r17,-0x06c8            #   scenarioDataPtr = 0x801cf938                    //  Start of scenario data in ATTACK.OUT (0x10938)
801c3718: 00008021 addu r16,r0,r0                   #   count = 0
801c371c: 3c088005 lui r8,0x8005
801c3720: 2508e5d0 addiu r8,r8,-0x1a30              #   0x8004e5d0
801c3724: 26270012 addiu r7,r17,0x0012              #   scenarioDataPtr + 0x12
                                                    #   do {
801c3728: 90e2ffef lbu r2,-0x0011(r7)               #       highByte = *(scenarioDataPtr + 1)
801c372c: 92230000 lbu r3,0x0000(r17)               #       lowByte = *scenarioDataPtr
801c3730: 00021200 sll r2,r2,0x08                   #       highByte << 8
801c3734: 00623021 addu r6,r3,r2                    #       scenarioID = (highByte << 8) + lowByte      
801c3738: 10c0000f beq r6,r0,0x801c3778
801c373c: 26100001 addiu r16,r16,0x0001             #       count = count + 1
                                                    #       if (scenarioID == 0) break;
801c3740: 90e30002 lbu r3,0x0002(r7)                #       afterEventAction = *(scenarioDataPtr + 0x14)
801c3744: 90e40001 lbu r4,0x0001(r7)                #       nextScenarioID_highByte = *(scenarioDataPtr + 0x13)
801c3748: 90e50000 lbu r5,0x0000(r7)                #       nextScenarioID_lowByte = *(scenarioDataPtr + 0x12)
801c374c: 24e70018 addiu r7,r7,0x0018
801c3750: 00061040 sll r2,r6,0x01                   #       scenarioID * 2
801c3754: 00481021 addu r2,r2,r8                    #       (scenarioID * 2) + 0x8004e5d0
801c3758: 00031a00 sll r3,r3,0x08                   #       afterEventAction << 8
801c375c: 00042280 sll r4,r4,0x0a                   #       nextScenarioID_highByte << 10
801c3760: 00a42821 addu r5,r5,r4                    #       nextScenarioID_lowByte + (nextScenarioID_highByte << 10)
801c3764: 00651825 or r3,r3,r5                      #       (afterEventAction << 8) | (nextScenarioID_lowByte + (nextScenarioID_highByte << 10))
801c3768: a4430000 sh r3,0x0000(r2)                 #       *((scenarioID * 2) + 0x8004e5d0) = (afterEventAction << 8) | (nextScenarioID_lowByte + (nextScenarioID_highByte << 10))
801c376c: 2a0201f4 slti r2,r16,0x01f4
801c3770: 1440ffed bne r2,r0,0x801c3728
801c3774: 26310018 addiu r17,r17,0x0018             #       scenarioDataPtr = scenarioDataPtr + 24
                                                    #   } while (count < 0x1f4);
801c3778: 34108000 ori r16,r0,0x8000
801c377c: 3c018005 lui r1,0x8005
801c3780: a430e8f4 sh r16,-0x170c(r1)               #   *0x8004e8f4 = 0x8000
801c3784: 3c018005 lui r1,0x8005
801c3788: a420e8f2 sh r0,-0x170e(r1)                #   *0x8004e8f2 = 0
801c378c: 3c018005 lui r1,0x8005
801c3790: a420e8f6 sh r0,-0x170a(r1)                #   *0x8004e8f6 = 0
801c3794: 0c04ed64 jal 0x8013b590                   #   var_0x1fe = Get Script Variable (0x1fe);    // Next Random is World Debug Battle Style
801c3798: 340401fe ori r4,r0,0x01fe
801c379c: 10400007 beq r2,r0,0x801c37bc             #   if (var_0x1fe != 0) {
801c37a0: 34028200 ori r2,r0,0x8200
801c37a4: 3c018005 lui r1,0x8005
801c37a8: a430e8f0 sh r16,-0x1710(r1)               #       *0x8004e8f0 = 0x8000
801c37ac: 3c018005 lui r1,0x8005
801c37b0: a430e8f8 sh r16,-0x1708(r1)               #       *0x8004e8f8 = 0x8000
801c37b4: 08070df3 j 0x801c37cc
801c37b8: 00000000 nop                              #   } else {
801c37bc: 3c018005 lui r1,0x8005
801c37c0: a422e8f0 sh r2,-0x1710(r1)                #       *0x8004e8f0 = 0x8200
801c37c4: 3c018005 lui r1,0x8005
801c37c8: a422e8f8 sh r2,-0x1708(r1)                #       *0x8004e8f8 = 0x8200
                                                    #   }
801c37cc: 3c11801d lui r17,0x801d
801c37d0: 2631f938 addiu r17,r17,-0x06c8            #   scenarioDataPtr = 0x801cf938                    // Start of scenario data in ATTACK.OUT (0x10938)
801c37d4: 00008021 addu r16,r0,r0                   #   count = 0
                                                    #   do {
801c37d8: 92220001 lbu r2,0x0001(r17)               #       highByte = *(scenarioDataPtr + 1)
801c37dc: 92230000 lbu r3,0x0000(r17)               #       lowByte = *scenarioDataPtr
801c37e0: 00021200 sll r2,r2,0x08                   #       highByte << 8
801c37e4: 00623021 addu r6,r3,r2                    #       scenarioID = (highByte << 8) + lowByte
801c37e8: 10d20006 beq r6,r18,0x801c3804            #       if (scenarioID == currentEventID) break;
801c37ec: 00000000 nop
801c37f0: 10c00006 beq r6,r0,0x801c380c             #       if (scenarioID == 0) break;
801c37f4: 26100001 addiu r16,r16,0x0001             #       count = count + 1
801c37f8: 2a0201f4 slti r2,r16,0x01f4
801c37fc: 1440fff6 bne r2,r0,0x801c37d8
801c3800: 26310018 addiu r17,r17,0x0018             #       scenarioDataPtr = scenarioDataPtr + 24      // 24 == sizeof(scenario)
                                                    #   } while (count < 0x1f4);
801c3804: 14c00009 bne r6,r0,0x801c382c             #   if (scenarioID == 0) {
801c3808: 00000000 nop
801c380c: 34040030 ori r4,r0,0x0030
801c3810: 0c04ed91 jal 0x8013b644                   #       Set Script Variable (0x30, 0);          // Map Arrangement
801c3814: 00002821 addu r5,r0,r0
801c3818: 34040027 ori r4,r0,0x0027
801c381c: 08070eb2 j 0x801c3ac8                     #       Set Script Variable (0x27, 0);          // Current Event
801c3820: 00002821 addu r5,r0,r0                            return 0;
                                                    #   }
801c3824: 08070e5a j 0x801c3968
801c3828: a4800000 sh r0,0x0000(r4)
                                                    
801c382c: 3c028017 lui r2,0x8017                       
801c3830: 94423cb0 lhu r2,0x3cb0(r2)                #   *0x80173cb0
801c3834: 00000000 nop
801c3838: 24420001 addiu r2,r2,0x0001               #   *0x80173cb0 + 1
801c383c: 3c018017 lui r1,0x8017
801c3840: a4223cb0 sh r2,0x3cb0(r1)                 #   *0x80173cb0 = *0x80173cb0 + 1
801c3844: 0c070cea jal 0x801c33a8                   #  Load Halfword (ATTACK.OUT) (scenarioDataPtr);        // Value thrown away
801c3848: 02202021 addu r4,r17,r0
801c384c: 92220005 lbu r2,0x0005(r17)               #   scenarioDataPtr.musicChoice1
801c3850: 92340002 lbu r20,0x0002(r17)              #   scenarioDataPtr.mapID
801c3854: 92320003 lbu r18,0x0003(r17)              #   scenarioDataPtr.weatherAndObjects
801c3858: 92350004 lbu r21,0x0004(r17)              #   scenarioDataPtr.daytimeState
801c385c: 3c018016 lui r1,0x8016
801c3860: a42260a4 sh r2,0x60a4(r1)                 #   *0x801660a4 = scenarioDataPtr.musicChoice1
801c3864: 92220006 lbu r2,0x0006(r17)               #   scenarioDataPtr.musicChoice2
801c3868: 3c018016 lui r1,0x8016
801c386c: a42260a6 sh r2,0x60a6(r1)                 #   *0x801660a6 = scenarioDataPtr.musicChoice2
801c3870: 0c070cea jal 0x801c33a8                   #   ENTD_ID = Load Halfword (ATTACK.OUT) (scenarioDataPtr + 7);
801c3874: 26240007 addiu r4,r17,0x0007
801c3878: 26240009 addiu r4,r17,0x0009
801c387c: 00021400 sll r2,r2,0x10
801c3880: 0c070cea jal 0x801c33a8                   #   squadID1 = Load Halfword (ATTACK.OUT) (scenarioDataPtr + 9);
801c3884: 00029c03 sra r19,r2,0x10                  #   ENTD_ID
801c3888: 2624000b addiu r4,r17,0x000b
801c388c: 00021400 sll r2,r2,0x10
801c3890: 00021403 sra r2,r2,0x10
801c3894: 0c070cea jal 0x801c33a8                   #   squadID2 = Load Halfword (ATTACK.OUT) (scenarioDataPtr + 11);
801c3898: afa20010 sw r2,0x0010(r29)                #   squadID1
801c389c: 00021400 sll r2,r2,0x10
801c38a0: 00021403 sra r2,r2,0x10
801c38a4: afa20014 sw r2,0x0014(r29)                #   squadID2
801c38a8: 9222000d lbu r2,0x000d(r17)               #   scenarioDataPtr.portraitID
801c38ac: 00008021 addu r16,r0,r0                   #   count = 0
801c38b0: 3c018005 lui r1,0x8005
801c38b4: a022d9ac sb r2,-0x2654(r1)                #   *0x8004d9ac = scenarioDataPtr.portraitID
801c38b8: 9222000e lbu r2,0x000e(r17)               #   scenarioDataPtr.unitID
801c38bc: 3c018005 lui r1,0x8005
801c38c0: a022d954 sb r2,-0x26ac(r1)                #   *0x8004d954 = scenarioDataPtr.unitID
801c38c4: 0c070cea jal 0x801c33a8                   #   braveStoryENTD = Load Halfword (ATTACK.OUT) (scenarioDataPtr + 15);
801c38c8: 2624000f addiu r4,r17,0x000f
801c38cc: 00021400 sll r2,r2,0x10
801c38d0: 00021403 sra r2,r2,0x10
801c38d4: afa2001c sw r2,0x001c(r29)                #   braveStoryENTD
801c38d8: 92360011 lbu r22,0x0011(r17)              #   scenarioDataPtr.ramzaMandatoryFlag
801c38dc: 0c070cea jal 0x801c33a8                   #   Load Halfword (ATTACK.OUT) (scenarioDataPtr + 18);      // Value thrown away
801c38e0: 26240012 addiu r4,r17,0x0012
801c38e4: 0c070cea jal 0x801c33a8                   #   Load Halfword (ATTACK.OUT) (scenarioDataPtr + 20);      // Value thrown away
801c38e8: 26240014 addiu r4,r17,0x0014
801c38ec: 0c070cea jal 0x801c33a8                   #   eventScriptID = Load Halfword (ATTACK.OUT) (scenarioDataPtr + 22); 
801c38f0: 26240016 addiu r4,r17,0x0016
801c38f4: 3c048004 lui r4,0x8004
801c38f8: 248475e0 addiu r4,r4,0x75e0               #   storeConditionalOffsetPtr = 0x800475e0
801c38fc: 00021400 sll r2,r2,0x10
801c3900: 000213c3 sra r2,r2,0x0f                   #   eventScriptID * 2
801c3904: 3c01801d lui r1,0x801d
801c3908: 00220821 addu r1,r1,r2
801c390c: 94233938 lhu r3,0x3938(r1)                #   blockOffsetPtr = *(0x801d3938 + (eventScriptID * 2))         
801c3910: 3c07801d lui r7,0x801d
801c3914: 24e73938 addiu r7,r7,0x3938               #   baseBlockPtr = 0x801d3938                               // Start of block pointer data in ATTACK.OUT (0x14938)
801c3918: 00031c00 sll r3,r3,0x10
801c391c: 00031403 sra r2,r3,0x10                   #   blockOffsetPtr = blockOffsetPtr << 16 >> 16             // Sign extension
801c3920: 00031fc2 srl r3,r3,0x1f                   #   (blockOffsetPtr >> 31)
801c3924: 00431021 addu r2,r2,r3                    #   blockOffsetPtr + (blockOffsetPtr >> 31)
801c3928: 00021043 sra r2,r2,0x01                   #   (blockOffsetPtr + (blockOffsetPtr >> 31)) / 2
801c392c: 00021040 sll r2,r2,0x01                   #   offset = ((blockOffsetPtr + (blockOffsetPtr >> 31)) / 2) * 2
801c3930: 00471821 addu r3,r2,r7                    #   conditionalOffsetPtr = baseBlockPtr + offset
801c3934: 84660000 lh r6,0x0000(r3)                 #   firstConditionalOffset = *conditionalOffsetPtr
                                                    #   do {
801c3938: 94620000 lhu r2,0x0000(r3)                #       conditionalOffset = *conditionalOffsetPtr
801c393c: 00000000 nop
801c3940: 00461023 subu r2,r2,r6                    #       conditionalOffset - firstConditionalOffset
801c3944: a4820000 sh r2,0x0000(r4)                 #       *storeConditionalOffsetPtr = conditionalOffset - firstConditionalOffset
801c3948: 84620000 lh r2,0x0000(r3)                 #       conditionalOffset = *conditionalOffsetPtr
801c394c: 00000000 nop
801c3950: 1040ffb4 beq r2,r0,0x801c3824             
801c3954: 24630002 addiu r3,r3,0x0002               #       conditionalOffsetPtr = conditionalOffsetPtr + 2
                                                    #       if (conditionalOffset == 0) { *storeConditionalOffsetPtr = 0; break; }
801c3958: 26100001 addiu r16,r16,0x0001             #       count = count + 1
801c395c: 2a020010 slti r2,r16,0x0010
801c3960: 1440fff5 bne r2,r0,0x801c3938
801c3964: 24840002 addiu r4,r4,0x0002               #       storeConditionalOffsetPtr = storeConditionalOffsetPtr + 2
                                                    #   } while (count < 16);
801c3968: 00008021 addu r16,r0,r0                   #   count = 0
801c396c: 3c088004 lui r8,0x8004
801c3970: 250875e0 addiu r8,r8,0x75e0               #   baseConditionalOffsetPtr = 0x800475e0
801c3974: 3c058005 lui r5,0x8005
801c3978: 24a59a18 addiu r5,r5,-0x65e8              #   storeConditionalDataPtr = 0x80049a18
                                                    #   do {
801c397c: 85020000 lh r2,0x0000(r8)                 #       baseConditionalOffset = *baseConditionalOffsetPtr
801c3980: 00102040 sll r4,r16,0x01                  #       count * 2
801c3984: 00461021 addu r2,r2,r6                    #       conditionalOffset = baseConditionalOffset + firstConditionalOffset
801c3988: 00021fc2 srl r3,r2,0x1f                   #       conditionalOffset >> 31
801c398c: 00431021 addu r2,r2,r3                    #       conditionalOffset + (conditionalOffset >> 31)
801c3990: 00021043 sra r2,r2,0x01                   #       (conditionalOffset + (conditionalOffset >> 31)) / 2
801c3994: 00021040 sll r2,r2,0x01                   #       conditionalOffset = ((conditionalOffset + (conditionalOffset >> 31)) / 2) * 2
801c3998: 00471021 addu r2,r2,r7                    #       conditionalOffset + baseBlockPtr
801c399c: 00822021 addu r4,r4,r2                    #       (count * 2) + (conditionalOffset + baseBlockPtr)
801c39a0: 94820000 lhu r2,0x0000(r4)                #       conditionalDataOffset = *((count * 2) + (conditionalOffset + baseBlockPtr))
801c39a4: 26100001 addiu r16,r16,0x0001             #       count = count + 1
801c39a8: a4a20000 sh r2,0x0000(r5)                 #       *storeConditionalDataPtr = conditionalDataOffset
801c39ac: 2a020100 slti r2,r16,0x0100
801c39b0: 1440fff2 bne r2,r0,0x801c397c
801c39b4: 24a50002 addiu r5,r5,0x0002               #       storeConditionalDataPtr = storeConditionalDataPtr + 2
                                                    #   } while (count < 256);
801c39b8: 00008821 addu r17,r0,r0                   #   numSquads = 0
801c39bc: 00008021 addu r16,r0,r0                   #   count = 0
801c39c0: 27a30010 addiu r3,r29,0x0010              #   squadIDPtr = sp + 16      
                                                    #   do {
801c39c4: 8c620000 lw r2,0x0000(r3)                 #       *squadIDPtr
801c39c8: 00000000 nop
801c39cc: 10400002 beq r2,r0,0x801c39d8
801c39d0: 24630004 addiu r3,r3,0x0004               #       squadIDPtr = squadIDPtr + 4
                                                    #       if (*squadIDPtr != 0) {
801c39d4: 26310001 addiu r17,r17,0x0001             #           numSquads = numSquads + 1
                                                    #       }
801c39d8: 26100001 addiu r16,r16,0x0001             #       count = count + 1
801c39dc: 2a020002 slti r2,r16,0x0002
801c39e0: 1440fff8 bne r2,r0,0x801c39c4
801c39e4: 34040033 ori r4,r0,0x0033
                                                    #   } while (count < 2);
801c39e8: 0c04ed91 jal 0x8013b644                   #   Set Script Variable (0x33, scenarioDataPtr.mapID);                      //  Current map
801c39ec: 02802821 addu r5,r20,r0
801c39f0: 34040030 ori r4,r0,0x0030
801c39f4: 0c04ed91 jal 0x8013b644                   #   Set Script Variable (0x30, scenarioDataPtr.weatherAndObjects >> 4);     //  Map Arrangement
801c39f8: 00122902 srl r5,r18,0x04
801c39fc: 34040023 ori r4,r0,0x0023
801c3a00: 0c04ed91 jal 0x8013b644                   #   Set Script Variable (0x30, scenarioDataPtr.weatherAndObjects & 0x0f);   //  Weather
801c3a04: 3245000f andi r5,r18,0x000f
801c3a08: 34040024 ori r4,r0,0x0024
801c3a0c: 0c04ed91 jal 0x8013b644                   #   Set Script Variable (0x24, scenarioDataPtr.daytimeState);               //  Map State
801c3a10: 02a02821 addu r5,r21,r0
801c3a14: 1260000a beq r19,r0,0x801c3a40            #   if (ENTD_ID != 0) {
801c3a18: 00000000 nop
801c3a1c: 0c04ed64 jal 0x8013b590                   #       var_0x1fc = Get Script Variable (0x1fc);
801c3a20: 340401fc ori r4,r0,0x01fc
801c3a24: 10400004 beq r2,r0,0x801c3a38             
801c3a28: 34040032 ori r4,r0,0x0032                 #       variable = 0x32                     //  Current ENTD
                                                    #       if (var_0x1fc != 0) {
801c3a2c: 8fa5001c lw r5,0x001c(r29)                #           value = braveStoryENTD
801c3a30: 08070e97 j 0x801c3a5c
801c3a34: 00000000 nop
                                                    #       } else {
801c3a38: 08070e97 j 0x801c3a5c
801c3a3c: 02602821 addu r5,r19,r0                   #           value = ENTD_ID
                                                    #       }
                                                    #   } else {
801c3a40: 0c04ed64 jal 0x8013b590                   #       var_0x68 = Get Script Variable (0x68);     //  Randomized Deep Dungeon Exit ID
801c3a44: 34040068 ori r4,r0,0x0068
801c3a48: 28420005 slti r2,r2,0x0005                #       if (var_0x68 >= 5) {
801c3a4c: 14400006 bne r2,r0,0x801c3a68
801c3a50: 34040034 ori r4,r0,0x0034
801c3a54: 34040068 ori r4,r0,0x0068                 #           variable = 0x68
801c3a58: 00002821 addu r5,r0,r0                    #           value = 0
                                                    #       }
                                                    #   }
                                                    #   if ((ENTD_ID != 0) or (var_0x68 >= 5)) {
801c3a5c: 0c04ed91 jal 0x8013b644                   #       Set Script Variable (variable, value);
801c3a60: 00000000 nop
801c3a64: 34040034 ori r4,r0,0x0034 
                                                    #   }
801c3a68: 3c018004 lui r1,0x8004
801c3a6c: ac2059dc sw r0,0x59dc(r1)                 #   *0x800459dc = 0
801c3a70: 0c04ed91 jal 0x8013b644                   #   Set Script Variable (0x34, numSquads);      //  0x34 = Number of Squads
801c3a74: 02202821 addu r5,r17,r0
801c3a78: 34040039 ori r4,r0,0x0039
801c3a7c: 0c04ed91 jal 0x8013b644                   #   Set Script Variable (0x39, 0);              //  0x39 = (Overwritten on new event?)
801c3a80: 00002821 addu r5,r0,r0
801c3a84: 8fa50010 lw r5,0x0010(r29)                #   squadID1
801c3a88: 00000000 nop
801c3a8c: 10a00011 beq r5,r0,0x801c3ad4             #   if (squadID1 == 0) return 1;
801c3a90: 34020001 ori r2,r0,0x0001
801c3a94: 0c04ed91 jal 0x8013b644                   #   Set Script Variable (0x35, squadID1);       //  0x35 = Squad #1 ID
801c3a98: 34040035 ori r4,r0,0x0035
801c3a9c: 8fa50014 lw r5,0x0014(r29)
801c3aa0: 0c04ed91 jal 0x8013b644                   #   Set Script Variable (0x36, squadID2);       //  0x36 = Squad #2 ID
801c3aa4: 34040036 ori r4,r0,0x0036
801c3aa8: 34040037 ori r4,r0,0x0037
801c3aac: 0c04ed91 jal 0x8013b644                   #   Set Script Variable (0x37, 0);              
801c3ab0: 00002821 addu r5,r0,r0
801c3ab4: 34040038 ori r4,r0,0x0038
801c3ab8: 0c04ed91 jal 0x8013b644                   #   Set Script Variable (0x38, 0);
801c3abc: 00002821 addu r5,r0,r0
801c3ac0: 340401ff ori r4,r0,0x01ff
801c3ac4: 02c02821 addu r5,r22,r0
801c3ac8: 0c04ed91 jal 0x8013b644                   #   Set Script Variable (0x01ff, scenarioDataPtr.ramzaMandatoryFlag);
801c3acc: 00000000 nop
801c3ad0: 00001021 addu r2,r0,r0                    #   return 0;
801c3ad4: 8fbf0044 lw r31,0x0044(r29)
801c3ad8: 8fb60040 lw r22,0x0040(r29)
801c3adc: 8fb5003c lw r21,0x003c(r29)
801c3ae0: 8fb40038 lw r20,0x0038(r29)
801c3ae4: 8fb30034 lw r19,0x0034(r29)
801c3ae8: 8fb20030 lw r18,0x0030(r29)
801c3aec: 8fb1002c lw r17,0x002c(r29)
801c3af0: 8fb00028 lw r16,0x0028(r29)
801c3af4: 27bd0048 addiu r29,r29,0x0048
801c3af8: 03e00008 jr r31
801c3afc: 00000000 nop