• Welcome to Smashboards, the world's largest Super Smash Brothers community! Over 250,000 Smash Bros. fans from around the world have come to discuss these great games in over 19 million posts!

    You are currently viewing our boards as a visitor. Click here to sign up right now and start on your path in the Smash community!

Completed Winner's Name is Gold on CSS v1.0

UnclePunch

Smash Ace
Joined
Nov 9, 2014
Messages
673
The code is so long because of how accurate it is. It catches 4 cases; a Free-For-All ending normally, a Free-For-All ending with an LRA Start, a doubles match ending normally, and a doubles match ending with an LRA Start. In the case of doubles, all players' names on the winning team are highlighted.

https://streamable.com/4mr4j

Code:
$Winner's Name = Gold v1.0 [UnclePunch]
C216EA38 0000003E
9421FFBC BE810008
7C0802A6 90010040
3C608045 60632C6C
80630000 2C030000
418200D8 3C608046
6063B6A1 8BC30000
3C608047 60639DA8
88630002 2C030001
41820048 3C808045
60843080 80040000
2C000000 41A2002C
88040045 7C00F000
41A20020 7C030378
3882F22C 38000000
90040000 38000001
7C0321AE 4800015C
38840E90 4BFFFFC8
1C7E00A8 3F808047
639C9DA4 7C63E214
8863005F 7C7F1B78
3B62F22C 38000000
901B0000 3BA00000
7FA3EB78 3DC08003
61CE241C 7DC903A6
4E800421 2C030003
41820020 1C7D00A8
7C63E214 8863005F
7C03F800 4182000C
38000001 7C1DD9AE
3BBD0001 2C1D0004
4180FFC0 480000E4
3C608047 60639DA8
88630002 2C030001
41820064 3B62F22C
38000000 901B0000
3F808047 639C9DA4
3BA00000 7FA3EB78
3DC08003 61CE241C
7DC903A6 4E800421
2C030003 41820020
1C7D00A8 7C63E214
8863005D 2C030000
4082000C 38000001
7C1DD9AE 3BBD0001
2C1D0004 4180FFC0
48000070 3B62F22C
38000000 901B0000
3F808047 639C9DA4
3BA00000 7FA3EB78
3DC08003 61CE241C
7DC903A6 4E800421
2C030003 4182002C
1C7D00A8 7C63E214
8863005F 1C63000C
7C63E214 88630024
2C030000 4082000C
38000001 7C1DD9AE
3BBD0001 2C1D0004
4180FFB4 48000004
80010040 7C0803A6
BA810008 38210044
387E000C 00000000
C2265220 00000006
3882F22C 7C1D20AE
2C000001 40820018
807B0000 8063005C
3C80FFDE 6084000E
90830006 880DB655
60000000 00000000
https://pastebin.com/bv1ZAhbu
Code:
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
 
Last edited:
Top Bottom