Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- inject @ 80265220
- .macro branchl reg, address
- lis \reg, \address @h
- ori \reg,\reg,\address @l
- mtctr \reg
- bctrl
- .endm
- .macro branch reg, address
- lis \reg, \address @h
- ori \reg,\reg,\address @l
- mtctr \reg
- bctr
- .endm
- .macro load reg, address
- lis \reg, \address @h
- ori \reg, \reg, \address @l
- .endm
- .macro loadf regf,reg,address
- lis \reg, \address @h
- ori \reg, \reg, \address @l
- stw \reg,-0x4(sp)
- lfs \regf,-0x4(sp)
- .endm
- .macro backup
- stwu r1,-68(r1) # make space for 12 registers
- stmw r20,8(r1) # push r20-r31 onto the stack
- mflr r0
- stw r0,64(sp)
- .endm
- .macro restore
- lwz r0,64(sp)
- mtlr r0
- lmw r20,8(r1) # pop r20-r31 off the stack
- addi r1,r1,68 # release the space
- .endm
- .macro intToFloat reg,reg2
- xoris \reg,\reg,0x8000
- lis r18,0x4330
- lfd f16,-0x7470(rtoc) # load magic number
- stw r18,0(r2)
- stw \reg,4(r2)
- lfd \reg2,0(r2)
- fsubs \reg2,\reg2,f16
- .endm
- .set ActionStateChange,0x800693ac
- .set HSD_Randi,0x80380580
- .set HSD_Randf,0x80380528
- .set Wait,0x8008a348
- .set Fall,0x800cc730
- .set entity,31
- .set player,31
- #ffa rq done
- #ffa end
- #team rq
- #team end
- backup
- ######################
- #CHECK FOR NO CONTEST#
- ######################
- load r3,0x80452c6c
- lwz r3,0x0(r3)
- cmpwi r3,0x0 #check camera type, 1 = no contest
- beq gameEndedNormally
- noContest:
- load r3,0x8046b6a1 #get player who ragequit
- lbz r30,0(r3) #player who ragequit in r30
- checkForTeam:
- load r3,0x80479da8
- lbz r3,0x2(r3)
- cmpwi r3,0x1
- beq TeamQuit
- #***************************************************#
- ####################
- #FFA RAGE QUIT LOOP#
- ####################
- FFA:
- load r4,0x80453080 #r3 = player block BA
- #this loops once for each block
- playerBlockCheck:
- lwz r0, 0(r4)
- cmpwi r0, 0 #an inactive player block will store "0" at offset 0x0
- beq+ nextPlayerBlock #so only check active players
- lbz r0, 0x45(r4) #check player number
- cmpw r0,r30 #compare loaded player to ragequitter
- beq+ nextPlayerBlock #if equal, move on to next player
- mr r3,r0 #if not ragequitter, declare him winner
- subi r4,rtoc,0xdd4
- li r0,0x0
- stw r0,0x0(r4) #zero flags
- li r0,0x1
- stbx r0,r3,r4 #set winner
- b exit
- nextPlayerBlock:
- addi r4, r4, 0xe90 #blocks are 0xe90 in length
- b playerBlockCheck
- ################
- #TEAM RAGE QUIT#
- ################
- TeamQuit:
- mulli r3,r30,168 #get offset
- load r28,0x80479da4 #players match data start
- add r3,r3,r28 #get players match data
- lbz r3,0x5F(r3) #get quitters team ID
- mr r31,r3 #backup quitter ID to r31
- subi r27,rtoc,0xdd4
- li r0,0x0
- stw r0,0x0(r27) #zero flags
- li r29,0x0 #set loop count
- TeamRQLoop:
- mr r3,r29
- branchl r14,0x8003241c #branch to PlayerBlock_LoadSlotType
- cmpwi r3,0x3 #check if slot is empty
- beq TeamRQIncrement
- mulli r3,r29,168 #get offset
- add r3,r3,r28 #get players match data
- lbz r3,0x5F(r3) #get players team ID
- cmpw r3,r31 #check if same as quitter
- beq TeamRQIncrement
- li r0,1
- stbx r0,r29,r27 #store 1 for person not on quitters team
- TeamRQIncrement:
- addi r29,r29,1
- cmpwi r29,0x4
- blt TeamRQLoop
- b exit
- #***************************************************#
- ############
- #NORMAL END#
- ############
- gameEndedNormally:
- load r3,0x80479da8
- lbz r3,0x2(r3)
- cmpwi r3,0x1
- beq teamEnd
- #########
- #FFA END#
- #########
- ffaEnd:
- subi r27,rtoc,0xdd4
- li r0,0x0
- stw r0,0x0(r27) #zero flags
- load r28,0x80479da4 #players match data start
- li r29,0x0 #loop count init
- ffaEndLoop:
- mr r3,r29
- branchl r14,0x8003241c #branch to PlayerBlock_LoadSlotType
- cmpwi r3,0x3 #check if slot is empty
- beq ffaLost
- mulli r3,r29,168 #get offset
- add r3,r3,r28 #get players match data
- lbz r3,0x5D(r3) #check if player won
- cmpwi r3,0x0 #check if player won
- bne ffaLost
- li r0,1
- stbx r0,r29,r27 #store 1 for person on winning team
- ffaLost:
- addi r29,r29,1
- cmpwi r29,0x4
- blt ffaEndLoop
- b exit
- ##########
- #TEAM END#
- ##########
- teamEnd:
- subi r27,rtoc,0xdd4
- li r0,0x0
- stw r0,0x0(r27) #zero flags
- load r28,0x80479da4 #players match data start
- li r29,0x0 #loop count init
- TeamEndLoop:
- mr r3,r29
- branchl r14,0x8003241c #branch to PlayerBlock_LoadSlotType
- cmpwi r3,0x3 #check if slot is empty
- beq teamLost
- mulli r3,r29,168 #get offset
- add r3,r3,r28 #get players match data
- lbz r3,0x5F(r3) #get team ID
- mulli r3,r3,0xC #get team win offset
- add r3,r3,r28
- lbz r3,0x24(r3) #get team win value
- cmpwi r3,0x0 #1 = lost
- bne teamLost
- li r0,1
- stbx r0,r29,r27 #store 1 for person on winning team
- teamLost:
- addi r29,r29,1
- cmpwi r29,0x4
- blt TeamEndLoop
- b exit
- #***************************************************#
- exit:
- restore
- addi r3, r30, 12
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement