• 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!

Important Melee, Hacks, and You -- New Hackers Start Here, in the OP!

VietGeek

Smash Hero
Joined
Mar 19, 2008
Messages
8,133
I tried to with Kirby and Puff and it's blocked off by invisible forces of the gods.

obv :012:
 

Milun

Smash Ace
Joined
Oct 29, 2009
Messages
516
Location
Australia
Hm... hey guys I think I need to rework it. Apparently, the ceiling is too low.

I've already got one request to make it higher because "i can go on the highest platform with Fox, and gimp someone at 0%".

Anybody else agree with this?
 

VietGeek

Smash Hero
Joined
Mar 19, 2008
Messages
8,133
Well ignoring the hyperbole, it does seems uncharacteristically low compared to any other stage in-game. So maybe a tad higher, and perhaps make it so the camera doesn't pan out quite so much when people are sent flying upward: it ruins the illusion that they're being sent faraway. ^^
 

Milun

Smash Ace
Joined
Oct 29, 2009
Messages
516
Location
Australia
Hm... very well. Less pan, more room. I'll get onto it as soon as I can.

EDIT: Ok, the links have been updated with the higher ceilings and lower camera.

And, coming not so soon:


Now, will you guys complain about the left side?
 

SypherPhoenix

Smash Lord
Joined
Feb 12, 2007
Messages
1,563
Location
Fairfax, VA
Sypher, I saw that you added the floats for pikachu's self-hit range on thunder. You have horizontal, vertical, and then you also have one that's labelled the range. I think it's actually X axis of range, Y axis of range, and size of range.
This makes a lot more sense, I couldn't figure out how they interacted, I had tunnel vision on them being modifiers to the range. If you've tested this successfully you should go ahead and change it.
 

phish-it

Smash Champion
Joined
Apr 4, 2004
Messages
2,096
Location
Mahopac, NY
Aside from the obvious issues I don't think it really needs anything. It's simple but different from the other neutral stages we have now. I'm liking the floating metal beam platform too.
 

Milun

Smash Ace
Joined
Oct 29, 2009
Messages
516
Location
Australia
You sure? Because the platform has a tendency to move in an irregular fashion (when it's on the left, it's lower than when it's on the right. I've been trying to fix it with little success).

In other news:



http://youtu.be/DKt8y-Ixors
 

Akorax

Smash Rookie
Joined
Jun 9, 2012
Messages
8
^ Now thats more like it! Great work on the stage! Some music and a new skin and its done! :D
 

Milun

Smash Ace
Joined
Oct 29, 2009
Messages
516
Location
Australia
Thanks! I'll leave that textures and music up to the individuals preferences though, it's not really my department.
 

iffy525

Smash Apprentice
Joined
Aug 30, 2011
Messages
135
This doesn't have to do with Melee exclusively, but has anyone got dios mios lite 2.2 to work? I can't get any games to load, just a blank screen.

If I need an older version, can you guys upload it? They don't offer older downloads on their project page.
 

n0ne

Smash Ace
Joined
Jan 25, 2009
Messages
509
Location
Toronto, Ontario
i DID get it to work with v2.2, but was a pain in the butt, and only did this AFTER FINALLY finding v2.0 which was a bit less troublesome to load isos.. always got stuck on black screen after choosing ISO to load.

btw, since, 2.0, its not "Lite" anymore
u can PM me ur email and ill send the 2.0 wad your way.

ALSO, i found this important, on Dios Mios, if songs from hacked melee (the longer songs) are played on a stage, if u take too long on a fight , and it loops once, after u win a match and screen says GAME, the wii will hang, controller vibrating and all.

Why would this be? anyone shed some light?

And one last thing, does anyone do any song hack requests? other threads look dead, and i never learned to hack audio files

edit: iffy525, try another format config, or try another flash memory or sd card too. ive only successfully made two of my usb storage devices working, others are stubborn.
 

Steelia

Smash Champion
Joined
Sep 23, 2007
Messages
2,523
Location
Home.
DIOS MIOS Booter is just too glitchy right now... I'd recommend using DIOS MIOS Lite v1.4, if you have a working high-speed SD Card.

And I've heard anything above DM Booter v2.0 is extremely glitchy, and prone to more crashes than usual; I think even some other forums recommended sticking with v2.0 until further notice.
 

RaphaelRobo

Smash Champion
Joined
Oct 24, 2011
Messages
2,833
Right now I'm using Dios Mios (not lite) 2.2 and USB Loader GX r1200.

Playing with HQ textures is pretty awesome. It's not as awesome as on my laptop (which can emulate Melee in 1080p), but it's still pretty awesome.
 

n0ne

Smash Ace
Joined
Jan 25, 2009
Messages
509
Location
Toronto, Ontario
steelia, dios mios lite 1.4 is better than 1.5? didnt know that. also, i hate that dios mios , lite or 2.0, breaks my gc backup launching capability. more work needs to be put on this.

edit, whats the best tutorial for music hacking right now? i never understood the one on the 1st page

Edit2: has Pokemon stadium staying only on neutral been achieved yet?
 

Milun

Smash Ace
Joined
Oct 29, 2009
Messages
516
Location
Australia
Also, someone managed to actually non-AR hack it to stay that way last year. No idea what happened to them or their hack though.
 

Magus420

Smash Master
Joined
Dec 13, 2003
Messages
4,541
Location
Close to Trenton, NJ Posts: 4,071
How to Add New Commands to Actions/Subactions

There are 2 ways I know to do this. You can replace a command with a subroutine (14000000 POINTERR) to direct to the old command + new commands (an injection), or change the pointer for the action/subaction command list to redirect to a different list of commands entirely. Currently, I'd say do the latter for reasons I'll explain down below. The header of the files are 0x20 long (brawl's are 0x80), so in a hex editor pointers are 0x20 less than where they are located within the editor.



The Commands

Around the 0x6000-0x8000 area there's (always?) a bunch of empty space (zeroes) that appears to be safe to use. Write the new commands here, ending with 00000000 to terminate the command list (though there's already 0s there anyway).

If it's somehow possible to replace dats with dats that are larger filesize than the originals (didn't let me with GC-Tool) and also not cause problems when loaded, you could instead add them to the end of the file, and update the file's byte count at the very start of the file to match. Doing this would also allow freely adding entries to the pointer table at the end of the file which will again be explained below, allowing you to add new subroutines and gotos to the file.


About Pointers and The Pointer Table

Everything in the file that is a pointer to somewhere else within the .dat needs to be in this table (in order!) at the end of the file. This table is a list of offsets in the file that upon loading the file into memory will add the file's starting location (excluding the header length) in ram to the pointer's offset, turning the file's pointers into something the game can use. Accessing something like 00002800 in ram instead of 80D02800 (if the file were loaded into 80D00000) would obviously crash the game.


Changing the Action/Subaction Command List Pointer

Figure out where the list of commands begin in the file by copying the HexString from the commands and searching for it (would be nice if MasterHand just showed the address like PSA...). Then once you've located the start of the commands in the editor subtract 0x20 from that (header is 0x20), and search the file for that address with zeroes before it like: 00014268 instead of 14268. First one you find that isn't preceded by a 14000000 (subroutine) or 1C000000 (goto) should be the pointer for the action/subaction's commands. Edit this to be the starting offset where you wrote the new list of commands minus 0x20 so the action/subaction now goes to the newly created command list. You can confirm if you did it right by checking it in MH.


Updating the Pointer Table

This is only needed if within the new command list you are including subroutine and/or goto commands (stuff with pointers in it), or if injecting a subroutine into an existing list of commands. Without being able to use larger filesize dats, you won't be able to add new subroutines or gotos, but you can move existing ones (already have space to use in the pointer table) to new command lists.

If say a subroutine command is: 14000000 00004190, the pointer is the 00004190 which is what you want to determine the offset of in the file (go by the start of the whole word 00004190 not 4190). Find the offset of it in the file and subtract 0x20. Say the 14000000 00004190 is located at 4A80, the pointer is at 4A84 which would then be 4A64.

Then search the pointer table at the end of the file for that offset with zeroes filling it out (4A64 -> 00004A64). You will need to remove this entry (reducing the filesize by 0x4), then insert the new pointer entry (adding 0x4 back into the file) to its appropriate location within the table to fit within order of the other entries. Say the new location of your subroutine's pointer in the new command list is located at 00007030 (00007010 after subtracting 0x20), you'll delete the 00004A64, then go down in the table to insert 00007010 into the proper spot in the list (maybe between 00006FEC and 00007124 or something).

Now when the file is loaded it updates the new subroutine command's pointer to a mem address instead of the old and now unused subroutine's pointer.
 

RaphaelRobo

Smash Champion
Joined
Oct 24, 2011
Messages
2,833
Also, someone managed to actually non-AR hack it to stay that way last year. No idea what happened to them or their hack though.
I know there's a non-transforming PS in the super mega ultra texture pack, but I've never tried it.
 

Steelia

Smash Champion
Joined
Sep 23, 2007
Messages
2,523
Location
Home.
steelia, dios mios lite 1.4 is better than 1.5? didnt know that. also, i hate that dios mios , lite or 2.0, breaks my gc backup launching capability. more work needs to be put on this.

edit, whats the best tutorial for music hacking right now? i never understood the one on the 1st page

Edit2: has Pokemon stadium staying only on neutral been achieved yet?
1.5 of DML kept freezing to a black screen, or wouldn't load the game at all for me. Not sure why it kept doing that, so I reverted to the next previous version (1.4a or 1.4b, I forget which one).

As for Pokemon Stadium...
http://www.smashboards.com/showthread.php?t=296527
There. You edit the "Start.dol" file, located in the "&&SystemData" folder in SSBM. It requires the changing of some hex, but it's really easy to do, and should be very simple to find. All you need to know is what version of SSBM you have. (:

And as for audio... how's this work?
http://www.smashboards.com/showthread.php?t=285042
 

RaphaelRobo

Smash Champion
Joined
Oct 24, 2011
Messages
2,833
I did some music hacking once. It sounds complicated, but it's pretty easy. The only hard part is getting the loops to sound good.
 

VietGeek

Smash Hero
Joined
Mar 19, 2008
Messages
8,133
Yeah, but some characters appear to have more free space than others.

Around this area is also some values that control stuff like transition frames from squatting -> squat and empty landing lag frames. I tried an "empty area" of Mewtwo's .dat and I got some weird looking animations. Of course I just relocated and things turned out fine.
 

Magus420

Smash Master
Joined
Dec 13, 2003
Messages
4,541
Location
Close to Trenton, NJ Posts: 4,071
Animation Engine

This DOL injectable code I created will allow you to modify the animation speed for characters based on the character (or wildcard/character independent), the current animation frame, and current action or subaction. You could for example make Bowser's d-tilt play at 1.4x speed during frames 1-14, making it hit on frame 10 instead of 14.


Code:
SSBM v1.00

17A0        DOL - Injected Function (Animation Engine)
19D0        DOL - Frame Speed Mod (FSM) Entries
6FDA4       DOL - ASM Injection Point

800047A0    RAM - Injected Function (Animation Engine)
800049D0    RAM - Frame Speed Mod (FSM) Entries
800731C4    RAM - ASM Injection Point


@17A0 (1.00 DOL - Injected Function)
7F63DB78 8BE3006C
3FA08045 63BD10C4
1FFF0E90 7FFDFA14
809F0000 8BFF0008
2C040013 4182001C
2C040012 40A20020
2C1F0001 40A20018
38800013 48000010
2C1F0001 40A20008
38800012 C03E0894
FC20081E D8220000
80A20004 80C30070
80E30074 60E78000
3FE08000 63FF49C8
87BF0008 2C1D0000
41820060 57BC463E
2C1C00FF 41820014
7C1C2000 4182000C
41810048 4BFFFFDC
57BC863E 7C1C2800
41A1FFD0 57BC043E
7C1C3000 4182000C
7C1C3800 4082FFBC
839F0004 2C1CFFFF
41820018 C03F0004
3FE08006 63FFF034
7FE803A6 4E800021
BB610014 4806E94C


This is where the flow of code is modified to be redirected to at the end of an update animation frame and script timers function that runs each frame. It checks character ID, current animation frame, current action, and current subaction against a list of entries with these paired with floats that will modify animation speed when they match. With a match the code is then branched to a function that modifies animation speed for aerial/special landings (can be hijacked just fine for anything though) that is fed the float from the FSM entry, applied, then returns to the custom function before returning to after the original injection point.

It's written to a location in the dol that appears to be unused and unread by the game.


Code:
mr	r3,r27		[GET CHARACTER ID] moves an index address into r3 needed in function
lbz	r31,108(r3)	loads player number
lis	r29,0x8045
ori	r29,r29,0x10C4	804510C4. player 1 character ID
mulli	r31,r31,3728	players are 0xE90 apart
add	r31,r29,r31
lwz	r4,0(r31)	loads character ID
lbz	r31,8(r31)	loads secondary instance flag
cmpwi	r4,19		Sheik/Zelda ID
beq-	0x1C		go to "SHEIK/ZELDA"
cmpwi	r4,18		Zelda/Sheik ID
bne+	0x20		go to "GET ACTION, SUBACTION, & FRAME" if not Zelda or Sheik

cmpwi	r31,1		[DETERMINE ZELDA OR SHEIK][ZELDA/SHEIK] Zelda/Sheik & secondary instance = Sheik
bne+	0x18		go to "GET ACTION, SUBACTION, & FRAME" if not secondary instance
li	r4,19		Set Sheik as character ID
b	0x10		go to "GET ACTION, SUBACTION, & FRAME" [/ZELDA/SHEIK]

cmpwi	r31,1		[SHEIK/ZELDA] Sheik/Zelda & secondary instance = Zelda
bne+	0x8		go to "GET ACTION, SUBACTION, & FRAME" if not secondary instance
li	r4,18		Set Zelda as character ID [/SHEIK/ZELDA][/DETERMINE ZELDA OR SHEIK][/GET CHARACTER ID]

lfs	f1,2196(r30)	[GET ACTION, SUBACTION, & FRAME] loads current animation frame
fctiwz	f1,f1		converts animation frame to int, rounded towards zero
stfd	f1,0(r2)	stores int animation frame
lwz	r5,4(r2)	loads current animation frame into normal register
lwz	r6,112(r3)	loads current action
lwz	r7,116(r3)	loads current subaction
ori	r7,r7,0x8000	changes it to 00008XXX [/GET ACTION, SUBACTION, & FRAME]

lis	r31,0x8000
ori	r31,r31,0x49C8	800049C8. 0x8 before 1st FSM entry

lwzu	r29,8(r31)	[FSM ENTRY CHECK LOOP] loads fsm entry (ex: 11078072)
cmpwi	r29,0		00000000 inidicates end of list
beq-	0x60		skip code if no matches in list

rlwinm	r28,r29,8,24,31	extracts leftmost byte (character id; ex: 11078072 -> 00000011)
cmpwi	r28,255		wild card (FF) character ID check
beq-	0x14		continue to animation frame check if wild card match
cmpw	r28,r4		compares char id to char id in fsm line
beq-	0xC		continue to animation frame check if character ID match
bgt-	0x48		skip code if entries for character have been passed
b	-0x24		loops to go on to next entry if character's entries haven't been reached yet

rlwinm	r28,r29,16,24,31	extracts 2nd from left byte (FSM timer; ex: 11078072 -> 00000007)
cmpw	r28,r5		compares to current frame
bgt-	-0x30		loops to go on to next entry if animation frame is before FSM entry's timer

rlwinm	r28,r29,0,16,31	extracts right 2 bytes (action/subaction; ex: 11078072 -> 00008072)
cmpw	r28,r6		compares action/subaction entry to current action
beq-	0xC		go to "CHECK IF FSM OF 1" if match
cmpw	r28,r7		compares action/subaction entry to current subaction
bne+	-0x44		loops to go on to next entry if no action/subaction match [/FSM ENTRY CHECK LOOP]

lwz	r28,4(r31)	[CHECK IF FSM END] loads FSM speed entry as word
cmpwi	r28,-1		FFFFFFFF
beq-	0x18		skip code if frame speed of 1 (so smash charges can work) [/CHECK IF FSM END]

lfs	f1,4(r31)	[GO TO FRAME SPEED FUNCTION] loads float from FSM to be applied
lis	r31,0x8006
ori	r31,r31,0xF034	8006F034. function used to change frame speed (on landing animations)
mtlr	r31
blrl			go to frame speed function [/GO TO FRAME SPEED FUNCTION]

lmw	r27,20(r1)	entry point (800731C4). restores r27-r31 from stack


@6FDA4 (1.00 DOL - ASM Injection Point)
4BF915DC

This redirects the code at the end of an update animation frame and script timers function to execute the custom function above (animation engine).



@19D0 (1.00 DOL - FSM Entries)
CCFFSAAA XXXXXXXX
...


This is where the entries for the animation engine are written to. Each entry contains a byte for the character ID, a byte for starting frame, a half word for action or subaction ID, and a float to be used for animation speed under those conditions. There is room at this location for 152 FSM entries (should be plenty), and it is the largest amount of open space in the DOL I could find.



Format
CCFFSAAA XXXXXXXX

C - Character ID
F - Timer for the FSM to begin on
S - Action/Subaction Tag (0 = Action; 8 = Subaction)
A - Action/Subaction ID
X - Float to set animation speed to


It's important to note that all entries for a character must be grouped together in the list, and when using multiple FSMs for the same character and action/subaction they must be in reverse timer order. Also, some animations begin on frame 0 not 1 and the 1st frame will always be animation frame 0.00.

Putting FF as the character ID will make it apply to all characters. If you wanted to make Bowser's d-tilt be at 1.4x speed from frames 1-14 you would use:


050E0039 3F800000
05000039 3FB33333


Notice the reverse timer ordering. It's like that because it takes the first entry that is satisfied (current frame is >= FSM entry). If it's an animation that begins on 0 instead of 1 (you can see in develop mode display), the 1st frame will always be 0 regardless of if a FSM is set to frame 0.

On smash attacks with a FSM before the charge frame, disable the FSM from being further reapplied by putting an entry with a float of FFFFFFFF on or before the charge frame. This is very important for pre-charge FSMs as they will be unable to charge without it (overrides the 0.00x modifier).

If you wanted to make Yoshi's f-smash (charge frame on 6) 1.5x speed from 1-12 you would use:


110C003C 3F800000
1101003C FFFFFFFF
1100003C 3FC00000


The 1.5x FSM will still carry through the smash charge until frame 12. The FFFFFFFF is needed during the charge frame to prevent the 1.5x to being reapplied during it so the charge freeze can work.



Character IDs
Code:
Captain Falcon . 00
Donkey Kong .... 01
Fox ............ 02
Game & Watch ... 03
Kirby .......... 04
Bowser ......... 05
Link ........... 06
Luigi .......... 07
Mario .......... 08
Marth .......... 09
Mewtwo ......... 0A
Ness ........... 0B
Peach .......... 0C
Pikachu ........ 0D
Ice Climbers ... 0E
Jigglypuff ..... 0F
Samus .......... 10
Yoshi .......... 11
Zelda .......... 12
Sheik .......... 13
Falco .......... 14
Young Link ..... 15
Dr Mario ....... 16
Roy ............ 17
Pichu .......... 18
Ganondorf ...... 19
Master Hand .... 1A
M Wireframe .... 1B
F Wireframe .... 1C
Giga Bowser .... 1D
Crazy Hand ..... 1E
Sandbag ........ 1F
ALL ............ FF
Action IDs
Code:
000 - DeadDown
001 - DeadLeft
002 - DeadRight
003 - DeadUp
004 - DeadUpStar
005 - DeadUpStarIce
006 - DeadUpFall
007 - DeadUpFallHitCamera
008 - DeadUpFallHitCameraFlat
009 - DeadUpFallIce
00A - DeadUpFallHitCameraIce
00B - Sleep
00C - Rebirth
00D - RebirthWait
00E - Wait
00F - WalkSlow
010 - WalkMiddle
011 - WalkFast
012 - Turn
013 - TurnRun
014 - Dash
015 - Run
016 - RunDirect
017 - RunBrake
018 - KneeBend
019 - JumpF
01A - JumpB
01B - JumpAerialF
01C - JumpAerialB
01D - Fall
01E - FallF
01F - FallB
020 - FallAerial
021 - FallAerialF
022 - FallAerialB
023 - FallSpecial
024 - FallSpecialF
025 - FallSpecialB
026 - DamageFall
027 - Squat
028 - SquatWait
029 - SquatRv
02A - Landing
02B - LandingFallSpecial
02C - Attack11
02D - Attack12
02E - Attack13
02F - Attack100Start
030 - Attack100Loop
031 - Attack100End
032 - AttackDash
033 - AttackS3Hi
034 - AttackS3HiS
035 - AttackS3S
036 - AttackS3LwS
037 - AttackS3Lw
038 - AttackHi3
039 - AttackLw3
03A - AttackS4Hi
03B - AttackS4HiS
03C - AttackS4S
03D - AttackS4LwS
03E - AttackS4Lw
03F - AttackHi4
040 - AttackLw4
041 - AttackAirN
042 - AttackAirF
043 - AttackAirB
044 - AttackAirHi
045 - AttackAirLw
046 - LandingAirN
047 - LandingAirF
048 - LandingAirB
049 - LandingAirHi
04A - LandingAirLw
04B - DamageHi1
04C - DamageHi2
04D - DamageHi3
04E - DamageN1
04F - DamageN2
050 - DamageN3
051 - DamageLw1
052 - DamageLw2
053 - DamageLw3
054 - DamageAir1
055 - DamageAir2
056 - DamageAir3
057 - DamageFlyHi
058 - DamageFlyN
059 - DamageFlyLw
05A - DamageFlyTop
05B - DamageFlyRoll
05C - LightGet
05D - HeavyGet
05E - LightThrowF
05F - LightThrowB
060 - LightThrowHi
061 - LightThrowLw
062 - LightThrowDash
063 - LightThrowDrop
064 - LightThrowAirF
065 - LightThrowAirB
066 - LightThrowAirHi
067 - LightThrowAirLw
068 - HeavyThrowF
069 - HeavyThrowB
06A - HeavyThrowHi
06B - HeavyThrowLw
06C - LightThrowF4
06D - LightThrowB4
06E - LightThrowHi4
06F - LightThrowLw4
070 - LightThrowAirF4
071 - LightThrowAirB4
072 - LightThrowAirHi4
073 - LightThrowAirLw4
074 - HeavyThrowF4
075 - HeavyThrowB4
076 - HeavyThrowHi4
077 - HeavyThrowLw4
078 - SwordSwing1
079 - SwordSwing3
07A - SwordSwing4
07B - SwordSwingDash
07C - BatSwing1
07D - BatSwing3
07E - BatSwing4
07F - BatSwingDash
080 - ParasolSwing1
081 - ParasolSwing3
082 - ParasolSwing4
083 - ParasolSwingDash
084 - HarisenSwing1
085 - HarisenSwing3
086 - HarisenSwing4
087 - HarisenSwingDash
088 - StarRodSwing1
089 - StarRodSwing3
08A - StarRodSwing4
08B - StarRodSwingDash
08C - LipStickSwing1
08D - LipStickSwing3
08E - LipStickSwing4
08F - LipStickSwingDash
090 - ItemParasolOpen
091 - ItemParasolFall
092 - ItemParasolFallSpecial
093 - ItemParasolDamageFall
094 - LGunShoot
095 - LGunShootAir
096 - LGunShootEmpty
097 - LGunShootAirEmpty
098 - FireFlowerShoot
099 - FireFlowerShootAir
09A - ItemScrew
09B - ItemScrewAir
09C - DamageScrew
09D - DamageScrewAir
09E - ItemScopeStart
09F - ItemScopeRapid
0A0 - ItemScopeFire
0A1 - ItemScopeEnd
0A2 - ItemScopeAirStart
0A3 - ItemScopeAirRapid
0A4 - ItemScopeAirFire
0A5 - ItemScopeAirEnd
0A6 - ItemScopeStartEmpty
0A7 - ItemScopeRapidEmpty
0A8 - ItemScopeFireEmpty
0A9 - ItemScopeEndEmpty
0AA - ItemScopeAirStartEmpty
0AB - ItemScopeAirRapidEmpty
0AC - ItemScopeAirFireEmpty
0AD - ItemScopeAirEndEmpty
0AE - LiftWait
0AF - LiftWalk1
0B0 - LiftWalk2
0B1 - LiftTurn
0B2 - GuardOn
0B3 - Guard
0B4 - GuardOff
0B5 - GuardDamage
0B6 - GuardReflect
0B7 - DownBoundU
0B8 - DownWaitU
0B9 - DownDamageU
0BA - DownStandU
0BB - DownAttackU
0BC - DownFowardU
0BD - DownBackU
0BE - DownSpotU
0BF - DownBoundD
0C0 - DownWaitD
0C1 - DownDamageD
0C2 - DownStandD
0C3 - DownAttackD
0C4 - DownFowardD
0C5 - DownBackD
0C6 - DownSpotD
0C7 - Passive
0C8 - PassiveStandF
0C9 - PassiveStandB
0CA - PassiveWall
0CB - PassiveWallJump
0CC - PassiveCeil
0CD - ShieldBreakFly
0CE - ShieldBreakFall
0CF - ShieldBreakDownU
0D0 - ShieldBreakDownD
0D1 - ShieldBreakStandU
0D2 - ShieldBreakStandD
0D3 - FuraFura
0D4 - Catch
0D5 - CatchPull
0D6 - CatchDash
0D7 - CatchDashPull
0D8 - CatchWait
0D9 - CatchAttack
0DA - CatchCut
0DB - ThrowF
0DC - ThrowB
0DD - ThrowHi
0DE - ThrowLw
0DF - CapturePulledHi
0E0 - CaptureWaitHi
0E1 - CaptureDamageHi
0E2 - CapturePulledLw
0E3 - CaptureWaitLw
0E4 - CaptureDamageLw
0E5 - CaptureCut
0E6 - CaptureJump
0E7 - CaptureNeck
0E8 - CaptureFoot
0E9 - EscapeF
0EA - EscapeB
0EB - Escape
0EC - EscapeAir
0ED - ReboundStop
0EE - Rebound
0EF - ThrownF
0F0 - ThrownB
0F1 - ThrownHi
0F2 - ThrownLw
0F3 - ThrownLwWomen
0F4 - Pass
0F5 - Ottotto
0F6 - OttottoWait
0F7 - FlyReflectWall
0F8 - FlyReflectCeil
0F9 - StopWall
0FA - StopCeil
0FB - MissFoot
0FC - CliffCatch
0FD - CliffWait
0FE - CliffClimbSlow
0FF - CliffClimbQuick
100 - CliffAttackSlow
101 - CliffAttackQuick
102 - CliffEscapeSlow
103 - CliffEscapeQuick
104 - CliffJumpSlow1
105 - CliffJumpSlow2
106 - CliffJumpQuick1
107 - CliffJumpQuick2
108 - AppealR
109 - AppealL
10A - ShoulderedWait
10B - ShoulderedWalkSlow
10C - ShoulderedWalkMiddle
10D - ShoulderedWalkFast
10E - ShoulderedTurn
10F - ThrownFF
110 - ThrownFB
111 - ThrownFHi
112 - ThrownFLw
113 - CaptureCaptain
114 - CaptureYoshi
115 - YoshiEgg
116 - CaptureKoopa
117 - CaptureDamageKoopa
118 - CaptureWaitKoopa
119 - ThrownKoopaF
11A - ThrownKoopaB
11B - CaptureKoopaAir
11C - CaptureDamageKoopaAir
11D - CaptureWaitKoopaAir
11E - ThrownKoopaAirF
11F - ThrownKoopaAirB
120 - CaptureKirby
121 - CaptureWaitKirby
122 - ThrownKirbyStar
123 - ThrownCopyStar
124 - ThrownKirby
125 - BarrelWait
126 - Bury
127 - BuryWait
128 - BuryJump
129 - DamageSong
12A - DamageSongWait
12B - DamageSongRv
12C - DamageBind
12D - CaptureMewtwo
12E - CaptureMewtwoAir
12F - ThrownMewtwo
130 - ThrownMewtwoAir
131 - WarpStarJump
132 - WarpStarFall
133 - HammerWait
134 - HammerWalk
135 - HammerTurn
136 - HammerKneeBend
137 - HammerFall
138 - HammerJump
139 - HammerLanding
13A - KinokoGiantStart
13B - KinokoGiantStartAir
13C - KinokoGiantEnd
13D - KinokoGiantEndAir
13E - KinokoSmallStart
13F - KinokoSmallStartAir
140 - KinokoSmallEnd
141 - KinokoSmallEndAir
142 - Entry
143 - EntryStart
144 - EntryEnd
145 - DamageIce
146 - DamageIceJump
147 - CaptureMasterhand
148 - CapturedamageMasterhand
149 - CapturewaitMasterhand
14A - ThrownMasterhand
14B - CaptureKirbyYoshi
14C - KirbyYoshiEgg
14D - CaptureLeadead
14E - CaptureLikelike
14F - DownReflect
150 - CaptureCrazyhand
151 - CapturedamageCrazyhand
152 - CapturewaitCrazyhand
153 - ThrownCrazyhand
154 - BarrelCannonWait
155 - (Specials & Character Specific)
Subaction IDs
Code:
000 - 
001 - 
002 - 
003 - 
004 - 
005 - 
006 - 
007 - 
008 - 
009 - 
00A - 
00B - 
00C - 
00D - 
00E - 
00F - 
010 - 
011 - 
012 - 
013 - 
014 - 
015 - 
016 - 
017 - 
018 - 
019 - 
01A - 
01B - 
01C - 
01D - 
01E - 
01F - 
020 - 
021 - 
022 - 
023 - 
024 - 
025 - 
026 - 
027 - 
028 - 
029 - 
02A - 
02B - 
02C - 
02D - 
02E - 
02F - 
030 - 
031 - 
032 - 
033 - 
034 - 
035 - 
036 - 
037 - 
038 - 
039 - 
03A - 
03B - 
03C - 
03D - 
03E - 
03F - 
040 - 
041 - 
042 - 
043 - 
044 - 
045 - 
046 - 
047 - 
048 - 
049 - 
04A - 
04B - 
04C - 
04D - 
04E - 
04F - 
050 - 
051 - 
052 - 
053 - 
054 - 
055 - 
056 - 
057 - 
058 - 
059 - 
05A - 
05B - 
05C - 
05D - 
05E - 
05F - 
060 - 
061 - 
062 - 
063 - 
064 - 
065 - 
066 - 
067 - 
068 - 
069 - 
06A - 
06B - 
06C - 
06D - 
06E - 
06F - 
070 - 
071 - 
072 - 
073 - 
074 - 
075 - 
076 - 
077 - 
078 - 
079 - 
07A - 
07B - 
07C - 
07D - 
07E - 
07F - 
080 - 
081 - 
082 - 
083 - 
084 - 
085 - 
086 - 
087 - 
088 - 
089 - 
08A - 
08B - 
08C - 
08D - 
08E - 
08F - 
090 - 
091 - 
092 - 
093 - 
094 - 
095 - 
096 - 
097 - 
098 - 
099 - 
09A - 
09B - 
09C - 
09D - 
09E - 
09F - 
0A0 - 
0A1 - 
0A2 - 
0A3 - 
0A4 - 
0A5 - 
0A6 - 
0A7 - 
0A8 - 
0A9 - 
0AA - 
0AB - 
0AC - 
0AD - 
0AE - 
0AF - 
0B0 - 
0B1 - 
0B2 - 
0B3 - 
0B4 - 
0B5 - 
0B6 - 
0B7 - 
0B8 - 
0B9 - 
0BA - 
0BB - 
0BC - 
0BD - 
0BE - 
0BF - 
0C0 - 
0C1 - 
0C2 - 
0C3 - 
0C4 - 
0C5 - 
0C6 - 
0C7 - 
0C8 - 
0C9 - 
0CA - 
0CB - 
0CC - 
0CD - 
0CE - 
0CF - 
0D0 - 
0D1 - 
0D2 - 
0D3 - 
0D4 - 
0D5 - 
0D6 - 
0D7 - 
0D8 - 
0D9 - 
0DA - 
0DB - 
0DC - 
0DD - 
0DE - 
0DF - 
0E0 - 
0E1 - 
0E2 - 
0E3 - 
0E4 - 
0E5 - 
0E6 - 
0E7 - 
0E8 - 
0E9 - 
0EA - 
0EB - 
0EC - 
0ED - 
0EE - 
0EF - 
0F0 - 
0F1 - 
0F2 - 
0F3 - 
0F4 - 
0F5 - 
0F6 - 
0F7 - 
0F8 - 
0F9 - 
0FA - 
0FB - 
0FC - 
0FD - 
0FE - 
0FF - 
100 - 
101 - 
102 - 
103 - 
104 - 
105 - 
106 - 
107 - 
108 - 
109 - 
10A - 
10B - 
10C - 
10D - 
10E - 
10F - 
110 - 
111 - 
112 - 
113 - 
114 - 
115 - 
116 - 
117 - 
118 - 
119 - 
11A - 
11B - 
11C - 
11D - 
11E - 
11F - 
120 - 
121 - 
122 - 
123 - 
124 - 
125 - 
126 - 
127 - (Specials & Character Specific)
Subactions should just be the same as they are listed in MasterHand.
 

phish-it

Smash Champion
Joined
Apr 4, 2004
Messages
2,096
Location
Mahopac, NY
Magus, you are a ****ing God. This is an amazing discovery.

The Bowser downtilt change for example, allows the first hit to come out on frame 10, the data in Masterhand obviously still reads it as frame 14. Any suggestion on how to make the subaction data reflect the actual frame now, or will I just have to leave notes and suck it up?
 

standardtoaster

Tubacabra
Joined
Nov 26, 2009
Messages
9,253
Location
Eau Claire, Wisconsin
Yeah, the subaction ids are in the order they appear in masterhand. They start at 0. For example, jab1 is subaction 2E, which is the 46th listed subaction (after subaction 0, the first listed one).
 

Magus420

Smash Master
Joined
Dec 13, 2003
Messages
4,541
Location
Close to Trenton, NJ Posts: 4,071
It's not really a discovery so much as I wrote a code that taps into an animation speed function (for changing the speed of the landing animations), and am sticking the assembly I wrote and a table that it reads from into some free space within the DOL.

No, there's no way to have MH read/show the effects of the code. You'd need to keep track of them and use math, or go by the animation timer display in develop mode as that will match where it is in the script's coding.
 

Magus420

Smash Master
Joined
Dec 13, 2003
Messages
4,541
Location
Close to Trenton, NJ Posts: 4,071
Rewrote the code to fix some things. Hooks into the end of the function I was injecting into instead of the middle, because script timer updating happened to be right there with it, and after the injection point. Caused script timers to desync with the animation when a FSM was applied after frame 0 (FSMs would affect script timers 1 frame early before).

Also fixed the Zelda/Sheik identification method to a better one that now works properly.

Since it's now injecting into a different location, if you're using the old version you'll need to undo the injection point edit @6FCCC (change 4BF916B4 -> C03E0894), update the custom function written @17A0, and write the new injection point @6FDA4.



G&W N/B/U-Airs L-Cancelable, and U-Air Lag Bug Fix

G&W's n/b/u-air can't be l-canceled because those use special actions instead of the normal ones, skips the lcancel check, and the lcancel check only looks at common landing actions anyway. Also, u-air reads the attribute for b-air landing lag instead of u-air in its special coding by mistake, lol.

(this is for v1.00 DOL)

Code:
**N-Air**
@147F98 (8014B3B8):  3880015E -> 38800041    [COLOR="Gray"]li   r4,350     --> li   r4,65[/COLOR]
@147FA4 (8014B3C4):  80A3002C -> 90830070    [COLOR="Gray"]lwz  r5,44(r3)  --> stw  r4,112(r3)[/COLOR]
@147FA8 (8014B3C8):  C02501F8 -> C0230258    [COLOR="Gray"]lfs  f1,504(r5) --> lfs  f1,600(r3)[/COLOR]
@147FAC (8014B3CC):  4BF42095 -> 4BF41F89    [COLOR="Gray"]bl	  0x8008d460 --> bl   0x8008D354[/COLOR]

**B-Air**
@148028 (8014B448):  3880015F -> 38800043    [COLOR="Gray"]li   r4,351     --> li   r4,67[/COLOR]
@148034 (8014B454):  80A3002C -> 90830070    [COLOR="Gray"]lwz  r5,44(r3)  --> stw  r4,112(r3)[/COLOR]
@148038 (8014B458):  C0250200 -> C0230260    [COLOR="Gray"]lfs  f1,512(r5) --> lfs  f1,608(r3)[/COLOR]
@14803C (8014B45C):  4BF42005 -> 4BF41EF9    [COLOR="Gray"]bl   0x8008d460 --> bl   0x8008D354[/COLOR]

**U-Air**
@1480B8 (8014B4D8):  38800160 -> 38800044    [COLOR="Gray"]li   r4,352     --> li   r4,68[/COLOR]
@1480C4 (8014B4E4):  80A3002C -> 90830070    [COLOR="Gray"]lwz  r5,44(r3)  --> stw  r4,112(r3)[/COLOR]
@1480C8 (8014B4E8):  C0250200 -> C0230264    [COLOR="Gray"]lfs  f1,512(r5) --> lfs  f1,612(r3)[/COLOR]
@1480CC (8014B4EC):  4BF41F75 -> 4BF41E69    [COLOR="Gray"]bl   0x8008d460 --> bl   0x8008D354[/COLOR]
 

DRGN

Technowizard
Moderator
Joined
Aug 20, 2005
Messages
2,179
Location
Sacramento, CA
What format are images stored as in the game's iso? How can I get them?

Specifically I want the background image to the Melee main menu, when choosing between "1-P Mode", "VS Mode", "Trophies", etc. (The first menu after pressing start at the title screen.)

I realize there are a lot of moving parts in the background. Maybe it would be possible to remove the menu graphics temporarily to take a snapshot of everything behind it?
 

SypherPhoenix

Smash Lord
Joined
Feb 12, 2007
Messages
1,563
Location
Fairfax, VA
Great stuff as always Magus, advancing all the bums doing Melee hacking and getting VietGeek one step closer to making Project M using Melee.

Here are some version conversions for the G&W fix you made:


1.01

Code:
**N-Air**
@1483E8:  3880015E -> 38800041    [COLOR="Gray"]li   r4,350     --> li   r4,65[/COLOR]
@1483F4:  80A3002C -> 90830070    [COLOR="Gray"]lwz  r5,44(r3)  --> stw  r4,112(r3)[/COLOR]
@1483F8:  C02501F8 -> C0230258    [COLOR="Gray"]lfs  f1,504(r5) --> lfs  f1,600(r3)[/COLOR]
@1473FC:  4BF41D2D -> 4BF41C21    [COLOR="Gray"]bl	  0x8008d460 --> bl   0x8008D354[/COLOR]

**B-Air**
@1484D0:  3880015F -> 38800043    [COLOR="Gray"]li   r4,351     --> li   r4,67[/COLOR]
@1484DC:  80A3002C -> 90830070    [COLOR="Gray"]lwz  r5,44(r3)  --> stw  r4,112(r3)[/COLOR]
@1484E0:  C0250200 -> C0230260    [COLOR="Gray"]lfs  f1,512(r5) --> lfs  f1,608(r3)[/COLOR]
@1484E4:  4BF41C45 -> 4BF41B39    [COLOR="Gray"]bl   0x8008d460 --> bl   0x8008D354[/COLOR]

**U-Air**
@1485B0:  38800160 -> 38800044    [COLOR="Gray"]li   r4,352     --> li   r4,68[/COLOR]
@1485C4:  80A3002C -> 90830070    [COLOR="Gray"]lwz  r5,44(r3)  --> stw  r4,112(r3)[/COLOR]
@1485C8:  C0250200 -> C0230264    [COLOR="Gray"]lfs  f1,512(r5) --> lfs  f1,612(r3)[/COLOR]
@1485CC:  4BF41B5D -> 4BF41A51    [COLOR="Gray"]bl   0x8008d460 --> bl   0x8008D354[/COLOR]



1.02

Code:
**N-Air**
@1486DC:  3880015E -> 38800041    [COLOR="Gray"]li   r4,350     --> li   r4,65[/COLOR]
@1486E8:  80A3002C -> 90830070    [COLOR="Gray"]lwz  r5,44(r3)  --> stw  r4,112(r3)[/COLOR]
@1486EC:  C02501F8 -> C0230258    [COLOR="Gray"]lfs  f1,504(r5) --> lfs  f1,600(r3)[/COLOR]
@1486F0:  4BF41BF9 -> 4BF41AED    [COLOR="Gray"]bl	  0x8008d460 --> bl   0x8008D354[/COLOR]

**B-Air**
@1487C4:  3880015F -> 38800043    [COLOR="Gray"]li   r4,351     --> li   r4,67[/COLOR]
@1487D0:  80A3002C -> 90830070    [COLOR="Gray"]lwz  r5,44(r3)  --> stw  r4,112(r3)[/COLOR]
@1487D4:  C0250200 -> C0230260    [COLOR="Gray"]lfs  f1,512(r5) --> lfs  f1,608(r3)[/COLOR]
@1487D8:  4BF41B11 -> 4BF41A05    [COLOR="Gray"]bl   0x8008d460 --> bl   0x8008D354[/COLOR]

**U-Air**
@1488AC:  38800160 -> 38800044    [COLOR="Gray"]li   r4,352     --> li   r4,68[/COLOR]
@1488B8:  80A3002C -> 90830070    [COLOR="Gray"]lwz  r5,44(r3)  --> stw  r4,112(r3)[/COLOR]
@1488BC:  C0250200 -> C0230264    [COLOR="Gray"]lfs  f1,512(r5) --> lfs  f1,612(r3)[/COLOR]
@1488C0:  4BF41A29 -> 4BF4191D    [COLOR="Gray"]bl   0x8008d460 --> bl   0x8008D354[/COLOR]



PAL

Code:
**N-Air**
@148E80:  3880015E -> 38800041   [COLOR="Gray"]li   r4,350     --> li   r4,65[/COLOR]
@148E8C:  80A3002C -> 90830070    [COLOR="Gray"]lwz  r5,44(r3)  --> stw  r4,112(r3)[/COLOR]
@148E90:  C02501F8 -> C0230258    [COLOR="Gray"]lfs  f1,504(r5) --> lfs  f1,600(r3)[/COLOR]
@148E94:  4BF41B0D -> 4BF41A01    [COLOR="Gray"]bl	  0x8008d460 --> bl   0x8008D354[/COLOR]

**B-Air**
@148F68:  3880015F -> 38800043    [COLOR="Gray"]li   r4,351     --> li   r4,67[/COLOR]
@148F74:  80A3002C -> 90830070    [COLOR="Gray"]lwz  r5,44(r3)  --> stw  r4,112(r3)[/COLOR]
@148F78:  C0250200 -> C0230260    [COLOR="Gray"]lfs  f1,512(r5) --> lfs  f1,608(r3)[/COLOR]
@148F7C:  4BF41A25 -> 4BF41919    [COLOR="Gray"]bl   0x8008d460 --> bl   0x8008D354[/COLOR]

**U-Air**
@149050:  38800160 -> 38800044    [COLOR="Gray"]li   r4,352     --> li   r4,68[/COLOR]
@14905C:  80A3002C -> 90830070    [COLOR="Gray"]lwz  r5,44(r3)  --> stw  r4,112(r3)[/COLOR]
@149060:  C0250200 -> C0230264    [COLOR="Gray"]lfs  f1,512(r5) --> lfs  f1,612(r3)[/COLOR]
@149064:  4BF4193D -> 4BF41831    [COLOR="Gray"]bl   0x8008d460 --> bl   0x8008D354[/COLOR]




I've only actually tested 1.02, but these should all work.





What format are images stored as in the game's iso? How can I get them?
They're in Nintendo's proprietary tpl format, but by using Dolphin you can extract the textures into tga/png format. Try this post for some info. What you're asking for is a bit more complex though, as the main menu is made up of a ton of little things, not all of which are even textures.
 

DRGN

Technowizard
Moderator
Joined
Aug 20, 2005
Messages
2,179
Location
Sacramento, CA
What you're asking for is a bit more complex though, as the main menu is made up of a ton of little things, not all of which are even textures.
Yeah, that's what I was afraid of when I remembered just how much movement there is back there. So I was thinking maybe it could be hacked so that the menu interface in the foreground is transparent (the buttons, texts, and menu borders), and then a still snapshot could just be taken of everything else together (including the orbs of light on the tracks). I don't need to recreate the animations.

How easily could someone do this? Perhaps widescreen? It's for a useful tool I'm working on for Melee.
 
Top Bottom