Showing preview only (2,622K chars total). Download the full file or copy to clipboard to get everything.
Repository: UnclePunch/Training-Mode
Branch: master
Commit: fa0b9ef4ecb5
Files: 475
Total size: 243.6 MB
Directory structure:
gitextract_cp2hs4__/
├── .gitattributes
├── .gitignore
├── ASM/
│ ├── Additional Codes/
│ │ ├── Allow Staling in Develop Mode.asm
│ │ ├── Better Camera/
│ │ │ ├── C-Stick Pans Camera.asm
│ │ │ ├── CStickPanOffscreen/
│ │ │ │ ├── Bottom.asm
│ │ │ │ ├── Left.asm
│ │ │ │ ├── Right.asm
│ │ │ │ └── Top.asm
│ │ │ ├── SnapToOffscreenPlayers/
│ │ │ │ ├── Always Onscreen.asm
│ │ │ │ └── Snap.asm
│ │ │ └── Unrestricted Camera.asm
│ │ ├── Boot to CSS/
│ │ │ └── Boot to Main Menu Or CSS.s
│ │ ├── Boot to Event Mode/
│ │ │ ├── Boot to Main Menu Or CSS.asm
│ │ │ └── Main Menu Starts at Event Mode.asm
│ │ ├── CSS KO Star Codes/
│ │ │ ├── Calculate KO Stars Upon Exiting Dairantou.asm
│ │ │ └── Disable KO Star Deletion When Leaving CSS.asm
│ │ ├── Collision Link Draw Order Fix [Punkline]/
│ │ │ ├── New Draw Location.asm
│ │ │ └── Remove Original Draw.asm
│ │ ├── DEBUGLOG.s
│ │ ├── DPad Down to Random Stage.s
│ │ ├── Debug Mode Codes/
│ │ │ ├── Debug Language is English by Default.asm
│ │ │ ├── Exiting Debug Goes to Main Menu.asm
│ │ │ └── Tournament Mode Goes to Debug.asm
│ │ ├── Default Tournament Settings/
│ │ │ ├── 4 Stocks.asm
│ │ │ ├── 8 Minutes.asm
│ │ │ ├── No Items.asm
│ │ │ ├── Stock Mode.asm
│ │ │ └── Tournament Stages.asm
│ │ ├── Delete Bootup OSReports.asm
│ │ ├── Disable CSS Anim Loop.s
│ │ ├── Disable FoD Reflection.asm
│ │ ├── Disable FoD in Doubles.asm
│ │ ├── Disable Item Spawn in Develop Mode.asm
│ │ ├── Disable Item Spawn in Develop Mode.s
│ │ ├── Disable Rumble on Unplug.asm
│ │ ├── Disable Special Records/
│ │ │ ├── Disable Special Messages.asm
│ │ │ └── Disable Trophy Messages.asm
│ │ ├── Display Animation Name for Special Moves in Develop Mode/
│ │ │ └── Display Animation Name for Special Moves in Develop Mode.asm
│ │ ├── Display Ungrabbable Hurtboxes/
│ │ │ └── Main.asm
│ │ ├── Enable 1P in VS Mode No Time.asm
│ │ ├── Enable C Stick Always/
│ │ │ ├── Enable CStick for CPU in Debug.asm
│ │ │ ├── Rotate Camera with Dpad Down and C Stick - Initiate.asm
│ │ │ ├── Rotate Camera with Dpad Down and C Stick.asm
│ │ │ ├── Single Player Always Returns False.asm
│ │ │ └── Spoof Debug Level as 0 for Human C Stick Inputs.asm
│ │ ├── Faster CSS Load.asm
│ │ ├── Frame Advance Audio.s
│ │ ├── GX Draw/
│ │ │ └── Main.s
│ │ ├── Game Modes/
│ │ │ ├── All Star Test/
│ │ │ │ ├── Disable Invisible Melee.s
│ │ │ │ └── Initialize Lineups.s
│ │ │ ├── Chess Melee.asm
│ │ │ ├── Chess Melee.s
│ │ │ ├── Iron Man/
│ │ │ │ ├── Disable Invisible Melee.asm
│ │ │ │ ├── Initialize Lineups.asm
│ │ │ │ └── Load Next Match.asm
│ │ │ ├── Rotations Melee.asm
│ │ │ ├── Rotations Melee.s
│ │ │ ├── Tag Melee.asm
│ │ │ └── Tag Melee.s
│ │ ├── Hide Nametag When Invisible.asm
│ │ ├── Hide Player GFX When Hitboxes Enabled/
│ │ │ ├── Hide GFX When Hitboxes Enabled.asm
│ │ │ ├── Hide OnHit GFX When Hitboxes Enabled 2.asm
│ │ │ └── Hide OnHit GFX When Hitboxes Enabled.asm
│ │ ├── Hitbox Color Changes Based On Damage.asm
│ │ ├── Hold A+B for Salty Runback + Hold A+X for Random Stage + Skip Result Screen.asm
│ │ ├── Hold Z for Rapid Frame Advance/
│ │ │ ├── New Inputs Don't Reset Rapid Timer.s
│ │ │ ├── P1 - Check Rapid Fire Input.asm
│ │ │ ├── P2 - Check Rapid Fire Input.asm
│ │ │ ├── P3 - Check Rapid Fire Input.asm
│ │ │ └── P4 - Check Rapid Fire Input.asm
│ │ ├── Idle Screen/
│ │ │ └── Main.asm
│ │ ├── Initialize Stage Data.asm
│ │ ├── Kill Zoom/
│ │ │ ├── Main.s
│ │ │ └── Rumble During MH Zoom.s
│ │ ├── L+R+A Returns to CSS During SSS.asm
│ │ ├── Lag Reduction Prompt/
│ │ │ └── Main.asm
│ │ ├── Last Unplug Closes All CSS Doors.asm
│ │ ├── Longer Nametags/
│ │ │ ├── 8 Letter Tags/
│ │ │ │ ├── 8Characters1.asm
│ │ │ │ ├── 8Characters2.asm
│ │ │ │ ├── 8Characters3.asm
│ │ │ │ ├── 8Characters4.asm
│ │ │ │ ├── Adjust Cursor Position.asm
│ │ │ │ ├── Character Spacing.asm
│ │ │ │ ├── Copy 8 Characters1.asm
│ │ │ │ ├── Copy 8 Characters2.asm
│ │ │ │ ├── Disable Tag Rumble - Ignore Tag Rumble.asm
│ │ │ │ ├── Disable Tag Rumble - Init.asm
│ │ │ │ ├── Disable Tag Rumble - RumbleLoad.asm
│ │ │ │ ├── Disable Tag Rumble - RumbleThink.asm
│ │ │ │ └── ZeroNametagText.asm
│ │ │ └── Scale Nametag BG/
│ │ │ └── Main.asm
│ │ ├── Misc Hitbox Visualizer/
│ │ │ ├── Always Draw TopN For Items.asm
│ │ │ ├── Display Chain ECBs - GObj 7.asm
│ │ │ └── Main.asm
│ │ ├── Neutral Respawn.asm
│ │ ├── Neutral Respawn.s
│ │ ├── Neutral Spawn.asm
│ │ ├── On Crash/
│ │ │ ├── Clear Bootup OSReports.asm
│ │ │ ├── Disable Brinstar OSReport.asm
│ │ │ ├── Disable Effect AnimList OSReport.asm
│ │ │ ├── Disable Fourside OSReport.asm
│ │ │ ├── Disable Fourside OSReport2.asm
│ │ │ ├── Disable PS OSReport.asm
│ │ │ ├── Disable YoshisIsland OSReport.asm
│ │ │ ├── Disable mpcoll OSReport.asm
│ │ │ ├── Dont Output Compile Date on Assert.asm
│ │ │ ├── Dont Output Compile Date on Invalid Read.asm
│ │ │ ├── Enable OSReport Print to Screen.asm
│ │ │ ├── LRZ Shows Advanced Details/
│ │ │ │ ├── Any Debug Level Displays Advanced Details.s
│ │ │ │ └── Check for LRZ.s
│ │ │ ├── Only Show First 8 Lines of Stack.asm
│ │ │ └── Reboot With LRAStart.asm
│ │ ├── Output File Load Times/
│ │ │ ├── Output Load Time.s
│ │ │ └── Save Tick.s
│ │ ├── PRIM LITE/
│ │ │ ├── PRIM (1).asm
│ │ │ ├── PRIM (10).asm
│ │ │ ├── PRIM (11).asm
│ │ │ ├── PRIM (12).asm
│ │ │ ├── PRIM (13).asm
│ │ │ ├── PRIM (14).asm
│ │ │ ├── PRIM (15).asm
│ │ │ ├── PRIM (16).asm
│ │ │ ├── PRIM (17).asm
│ │ │ ├── PRIM (18).asm
│ │ │ ├── PRIM (19).asm
│ │ │ ├── PRIM (2).asm
│ │ │ ├── PRIM (20).asm
│ │ │ ├── PRIM (3).asm
│ │ │ ├── PRIM (4).asm
│ │ │ ├── PRIM (5).asm
│ │ │ ├── PRIM (6).asm
│ │ │ ├── PRIM (7).asm
│ │ │ ├── PRIM (8).asm
│ │ │ └── PRIM (9).asm
│ │ ├── Pad - Update During Frame Advance.asm
│ │ ├── Pause During Game Start/
│ │ │ ├── Check to Pause.asm
│ │ │ ├── Check to Pause.s
│ │ │ ├── Check to Unpause.asm
│ │ │ └── Check to Unpause.s
│ │ ├── Physics Display/
│ │ │ ├── Main.asm
│ │ │ └── Main.s
│ │ ├── QWERTY Keyboard.s
│ │ ├── Random CSS Music v2/
│ │ │ ├── random music modification.asm
│ │ │ ├── roll on bootup.asm
│ │ │ └── roll on match end.asm
│ │ ├── Randomize Hitboxes Each Stock/
│ │ │ └── Randomize Hitbox Values.s
│ │ ├── Rumble Off/
│ │ │ └── Rumble Off.asm
│ │ ├── Skip Memcard Prompt/
│ │ │ └── Skip Memcard Prompt.asm
│ │ ├── Stage Music = 50 50.asm
│ │ ├── Toggle Focused Player in Develop Mode Camera/
│ │ │ ├── Switch Focused Player in Develop Mode.asm
│ │ │ └── WIP/
│ │ │ └── Init CameraMode Struct When Develop is Enabled.s
│ │ ├── Toggle Rumble From CSS/
│ │ │ └── Toggle Rumble From CSS.asm
│ │ ├── Unlock Everything/
│ │ │ ├── Unlock All Characters/
│ │ │ │ ├── Spoof All Characters as Unlocked.asm
│ │ │ │ └── Spoof Individual Characters as Unlocked.asm
│ │ │ ├── Unlock All Rules/
│ │ │ │ ├── Unlock Random Stage Select.asm
│ │ │ │ └── Unlock Score Display.asm
│ │ │ ├── Unlock All Special Messages/
│ │ │ │ ├── Special Messages 1.asm
│ │ │ │ ├── Special Messages 2.asm
│ │ │ │ ├── Spoof No Pending Messages 2.asm
│ │ │ │ └── Spoof No Pending Messages.asm
│ │ │ ├── Unlock All Stages/
│ │ │ │ ├── Spoof All Stages Unlocked.asm
│ │ │ │ └── Spoof Individual Stage Unlocked.asm
│ │ │ ├── Unlock All Trophies/
│ │ │ │ ├── Fill Save Data.asm
│ │ │ │ ├── Have 99 of Every Trophy.asm
│ │ │ │ └── Spoof All Trophies as Unlocked.asm
│ │ │ ├── Unlock All-Star.asm
│ │ │ └── Unlock Sound Test.asm
│ │ ├── Unplugging Closes CSS Door.asm
│ │ ├── Use Save Banner #1.asm
│ │ ├── Winners Names are Gold on CSS/
│ │ │ ├── Change Name Color.asm
│ │ │ └── Remember Who LRA Started.asm
│ │ └── XYDisablesStart/
│ │ └── Main.asm
│ ├── Globals.s
│ ├── m-ex/
│ │ ├── Custom Playerdata Variables/
│ │ │ ├── Adjust Size.asm
│ │ │ ├── Initialize Extended Playerblock Values (Result Screen).asm
│ │ │ ├── Initialize Extended Playerblock Values.asm
│ │ │ └── OwnsAnim/
│ │ │ ├── Check Animation Owner.s
│ │ │ └── Store Animation Owner.s
│ │ ├── Header.s
│ │ ├── Standalone Functions/
│ │ │ ├── Audio_RequestFileLoad_Rewrite.asm
│ │ │ ├── Get MxDt Data.asm
│ │ │ ├── Get grFunction.asm
│ │ │ ├── GetFtItemID.asm
│ │ │ ├── GetGrItemID.asm
│ │ │ ├── GetKirbyCpData.asm
│ │ │ ├── GetMEXItemID.asm
│ │ │ ├── GetMEXPlaylist.asm
│ │ │ ├── Index Fighter Item.asm
│ │ │ ├── Init itFunction.asm
│ │ │ ├── KirbyStateChange.asm
│ │ │ ├── LoadRELDAT.asm
│ │ │ ├── MenuThink.asm
│ │ │ ├── Reloc.asm
│ │ │ ├── SFX_PlayStageSFX.asm
│ │ │ ├── SpawnMEXEffect.s
│ │ │ ├── SpawnMEXItem.asm
│ │ │ ├── Stock Icon Get Frame.asm
│ │ │ └── calloc.asm
│ │ └── UCF 0.8/
│ │ ├── Codes.txt
│ │ ├── UCF DB.asm
│ │ ├── UCF SD.asm
│ │ ├── UCF Store Inputs CPU.asm
│ │ ├── UCF Store Inputs.asm
│ │ ├── UCF Text.asm
│ │ └── UCF Tumble.asm
│ └── training-mode/
│ ├── Custom Events/
│ │ ├── A+B to Reset Event/
│ │ │ ├── Check for Reset on Game End.asm
│ │ │ └── Check for Reset on LRAStart.asm
│ │ ├── CSS and SSS/
│ │ │ ├── Add SSS To Event Match Scene List.asm
│ │ │ ├── Backup HMN And CPU Choices/
│ │ │ │ ├── Backup Event CPU.asm
│ │ │ │ └── Restore Event CPU.asm
│ │ │ ├── Display Event Name on CSS.asm
│ │ │ ├── Load CSS + Preload CPU.asm
│ │ │ ├── Load SSS For Certain Events.asm
│ │ │ └── Toggle CSS Icon Vibibility/
│ │ │ └── Toggle CSS Icon Vibibility.asm
│ │ ├── Credits Codes/
│ │ │ ├── Don't Display Info In TM Credits.asm
│ │ │ ├── Don't Display Titles In Training Mode Credits.asm
│ │ │ └── Swap Out Credit Names in TM Credits.asm
│ │ ├── Custom Event Code - Legacy.s
│ │ ├── Custom Event Code - Rewrite.asm
│ │ ├── Custom Event Preload Behavior/
│ │ │ ├── Disable Event Preload - CSS Enter.asm
│ │ │ ├── Disable Event Preload - Match Enter.asm
│ │ │ ├── Disable Event Preload.asm
│ │ │ ├── Dont Adjust CPU Color in Event Mode When Its Already in Use.asm
│ │ │ └── Load Character ssm Files.asm
│ │ ├── Event Select Screen/
│ │ │ ├── Backup FDD Backup on Event Choose.asm
│ │ │ ├── Better X and Y Event Jump/
│ │ │ │ ├── Jump Down - Update Cursor.asm
│ │ │ │ ├── Jump Down.asm
│ │ │ │ ├── Jump Up - Update Cursor.asm
│ │ │ │ └── Jump Up.asm
│ │ │ ├── Change ESS Proc To Pri 1.asm
│ │ │ ├── Choose Any Character for Events/
│ │ │ │ ├── Always Copy CSS Character Info.asm
│ │ │ │ ├── Always Show Select Character Texture.asm
│ │ │ │ └── Always Spoof AnyCharacter.asm
│ │ │ ├── Custom ESS Button Actions.asm
│ │ │ ├── Event High Scores/
│ │ │ │ ├── Load Event High Scores.asm
│ │ │ │ └── Save Event High Scores.asm
│ │ │ ├── Event Text/
│ │ │ │ ├── CannotScrollPastEventsOnPage.asm
│ │ │ │ ├── Custom Event Highscore Types.asm
│ │ │ │ ├── Display Custom Event Descriptions.asm
│ │ │ │ ├── Display Custom Event Names on ESS.asm
│ │ │ │ ├── Get Custom Event Description.asm
│ │ │ │ ├── Get Custom Event Description.s
│ │ │ │ ├── Get Custom Event Name.asm
│ │ │ │ ├── Get Custom Event Name.s
│ │ │ │ ├── Get Custom Event Page Name.asm
│ │ │ │ ├── Get Custom Event Page Name.s
│ │ │ │ ├── GetNumOfEventsOnCurrentPage.asm
│ │ │ │ ├── GetNumOfEventsOnCurrentPage.s
│ │ │ │ ├── Never Scroll If Less than 9 Events on Page.asm
│ │ │ │ ├── OnlyDisplayEventsOnPage.asm
│ │ │ │ └── SkipDisplayingEventNames.asm
│ │ │ ├── GetEventTutorialFileName.asm
│ │ │ ├── Restore FDD Backup on Main Menu Load.asm
│ │ │ ├── Spoof All Events as Not Played.asm
│ │ │ └── Version Indicator/
│ │ │ ├── Event Code Version Indicator.asm
│ │ │ ├── Remove Event Texture.asm
│ │ │ ├── Remove Version Indicator 1.asm
│ │ │ ├── Remove Version Indicator 2.asm
│ │ │ └── Toggle Tutorial Text.asm
│ │ └── Unlock All Events/
│ │ ├── Unlock Event 1.asm
│ │ └── Unlock Event 2.asm
│ ├── Globals.s
│ ├── Hooks/
│ │ ├── OnBoot.asm
│ │ ├── OnCSSLoad.asm
│ │ ├── OnSceneChange.asm
│ │ └── OnStartMelee.asm
│ ├── Misc/
│ │ ├── Adjust Pad Params/
│ │ │ ├── Adjust Menu Navigation Deadzone Boot.asm
│ │ │ ├── Adjust Menu Navigation Deadzone.asm
│ │ │ └── Increase Rapid Fire Timer.s
│ │ ├── Better VS Mode Frame Counter/
│ │ │ ├── Inc Counter.asm
│ │ │ └── Init Counter.asm
│ │ ├── Boot Up Tasks.asm
│ │ ├── CSS - Increase SIS Text Heap.asm
│ │ ├── Corneria - Move Ship on Stage Init.asm
│ │ ├── Count NonExistant Player Kills.asm
│ │ ├── Disable Calls to ScoreDisplay_Remove.asm
│ │ ├── Disable USB Screenshot.asm
│ │ ├── Display Stick Info When Paused/
│ │ │ ├── Create Text on Pause.asm
│ │ │ └── Remove Text on UnPause.asm
│ │ ├── Display Tweet Message And Version Number.asm
│ │ ├── Do Not Save Nametag Region to Memcard for GALE01.asm
│ │ ├── Edit Carrot Texture.s
│ │ ├── Edit Hyphen Texture.s
│ │ ├── Frame Advance Rewrite.asm
│ │ ├── GObj_Destory Exits When Input = 0.asm
│ │ ├── HSD_Update Tweak/
│ │ │ ├── Allow Z in VS While Paused.asm
│ │ │ ├── Always Run Debug Update.asm
│ │ │ ├── Check for DBLevel.asm
│ │ │ ├── Clear HSDUpdate for no Debug Melee.asm
│ │ │ └── Clear HSDUpdate for no Debug.asm
│ │ ├── Load .gct on Boot.s
│ │ ├── Load TmDt.asm
│ │ ├── Never Play Movies in Archives.asm
│ │ ├── OSReport Match Load Time/
│ │ │ ├── Output Time Since Last Tick.asm
│ │ │ └── Store Starting Tick.asm
│ │ ├── On No Save.asm
│ │ ├── Overwrite Compile Date.s
│ │ ├── PAL Changes/
│ │ │ ├── Character DAT Patcher.asm
│ │ │ ├── DK - Keep Up B Charge After Getting Hit out of Up B/
│ │ │ │ ├── Keep Charge Aerial Up B.asm
│ │ │ │ └── Keep Charge Grounded Up B.asm
│ │ │ ├── Detection Hitboxes Does Not Skip Hurtbox Collision Check.asm
│ │ │ ├── Fix Freeze Glitch.asm
│ │ │ ├── PAL CSS Indicator.asm
│ │ │ ├── PAL Stock Icons.asm
│ │ │ ├── Samus - Disable Extender/
│ │ │ │ ├── Disable Initial Extender Polling.asm
│ │ │ │ └── Disable Secondary Extender Polling.asm
│ │ │ └── Samus Cant Bomb Jump Out of Grapple.asm
│ │ ├── Save File Renaming.asm
│ │ ├── ScoreDisplay - Change GXLink Pri.asm
│ │ ├── SearchStringTable.asm
│ │ ├── Skip Assert for Respawn Platform.asm
│ │ ├── Skip Assert for no_reaction_always.asm
│ │ ├── Skip SetGroundStateAssert For Restore States.asm
│ │ ├── Store Version Number.s
│ │ ├── Text - Increment Max Size.asm.asm
│ │ └── Text Modifications/
│ │ ├── Add Symbols to ASCII-Menu Text Lookup Table.asm
│ │ ├── Make Spaces Not Store 00s.asm
│ │ ├── Make Spaces Store 0x1A.asm
│ │ └── Parse Numbers Correctly.asm
│ └── Onscreen Display/
│ ├── Act OOS Frame Display/
│ │ ├── Count During GuardOff.asm
│ │ ├── Count During ShieldWait.asm
│ │ ├── Display OOS Frame Count Standalone.asm
│ │ ├── GuardOff - Display OOS Frame Count.asm
│ │ ├── GuardWait - Display OOS Frame Count.asm
│ │ └── Init Frame Count.asm
│ ├── Act OOTumble/
│ │ ├── DamageFall - Check For Interrupt.asm
│ │ ├── DamageFlyTop - CheckForInterrupt.asm
│ │ ├── DamageLightHit - Check For Animation Interrupt.asm
│ │ ├── DamageLightHit - Check For Interrupt - Aerial Jump.asm
│ │ ├── DamageLightHit - Check ForInterrupt.asm
│ │ ├── Increment Post Hitstun Count.asm
│ │ ├── Original Counters and Variable Initializers/
│ │ │ ├── DamageFall - Increment Counter.asm
│ │ │ ├── DamageFlyRoll - Increment Counter.asm
│ │ │ ├── DamageFlyRoll - Init DamageFallCounter.asm
│ │ │ ├── DamageFlyTop - Increment Counter.asm
│ │ │ ├── DamageFlyTop - Init DamageFallCounter.asm
│ │ │ ├── DamageLightHit - Increment Counter.asm
│ │ │ ├── DamageLightHit - Init DamageFallCounter.asm
│ │ │ └── MissFoot - Init Counter.asm
│ │ └── Static Function - Display Frames Spent Post Hitstun.asm
│ ├── Act OoWait/
│ │ ├── Act OOWait- Standalone.asm
│ │ ├── Act OoWait - From Crouch.asm
│ │ ├── Act OoWait - From Landing.asm
│ │ └── Act OoWait - From Wait.asm
│ ├── Additional Playerblock Variables/
│ │ ├── Fastfall Timer/
│ │ │ ├── Display FF Timing.asm
│ │ │ ├── Increment Fastfall Variable.asm
│ │ │ └── Initialize Fastfall Variable.asm
│ │ ├── Frame Advantage/
│ │ │ ├── Initialize Frame Advantage Think.asm
│ │ │ └── Save Pointer to Shield Owner On Hit.asm
│ │ ├── Previous Move Instance Hit By/
│ │ │ └── Backup Previous Move Instance Player was Hit By.asm
│ │ └── StatesAndTimers/
│ │ ├── IncFrameCounts.asm
│ │ └── ShiftStates.asm
│ ├── Check For IC's Static Function.asm
│ ├── Combo Counter/
│ │ ├── Better Combo Counter/
│ │ │ ├── Custom Function Blrl + Keep Combo Counter Going For Missed Techs+Getups.asm
│ │ │ ├── Disregard Projectile Hitboxes w Same Move ID.asm
│ │ │ ├── Disregard Throw Hitboxes.asm.bak
│ │ │ ├── Interrupting Move with Same Move Gives a Unique ID.asm
│ │ │ ├── Keep Combo Counter Going For Missed Techs+Getups.asm
│ │ │ ├── Pummels and Multi-Hits Increment Total Damage But Not Combo Counter.asm
│ │ │ ├── Skip Original Combo End Check.asm
│ │ │ └── Throw Hitboxes Update (Last Damage Source) Variable in Playerblock.asm
│ │ └── Combo Counter - On Combo Increment.asm
│ ├── Dashback/
│ │ ├── Dashback Display - Static Function.asm
│ │ ├── Grab Out of Tilt Turn.asm.bak
│ │ └── Run Out of Tilt Turn.asm
│ ├── Fox Training Codes/
│ │ └── Side B Shorten Display.asm
│ ├── L Cancel Display NEW.asm
│ ├── Ledge Codes/
│ │ ├── Frames Spent in CliffWait.asm
│ │ ├── GALINT/
│ │ │ ├── GALINT Aerail Interrupt.asm
│ │ │ ├── GALINT Laser Land.asm
│ │ │ ├── GALINT Ledgedash.asm
│ │ │ ├── GALINT No Impact Land.asm
│ │ │ └── Standalaone - GALINT Display.asm
│ │ └── Ledgestall/
│ │ └── Ledgestall Display.asm
│ ├── Message Display System/
│ │ ├── Create Message Struct.asm
│ │ ├── Disable Hiding Score on Pause.asm
│ │ ├── Disable Showing Score on Unpause.asm
│ │ └── Display Message 2.0.asm
│ ├── SDI Display/
│ │ ├── Initialize Total SDI Inputs Variable.asm
│ │ └── SDI Display Main.asm
│ ├── Template.s
│ ├── Toggle UI/
│ │ ├── Can Disable All Toggles in Custom RSS.asm
│ │ ├── Disable Save to Bitfield Every Change.asm
│ │ ├── Load Alt Text When Loaded With L.asm
│ │ ├── Load Random Stage Select On L Press.asm
│ │ ├── Load Toggles When Loaded With L .asm
│ │ ├── Press L for OSD Indicator.asm
│ │ ├── Remove Press L for OSD Indicator.asm
│ │ ├── Remove Text When Leaving Custom RSS.asm
│ │ ├── Return to Event Screen When Pressing Start.asm
│ │ ├── Return to First Page When Loaded With L.asm
│ │ ├── Save Toggles When Loaded With L.asm
│ │ ├── Set Flag on Leaving Custom RSS.asm
│ │ └── XY To Adjust Max OSD.asm
│ └── Wavedash Display/
│ ├── Save Airdodge Y Angle.asm
│ └── Wavedash Timing Display.asm
├── Additional ISO Files/
│ ├── TvAmsTc.mth
│ ├── TvLC.mth
│ ├── TvLedDa.mth
│ ├── TvLedTc.mth
│ ├── TvPowSh.mth
│ ├── TvRvrsl.mth
│ ├── TvSDI.mth
│ ├── TvShDrp.mth
│ └── audio/
│ ├── TvAmsTc.hps
│ ├── TvLC.hps
│ ├── TvLedDa.hps
│ ├── TvLedTc.hps
│ ├── TvPowSh.hps
│ ├── TvRvrsl.hps
│ ├── TvSDI.hps
│ └── TvShDrp.hps
├── Build TM Codeset/
│ ├── Build Training Mode Codeset.bat
│ ├── codes.json
│ └── mac/
│ ├── codes.json
│ └── modifyStartDol.sh
├── Build TM Start.dol/
│ ├── Drag Melee v1.02 Start.dol Here.bat
│ └── patch.xdelta
├── MexTK/
│ ├── MexTK.exe.config
│ ├── cssFunction.txt
│ ├── evFunction.txt
│ ├── ftFunction.txt
│ ├── grFunction.txt
│ ├── include/
│ │ ├── archive.h
│ │ ├── audio.h
│ │ ├── boneset.h
│ │ ├── collision.h
│ │ ├── color.h
│ │ ├── css.h
│ │ ├── datatypes.h
│ │ ├── devtext.h
│ │ ├── effects.h
│ │ ├── fighter.h
│ │ ├── hsd.h
│ │ ├── inline.h
│ │ ├── item.h
│ │ ├── kirby.h
│ │ ├── match.h
│ │ ├── math.h
│ │ ├── memcard.h
│ │ ├── mex.h
│ │ ├── obj.h
│ │ ├── offsets.h
│ │ ├── preload.h
│ │ ├── result.h
│ │ ├── scene.h
│ │ ├── stage.h
│ │ ├── structs.h
│ │ ├── text.h
│ │ └── useful.h
│ ├── itFunction.txt
│ ├── kbFunction.txt
│ ├── melee.link
│ ├── mex.h
│ ├── mjFunction.txt
│ ├── mnFunction.txt
│ └── tmFunction.txt
├── README.md
└── patch/
├── events/
│ ├── lab/
│ │ ├── build.bat
│ │ ├── notes.txt
│ │ └── source/
│ │ ├── lab.c
│ │ ├── lab.h
│ │ └── lab_css.c
│ ├── lcancel/
│ │ ├── build.bat
│ │ └── source/
│ │ ├── lcancel.c
│ │ └── lcancel.h
│ ├── ledgedash/
│ │ ├── build.bat
│ │ └── source/
│ │ ├── ledgedash.c
│ │ └── ledgedash.h
│ └── wavedash/
│ ├── build.bat
│ └── source/
│ ├── wavedash.c
│ └── wavedash.h
└── tmdata/
├── build.bat
└── source/
├── events.c
└── events.h
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitattributes
================================================
# Auto detect text files and perform LF normalization
* text=auto
# Custom for Visual Studio
*.cs diff=csharp
# Standard to msysgit
*.doc diff=astextplain
*.DOC diff=astextplain
*.docx diff=astextplain
*.DOCX diff=astextplain
*.dot diff=astextplain
*.DOT diff=astextplain
*.pdf diff=astextplain
*.PDF diff=astextplain
*.rtf diff=astextplain
*.RTF diff=astextplain
================================================
FILE: .gitignore
================================================
# Windows thumbnail cache files
Thumbs.db
ehthumbs.db
ehthumbs_vista.db
# Folder config file
Desktop.ini
# Recycle Bin used on file shares
$RECYCLE.BIN/
# Windows Installer files
*.cab
*.msi
*.msm
*.msp
# Windows shortcuts
*.lnk
# =========================
# Operating System Files
# =========================
ASM/Misc/Store Version Number.asm
ASM/Misc/Overwrite Compile Date.asm
# ==========================
# Project files
# ==========================
Build\ TM\ Codeset/mac/gecko
Additional\ ISO\ Files/codes.gct
Additional\ ISO\ Files/Start.dol
# Mac files
.DS_Store
================================================
FILE: ASM/Additional Codes/Allow Staling in Develop Mode.asm
================================================
#To be inserted at 80089250
b 0x8
================================================
FILE: ASM/Additional Codes/Better Camera/C-Stick Pans Camera.asm
================================================
#To be inserted at 8002cb30
.include "../../Globals.s"
.set Player,5
.set FloatPointer,6
#Float regs
.set Deadzone,5
.set DeadzoneNeg,6
.set PlayerY,7
.set PlayerX,8
#Get Float Pointer
bl Floats
mflr FloatPointer
#Get Player Input Struct
load r3,0x804C1FAC
lbz r4, 0x02C5 (r31)
mulli Player, r4, 0x44
add Player, r3, Player
#Get Deadzone Value from PlCo
lwz r3, -0x514C (r13)
lfs Deadzone, 0(r3)
fneg DeadzoneNeg, Deadzone
CheckYDeadzone:
#Check Y Value
lfs PlayerY, 0x2C(Player)
fcmpo cr0, PlayerY, DeadzoneNeg
ble- StoreY
fcmpo cr0, PlayerY, Deadzone
blt- CheckXDeadzone
StoreY:
lfs f1, 0x318(r31) #Get X
lfs f2, 0x330(r31) #Get zoom level
lfs f3, 0x0(FloatPointer) #Get multiplier
fdivs f3,f2,f3 #Zoom * var
fmuls PlayerY,PlayerY,f3 #Stick axis * zoomed
fadds f1,f1,PlayerY #Add to X
stfs f1, 0x318(r31) #Store
CheckXDeadzone:
lfs PlayerY, 0x28(Player)
fcmpo cr0, PlayerY, DeadzoneNeg
ble- StoreX
fcmpo cr0, PlayerY, Deadzone
blt- Exit
StoreX:
lfs f1, 0x314(r31)
lfs f2, 0x330(r31) #Get zoom level
lfs f3, 0x0(FloatPointer) #Get multiplier
fdivs f3,f2,f3 #Zoom * var
fmuls PlayerY,PlayerY,f3 #Stick axis * zoomed
fadds f1,f1,PlayerY #Add to Y
stfs f1, 0x314(r31)
b Exit
Floats:
blrl
.float 125
Exit:
lbz r0, 0x02C5 (r31)
================================================
FILE: ASM/Additional Codes/Better Camera/CStickPanOffscreen/Bottom.asm
================================================
#To be inserted at 8002c6e4
nop
================================================
FILE: ASM/Additional Codes/Better Camera/CStickPanOffscreen/Left.asm
================================================
#To be inserted at 8002c6bc
nop
================================================
FILE: ASM/Additional Codes/Better Camera/CStickPanOffscreen/Right.asm
================================================
#To be inserted at 8002c6a8
nop
================================================
FILE: ASM/Additional Codes/Better Camera/CStickPanOffscreen/Top.asm
================================================
#To be inserted at 8002c6d0
nop
================================================
FILE: ASM/Additional Codes/Better Camera/SnapToOffscreenPlayers/Always Onscreen.asm
================================================
#To be inserted at 8002cf34
.include "../../../Globals.s"
.set REG_Pauser,31
.set REG_Count,30
backup
#Get player port who paused
load r3,0x8046b6a0
lbz REG_Pauser,0x1(r3)
#Search all players for this port
li REG_Count,0
Loop:
mr r3,REG_Count
branchl r12,PlayerBlock_LoadMainCharDataOffset
cmpwi r3,0
beq IncLoop
#Check their port to see if it matches
mr r3,REG_Count
branchl r12,0x8003345c
cmpw r3,REG_Pauser
beq FoundPauser
IncLoop:
addi REG_Count,REG_Count,1
cmpwi REG_Count,4
blt Loop
b Dead
FoundPauser:
#Check if player is alive
mr r3,REG_Count
branchl r12,PlayerBlock_LoadMainCharDataOffset
lwz r3,0x2C(r3)
lbz r3,0x221F(r3)
rlwinm. r3,r3,0,25,25
bne Dead
Alive:
li r3,0
b Exit
Dead:
li r3,1
Exit:
restore
================================================
FILE: ASM/Additional Codes/Better Camera/SnapToOffscreenPlayers/Snap.asm
================================================
#To be inserted at 8002c5f0
.include "../../../Globals.s"
.set REG_Pauser,31
.set REG_Count,30
backup
#Get player port who paused
load r3,0x8046b6a0
lbz REG_Pauser,0x1(r3)
#Search all players for this port
li REG_Count,0
Loop:
mr r3,REG_Count
branchl r12,PlayerBlock_LoadMainCharDataOffset
cmpwi r3,0
beq IncLoop
#Check their port to see if it matches
mr r3,REG_Count
branchl r12,0x8003345c
cmpw r3,REG_Pauser
beq FoundPauser
IncLoop:
addi REG_Count,REG_Count,1
cmpwi REG_Count,4
blt Loop
b Dead
FoundPauser:
#Check if player is alive
mr r3,REG_Count
branchl r12,PlayerBlock_LoadMainCharDataOffset
lwz r3,0x2C(r3)
lbz r3,0x221F(r3)
rlwinm. r3,r3,0,25,25
bne Dead
Alive:
restore
branch r12,0x8002c644
Dead:
Exit:
restore
lfs f0, 0x000C (r26)
================================================
FILE: ASM/Additional Codes/Better Camera/Unrestricted Camera.asm
================================================
#To be inserted at 8002f5bc
loc_0x0:
lis r3, 0x8048
lbz r3, -25240(r3)
rlwinm. r3, r3, 0, 30, 30
beq- loc_0x48
lis r3, 0x8048
lbz r3, -25296(r3)
cmpwi r3, 0x1C
beq- loc_0x48
li r3, 0x0
stw r3, 760(r31)
lis r3, 0x4700
stw r3, 744(r31)
stw r3, 748(r31)
stw r3, 752(r31)
stw r3, 756(r31)
stw r3, 764(r31)
lis r3, 0x8003
b loc_0x50
loc_0x48:
lis r3, 0x8003
stfs f1, 764(r31)
loc_0x50:
================================================
FILE: ASM/Additional Codes/Boot to CSS/Boot to Main Menu Or CSS.s
================================================
#To be inserted at 801BFA20
.include "../../Globals.s"
li r3,2
================================================
FILE: ASM/Additional Codes/Boot to Event Mode/Boot to Main Menu Or CSS.asm
================================================
#To be inserted at 801BFA20
.include "../../Globals.s"
.set LoopCount,12
.set InputStruct,11
#Check if any player is pressing Z
li LoopCount,0
load InputStruct,InputStructStart
#Loop through inputs
InputLoop:
mulli r0, LoopCount, 68
add r3, r0, InputStruct
lwz r3, 0 (r3)
rlwinm. r0,r3,0,21,21 #Check For X
bne LoadCSS
addi LoopCount,LoopCount,1
cmpwi LoopCount,4
blt InputLoop
b LoadEventMenu
LoadCSS:
#Play SFX
li r3,1
branchl r12,SFX_MenuCommonSound
li r3,2
b Exit
#Boot to Event Menu
LoadEventMenu:
li r3, 1
Exit:
================================================
FILE: ASM/Additional Codes/Boot to Event Mode/Main Menu Starts at Event Mode.asm
================================================
#To be inserted at 801b02dc
.include "../../Globals.s"
.set entity,31
.set player,31
.set playerdata,31
#Spoof current (soon to be previous) screen
li r3,Scene.EventMode
load r4,SceneController
stb r3,Scene.CurrentMajor(r4)
li r3,0x00
================================================
FILE: ASM/Additional Codes/CSS KO Star Codes/Calculate KO Stars Upon Exiting Dairantou.asm
================================================
#To be inserted at 8016ebac
.include "../../Globals.s"
#Check if VS Mode
load r3,SceneController
lbz r3,Scene.CurrentMajor(r3)
cmpwi r3,Scene.VSMode
bne Exit
#Init Struct?
load r3,0x803dda00 #Get Some Scene Struct
branchl r12,0x801a5f00 #Wipe and Copy Match Info
#Update KO Star Count
load r3,0x803dda00 #Get Some Scene Struct
lwz r4, -0x77C0 (r13) #Get SSS Struct
addi r4, r4, 1424
li r5,0 #Next Minor Scene
branchl r12,0x801a5f64 #Update KO Stars
#Update VS Records
load r3,0x8047c028 #Get Match Info
branchl r12,0x801623a4 #Update VS Records
Exit:
lwz r0, 0x001C (sp)
lwz r31, 0x0014 (sp)
================================================
FILE: ASM/Additional Codes/CSS KO Star Codes/Disable KO Star Deletion When Leaving CSS.asm
================================================
#To be inserted at 801a5600
.include "../../Globals.s"
nop
================================================
FILE: ASM/Additional Codes/Collision Link Draw Order Fix [Punkline]/New Draw Location.asm
================================================
#To be inserted at 80030288
.include "../../Globals.s"
branchl r12,0x80030A78
cmpwi r3, 0
beq- _return
# checks for collision link display flag
_if_drawing_stage_collisions:
branchl r12, 0x80059e60
# moves post-process drawing call to before player draw
# causes geometry to be drawn on black/white screen, if enabled simultaneously
_return:
lbz r0, 0 (r31)
================================================
FILE: ASM/Additional Codes/Collision Link Draw Order Fix [Punkline]/Remove Original Draw.asm
================================================
#To be inserted at 8005a2ec
.include "../../Globals.s"
nop
================================================
FILE: ASM/Additional Codes/DEBUGLOG.s
================================================
#To be inserted at 801a4cb4
.include "../Globals.s"
.set GObj_Create,0x803901f0
.set GObj_AddUserData,0x80390b68
.set GObj_AddProc,0x8038fd54
.set HSD_MemAlloc,0x8037f1e4
.set DevelopText_CreateDataTable,0x80302834
.set DevelopText_Activate,0x80302810
.set DevelopText_AddString,0x80302be4
.set DevelopText_EraseAllText,0x80302bb0
.set DevelopMode_Text_ResetCursorXY,0x80302a3c
.set sprintf,0x80323cf4
.set REG_DevelopText,31
.set REG_GObjData,30
.set REG_GObj,29
backup
#Create Rectangle
li r3,0x348
branchl r12,HSD_MemAlloc
mr r8,r3
li r3,6
li r4,0
li r5,0
li r6,20
li r7,7
branchl r12,DevelopText_CreateDataTable
mr REG_DevelopText,r3
#Activate Text
lwz r3, -0x4884 (r13)
mr r4,REG_DevelopText
branchl r12,DevelopText_Activate
#Hide blinking cursor
li r3,0
stb r3,0x26(REG_DevelopText)
#Create Background GObj
li r3,0
li r4,0
li r5,0
branchl r12,GObj_Create
mr REG_GObj,r3
#Allocate Space
li r3,64
branchl r12,HSD_MemAlloc
mr REG_GObjData,r3
#Zero
li r4,64
branchl r12,ZeroAreaLength
#Initialize
mr r6,REG_GObjData
mr r3,REG_GObj
li r4,4
load r5,HSD_Free
branchl r12,GObj_AddUserData
#Add Process
mr r3,REG_GObj
bl DebugLogThink
mflr r4
li r5,0
branchl r12,GObj_AddProc
#Store pointer to dev text
stw REG_DevelopText,0x0(REG_GObjData)
b Exit
########################################
DebugLogThink:
blrl
.set REG_GObjData,31
backup
lwz REG_GObjData,0x2C(r3)
#/*
#Erase all text
lwz r3,0x0(REG_GObjData)
branchl r12,DevelopText_EraseAllText
lwz r3,0x0(REG_GObjData)
li r4,0
li r5,0
branchl r12,DevelopMode_Text_ResetCursorXY
#*/
#Check heap
lwz r3, -0x58A0 (r13)
branchl r12,0x80344168
mr r5,r3
#Display
lwz r3,0x0(REG_GObjData)
bl String
mflr r4
branchl r12,0x80302d4c#DevelopText_AddString
DebugLogThink_Exit:
restore
blr
#########################################
String:
blrl
.string "%d\n bytes free" #08X\n
.align 2
Exit:
restore
li r0, 0
/*
load r4,0xCC002002
lhz r3,0x0(r4)
ori r3,r3,0x4
sth r3,0x0(r4)
li r3, 1
*/
================================================
FILE: ASM/Additional Codes/DPad Down to Random Stage.s
================================================
#To be inserted at 8026325c
.include "../Globals.s"
#Get Random Stage Byte
load r4,0x8045BF17
#Check for DPad Down
rlwinm. r0, r7, 0, 29, 29
beq CheckForStart
li r3,0x1
stb r3,0x0(r4)
branch r12,0x80263264
CheckForStart:
#Check for Start
rlwinm. r0, r7, 0, 19, 19
beq Exit
li r3,0x0
stb r3,0x0(r4)
#Original Codeline
Exit:
rlwinm. r0, r7, 0, 19, 19
================================================
FILE: ASM/Additional Codes/Debug Mode Codes/Debug Language is English by Default.asm
================================================
#To be inserted at 803fa258
.long 0x00000001
================================================
FILE: ASM/Additional Codes/Debug Mode Codes/Exiting Debug Goes to Main Menu.asm
================================================
#To be inserted at 801B0A14
li r3, 1
================================================
FILE: ASM/Additional Codes/Debug Mode Codes/Tournament Mode Goes to Debug.asm
================================================
#To be inserted at 8022D638
li r0, 6
================================================
FILE: ASM/Additional Codes/Default Tournament Settings/4 Stocks.asm
================================================
#To be inserted at 803D4A4C
.long 0x04000A00
================================================
FILE: ASM/Additional Codes/Default Tournament Settings/8 Minutes.asm
================================================
#To be inserted at 803D4A50
.long 0x08010100
================================================
FILE: ASM/Additional Codes/Default Tournament Settings/No Items.asm
================================================
#To be inserted at 803D4A60
.long 0xFF000000
================================================
FILE: ASM/Additional Codes/Default Tournament Settings/Stock Mode.asm
================================================
#To be inserted at 803D4A48
.long 0x00340000
================================================
FILE: ASM/Additional Codes/Default Tournament Settings/Tournament Stages.asm
================================================
#To be inserted at 803D4A78
.long 0xE70000B0
================================================
FILE: ASM/Additional Codes/Delete Bootup OSReports.asm
================================================
#To be inserted at 80160154
.include "../Globals.s"
# Remove all previous OSReports
load r3,0x804cf7e8
li r4,0
stw r4,0xC(r3)
li r0, 0
================================================
FILE: ASM/Additional Codes/Disable CSS Anim Loop.s
================================================
#To be inserted at 80263384
b 0x10
================================================
FILE: ASM/Additional Codes/Disable FoD Reflection.asm
================================================
#To be inserted at 8008114c
.include "../Globals.s"
.set REG_ReflectCallback,31
#Save reflection callback
mr r3,r0
backup
mr REG_ReflectCallback,r3
#Count player gobjs
branchl r12,0x800860c4 #CountPlayers
#Check if 4 or more
cmpwi r3,4
blt ShowReflect
#Dont draw reflection
li r3,0
b Exit
ShowReflect:
mr r3,REG_ReflectCallback
b Exit
Exit:
restore
mr r0,r3
lwz r4,GObj_Lists(r13)
lwz r3, 0x0020 (r4)
================================================
FILE: ASM/Additional Codes/Disable FoD in Doubles.asm
================================================
#To be inserted at 80266ce0
.include "../Globals.s"
#######################################
## Runs During CSS -> SSS Transition ##
#######################################
.set REG_RandomStageField,5
.set REG_RulesPointer,6
#Ensure only all other legal stages are enabled
#Get Random Stage Select Bitflags
lwz REG_RulesPointer, -0x77C0 (r13)
addi REG_RulesPointer, REG_RulesPointer, 7344
lwz REG_RandomStageField,0x18(REG_RulesPointer)
#Check if only all legal stages are on
load r3,0xE70000B0
xor. r3,r3,REG_RandomStageField
beq CheckForTeams
#Check if the only other stage off is FoD
cmpwi r3,0x20
beq CheckForTeams
b Exit
CheckForTeams:
#Get Teams On/Off Bool
lwz r3, -0x49F0 (r13)
lbz r3,0x18(r3)
#Check If Teams is On or Off
cmpwi r3,0x1
beq Doubles
Singles:
#Flip FoD Bit On in Random Stage Bitflag (FoD is bit #26)
li r3,0x1
rlwimi REG_RandomStageField,r3,5,26,26
stw REG_RandomStageField,0x18(REG_RulesPointer)
b Exit
Doubles:
#Flip FoD Bit Off in Random Stage Bitflag (FoD is bit #26)
li r3,0x0
rlwimi REG_RandomStageField,r3,5,26,26
stw REG_RandomStageField,0x18(REG_RulesPointer)
b Exit
Exit:
li r3, 1
================================================
FILE: ASM/Additional Codes/Disable Item Spawn in Develop Mode.asm
================================================
#To be inserted at 80226530
.include "../Globals.s"
nop
================================================
FILE: ASM/Additional Codes/Disable Item Spawn in Develop Mode.s
================================================
#To be inserted at 80226530
.include "../Globals.s"
nop
================================================
FILE: ASM/Additional Codes/Disable Rumble on Unplug.asm
================================================
#To be inserted at 803775a4
.include "../Globals.s"
#Check if unplugged
lbz r3, 0x000A (r25) #current read
extsb r3,r3
cmpwi r3,-1
bne Original
lbz r3, 0x0041 (r26) #prev read
extsb. r3,r3
bne Original
#Disable rumble
mr r3,r24
li r4,0
branchl r12,Rumble_StoreRumbleFlag
Original:
lbz r0, 0x000A (r25)
================================================
FILE: ASM/Additional Codes/Disable Special Records/Disable Special Messages.asm
================================================
#To be inserted at 80173eec
blr
================================================
FILE: ASM/Additional Codes/Disable Special Records/Disable Trophy Messages.asm
================================================
#To be inserted at 80172898
blr
================================================
FILE: ASM/Additional Codes/Display Animation Name for Special Moves in Develop Mode/Display Animation Name for Special Moves in Develop Mode.asm
================================================
#To be inserted at 80226acc
.include "../../Globals.s"
.set entity,31
.set playerdata,28
.set player,29
#Get Animation Data Pointer
mr r3,playerdata
lwz r4,0x14(playerdata)
branchl r12,0x80085fd4
#Get Move Name String
lwz r3,0x0(r3)
#Get Start of Move Name
StringSearchLoop:
lbzu r4,0x1(r3)
cmpwi r4,0x4E #Check For "N"
bne StringSearchLoop
lbzu r4,0x1(r3)
cmpwi r4,0x5F #Check for Underscore
bne StringSearchLoop
addi r3,r3,0x1 #Start of Move Name in r3
#Copy Move Name To Cut Off "fiagtree" Text
bl StringSpace
mflr r5
subi r4,r5,0x1
subi r3,r3,0x1
StringCopyLoop:
lbzu r6,0x1(r3)
cmpwi r6,0x5F #Check for Underscore
beq ExitCopyLoop
stbu r6,0x1(r4)
b StringCopyLoop
ExitCopyLoop:
li r3,0x0
stbu r3,0x1(r4)
mr r4,r5
b exit
StringSpace:
blrl
.long 0x00000000
.long 0x00000000
.long 0x00000000
.long 0x00000000
.long 0x00000000
.long 0x00000000
.long 0x00000000
exit:
mr r3,r31
crclr 6
================================================
FILE: ASM/Additional Codes/Display Ungrabbable Hurtboxes/Main.asm
================================================
#To be inserted at 8000a284
.include "../../Globals.s"
#Check if vuln
cmpwi r6,0
bne Exit
#Check if this is an ungrabbable hurtbox
lwz r0,0x48(r28)
cmpwi r0,0
bne Exit
#Override color
bl Color
mflr r3
b Skip
Color:
blrl
.long 0xAB27FF80
Exit:
lwz r3, 0 (r3)
Skip:
================================================
FILE: ASM/Additional Codes/Enable 1P in VS Mode No Time.asm
================================================
#To be inserted at 80263064
.include "../Globals.s"
.set REG_ReadyPlayers,31
backup
#Backup players
mr REG_ReadyPlayers,r4
#Check if mode is set to time
branchl r12,LoadRulesSettingsPointer1
lbz r4,0x2(r3)
cmpwi r4,0
bne Check2Players
#Check if time is set to none
lbz r4,0x3(r3)
cmpwi r4,0
bne Check2Players
Check1Player:
#Check for 1 players
cmpwi REG_ReadyPlayers,1
b Exit
Check2Players:
#Check for 2 players
cmpwi REG_ReadyPlayers,2
Exit:
restore
================================================
FILE: ASM/Additional Codes/Enable C Stick Always/Enable CStick for CPU in Debug.asm
================================================
#To be inserted at 8006ae00
nop
================================================
FILE: ASM/Additional Codes/Enable C Stick Always/Rotate Camera with Dpad Down and C Stick - Initiate.asm
================================================
#To be inserted at 802274f0
.include "../../Globals.s"
#Get Inputs
load r4,0x804c1fac
mulli r3,r30,68
add r3,r3,r4
#Check for dpad down
lwz r3,0x0(r3)
rlwinm. r3,r3,0,29,29
bne Original
#Exit
branch r12,0x802275f4
Original:
lfs f0, -0x3CA4 (rtoc)
================================================
FILE: ASM/Additional Codes/Enable C Stick Always/Rotate Camera with Dpad Down and C Stick.asm
================================================
#To be inserted at 80227b70
.include "../../Globals.s"
#Get Inputs
load r4,0x804c1fac
add r4,r4,r5
#Check for dpad down
lwz r4,0x0(r4)
rlwinm. r4,r4,0,29,29
bne Original
#Exit
branch r12,0x80227b98
Original:
lfs f0, -0x3CA4 (rtoc)
================================================
FILE: ASM/Additional Codes/Enable C Stick Always/Single Player Always Returns False.asm
================================================
#To be inserted at 8016B480
nop
================================================
FILE: ASM/Additional Codes/Enable C Stick Always/Spoof Debug Level as 0 for Human C Stick Inputs.asm
================================================
#To be inserted at 8006AE90
li r0, 0
================================================
FILE: ASM/Additional Codes/Faster CSS Load.asm
================================================
#To be inserted at 802641B0
li r0, 1
================================================
FILE: ASM/Additional Codes/Frame Advance Audio.s
================================================
#To be inserted at 80359750
.include "../Globals.s"
load r5,0x80479d48
# If game unpaused, play sound
lbz r3,0x20(r5)
rlwinm. r0,r3,0,0x1
beq Original
# Game is paused, check if advancing this frame
lbz r3,0x22(r5)
rlwinm. r0,r3,0,0x1
bne Original
# Skip audio update
branch r12,0x80359830
Original:
mr r3, r30
================================================
FILE: ASM/Additional Codes/GX Draw/Main.s
================================================
#To be inserted at 80080e40
.include "../../Globals.s"
.set REG_PlayerData,30
.set REG_Interrupt,28
backup
#check for renderpass 2
cmpwi r29,2
bne Exit
bl FirefoxTrajectory
bl DIDraw
b Exit
#region Firefox Trajectory
FirefoxTrajectory_Constants:
blrl
.set ECB_TopY,0x0 #scale * value
.set ECB_BottomY,0x4 #neg(scale * vlaue)
.set ECB_LeftX,0x8 #neg(scale * vlaue)
.set ECB_LeftY,0xC #0
.set ECB_RightX,0x10 #scale * value
.set ECB_RightY,0x14 #0
.set FinalAnimYDifference,0x18
.set Float2,0x1C
.set FirefoxDrawZ,0x20
.set LineColor,0x24
.set LeftWallColor,0x28
.set RightWallColor,0x2C
.set CeilingColor,0x30
.set GroundColor,0x34
.float 9
.float 2.5
.float -3.3
.float 5.7
.float 3.3
.float 5.7
.float 0.4
.float 2
.float 10
.byte 0, 138, 255, 255
.byte 12, 255, 41, 255
.byte 12, 255, 41, 255
.byte 255, 55, 55, 255
.byte 255, 255, 255, 255
.set StackSize,0x300
.set Stack_BackedUpReg,0x8
.set Stack_BackedUpReg_Length,0x30
.set Stack_BackedUpFloats, (Stack_BackedUpReg+Stack_BackedUpReg_Length)
.set Stack_BackedUpFloats_Length,0x14
.set Stack_ECBBoneStruct, (Stack_BackedUpFloats+Stack_BackedUpFloats_Length)
.set Stack_ECBBoneStruct_Length,0x18
.set Stack_ECBStruct, (Stack_ECBBoneStruct+Stack_ECBBoneStruct_Length)
.set Stack_ECBStruct_Length,0x1AC
.set Stack_MiscSpace, (Stack_ECBStruct+Stack_ECBStruct_Length)
#gprs
.set REG_EventConstants,31
.set REG_ECBStruct,20
.set REG_ECBBoneStruct,21
.set REG_LoopCount,22
.set REG_GX,23
.set REG_CObjBackup,24
#fprs
.set REG_arctan,31
.set REG_XComp,30
.set REG_YComp,31
.set REG_XPerFrame,29
.set REG_YPerFrame,28
.set REG_CurrXPos,27
.set REG_CurrYPos,26
#constants
.set RandomAngleRange,20
FirefoxTrajectory:
mflr r0
stw r0, 0x4(r1)
stwu r1,-StackSize(r1) # make space for 12 registers
stmw r20,Stack_BackedUpReg(r1)
#Check for firefox trajectory
lwz r3,0x4(REG_PlayerData)
cmpwi r3,Fox.Int
beq FirefoxTrajectory_isSpacie
cmpwi r3,Falco.Int
beq FirefoxTrajectory_isSpacie
b FirefoxTrajectory_Exit
FirefoxTrajectory_isSpacie:
#Check if in up b hold
lwz r3,0x10(REG_PlayerData)
cmpwi r3,353
beq FirefoxTrajectory_isFirefoxHold
cmpwi r3,354
beq FirefoxTrajectory_isFirefoxHold
b FirefoxTrajectory_Exit
FirefoxTrajectory_isFirefoxHold:
#Get Floats
bl FirefoxTrajectory_Constants
mflr REG_EventConstants
#If frame advance && HMN, use HW inputs
li r3,0
branchl r12,0x801a45e8
cmpwi r3,1
bne FirefoxTrajectory_PBInputs
lbz r3,0xC(REG_PlayerData)
branchl r12,0x8003241c
cmpwi r3,0x0
bne FirefoxTrajectory_PBInputs
FirefoxTrajectory_HWInputs:
load r3,HSD_InputStructStart
lbz r4,0x618(REG_PlayerData)
mulli r4,r4,68
add r3,r3,r4
lfs REG_XComp,InputStruct_LeftAnalogXFloat(r3)
lfs REG_YComp,InputStruct_LeftAnalogYFloat(r3)
#If Holding A, override and use PB Inputs
lwz r0,InputStruct_HeldButtons(r3)
rlwinm. r0,r0,0,0x100
bne FirefoxTrajectory_PBInputs
#Now apply deadzone
lfs f0, -0x778C (rtoc)
lwz r3, -0x514C (r13)
lfs f1, 0 (r3)
fmr f2,REG_XComp
fcmpo cr0,f2,f0
bge 0x8
fneg f2,f2
fcmpo cr0,f2,f1
bge 0x8
lfs REG_XComp, -0x778C (rtoc)
fmr f2,REG_YComp
fcmpo cr0,f2,f0
bge 0x8
fneg f2,f2
fcmpo cr0,f2,f1
bge 0x8
lfs REG_YComp, -0x778C (rtoc)
b FirefoxTrajectory_GetInputsEnd
FirefoxTrajectory_PBInputs:
lfs REG_XComp,0x620(REG_PlayerData)
lfs REG_YComp,0x624(REG_PlayerData)
FirefoxTrajectory_GetInputsEnd:
#Get atan2
fmr f1,REG_YComp
lfs f2,0x2C(REG_PlayerData)
fmuls f2,f2,REG_XComp
branchl r12,0x80022c30
fmr REG_arctan,f1
#Get XComp
fmr f1,REG_arctan
branchl r12,0x80326240
fmr REG_XComp,f1
fmr f1,REG_arctan
branchl r12,0x803263d4
fmr REG_YComp,f1
#Get Firefox distance per frame
lwz r3, 0x02D4 (REG_PlayerData)
lfs f1, 0x0074 (r3)
lfs f0, 0x002C (REG_PlayerData)
fmuls f1,f1,REG_XComp
fmuls REG_XPerFrame,f1,f0
lfs f1, 0x0074 (r3)
fmuls REG_YPerFrame,f1,REG_YComp
#Create an ECB struct on the stack
addi REG_ECBBoneStruct,sp,Stack_ECBBoneStruct
addi REG_ECBStruct,sp,Stack_ECBStruct
mr r3,REG_ECBStruct
branchl r12,0x80041ee4
#Create ECB Bone struct
/*
0x00 = ECB Current Top Y Offset scale * value
0x04 = ECB Current Bottom Y Offset neg(scale * vlaue)
0x08 = ECB Current Left X Offset neg(scale * vlaue)
0x0C = ECB Current Left Y Offset 0
0x10 = ECB Current Right X Offset scale * value
0x14 = ECB Current Right Y Offset 0
*/
#Copy Struct
mr r3,REG_ECBBoneStruct
addi r4,REG_EventConstants,ECB_TopY
li r5,0x18
branchl r12,memcpy
#Place Current XY into struct
lfs REG_CurrXPos,0xB0(REG_PlayerData)
lfs REG_CurrYPos,0xB4(REG_PlayerData)
#Subtract 0.4 to account for the frame of animation left in this state
lfs f1,FinalAnimYDifference(REG_EventConstants)
fsubs REG_CurrYPos,REG_CurrYPos,f1
lfs f1,0xB8(REG_PlayerData)
stfs f1,0x24(REG_ECBStruct)
#Init Loop
li REG_LoopCount,0
#Init GX Prim
lwz r5, 0x02D4 (REG_PlayerData)
lfs f1, 0x0068 (r5)
fctiwz f1,f1
stfd f1,Stack_MiscSpace(sp)
lwz r3,Stack_MiscSpace+4(sp)
load r4,0x001F1305
load r5,0x00001455
branchl r12,prim.new
mr REG_GX,r3
FirefoxTrajectory_CollisionLoop:
#Store current position
stfs REG_CurrXPos,0x4(REG_ECBStruct)
stfs REG_CurrYPos,0x8(REG_ECBStruct)
lfs f1, -0x778C (rtoc)
stfs f1,0xC(REG_ECBStruct)
#Check if frame X or greater
lwz r5, 0x02D4 (REG_PlayerData)
lfs f1,0x70(r5)
fctiwz f1,f1
stfd f1,Stack_MiscSpace(sp)
lwz r3,Stack_MiscSpace+4(sp)
cmpw REG_LoopCount,r3
blt FirefoxTrajectory_CollisionLoop_SkipDecay
FirefoxTrajectory_CollisionLoop_Decay:
lfs f1,0x78(r5)
fmuls f1,f1,REG_XComp
lfs f2, 0x002C (REG_PlayerData)
fmuls f1,f1,f2
fsubs REG_XPerFrame,REG_XPerFrame,f1
lfs f1,0x78(r5)
fmuls f1,f1,REG_YComp
fsubs REG_YPerFrame,REG_YPerFrame,f1
FirefoxTrajectory_CollisionLoop_SkipDecay:
#Shift previous positions down
lfs f1,0x4(REG_ECBStruct)
lfs f2,0x8(REG_ECBStruct)
lfs f3,0xC(REG_ECBStruct)
stfs f1,0x1C(REG_ECBStruct)
stfs f2,0x20(REG_ECBStruct)
stfs f3,0x24(REG_ECBStruct)
#Store next position
fadds f1,REG_CurrXPos,REG_XPerFrame
stfs f1,0x4(REG_ECBStruct)
fadds f1,REG_CurrYPos,REG_YPerFrame
stfs f1,0x8(REG_ECBStruct)
lfs f1, -0x778C (rtoc)
stfs f1,0xC(REG_ECBStruct)
#Run collision
mr r3,REG_ECBStruct
mr r4,REG_ECBBoneStruct
branchl r12,0x800475f4#0x800473cc
#Drop through platforms
cmpwi r3,0
beq FirefoxTrajectory_CollisionLoop_SkipPlatform
mr r3,REG_ECBStruct
branchl r12,0x8004cbc0
cmpwi r3,0
beq FirefoxTrajectory_CollisionLoop_SkipPlatform
lwz r0, 0x014C (REG_ECBStruct)
stw r0, 0x003C (REG_ECBStruct)
FirefoxTrajectory_CollisionLoop_SkipPlatform:
#Get new position
lfs REG_CurrXPos,0x4(REG_ECBStruct)
lfs REG_CurrYPos,0x8(REG_ECBStruct)
#Inc Collision ID
lwz r3,0x38(REG_ECBStruct)
addi r3,r3,1
stw r3,0x38(REG_ECBStruct)
#Determine line color
lwz r3,0x134(REG_ECBStruct)
rlwinm. r0,r3,0,0x8000
bne FirefoxTrajectory_CollisionLoop_TouchingGround
rlwinm. r0,r3,0,0x6000
bne FirefoxTrajectory_CollisionLoop_TouchingCeiling
rlwinm. r0,r3,0,0x20
bne FirefoxTrajectory_CollisionLoop_TouchingLeftWall
rlwinm. r0,r3,0,0x40
bne FirefoxTrajectory_CollisionLoop_TouchingLRightWall
FirefoxTrajectory_CollisionLoop_TouchingNothing:
lwz r4,LineColor(REG_EventConstants)
b FirefoxTrajectory_CollisionLoop_GetColorEnd
FirefoxTrajectory_CollisionLoop_TouchingGround:
lwz r4,GroundColor(REG_EventConstants)
b FirefoxTrajectory_CollisionLoop_GetColorEnd
FirefoxTrajectory_CollisionLoop_TouchingCeiling:
lwz r4,CeilingColor(REG_EventConstants)
b FirefoxTrajectory_CollisionLoop_GetColorEnd
FirefoxTrajectory_CollisionLoop_TouchingLeftWall:
lwz r4,LeftWallColor(REG_EventConstants)
b FirefoxTrajectory_CollisionLoop_GetColorEnd
FirefoxTrajectory_CollisionLoop_TouchingLRightWall:
lwz r4,RightWallColor(REG_EventConstants)
b FirefoxTrajectory_CollisionLoop_GetColorEnd
FirefoxTrajectory_CollisionLoop_GetColorEnd:
#Draw this point
lfs f1,0x84(REG_ECBStruct)
fadds f1,REG_CurrXPos,f1
lfs f2,0x88(REG_ECBStruct)
lfs f3,Float2(REG_EventConstants)
fdivs f2,f2,f3
fadds f2,REG_CurrYPos,f2
lfs f3,FirefoxDrawZ(REG_EventConstants)
mr r3,REG_GX
stfs f1,0x0(r3)
stfs f2,0x0(r3)
stfs f3,0x0(r3)
stw r4,0x0(r3)
#Inc Loop
addi REG_LoopCount,REG_LoopCount,1
lwz r5, 0x02D4 (REG_PlayerData)
lfs f1, 0x0068 (r5)
fctiwz f1,f1
stfd f1,Stack_MiscSpace(sp)
lwz r3,Stack_MiscSpace+4(sp)
cmpw REG_LoopCount,r3
blt FirefoxTrajectory_CollisionLoop
#End Loop
branchl r12,prim.close
FirefoxTrajectory_Exit:
lmw r20,Stack_BackedUpReg(r1)
lwz r0, StackSize+4(r1)
addi r1,r1,StackSize # release the space
mtlr r0
blr
####################################################
#endregion
#region DI Draw
DIDraw_Constants:
blrl
.set ECB_TopY,0x0 #scale * value
.set ECB_BottomY,0x4 #neg(scale * vlaue)
.set ECB_LeftX,0x8 #neg(scale * vlaue)
.set ECB_LeftY,0xC #0
.set ECB_RightX,0x10 #scale * value
.set ECB_RightY,0x14 #0
.set FirefoxDrawZ,0x18
.set AliveLineColor,0x1C
.set DeadLineColor,0x20
.set LeftWallColor,0x24
.set RightWallColor,0x28
.set CeilingColor,0x2C
.set GroundColor,0x30
.set ASDIColor,0x34
.float 9
.float 2.5
.float -3.3
.float 5.7
.float 3.3
.float 5.7
.float 10
.byte 0, 138, 255, 255
.byte 255, 55, 55, 255
.byte 12, 255, 41, 255
.byte 12, 255, 41, 255
.byte 255, 0, 255, 255
.byte 255, 255, 255, 255
.byte 255, 86, 20, 255
.set StackSize,0x300
.set Stack_BackedUpReg,0x8
.set Stack_BackedUpReg_Length,0x30
.set Stack_BackedUpFloats, (Stack_BackedUpReg+Stack_BackedUpReg_Length)
.set Stack_BackedUpFloats_Length,0x14
.set Stack_ECBBoneStruct, (Stack_BackedUpFloats+Stack_BackedUpFloats_Length)
.set Stack_ECBBoneStruct_Length,0x18
.set Stack_ECBStruct, (Stack_ECBBoneStruct+Stack_ECBBoneStruct_Length)
.set Stack_ECBStruct_Length,0x1AC
.set Stack_ASDIBackup, (Stack_ECBStruct+Stack_ECBStruct_Length)
.set Stack_ASDIBackup_Length,0x8
.set Stack_MiscSpace, (Stack_ASDIBackup+Stack_ASDIBackup_Length)
#gprs
.set REG_EventConstants,31
.set REG_ECBStruct,20
.set REG_ECBBoneStruct,21
.set REG_LoopCount,22
.set REG_GX,23
.set REG_HeldInputs,24
.set REG_GroundState,24
.set REG_CollisionInfo,25
.set REG_Temp,26 #this register is used for the draw loop, make sure to change both
.set REG_OverrideRemainingFrames,27
#fprs
.set REG_arctan,31
.set REG_XComp,30
.set REG_YComp,29
.set REG_KnockbackX,28
.set REG_KnockbackY,27
.set REG_CurrXPos,26
.set REG_CurrYPos,25
.set REG_DIInput,24
.set REG_KnockbackMag,23
.set REG_CStickX,22
.set REG_CStickY,21
.set REG_ASDIX,22
.set REG_ASDIY,21
.set REG_Gravity,30
#constants
.set MaxColl,40
DIDraw:
mflr r0
stw r0, 0x4(r1)
stwu r1,-StackSize(r1) # make space for 12 registers
stmw r20,Stack_BackedUpReg(r1)
#Check for DI Draw
lbz r3,0x221A(REG_PlayerData) #Check If in Hitlag
rlwinm. r3,r3,0,0x20
beq DIDraw_Exit
lbz r3, 0x221C (REG_PlayerData)
rlwinm. r0,r3,0,0x2
beq DIDraw_Exit
#Get Floats
bl DIDraw_Constants
mflr REG_EventConstants
#region GetInputs
#If frame advance && HMN, use HW inputs
li r3,0
branchl r12,0x801a45e8
cmpwi r3,1
bne DIDraw_PBInputs
lbz r3,0xC(REG_PlayerData)
branchl r12,0x8003241c
cmpwi r3,0x0
bne DIDraw_PBInputs
DIDraw_HWInputs:
load r3,HSD_InputStructStart
lbz r4,0x618(REG_PlayerData)
mulli r4,r4,68
add r3,r3,r4
#If Holding A, override and use PB Inputs
lwz r0,InputStruct_HeldButtons(r3)
rlwinm. r0,r0,0,0x100
bne DIDraw_PBInputs
lfs REG_XComp,InputStruct_LeftAnalogXFloat(r3)
lfs REG_YComp,InputStruct_LeftAnalogYFloat(r3)
lfs REG_CStickX,InputStruct_RightAnalogXFloat(r3)
lfs REG_CStickY,InputStruct_RightAnalogYFloat(r3)
#Get L/R input
lwz REG_HeldInputs,InputStruct_HeldButtons(r3)
rlwinm. r0,REG_HeldInputs,0,0x20
bne DIDraw_HWInputs_PressingLR
rlwinm. r0,REG_HeldInputs,0,0x40
bne DIDraw_HWInputs_PressingLR
DIDraw_HWInputs_NoLR:
li REG_HeldInputs,0
b 0x8
DIDraw_HWInputs_PressingLR:
lis REG_HeldInputs,0x8000
#Now apply analog deadzone
lfs f0, -0x778C (rtoc)
lwz r3, -0x514C (r13)
lfs f1, 0 (r3)
fmr f2,REG_XComp
fcmpo cr0,f2,f0
bge 0x8
fneg f2,f2
fcmpo cr0,f2,f1
bge 0x8
lfs REG_XComp, -0x778C (rtoc)
fmr f2,REG_YComp
fcmpo cr0,f2,f0
bge 0x8
fneg f2,f2
fcmpo cr0,f2,f1
bge 0x8
lfs REG_YComp, -0x778C (rtoc)
#Now apply cstick deadzone
lfs f0, -0x778C (rtoc)
lwz r3, -0x514C (r13)
lfs f1, 0 (r3)
fmr f2,REG_CStickX
fcmpo cr0,f2,f0
bge 0x8
fneg f2,f2
fcmpo cr0,f2,f1
bge 0x8
lfs REG_CStickX, -0x778C (rtoc)
fmr f2,REG_CStickY
fcmpo cr0,f2,f0
bge 0x8
fneg f2,f2
fcmpo cr0,f2,f1
bge 0x8
lfs REG_CStickY, -0x778C (rtoc)
b DIDraw_GetInputsEnd
DIDraw_PBInputs:
lfs REG_XComp,0x620(REG_PlayerData)
lfs REG_YComp,0x624(REG_PlayerData)
lwz REG_HeldInputs,0x65C(REG_PlayerData)
lfs REG_CStickX,0x638(REG_PlayerData)
lfs REG_CStickY,0x63C(REG_PlayerData)
DIDraw_GetInputsEnd:
#endregion
#Get original KB vector
lfs REG_KnockbackX,0x8C(REG_PlayerData)
lfs REG_KnockbackY,0x90(REG_PlayerData)
#Calculate player's influence over trajectory
#region GetArctan
DIDraw_GetArctan:
#Get atan2
fmr f1,REG_KnockbackY
fmr f2,REG_KnockbackX
branchl r12,0x80022c30
fmr REG_arctan,f1
#Do something
fmuls f1,REG_KnockbackY,REG_KnockbackY
fmadds REG_KnockbackMag,REG_KnockbackX,REG_KnockbackX,f1
lfs f0, -0x750C (rtoc)
fcmpo cr0,REG_KnockbackMag,f0
ble DIDraw_SkipUnk
#Do a bunch of stuff
frsqrte f2,REG_KnockbackMag
lfd f4, -0x74E0 (rtoc)
lfd f3, -0x74D8 (rtoc)
fmul f0,f2,f2
fmul f2,f4,f2
fnmsub f0,REG_KnockbackMag,f0,f3
fmul f2,f2,f0
fmul f0,f2,f2
fmul f2,f4,f2
fnmsub f0,REG_KnockbackMag,f0,f3
fmul f2,f2,f0
fmul f0,f2,f2
fmul f2,f4,f2
fnmsub f0,REG_KnockbackMag,f0,f3
fmul f0,f2,f0
fmul f0,REG_KnockbackMag,f0
frsp f0,f0
fmr REG_KnockbackMag,f0
DIDraw_SkipUnk:
#endregion
#region CalculateASDI
DIDraw_CalculateASDI:
#CStick has priority
#Check if cstick magnitude > 0.7
fmuls f1,REG_CStickX,REG_CStickX
fmuls f0,REG_CStickY,REG_CStickY
lwz r3, -0x514C (r13)
lfs f2, 0x04B0 (r3)
fadds f1,f1,f0
fmuls f0,f2,f2
fcmpo cr0,f1,f0
bge DIDraw_CalculateASDICStickApply
#Now check left stick
fmuls f1,REG_YComp,REG_YComp
fmuls f2,REG_XComp,REG_XComp
lwz r3, -0x514C (r13)
lfs f0, 0x04B0 (r3)
fmuls f0,f0,f0
fadds f1,f1,f2
fcmpo cr0,f1,f0
blt DIDraw_CalculateASDINone
DIDraw_CalculateASDILeftStickApply:
#Multiply by 3
lfs f1, 0x04BC (r3)
fmuls REG_ASDIX,REG_XComp,f1
fmuls REG_ASDIY,REG_YComp,f1
b DIDraw_CalculateASDIEnd
DIDraw_CalculateASDINone:
#Null ASDI
lfs REG_ASDIX, -0x750C (rtoc)
lfs REG_ASDIY, -0x750C (rtoc)
b DIDraw_CalculateASDIEnd
DIDraw_CalculateASDICStickApply:
#Multiply by 3
lfs f1, 0x04BC (r3)
fmuls REG_ASDIX,REG_CStickX,f1
fmuls REG_ASDIY,REG_CStickY,f1
DIDraw_CalculateASDIEnd:
#Save these values for later
stfs REG_ASDIX,Stack_ASDIBackup+0(sp)
stfs REG_ASDIY,Stack_ASDIBackup+4(sp)
#endregion
#region CalculateKBReduction
DIDraw_CalculateKBReduction:
#Check if holding L/R/Z
rlwinm. r0,REG_HeldInputs,0,0x80000000
beq DIDraw_CalculateKBReductionEnd
lwz r3, -0x514C (r13)
lfs f0, 0x01AC (r3)
fmuls REG_KnockbackMag,f0,REG_KnockbackMag
fmr f1,REG_arctan
branchl r12,cos
fmuls REG_KnockbackX,f1,REG_KnockbackMag
fmr f1,REG_arctan
branchl r12,sin
fmuls REG_KnockbackY,f1,REG_KnockbackMag
#Get new atan2
fmr f1,REG_KnockbackY
fmr f2,REG_KnockbackX
branchl r12,0x80022c30
fmr REG_arctan,f1
DIDraw_CalculateKBReductionEnd:
#endregion
#region CalculateDI
DIDraw_CalculateDI:
#If grounded, skip DI
lwz r3,0xE0(REG_PlayerData)
cmpwi r3,0
beq DIDraw_CalculateDIEnd
#If both inputting nothing, skip DI
lfs f1, -0x750C (rtoc)
fcmpo cr0,f1,REG_XComp
bne DIDraw_IsInputting
fcmpo cr0,f1,REG_YComp
beq DIDraw_CalculateDIEnd
DIDraw_IsInputting:
#If some condition is met, skip DI
lfs f0, -0x74E8 (rtoc)
fneg f1,REG_KnockbackX
fmuls f1,f1,f1
fmuls f2,REG_KnockbackY,REG_KnockbackY
fadds f1,f1,f2
fcmpo cr0,f1,f0
blt DIDraw_CalculateDIEnd
#Get DI value
fneg f2,REG_KnockbackX
fmuls f2,f2,REG_YComp
fmuls f3,REG_KnockbackY,REG_XComp
fadds f2,f2,f3
fmuls f2,f2,f2
fdivs REG_DIInput,f2,f1
lfs f4, -0x750C (rtoc)
#Cross product
stfs REG_XComp,Stack_MiscSpace+0(sp)
stfs REG_YComp,Stack_MiscSpace+4(sp)
lfs f0, -0x750C (rtoc)
stfs f0,Stack_MiscSpace+8(sp)
addi r3,REG_PlayerData,0x8C
addi r4,sp,Stack_MiscSpace+0
addi r5,sp,Stack_MiscSpace+12
branchl r12,0x80342e58
#Check if over 0
lfs f0, -0x750C (rtoc)
lfs f1,Stack_MiscSpace+20(sp)
fcmpo cr0,f1,f0
bge 0x8
fneg REG_DIInput,REG_DIInput
#Apply new angle
lwz r3, -0x514C (r13)
lfs f2, -0x7510 (rtoc)
lfs f0, 0x01A8 (r3)
fmuls f0,f2,f0
fmadds REG_arctan,f0,REG_DIInput,REG_arctan
fmr f1,REG_arctan
branchl r12,cos
fmuls REG_KnockbackX,REG_KnockbackMag,f1
fmr f1,REG_arctan
branchl r12,sin
fmuls REG_KnockbackY,REG_KnockbackMag,f1
DIDraw_CalculateDIEnd:
#endregion
#Perform collision checks for each frame of hitstun
#region DIDraw_Collision
#region DIDraw_CollisionLoop_Init
DIDraw_CollisionLoop_Init:
#Create an ECB struct on the stack
addi REG_ECBBoneStruct,sp,Stack_ECBBoneStruct
addi REG_ECBStruct,sp,Stack_ECBStruct
mr r3,REG_ECBStruct
branchl r12,0x80041ee4
#Get Current XY
lfs REG_CurrXPos,0xB0(REG_PlayerData)
lfs REG_CurrYPos,0xB4(REG_PlayerData)
#Init Loop
li REG_LoopCount,0
lfs REG_Gravity,-0x750C (rtoc)
lwz REG_GroundState,0xE0(REG_PlayerData)
li REG_OverrideRemainingFrames,0
#Allocate collision info struct
lfs f1,0x2340(REG_PlayerData)
fctiwz f1,f1
stfd f1,Stack_MiscSpace(sp)
lwz r3,Stack_MiscSpace+4(sp)
mulli r3,r3,CollInfo_Length #backing up X bytes per collision check
addi r3,r3,0x4 #small header containing the amount of collision checks
branchl r12,HSD_MemAlloc
mr REG_CollisionInfo,r3
#Init collision info struct
li r3,-1 #init as 0 checks
stw r3,0x0(REG_CollisionInfo)
#If grounded, copy over ground ECB data
cmpwi REG_GroundState,0
bne DIDraw_DrawTrajectory_SkipCopyGroundData
addi r3,REG_ECBStruct,0x130
addi r4,REG_PlayerData,0x820
li r5,0x28
branchl r12,memcpy
DIDraw_DrawTrajectory_SkipCopyGroundData:
#endregion
#region DIDraw_CollisionLoop_Start
DIDraw_CollisionLoop:
#region Initalize ECB Bone Positions
#Create ECB Bone struct
#If loop count < noECBUpdate-remaining hitlag fraes, use current ECB bottom Y offset
lwz r3,0x88C(REG_PlayerData)
lfs f1,0x195C(REG_PlayerData)
fctiwz f1,f1
stfd f1,Stack_MiscSpace(sp)
lwz r4,Stack_MiscSpace+0x4(sp)
sub r3,r3,r4
cmpw REG_LoopCount,r3
blt DIDraw_CollisionLoop_ECBBonesUseCurrent
#Copy Struct
mr r3,REG_ECBBoneStruct
addi r4,REG_EventConstants,ECB_TopY
li r5,0x18
branchl r12,memcpy
#If the player is grounded, ECB bottom is 0
cmpwi REG_GroundState,0
bne DIDraw_CollisionLoop_ECBBonesEnd
lfs f1, -0x750C (rtoc)
stfs f1,0x04(REG_ECBBoneStruct)
b DIDraw_CollisionLoop_ECBBonesEnd
DIDraw_CollisionLoop_ECBBonesUseCurrent:
#Use Current Bone Positions
lfs f1,0x778(REG_PlayerData)
stfs f1,0x00(REG_ECBBoneStruct)
lfs f1,0x780(REG_PlayerData)
stfs f1,0x04(REG_ECBBoneStruct)
lfs f1,0x78C(REG_PlayerData)
stfs f1,0x08(REG_ECBBoneStruct)
lfs f1,0x790(REG_PlayerData)
stfs f1,0x0C(REG_ECBBoneStruct)
lfs f1,0x784(REG_PlayerData)
stfs f1,0x10(REG_ECBBoneStruct)
lfs f1,0x788(REG_PlayerData)
stfs f1,0x14(REG_ECBBoneStruct)
b DIDraw_CollisionLoop_ECBBonesEnd
DIDraw_CollisionLoop_ECBBonesEnd:
#Store current position
lfs f1, -0x750C (rtoc)
stfs REG_CurrXPos,0x4(REG_ECBStruct)
stfs REG_CurrYPos,0x8(REG_ECBStruct)
stfs f1,0xC(REG_ECBStruct)
stfs REG_CurrXPos,0x10(REG_ECBStruct)
stfs REG_CurrYPos,0x14(REG_ECBStruct)
stfs f1,0x18(REG_ECBStruct)
#endregion
#region Apply ASDI
DIDraw_CollisionLoop_ApplyASDI:
#Apply ASDI X
fadds REG_CurrXPos,REG_CurrXPos,REG_ASDIX
#Only apply ASDI Y if in the air
cmpwi REG_GroundState,0
beq 0x8
fadds REG_CurrYPos,REG_CurrYPos,REG_ASDIY
#Null ASDI
lfs REG_ASDIX, -0x750C (rtoc)
lfs REG_ASDIY, -0x750C (rtoc)
#endregion
#region Decay Knockback
#Apply either gravity or traction
cmpwi REG_GroundState,1
bne DIDraw_CollisionLoop_DecayGrounded
DIDraw_CollisionLoop_DecayAerial:
#Account for gravity
lfs f1, 0x016C (REG_PlayerData)
lfs f2, 0x0170 (REG_PlayerData)
fneg f2,f2
fsubs REG_Gravity,REG_Gravity,f1
fcmpo cr0,REG_Gravity,f2
bge 0x8
fmr REG_Gravity,f2
#Decay KB Vector
fmr f1,REG_KnockbackY
fmr f2,REG_KnockbackX
branchl r12,0x80022c30 #Get arctan of the KB vector
fmr REG_arctan,f1
#Decay X KB
branchl r12,cos
lwz r3, -0x514C (r13)
lfs f2, 0x0204 (r3)
fnmsubs REG_KnockbackX,f2,f1,REG_KnockbackX
#Decay Y KB
fmr f1,REG_arctan
branchl r12,sin
lwz r3, -0x514C (r13)
lfs f2, 0x0204 (r3)
fnmsubs REG_KnockbackY,f2,f1,REG_KnockbackY
b DIDraw_CollisionLoop_DecayEnd
DIDraw_CollisionLoop_DecayGrounded:
#Get Ground Friction's multipllier
lwz r3,0x4(REG_PlayerData)
cmpwi r3,Popo.Int
beq DIDraw_CollisionLoop_DecayGrounded_isICs
cmpwi r3,Nana.Int
beq DIDraw_CollisionLoop_DecayGrounded_isICs
#Get grounds friction multiplier
lfs f1, -0x7A38 (rtoc)
lwz r0, 0x014C (REG_ECBStruct)
cmpwi r0,-1
beq DIDraw_CollisionLoop_DecayGrounded_isICs
lwz r3,0x150(REG_ECBStruct)
branchl r12,0x800569ec #Get ground's friction multiplier
b 0x8
DIDraw_CollisionLoop_DecayGrounded_isICs:
lfs f1, -0x7A38 (rtoc)
#Account for friction
lfs f0, 0x128 (REG_PlayerData)
fmuls f1,f0,f1
lwz r4, -0x514C (r13)
lfs f0, 0x0200 (r4)
fmuls f0,f1,f0
#Apply Friction to knockback
lfs f2, -0x76B0 (rtoc)
fcmpo cr0,REG_KnockbackX,f2
bge DIDraw_CollisionLoop_DecayGrounded_Subtract
fadds f0,f0,REG_KnockbackX
fmr REG_KnockbackX,f0
fcmpo cr0,f0,f2
ble DIDraw_CollisionLoop_DecayGroundedEnd
fmr REG_KnockbackX,f2
b DIDraw_CollisionLoop_DecayGroundedEnd
DIDraw_CollisionLoop_DecayGrounded_Subtract:
fsubs f0,REG_KnockbackX,f0
fmr REG_KnockbackX,f0
fcmpo cr0,f0,f2
bge DIDraw_CollisionLoop_DecayGroundedEnd
fmr REG_KnockbackX,f2
b DIDraw_CollisionLoop_DecayGroundedEnd
DIDraw_CollisionLoop_DecayGroundedEnd:
DIDraw_CollisionLoop_DecayEnd:
#endregion
#region Shift Positions
#Shift previous positions down
lfs f1,0x4(REG_ECBStruct)
lfs f2,0x8(REG_ECBStruct)
lfs f3,0xC(REG_ECBStruct)
stfs f1,0x1C(REG_ECBStruct)
stfs f2,0x20(REG_ECBStruct)
stfs f3,0x24(REG_ECBStruct)
#Store next position
fadds f1,REG_CurrXPos,REG_KnockbackX
stfs f1,0x4(REG_ECBStruct)
fadds f1,REG_CurrYPos,REG_KnockbackY
fadds f1,f1,REG_Gravity
stfs f1,0x8(REG_ECBStruct)
lfs f1, -0x778C (rtoc)
stfs f1,0xC(REG_ECBStruct)
#endregion
#region Run Collision Check
.if MaxColl>=0
#Only run X collision checks because theyre expensive
cmpwi REG_LoopCount,MaxColl
blt DIDraw_CollisionLoop_DetermineCollision
#Spoof as not touching anything
li r3,0
stw r3,0x134(REG_ECBStruct)
lfs REG_CurrXPos,0x4(REG_ECBStruct)
lfs REG_CurrYPos,0x8(REG_ECBStruct)
#If grounded and max collision checks, just stop updating position
cmpwi REG_GroundState,0
bne DIDraw_CollisionLoop_StageBehaviorEnd
li REG_OverrideRemainingFrames,1
b DIDraw_CollisionLoop_StageBehaviorEnd
.endif
DIDraw_CollisionLoop_DetermineCollision:
#Run collision
cmpwi REG_GroundState,1
beq DIDraw_CollisionLoop_AerialCollision
DIDraw_CollisionLoop_GroundCollision:
#Grounded Collision
mr r3,REG_ECBStruct
mr r4,REG_ECBBoneStruct
branchl r12,0x8004b21c
xori REG_GroundState,r3,0x1
b DIDraw_CollisionLoop_CollisionEnd
DIDraw_CollisionLoop_AerialCollision:
#Aerial Collision
mr r3,REG_ECBStruct
mr r4,REG_ECBBoneStruct
branchl r12,0x800475f4
DIDraw_CollisionLoop_CollisionEnd:
#endregion
#region Stage Collision Behavior
#Get new position
lfs REG_CurrXPos,0x4(REG_ECBStruct)
lfs REG_CurrYPos,0x8(REG_ECBStruct)
#Inc Collision ID
lwz r3,0x38(REG_ECBStruct)
addi r3,r3,1
stw r3,0x38(REG_ECBStruct)
#Determine line collision behavior
lwz r3,0x134(REG_ECBStruct)
rlwinm. r0,r3,0,0x8000
bne DIDraw_CollisionLoop_TouchingGround
rlwinm. r0,r3,0,0x6000
bne DIDraw_CollisionLoop_TouchingCeiling
rlwinm. r0,r3,0,0x20
bne DIDraw_CollisionLoop_TouchingWall
rlwinm. r0,r3,0,0x40
bne DIDraw_CollisionLoop_TouchingWall
DIDraw_CollisionLoop_TouchingNothing:
b DIDraw_CollisionLoop_StageBehaviorEnd
#region Touching Ground
DIDraw_CollisionLoop_TouchingGround:
#If grounded, dont run KB manip code
cmpwi REG_GroundState,0
beq DIDraw_CollisionLoop_StageBehaviorEnd
#Check if over max horizontal velocity
lwz r4, -0x514C (r13)
lfs f1, 0x0164 (r4)
fcmpo cr0,REG_KnockbackX,f1
ble 0x8
fmr REG_KnockbackX,f1
fneg f1,f1
fcmpo cr0,REG_KnockbackX,f1
bge 0x8
fmr REG_KnockbackX,f1
#Adjust KB
lfs f1,0x158(REG_ECBStruct)
fmuls REG_KnockbackX,REG_KnockbackX,f1
lfs f1,0x154(REG_ECBStruct)
fneg f1,f1
fmuls REG_KnockbackY,REG_KnockbackX,f1
#REMOVE ALL Y KB?
lfs REG_KnockbackY, -0x750C (rtoc)
#Set as grounded
li REG_GroundState,0
b DIDraw_CollisionLoop_StageBehaviorEnd
#endregion
#region Touching Ceiling
DIDraw_CollisionLoop_TouchingCeiling:
#If grounded, dont run KB manip code
cmpwi REG_GroundState,0
beq DIDraw_CollisionLoop_StageBehaviorEnd
#Self-Induced velocity
lfs f1, -0x750C (rtoc)
stfs f1,Stack_MiscSpace+0x0(sp)
stfs REG_Gravity,Stack_MiscSpace+0x4(sp)
#KB-Induced
stfs REG_KnockbackX,Stack_MiscSpace+0x8(sp)
stfs REG_KnockbackY,Stack_MiscSpace+0xC(sp)
#Add vectors
addi r3,sp,Stack_MiscSpace+0x0
addi r4,sp,Stack_MiscSpace+0x8
branchl r12,0x8000d4a0
#Unk
addi r3,sp,Stack_MiscSpace+0x0
addi r4,REG_ECBStruct,0x190
branchl r12,0x8000dc6c
#Decay KB
lwz r3, -0x514C (r13)
lfs f1, 0x01BC (r3)
lfs f2,Stack_MiscSpace+0x0(sp)
lfs f3,Stack_MiscSpace+0x4(sp)
fmuls REG_KnockbackX,f1,f2
fmuls REG_KnockbackY,f1,f3
b DIDraw_CollisionLoop_StageBehaviorEnd
#endregion
#region Touching Wall
DIDraw_CollisionLoop_TouchingWall:
#If grounded, dont run KB manip code
cmpwi REG_GroundState,0
beq DIDraw_CollisionLoop_StageBehaviorEnd
#Get walls data
lwz r3,0x134(REG_ECBStruct)
rlwinm. r0,r3,0,0x20
bne DIDraw_CollisionLoop_LeftWallsData
rlwinm. r0,r3,0,0x40
bne DIDraw_CollisionLoop_RightWallsData
DIDraw_CollisionLoop_RightWallsData:
addi REG_Temp,REG_ECBStruct,380
b 0x8
DIDraw_CollisionLoop_LeftWallsData:
addi REG_Temp,REG_ECBStruct,360
#Self-Induced velocity
lfs f1, -0x750C (rtoc)
stfs f1,Stack_MiscSpace+0x0(sp)
stfs REG_Gravity,Stack_MiscSpace+0x4(sp)
#KB-Induced
stfs REG_KnockbackX,Stack_MiscSpace+0x8(sp)
stfs REG_KnockbackY,Stack_MiscSpace+0xC(sp)
#Add vectors
addi r3,sp,Stack_MiscSpace+0x0
addi r4,sp,Stack_MiscSpace+0x8
branchl r12,0x8000d4a0
#Unk
addi r3,sp,Stack_MiscSpace+0x0
mr r4,REG_Temp
branchl r12,0x8000dc6c
#Decay KB
lwz r3, -0x514C (r13)
lfs f1, 0x01BC (r3)
lfs f2,Stack_MiscSpace+0x0(sp)
lfs f3,Stack_MiscSpace+0x4(sp)
fmuls REG_KnockbackX,f1,f2
fmuls REG_KnockbackY,f1,f3
lfs REG_Gravity, -0x6DA0 (rtoc)
b DIDraw_CollisionLoop_StageBehaviorEnd
#endregion
DIDraw_CollisionLoop_StageBehaviorEnd:
#endregion
#region Ground to Air Check
.if MaxColl>=0
DIDraw_CollisionLoop_GroundToAirCheck:
.set GroundToAirRemainingFrames,5
#Ensure not touching ground this frame
lwz r3,0x134(REG_ECBStruct)
rlwinm. r0,r3,0,0x8000
bne DIDraw_CollisionLoop_GroundToAirCheckEnd
#Ensure was touching ground last frame
lwz r3,0x138(REG_ECBStruct)
rlwinm. r0,r3,0,0x8000
beq DIDraw_CollisionLoop_GroundToAirCheckEnd
#Check if over MaxColl
cmpwi REG_LoopCount,MaxColl
blt DIDraw_CollisionLoop_GroundToAirCheckEnd
#Check if REG_OverrideRemainingFrames is already set
cmpwi REG_OverrideRemainingFrames,0
bgt DIDraw_CollisionLoop_GroundToAirCheckEnd
#Set REG_OverrideRemainingFrames
li REG_OverrideRemainingFrames,GroundToAirRemainingFrames
DIDraw_CollisionLoop_GroundToAirCheckEnd:
.endif
#endregion
#region Save Collision Info
.set CollInfo_Length,0x18
.set CollInfo_XPos,0x0
.set CollInfo_YPos,0x4
.set CollInfo_EnvBitfield,0x8
.set CollInfo_ECBTopY,0xC
.set CollInfo_ECBLeftY,0x10
.set CollInfo_KnockbackY,0x14
#Update collision check count
stw REG_LoopCount,0x0(REG_CollisionInfo)
#Get this frames offset in info struct
addi r3,REG_CollisionInfo,0x4 #skip past header
mulli r4,REG_LoopCount,CollInfo_Length
add r3,r3,r4
#Store data
stfs REG_CurrXPos,CollInfo_XPos(r3)
stfs REG_CurrYPos,CollInfo_YPos(r3)
lwz r4,0x134(REG_ECBStruct)
stw r4,CollInfo_EnvBitfield(r3)
lfs f1,0x88(REG_ECBStruct)
stfs f1,CollInfo_ECBTopY(r3)
lfs f1,0xA0(REG_ECBStruct)
stfs f1,CollInfo_ECBLeftY(r3)
stfs REG_KnockbackY,CollInfo_KnockbackY(r3)
#endregion
DIDraw_CollisionLoop_IncLoop:
#Check override frames first
cmpwi REG_OverrideRemainingFrames,0
ble DIDraw_CollisionLoop_IncLoopNoOverride
#Decrement override frames
subi REG_OverrideRemainingFrames,REG_OverrideRemainingFrames,1
cmpwi REG_OverrideRemainingFrames,0
bgt DIDraw_CollisionLoop_IncLoopNoOverride
#Override and exit loop prematurely
b DIDraw_CollisionLoop_IncLoopEnd
DIDraw_CollisionLoop_IncLoopNoOverride:
#Inc Loop
addi REG_LoopCount,REG_LoopCount,1
lfs f1,0x2340(REG_PlayerData)
fctiwz f1,f1
stfd f1,Stack_MiscSpace(sp)
lwz r3,Stack_MiscSpace+4(sp)
cmpw REG_LoopCount,r3
blt DIDraw_CollisionLoop
DIDraw_CollisionLoop_IncLoopEnd:
/*
.if MaxColl>=0
#Output collision checks count
bl DIDraw_CollisionLoop_Text
mflr r3
lwz r4,TM_GameFrameCounter(r13)
mr r5,REG_LoopCount
branchl r12,OSReport
b DIDraw_CollisionLoop_TextEnd
DIDraw_CollisionLoop_Text:
blrl
.string "frame %d performed %d collision checks\n"
.align 2
DIDraw_CollisionLoop_TextEnd:
.endif
*/
#endregion
#endregion
#Draw out each frame of hitstun
#region DIDraw_Draw
.set REG_FramesCollisionInfo,26
.set REG_LineColor,27
#region DIDraw_DrawLoop_Init
DIDraw_DrawLoop_Init:
#Init Loop
li REG_LoopCount,0
#Init GX Prim
lwz r3,0x0(REG_CollisionInfo)
addi r3,r3,2 #collision frames + 2 for ASDI frames
load r4,0x001F1306
load r5,0x00000C55
branchl r12,prim.new
mr REG_GX,r3
#Get line color (check if results in death)
.set REG_DeathLoopCount,28
li REG_DeathLoopCount,0
DIDraw_DrawLoop_Init_DeathLoop:
addi r3,REG_CollisionInfo,0x4
mulli r4,REG_DeathLoopCount,CollInfo_Length
add r3,r3,r4 #get last frames info
lfs REG_CurrXPos,CollInfo_XPos(r3)
lfs REG_CurrYPos,CollInfo_YPos(r3)
lfs REG_KnockbackY,CollInfo_KnockbackY(r3)
branchl r12,0x80224b38 #right blastzone
fcmpo cr0,REG_CurrXPos,f1
bgt DIDraw_DrawLoop_Init_Dead
branchl r12,0x80224b50 #left blastzone
fcmpo cr0,REG_CurrXPos,f1
blt DIDraw_DrawLoop_Init_Dead
branchl r12,0x80224b80 #bottom blastzone
fcmpo cr0,REG_CurrYPos,f1
blt DIDraw_DrawLoop_Init_Dead
branchl r12,0x80224b68 #top blastzone
fcmpo cr0,REG_CurrYPos,f1
ble DIDraw_DrawLoop_Init_DeathLoop_Inc
cmpwi REG_GroundState,0
beq DIDraw_DrawLoop_Init_Dead
lwz r3, -0x514C (r13)
lfs f0, 0x04F0 (r3)
fcmpo cr0,REG_KnockbackY,f0
ble DIDraw_DrawLoop_Init_DeathLoop_Inc
DIDraw_DrawLoop_Init_Dead:
lwz REG_LineColor,DeadLineColor(REG_EventConstants)
b DIDraw_DrawLoop_Init_DeathLoop_Exit
DIDraw_DrawLoop_Init_DeathLoop_Inc:
addi REG_DeathLoopCount,REG_DeathLoopCount,1
lwz r3,0x0(REG_CollisionInfo)
cmpw REG_DeathLoopCount,r3
blt DIDraw_DrawLoop_Init_DeathLoop
#Is alive, make blue
lwz REG_LineColor,AliveLineColor(REG_EventConstants)
DIDraw_DrawLoop_Init_DeathLoop_Exit:
#Draw the ASDI
#Get original ASDI values
lfs REG_ASDIX,Stack_ASDIBackup+0(sp)
lfs REG_ASDIY,Stack_ASDIBackup+4(sp)
#If no ASDI, use blue
lfs f0, -0x750C (rtoc)
fcmpo cr0,REG_ASDIX,f0
bne DIDraw_DrawLoop_Init_HasASDI
lfs f0, -0x750C (rtoc)
fcmpo cr0,REG_ASDIY,f0
bne DIDraw_DrawLoop_Init_HasASDI
mr r4,REG_LineColor
b 0x8
DIDraw_DrawLoop_Init_HasASDI:
lwz r4,ASDIColor(REG_EventConstants)
#Draw starting point
lfs f1,0x6F4(REG_PlayerData) #X = TopN X
lfs f2,0x790(REG_PlayerData) #Y = ECBLeftY + TopN Y
lfs f3,0x6F8(REG_PlayerData)
fadds f2,f2,f3
lfs f3,FirefoxDrawZ(REG_EventConstants)
stfs f1,0x0(REG_GX)
stfs f2,0x0(REG_GX)
stfs f3,0x0(REG_GX)
stw r4,0x0(REG_GX)
#Draw end point
lfs f1,0x6F4(REG_PlayerData) #X = TopN X
fadds f1,f1,REG_ASDIX
lfs f2,0x790(REG_PlayerData) #Y = ECBLeftY + TopN Y
lfs f3,0x6F8(REG_PlayerData)
fadds f2,f2,f3
fadds f2,f2,REG_ASDIY
lfs f3,FirefoxDrawZ(REG_EventConstants)
stfs f1,0x0(REG_GX)
stfs f2,0x0(REG_GX)
stfs f3,0x0(REG_GX)
stw r4,0x0(REG_GX)
#endregion
#region DIDraw_DrawLoop_Start
DIDraw_DrawLoop:
#Get this frames offset in info struct
addi r3,REG_CollisionInfo,0x4 #skip past header
mulli r4,REG_LoopCount,CollInfo_Length
add REG_FramesCollisionInfo,r3,r4
#region DIDraw_DrawLoop_DetermineColor
#Determine line collision behavior
lwz r3,CollInfo_EnvBitfield(REG_FramesCollisionInfo)
rlwinm. r0,r3,0,0x8000
bne DIDraw_DrawLoop_TouchingGround
rlwinm. r0,r3,0,0x6000
bne DIDraw_DrawLoop_TouchingCeiling
rlwinm. r0,r3,0,0x20
bne DIDraw_DrawLoop_TouchingLeftWall
rlwinm. r0,r3,0,0x40
bne DIDraw_DrawLoop_TouchingRightWall
DIDraw_DrawLoop_TouchingNothing:
mr r4,REG_LineColor
b DIDraw_DrawLoop_GetColorEnd
DIDraw_DrawLoop_TouchingGround:
lwz r4,GroundColor(REG_EventConstants)
b DIDraw_DrawLoop_GetColorEnd
DIDraw_DrawLoop_TouchingCeiling:
lwz r4,CeilingColor(REG_EventConstants)
b DIDraw_DrawLoop_GetColorEnd
DIDraw_DrawLoop_TouchingLeftWall:
lwz r4,LeftWallColor(REG_EventConstants)
b DIDraw_DrawLoop_GetColorEnd
DIDraw_DrawLoop_TouchingRightWall:
lwz r4,RightWallColor(REG_EventConstants)
b DIDraw_DrawLoop_GetColorEnd
DIDraw_DrawLoop_GetColorEnd:
#endregion
#Draw this point
lfs f1,CollInfo_XPos(REG_FramesCollisionInfo) #X = TopN X
/*
lfs f2,CollInfo_ECBLeftY(REG_FramesCollisionInfo) #Y = ECBLeftY + TopN Y
lfs f3,CollInfo_YPos(REG_FramesCollisionInfo)
fadds f2,f2,f3
*/
lfs f2,0x790(REG_PlayerData)
lfs f3,CollInfo_YPos(REG_FramesCollisionInfo)
fadds f2,f2,f3
lfs f3,FirefoxDrawZ(REG_EventConstants)
mr r3,REG_GX
stfs f1,0x0(r3)
stfs f2,0x0(r3)
stfs f3,0x0(r3)
stw r4,0x0(r3)
#Inc Loop
addi REG_LoopCount,REG_LoopCount,1
lwz r3,0x0(REG_CollisionInfo)
cmpw REG_LoopCount,r3
blt DIDraw_DrawLoop
#Free collision struct
mr r3,REG_CollisionInfo
branchl r12,HSD_Free
#End Loop
branchl r12,prim.close
#endregion
#endregion
DIDraw_Exit:
lmw r20,Stack_BackedUpReg(r1)
lwz r0, StackSize+4(r1)
addi r1,r1,StackSize # release the space
mtlr r0
blr
####################################################
#endregion
Exit:
#Return
restore
mr r3, r28
================================================
FILE: ASM/Additional Codes/Game Modes/All Star Test/Disable Invisible Melee.s
================================================
#To be inserted at 801ba5d0
.include "../../../Globals.s"
.set REG_MinorData,31
.set REG_IronManData,30
.set REG_MatchData,29
.set IronManData,0x8040a5e0
backup
mr REG_MinorData,r3
#Get Match Data
lwz REG_MatchData, -0x77C0 (r13)
addi REG_MatchData, REG_MatchData, 4624
load REG_IronManData,IronManData
#Destroy Existing Heap
#Reset cache
branchl r12,0x80018c6c
branchl r12,0x80018254
li r3,4
branchl r12,0x80017700
IronMan_SetupMatchInit:
.set REG_Count,20
.set REG_PlayerCount,21
.set REG_Port,22
#Init
li REG_PlayerCount,0
li REG_Count,0
IronMan_SetupMatchLoop:
mr r3,REG_MatchData
mr r4,REG_Count
bl GetPlayersMatchInfo #Get the players data
cmpwi r3,-1
beq IronMan_SetupMatchEnd
#Set the first character as the current character
mr REG_Port,r4
mulli r5,REG_PlayerCount,0x1C
add r5,r5,REG_IronManData
lbz r6,0x0(r5) #Get the next iron man character
addi r5,r5,1
lbzx r5,r6,r5
stb r5,0x0(r3) #Store character to match data
stb REG_PlayerCount,0x3(r3) #Store costume to match data
#Get Prelod Table
load r3,0x8043208c
mulli r4,REG_Port,0x8
add r4,r3,r4
stw r5,0x0(r4) #Store to preload table
stb REG_PlayerCount,0x4(r4) #Store costume
addi REG_PlayerCount,REG_PlayerCount,1
IronMan_SetupMatchIncLoop:
addi REG_Count,REG_Count,1
cmpwi REG_Count,6
blt IronMan_SetupMatchLoop
IronMan_SetupMatchEnd:
#Now get a random stage
branchl r12,0x8025bbd4
sth r3,0x16(REG_MatchData)
load r4,0x80432088
stw r3,0x0(r4) #Store to prelaod
#Request preload
branchl r12,0x80018254
#Store Pointer to onStartMelee function
lwz r4, -0x77C0 (r13)
addi r4, r4, 4624
bl IronMan_Init
mflr r5
stw r5,0x4C(r4)
b InjectionExit
#region IronMan_Init
IronMan_Init:
blrl
.set REG_GObj,31
.set REG_Data,30
.set DataSize,64
backup
#Create GObj
li r3,22
li r4,0
li r5,0
branchl r12,GObj_Create
mr REG_GObj,r3
#Alloc Mem
li r3,DataSize
branchl r12,HSD_MemAlloc
mr REG_Data,r3
#Zero Data
mr r3,REG_Data
li r4,DataSize
branchl r12,ZeroAreaLength
#Attach Data
mr r3,REG_GObj
li r4,14
load r5,HSD_Free
mr r6,REG_Data
branchl r12,GObj_AddUserData
#Attach Process
mr r3,REG_GObj
bl IronMan_Think
mflr r4
li r5,23
branchl r12,GObj_AddProc
#Create Text
.set REG_Count,20
.set REG_IronManData,21
.set REG_PlayerCount,22
.set REG_Temp,23
.set REG_Text,24
#Init
li REG_PlayerCount,0
li REG_Count,0
load REG_IronManData,IronManData
IronMan_Init_AdjustStocksLoop:
#Check if exists
mr r3,REG_Count
branchl r12,PlayerBlock_LoadMainCharDataOffset
cmpwi r3,0
beq IronMan_Init_AdjustStocksIncLoop
#Increment player count
addi REG_PlayerCount,REG_PlayerCount,1
subi r4,REG_PlayerCount,1
mulli r4,r4,0x1C
add REG_Temp,r4,REG_IronManData
#Create Text
li r3,2
load r4,0x804a1f58
lwz r4,0x0(r4)
branchl r12,Text_CreateTextStruct
mr REG_Text,r3
addi r3,REG_GObjData,OFST_TextPointers
mulli r4,REG_Count,4
stwx REG_Text,r3,r4
#SET TEXT SPACING TO TIGHT
li r4,0x1
stb r4,0x49(REG_Text)
#SET TEXT TO CENTER AROUND X LOCATION
li r4,0x1
stb r4,0x4A(REG_Text)
#Update Text Contents
load r4,0x804a0ff0
mulli r3,REG_Count,0xC #HUD Info is 0xC Long Per Player
lfsx f1,r3,r4 #Get This Players HUD Info
bl ScorePosition
mflr r5
lfs f2,0x0(r5)
mr r3,REG_Text
bl ScoreText
mflr r4
lbz r5,0x0(REG_Temp)
extsb r5,r5
addi r5,r5,1
branchl r12,Text_InitializeSubtext
#Update Size
mr r3,REG_Text
li r4,0
lfs f1, -0x1DB4 (rtoc)
lfs f2, -0x1DB4 (rtoc)
branchl r12,Text_UpdateSubtextSize
IronMan_Init_AdjustStocksIncLoop:
addi REG_Count,REG_Count,1
cmpwi REG_Count,6
blt IronMan_Init_AdjustStocksLoop
IronMan_InitExit:
restore
blr
#endregion
#region IronMan_Think
IronMan_Think:
blrl
#Registers
.set REG_GObj,31
.set REG_GObjData,30
.set REG_IronManData,29
#Offsets
.set OFST_TextPointers,0x0
.set OFST_IsSpawning,0x18
.set OFST_IsSpawningLength,0x2
#Constants
.set EndTimer,60
backup
#Init Pointers
mr REG_GObj,r3
lwz REG_GObjData,0x2C(REG_GObj)
load REG_IronManData,IronManData
#Set match bits to not declare player defeated
branchl r12,0x8016ae38
li r4,0
stb r4,0x5(r3)
#Check if match is pending a character load
.set REG_Count,20
#Init
li REG_Count,0
#Check if pending a load
IronMan_Think_CheckForPendingSpawnLoop:
addi r3,REG_GObjData,OFST_IsSpawning
mulli r4,REG_Count,OFST_IsSpawningLength
add r4,r3,r4
lhz r3,0x0(r4)
cmpwi r3,0
beq IronMan_Think_CheckForPendingSpawnIncLoop
#Check if load is finished
subi r3,r3,1
sth r3,0x0(r4)
cmpwi r3,0
bgt IronMan_Think_CheckForPendingSpawnIncLoop
#Spawn in player
load r3,0x80480590 #Match info
mulli r4,REG_Count,0x24
add r4,r3,r4
mr r3,REG_Count
branchl r12,0x8016eddc
#Enter in Rebirth
mr r3,REG_Count
branchl r12,PlayerBlock_LoadMainCharDataOffset
li r4,0x1
branchl r12,0x800bfd9c
IronMan_Think_CheckForPendingSpawnIncLoop:
addi REG_Count,REG_Count,1
cmpwi REG_Count,6
blt IronMan_Think_CheckForPendingSpawnLoop
IronMan_Think_CheckForPendingSpawnEnd:
IronMan_Think_DeathCheckInit:
.set REG_Count,20
.set REG_SomeoneDied,21
.set REG_PlayerCount,22
.set REG_PlayerData,23
.set REG_IronManLineup,24
#Init
li REG_PlayerCount,0
li REG_Count,0
li REG_SomeoneDied,0
IronMan_Think_DeathCheckLoop:
#Check if exists
mr r3,REG_Count
branchl r12,PlayerBlock_LoadMainCharDataOffset
mr. REG_PlayerData,r3
beq IronMan_Think_DeathCheckIncLoop
#Increment player count
addi REG_PlayerCount,REG_PlayerCount,1
#Update stock counter in ironman data
mr r3,REG_Count
branchl r12,PlayerBlock_LoadStocksLeft
subi r4,REG_PlayerCount,1
mulli r4,r4,0x1C
add REG_IronManLineup,r4,REG_IronManData
stb r3,0x1B(REG_IronManLineup)
#Check if no stocks left
cmpwi r3,0
bgt IronMan_Think_DeathCheckIncLoop
#Decrement their ironman index
lbz r3,0x0(REG_IronManLineup)
subi r3,r3,1
stb r3,0x0(REG_IronManLineup)
#Check if theyre completely dead
extsb r3,r3
cmpwi r3,0
blt IronMan_Think_DeathCheckEndGame
#Give them max stocks
lwz r3, -0x77C0 (r13)
lbz r3,6228(r3)
stb r3,0x1B(REG_IronManLineup)
#Despawn this player
mr r3,REG_Count
branchl r12,0x8016ef98
#Remove all of their items
#Kill all of their SFX
#Setup spawn struct
lbz r3,0x0(REG_IronManLineup)
addi r4,REG_IronManLineup,1
lbzx r5,r3,r4
load r3,0x80480590 #Match info
mulli r4,REG_Count,0x24
add r4,r3,r4
stb r5,0x0(r4) #Store character to match data
stb REG_Count,0x3(r4) #Store costume to match data
#Begin Preloading next character
mr r3,r5
mr r4,REG_Count
bl LoadCharacter
#Start Preload
#Set isSpawning flag
addi r3,REG_GObjData,OFST_IsSpawning
mulli r4,REG_Count,OFST_IsSpawningLength
add r4,r3,r4
li r3,3*60
sth r3,0x0(r4)
#Update Text
#Get text pointer
addi r3,REG_GObjData,OFST_TextPointers
mulli r4,REG_Count,4
lwzx r3,r3,r4
li r4,0
bl ScoreText
mflr r5
lbz r6,0x0(REG_IronManLineup)
extsb r6,r6
addi r6,r6,1
branchl r12,Text_UpdateSubtextContents
b IronMan_Think_DeathCheckIncLoop
IronMan_Think_DeathCheckEndGame:
#This player is out of characters, display GAME
li r3,5
branchl r12,0x8016b33c
#Delay
li r3,40
branchl r12,0x8016b378
#End game
branchl r12,0x8016b328
#Destroy GObj
mr r3,REG_GObj
branchl r12,GObj_Destroy
b IronMan_ThinkExit
IronMan_Think_DeathCheckIncLoop:
addi REG_Count,REG_Count,1
cmpwi REG_Count,6
blt IronMan_Think_DeathCheckLoop
IronMan_ThinkExit:
restore
blr
#endregion
###############################################################
ScoreText:
blrl
.string "%d Left"
.align 2
ScorePosition:
blrl
.float -15.5
###############################################################
GetPlayersMatchInfo:
.set REG_LoopCount,9
.set REG_Count,10
.set REG_MatchData,11
.set REG_Player,12
#Backup
addi REG_MatchData,r3,0x68
mr REG_Player,r4
li REG_Count,0
li REG_LoopCount,0
GetPlayersMatchInfo_Loop:
lbz r3,0x1(REG_MatchData)
cmpwi r3,0x3
beq GetPlayersMatchInfo_IncLoop
#Check if this is the desired player
cmpw REG_Count,REG_Player
beq GetPlayersMatchInfo_Exit
addi REG_Count,REG_Count,1
GetPlayersMatchInfo_IncLoop:
addi REG_MatchData,REG_MatchData,0x24
addi REG_LoopCount,REG_LoopCount,1
cmpwi REG_LoopCount,6
blt GetPlayersMatchInfo_Loop
#Not Found
li r3,-1
b GetPlayersMatchInfo_Blr
GetPlayersMatchInfo_Exit:
mr r3,REG_MatchData
mr r4,REG_LoopCount
GetPlayersMatchInfo_Blr:
blr
###############################################################
LoadCharacter:
.set REG_ExtCharID,31
.set REG_CostumeID,30
#Init
backup
mr REG_ExtCharID,r3
mr REG_CostumeID,r4
#Store to preload table
load r3,0x8043209c
mulli r4,REG_CostumeID,0x8
add r4,r3,r4
stw REG_ExtCharID,0x0(r4) #Store to preload table
stb REG_CostumeID,0x4(r4) #Store costume
branchl r12,0x80018254
#Load present characters SFX
LoadCharacter_DeathCheckSFXLoad:
.set REG_SFXLoopCount,25
.set REG_SFXMatchInfo,26
.set REG_AudioBit1,27
.set REG_AudioBit2,28
li REG_SFXLoopCount,0
li REG_AudioBit1,0
li REG_AudioBit2,0
load REG_SFXMatchInfo,0x80480590 #Match info
LoadCharacter_DeathCheckSFXLoadLoop:
mulli r3,REG_SFXLoopCount,0x24
add r3,r3,REG_SFXMatchInfo
lbz r3,0x0(r3)
extsb r3,r3
branchl r12,0x80026e84
or REG_AudioBit1,REG_AudioBit1,r3
or REG_AudioBit2,REG_AudioBit2,r4
LoadCharacter_DeathCheckSFXLoadIncLoop:
addi REG_SFXLoopCount,REG_SFXLoopCount,1
cmpwi REG_SFXLoopCount,6
blt LoadCharacter_DeathCheckSFXLoadLoop
#Unk
li r3,28
branchl r12,0x80026f2c
#Request the SFX load
li r3,4
mr r5,REG_AudioBit1
mr r6,REG_AudioBit2
branchl r12,0x8002702c
branchl r12,0x80027168
LoadCharacter_Exit:
restore
blr
###############################################################
InjectionExit:
mr r3,REG_MinorData
restore
li r5,0
li r6,0
================================================
FILE: ASM/Additional Codes/Game Modes/All Star Test/Initialize Lineups.s
================================================
#To be inserted at 801ba544
.include "../../../Globals.s"
.set REG_MinorData,31
.set REG_IronManData,30
.set REG_MatchData,29
.set IronManData,0x8040a5e0
backup
#Save r3, cant get it otherwise
mr REG_MinorData,r3
#Get iron man data
load REG_IronManData,IronManData
#Get Match data
lwz REG_MatchData,0x14(REG_MinorData)
IronMan_InitLineupInit:
.set REG_Count,20
#Init
li REG_Count,0
IronMan_InitLineupLoop:
mr r3,REG_MatchData
mr r4,REG_Count
bl GetPlayersMatchInfo #Get the players data
cmpwi r3,-1
beq IronMan_InitLineupEnd
#Create Lineup
mulli r3,REG_Count,0x1C
add r3,r3,REG_IronManData
bl CreateLineupArray
IronMan_InitLineupIncLoop:
addi REG_Count,REG_Count,1
cmpwi REG_Count,6
blt IronMan_InitLineupLoop
IronMan_InitLineupEnd:
#Set match bits to skip game end checks (doing this myself)
li r3,0x80
stb r3,0x15(REG_MatchData)
#Next Minor in-game
load r3,SceneController
li r4,1
stb r4,Scene.CurrentMinor(r3)
b Exit
###############################################################
CreateLineupArray:
.set REG_Array,31
.set REG_BaseArray,30
.set REG_Index,29
#backup
backup
mr REG_Array,r3
#Initialize Runtime Index
li r3,25
stb r3,0x0(REG_Array)
#Initialzie Stock Counter
lwz r3, -0x77C0 (r13)
lbz r3,6228(r3)
stb r3,0x1B(REG_Array)
addi REG_Array,REG_Array,1
#Get base array
bl IronManArray
mflr REG_BaseArray
#Copy Lineup Array
mr r3,REG_Array
mr r4,REG_BaseArray
li r5,26
branchl r12,memcpy
#Initialize Shuffle Index
li REG_Index,25
CreateLineupArray_Loop:
#Get random number between 0-25
li r3,26
branchl r12,HSD_Randi
#Swap the current index with this element
lbzx r4,r3,REG_Array
lbzx r5,REG_Index,REG_Array
stbx r4,REG_Index,REG_Array
stbx r5,r3,REG_Array
#Decrement index
subi REG_Index,REG_Index,1
cmpwi REG_Index,0
bge CreateLineupArray_Loop
CreateLineupArray_Exit:
restore
blr
###############################################################
GetPlayersMatchInfo:
.set REG_LoopCount,9
.set REG_Count,10
.set REG_MatchData,11
.set REG_Player,12
#Backup
addi REG_MatchData,r3,0x70
mr REG_Player,r4
li REG_Count,0
li REG_LoopCount,0
GetPlayersMatchInfo_Loop:
lbz r3,0x1(REG_MatchData)
cmpwi r3,0x3
beq GetPlayersMatchInfo_IncLoop
#Check if this is the desired player
cmpw REG_Count,REG_Player
beq GetPlayersMatchInfo_Exit
addi REG_Count,REG_Count,1
GetPlayersMatchInfo_IncLoop:
addi REG_MatchData,REG_MatchData,0x24
addi REG_LoopCount,REG_LoopCount,1
cmpwi REG_LoopCount,6
blt GetPlayersMatchInfo_Loop
#Not Found
li r3,-1
b GetPlayersMatchInfo_Blr
GetPlayersMatchInfo_Exit:
mr r3,REG_MatchData
mr r4,REG_LoopCount
GetPlayersMatchInfo_Blr:
blr
###############################################################
IronManArray:
blrl
.byte 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25
.align 2
###############################################################
Exit:
mr r3,REG_MinorData
restore
lwz r4, -0x77C0 (r13)
================================================
FILE: ASM/Additional Codes/Game Modes/Chess Melee.asm
================================================
#To be inserted at 801b8c74
.include "../../Globals.s"
#Store Pointer to onStartMelee function
lwz r4, -0x77C0 (r13)
addi r4, r4, 1752
bl ChessMelee_Init
mflr r5
stw r5,0x44(r4)
b InjectionExit
#region ChessMelee_Init
ChessMelee_Init:
blrl
.set REG_GObj,31
.set REG_Data,30
.set DataSize,64
backup
#Create GObj
li r3,22
li r4,23
li r5,0
branchl r12,GObj_Create
mr REG_GObj,r3
#Alloc Mem
li r3,DataSize
branchl r12,HSD_MemAlloc
mr REG_Data,r3
#Zero Data
mr r3,REG_Data
li r4,DataSize
branchl r12,ZeroAreaLength
#Attach Data
mr r3,REG_GObj
li r4,14
load r5,HSD_Free
mr r6,REG_Data
branchl r12,GObj_AddUserData
#Attach Process
mr r3,REG_GObj
bl ChessMelee_Think
mflr r4
li r5,23
branchl r12,GObj_AddProc
ChessMelee_InitExit:
restore
blr
#endregion
#region ChessMelee_Think
ChessMelee_Think:
blrl
#Registers
.set REG_GObj,31
.set REG_GObjData,30
#Data Offsets
.set GameState,0x0 #byte
.set FrozenTimer,0x1 #half
#Definitions
#GameState
.set InProgress,0x0
.set Frozen,0x1
#Constants
.set FreezeFrames, 1 * 60
backup
#Init Pointers
mr REG_GObj,r3
lwz REG_GObjData,0x2C(REG_GObj)
#Check state of game
lbz r3,GameState(REG_GObjData)
cmpwi r3,InProgress
beq ChessMelee_Think_InProgress
cmpwi r3,Frozen
beq ChessMelee_Think_Frozen
b ChessMelee_ThinkExit
#region InProgress
ChessMelee_Think_InProgress:
.set REG_LoopCount,29
#Check For Dead Players
li REG_LoopCount,0
ChessMelee_Think_InProgressLoop:
#Check Players Presence
mr r3,REG_LoopCount
branchl r12,0x800322c0
cmpwi r3,0x2
bne ChessMelee_Think_InProgressIncLoop
#Get Players Data
mr r3,REG_LoopCount
branchl r12,0x80034110
lwz r3,0x2C(r3)
#Check If Player is still active (not sleep)
lbz r4,0x221F(r3)
rlwinm. r4,r4,0,27,27
bne ChessMelee_Think_InProgressIncLoop
#Check if READY,GO is over
lbz r4,0x221D(r3)
rlwinm. r4,r4,0,28,28
bne ChessMelee_Think_InProgressIncLoop
#Check if Blastzone code is being skipped
lbz r4,0x2219(r3)
rlwinm. r4,r4,0,25,25
beq ChessMelee_Think_InProgressIncLoop
#Rebirth gets here too, check if NOT rebirth/rebirthWait
lwz r4,0x10(r3)
cmpwi r4,ASID_Rebirth
beq ChessMelee_Think_InProgressIncLoop
cmpwi r4,ASID_RebirthWait
beq ChessMelee_Think_InProgressIncLoop
#If in any Star KO State, enter them into DeadUp
cmpwi r4,ASID_DeadUpStar
beq ChessMelee_Think_InProgressEnterDeadUp
cmpwi r4,ASID_DeadUpStarIce
beq ChessMelee_Think_InProgressEnterDeadUp
cmpwi r4,ASID_DeadUpFall
beq ChessMelee_Think_InProgressEnterDeadUp
b ChessMelee_Think_FreezeOtherPlayers
ChessMelee_Think_InProgressEnterDeadUp:
#Enter DeadUp
lwz r3,0x0(r3)
branchl r12,0x800d3e40
b ChessMelee_Think_FreezeOtherPlayers
ChessMelee_Think_InProgressIncLoop:
addi REG_LoopCount,REG_LoopCount,1
cmpwi REG_LoopCount,6
blt ChessMelee_Think_InProgressLoop
#No players dead, exit think function
b ChessMelee_ThinkExit
ChessMelee_Think_FreezeOtherPlayers:
#Freeze all other players
.set REG_DeadPlayer,29
.set REG_LoopCount,28
.set REG_PlayerGObj,27
.set REG_PlayerData,26
#Check For Dead Players
li REG_LoopCount,0
ChessMelee_Think_FreezeOtherPlayersLoop:
#Check if this is the dead player
cmpw REG_LoopCount,REG_DeadPlayer
bne ChessMelee_Think_FreezeOtherPlayers_NotDeadPlayer
ChessMelee_Think_FreezeOtherPlayers_NotDeadPlayer:
#Check Players Presence
mr r3,REG_LoopCount
branchl r12,0x800322c0
cmpwi r3,0x2
bne ChessMelee_Think_FreezeOtherPlayersIncLoop
#Get Players Data
mr r3,REG_LoopCount
branchl r12,0x80034110
mr REG_PlayerGObj,r3
lwz REG_PlayerData,0x2C(REG_PlayerGObj)
#Check If Player is still active (not sleep)
lbz r4,0x221F(REG_PlayerData)
rlwinm. r4,r4,0,27,27
bne ChessMelee_Think_FreezeOtherPlayersIncLoop
#Freeze Player
li r5,1
lbz r4,0x2219(REG_PlayerData)
rlwimi r4,r5,2,29,29
stb r4,0x2219(REG_PlayerData)
#Remove any hitlag
li r4,0
stw r4,0x195C(REG_PlayerData)
stw r4,0x1958(REG_PlayerData)
#Skip Blastzone and Hitbox Collision Detection Code
lbz r3,0x2219(REG_PlayerData)
li r4,1
rlwimi r3,r4,6,25,25
stb r3,0x2219(REG_PlayerData)
#Freeze GFX if not dead
lbz r3,0x221E(REG_PlayerData)
rlwinm. r0,r3,0,24,24
bne ChessMelee_Think_FreezeOtherPlayersIncLoop
mr r3,REG_PlayerGObj
branchl r12,0x8005ba40
ChessMelee_Think_FreezeOtherPlayersIncLoop:
addi REG_LoopCount,REG_LoopCount,1
cmpwi REG_LoopCount,6
blt ChessMelee_Think_FreezeOtherPlayersLoop
#Start Frozen Timer
li r3,FreezeFrames
sth r3,FrozenTimer(REG_GObjData)
#Change State
li r3,Frozen
stb r3,GameState(REG_GObjData)
b ChessMelee_ThinkExit
#endregion
#region Frozen
ChessMelee_Think_Frozen:
#Decrement timer
lhz r3,FrozenTimer(REG_GObjData)
subi r3,r3,1
sth r3,FrozenTimer(REG_GObjData)
#Check if up
cmpwi r3,0
bne ChessMelee_ThinkExit
#Timer up, enter everyone into rebirth
.set REG_LoopCount,29
.set REG_PlayerGObj,28
#Check For Dead Players
li REG_LoopCount,0
ChessMelee_Think_FrozenLoop:
#Check Players Presence
mr r3,REG_LoopCount
branchl r12,0x800322c0
cmpwi r3,0x2
bne ChessMelee_Think_FrozenIncLoop
#Get Players GObj
mr r3,REG_LoopCount
branchl r12,0x80034110
mr REG_PlayerGObj,r3
#Check If Player is still active (not sleep)
lbz r4,0x221F(r3)
rlwinm. r4,r4,0,27,27
bne ChessMelee_Think_FrozenIncLoop
#Remove Items + Etc
mr r3,REG_PlayerGObj
branchl r12,0x800d331c
#Enter into Sleep
mr r3,REG_PlayerGObj
li r4,0x1
branchl r12,0x800bfd9c
ChessMelee_Think_FrozenIncLoop:
addi REG_LoopCount,REG_LoopCount,1
cmpwi REG_LoopCount,6
blt ChessMelee_Think_FrozenLoop
#Enter InProgress Game State
li r3,InProgress
stb r3,GameState(REG_GObjData)
b ChessMelee_ThinkExit
#endregion
ChessMelee_ThinkExit:
restore
blr
#endregion
InjectionExit:
li r6,0
================================================
FILE: ASM/Additional Codes/Game Modes/Chess Melee.s
================================================
#To be inserted at 801b8c74
.include "../../Globals.s"
#Store Pointer to onStartMelee function
lwz r4, -0x77C0 (r13)
addi r4, r4, 1752
bl ChessMelee_Init
mflr r5
stw r5,0x44(r4)
b InjectionExit
#region ChessMelee_Init
ChessMelee_Init:
blrl
.set REG_GObj,31
.set REG_Data,30
.set DataSize,64
backup
#Create GObj
li r3,22
li r4,23
li r5,0
branchl r12,GObj_Create
mr REG_GObj,r3
#Alloc Mem
li r3,DataSize
branchl r12,HSD_MemAlloc
mr REG_Data,r3
#Zero Data
mr r3,REG_Data
li r4,DataSize
branchl r12,ZeroAreaLength
#Attach Data
mr r3,REG_GObj
li r4,14
load r5,HSD_Free
mr r6,REG_Data
branchl r12,GObj_AddUserData
#Attach Process
mr r3,REG_GObj
bl ChessMelee_Think
mflr r4
li r5,23
branchl r12,GObj_AddProc
ChessMelee_InitExit:
restore
blr
#endregion
#region ChessMelee_Think
ChessMelee_Think:
blrl
#Registers
.set REG_GObj,31
.set REG_GObjData,30
#Data Offsets
.set GameState,0x0 #byte
.set FrozenTimer,0x1 #half
#Definitions
#GameState
.set InProgress,0x0
.set Frozen,0x1
#Constants
.set FreezeFrames, 1 * 60
backup
#Init Pointers
mr REG_GObj,r3
lwz REG_GObjData,0x2C(REG_GObj)
#Check state of game
lbz r3,GameState(REG_GObjData)
cmpwi r3,InProgress
beq ChessMelee_Think_InProgress
cmpwi r3,Frozen
beq ChessMelee_Think_Frozen
b ChessMelee_ThinkExit
#region InProgress
ChessMelee_Think_InProgress:
.set REG_LoopCount,29
#Check For Dead Players
li REG_LoopCount,0
ChessMelee_Think_InProgressLoop:
#Check Players Presence
mr r3,REG_LoopCount
branchl r12,0x800322c0
cmpwi r3,0x2
bne ChessMelee_Think_InProgressIncLoop
#Get Players Data
mr r3,REG_LoopCount
branchl r12,0x80034110
lwz r3,0x2C(r3)
#Check If Player is still active (not sleep)
lbz r4,0x221F(r3)
rlwinm. r4,r4,0,27,27
bne ChessMelee_Think_InProgressIncLoop
#Check if READY,GO is over
lbz r4,0x221D(r3)
rlwinm. r4,r4,0,28,28
bne ChessMelee_Think_InProgressIncLoop
#Check if Blastzone code is being skipped
lbz r4,0x2219(r3)
rlwinm. r4,r4,0,25,25
beq ChessMelee_Think_InProgressIncLoop
#Rebirth gets here too, check if NOT rebirth/rebirthWait
lwz r4,0x10(r3)
cmpwi r4,ASID_Rebirth
beq ChessMelee_Think_InProgressIncLoop
cmpwi r4,ASID_RebirthWait
beq ChessMelee_Think_InProgressIncLoop
#If in any Star KO State, enter them into DeadUp
cmpwi r4,ASID_DeadUpStar
beq ChessMelee_Think_InProgressEnterDeadUp
cmpwi r4,ASID_DeadUpStarIce
beq ChessMelee_Think_InProgressEnterDeadUp
cmpwi r4,ASID_DeadUpFall
beq ChessMelee_Think_InProgressEnterDeadUp
b ChessMelee_Think_FreezeOtherPlayers
ChessMelee_Think_InProgressEnterDeadUp:
#Enter DeadUp
lwz r3,0x0(r3)
branchl r12,0x800d3e40
b ChessMelee_Think_FreezeOtherPlayers
ChessMelee_Think_InProgressIncLoop:
addi REG_LoopCount,REG_LoopCount,1
cmpwi REG_LoopCount,6
blt ChessMelee_Think_InProgressLoop
#No players dead, exit think function
b ChessMelee_ThinkExit
ChessMelee_Think_FreezeOtherPlayers:
#Freeze all other players
.set REG_DeadPlayer,29
.set REG_LoopCount,28
.set REG_PlayerGObj,27
.set REG_PlayerData,26
#Check For Dead Players
li REG_LoopCount,0
ChessMelee_Think_FreezeOtherPlayersLoop:
#Check if this is the dead player
cmpw REG_LoopCount,REG_DeadPlayer
bne ChessMelee_Think_FreezeOtherPlayers_NotDeadPlayer
ChessMelee_Think_FreezeOtherPlayers_NotDeadPlayer:
#Check Players Presence
mr r3,REG_LoopCount
branchl r12,0x800322c0
cmpwi r3,0x2
bne ChessMelee_Think_FreezeOtherPlayersIncLoop
#Get Players Data
mr r3,REG_LoopCount
branchl r12,0x80034110
mr REG_PlayerGObj,r3
lwz REG_PlayerData,0x2C(REG_PlayerGObj)
#Check If Player is still active (not sleep)
lbz r4,0x221F(REG_PlayerData)
rlwinm. r4,r4,0,27,27
bne ChessMelee_Think_FreezeOtherPlayersIncLoop
#Freeze Player
li r5,1
lbz r4,0x2219(REG_PlayerData)
rlwimi r4,r5,2,29,29
stb r4,0x2219(REG_PlayerData)
#Remove any hitlag
li r4,0
stw r4,0x195C(REG_PlayerData)
stw r4,0x1958(REG_PlayerData)
#Skip Blastzone and Hitbox Collision Detection Code
lbz r3,0x2219(REG_PlayerData)
li r4,1
rlwimi r3,r4,6,25,25
stb r3,0x2219(REG_PlayerData)
#Freeze GFX if not dead
lbz r3,0x221E(REG_PlayerData)
rlwinm. r0,r3,0,24,24
bne ChessMelee_Think_FreezeOtherPlayersIncLoop
mr r3,REG_PlayerGObj
branchl r12,0x8005ba40
ChessMelee_Think_FreezeOtherPlayersIncLoop:
addi REG_LoopCount,REG_LoopCount,1
cmpwi REG_LoopCount,6
blt ChessMelee_Think_FreezeOtherPlayersLoop
#Start Frozen Timer
li r3,FreezeFrames
sth r3,FrozenTimer(REG_GObjData)
#Change State
li r3,Frozen
stb r3,GameState(REG_GObjData)
b ChessMelee_ThinkExit
#endregion
#region Frozen
ChessMelee_Think_Frozen:
#Decrement timer
lhz r3,FrozenTimer(REG_GObjData)
subi r3,r3,1
sth r3,FrozenTimer(REG_GObjData)
#Check if up
cmpwi r3,0
bne ChessMelee_ThinkExit
#Timer up, enter everyone into rebirth
.set REG_LoopCount,29
.set REG_PlayerGObj,28
#Check For Dead Players
li REG_LoopCount,0
ChessMelee_Think_FrozenLoop:
#Check Players Presence
mr r3,REG_LoopCount
branchl r12,0x800322c0
cmpwi r3,0x2
bne ChessMelee_Think_FrozenIncLoop
#Get Players GObj
mr r3,REG_LoopCount
branchl r12,0x80034110
mr REG_PlayerGObj,r3
#Check If Player is still active (not sleep)
lbz r4,0x221F(r3)
rlwinm. r4,r4,0,27,27
bne ChessMelee_Think_FrozenIncLoop
#Remove Items + Etc
mr r3,REG_PlayerGObj
branchl r12,0x800d331c
#Enter into Sleep
mr r3,REG_PlayerGObj
li r4,0x1
branchl r12,0x800bfd9c
ChessMelee_Think_FrozenIncLoop:
addi REG_LoopCount,REG_LoopCount,1
cmpwi REG_LoopCount,6
blt ChessMelee_Think_FrozenLoop
#Enter InProgress Game State
li r3,InProgress
stb r3,GameState(REG_GObjData)
b ChessMelee_ThinkExit
#endregion
ChessMelee_ThinkExit:
restore
blr
#endregion
InjectionExit:
li r6,0
================================================
FILE: ASM/Additional Codes/Game Modes/Iron Man/Disable Invisible Melee.asm
================================================
#To be inserted at 801ba3d4
.include "../../../Globals.s"
.set REG_MinorData,31
.set REG_IronManData,30
.set REG_MatchData,29
.set IronManData,0x8040a5e0
backup
mr REG_MinorData,r3
#Get Match Data
lwz REG_MatchData, -0x77C0 (r13)
addi REG_MatchData, REG_MatchData, 2064
load REG_IronManData,IronManData
#Reset cache
branchl r12,0x80018c6c
branchl r12,0x80018254
li r3,4
branchl r12,0x80017700
IronMan_SetupMatchInit:
.set REG_Count,20
.set REG_PlayerCount,21
.set REG_Port,22
#Init
li REG_PlayerCount,0
li REG_Count,0
IronMan_SetupMatchLoop:
mr r3,REG_MatchData
mr r4,REG_Count
bl GetPlayersMatchInfo #Get the players data
cmpwi r3,-1
beq IronMan_SetupMatchEnd
#Set the first character as the current character
mr REG_Port,r4
mulli r5,REG_PlayerCount,0x1C
add r5,r5,REG_IronManData
lbz r6,0x0(r5) #Get the next iron man character
addi r5,r5,1
lbzx r5,r6,r5
stb r5,0x0(r3) #Store character to match data
stb REG_PlayerCount,0x3(r3) #Store costume to match data
#Get Prelod Table
load r3,0x8043208c
mulli r4,REG_Port,0x8
add r4,r3,r4
stw r5,0x0(r4) #Store to preload table
stb REG_PlayerCount,0x4(r4) #Store costume
addi REG_PlayerCount,REG_PlayerCount,1
IronMan_SetupMatchIncLoop:
addi REG_Count,REG_Count,1
cmpwi REG_Count,6
blt IronMan_SetupMatchLoop
IronMan_SetupMatchEnd:
#Now get a random stage
branchl r12,0x8025bbd4
sth r3,0x16(REG_MatchData)
load r4,0x80432088
stw r3,0x0(r4) #Store to prelaod
#Request preload
branchl r12,0x80018254
#Store Pointer to onStartMelee function
lwz r4, -0x77C0 (r13)
addi r4, r4, 2064
bl IronMan_Init
mflr r5
stw r5,0x4C(r4)
b InjectionExit
#region IronMan_Init
IronMan_Init:
blrl
.set REG_GObj,31
.set REG_Data,30
.set DataSize,64
backup
#Create GObj
li r3,22
li r4,0
li r5,0
branchl r12,GObj_Create
mr REG_GObj,r3
#Alloc Mem
li r3,DataSize
branchl r12,HSD_MemAlloc
mr REG_Data,r3
#Zero Data
mr r3,REG_Data
li r4,DataSize
branchl r12,ZeroAreaLength
#Attach Data
mr r3,REG_GObj
li r4,14
load r5,HSD_Free
mr r6,REG_Data
branchl r12,GObj_AddUserData
#Attach Process
mr r3,REG_GObj
bl IronMan_Think
mflr r4
li r5,23
branchl r12,GObj_AddProc
IronMan_InitExit:
restore
blr
#endregion
#region IronMan_Think
IronMan_Think:
blrl
#Registers
.set REG_GObj,31
.set REG_GObjData,30
.set REG_IronManData,29
#Offsets
.set OFST_EndTimer,0x0
.set OFST_FirstFrame,0x1
.set OFST_TextPointers,0x4
#Constants
.set EndTimer,60
backup
#Init Pointers
mr REG_GObj,r3
lwz REG_GObjData,0x2C(REG_GObj)
load REG_IronManData,IronManData
#Restore stocks on the first frame
lbz r3,OFST_FirstFrame(REG_GObjData)
cmpwi r3,0
bne IronMan_Think_SkipFirstFrame
IronMan_Think_AdjustStocksInit:
.set REG_Count,20
.set REG_SomeoneDied,21
.set REG_PlayerCount,22
.set REG_Temp,23
.set REG_Text,24
#Init
li REG_PlayerCount,0
li REG_Count,0
li REG_SomeoneDied,0
IronMan_Think_AdjustStocksLoop:
#Check if exists
mr r3,REG_Count
branchl r12,PlayerBlock_LoadMainCharDataOffset
cmpwi r3,0
beq IronMan_Think_AdjustStocksIncLoop
#Increment player count
addi REG_PlayerCount,REG_PlayerCount,1
#Update stocks
subi r4,REG_PlayerCount,1
mulli r4,r4,0x1C
add REG_Temp,r4,REG_IronManData
lbz r4,0x1B(REG_Temp)
mr r3,REG_Count
branchl r12,0x80033c60
#Create Text
li r3,2
load r4,0x804a1f58
lwz r4,0x0(r4)
branchl r12,Text_CreateTextStruct
mr REG_Text,r3
addi r3,REG_GObjData,OFST_TextPointers
mulli r4,REG_Count,4
stwx REG_Text,r3,r4
#SET TEXT SPACING TO TIGHT
li r4,0x1
stb r4,0x49(REG_Text)
#SET TEXT TO CENTER AROUND X LOCATION
li r4,0x1
stb r4,0x4A(REG_Text)
#Update Text Contents
load r4,0x804a0ff0
mulli r3,REG_Count,0xC #HUD Info is 0xC Long Per Player
lfsx f1,r3,r4 #Get This Players HUD Info
bl ScorePosition
mflr r5
lfs f2,0x0(r5)
mr r3,REG_Text
bl ScoreText
mflr r4
lbz r5,0x0(REG_Temp)
extsb r5,r5
addi r5,r5,1
branchl r12,Text_InitializeSubtext
#Update Size
mr r3,REG_Text
li r4,0
lfs f1, -0x1DB4 (rtoc)
lfs f2, -0x1DB4 (rtoc)
branchl r12,Text_UpdateSubtextSize
IronMan_Think_AdjustStocksIncLoop:
addi REG_Count,REG_Count,1
cmpwi REG_Count,6
blt IronMan_Think_AdjustStocksLoop
#Set as not first frame
li r3,1
stb r3,OFST_FirstFrame(REG_GObjData)
IronMan_Think_SkipFirstFrame:
#Check if match is frozen
lbz r3,OFST_EndTimer(REG_GObjData)
cmpwi r3,0
beq IronMan_Think_NotFrozen
#Subtract by 1
subi r3,r3,1
stb r3,OFST_EndTimer(REG_GObjData)
cmpwi r3,0
bgt IronMan_ThinkExit
#Fade screen
li r3,60
branchl r12,0x8002063c
#Destroy GObj
mr r3,REG_GObj
branchl r12,GObj_Destroy
b IronMan_ThinkExit
IronMan_Think_NotFrozen:
IronMan_Think_DeathCheckInit:
.set REG_Count,20
.set REG_SomeoneDied,21
.set REG_PlayerCount,22
#Init
li REG_PlayerCount,0
li REG_Count,0
li REG_SomeoneDied,0
IronMan_Think_DeathCheckLoop:
#Check if exists
mr r3,REG_Count
branchl r12,PlayerBlock_LoadMainCharDataOffset
cmpwi r3,0
beq IronMan_Think_DeathCheckIncLoop
#Increment player count
addi REG_PlayerCount,REG_PlayerCount,1
#Update stock counter in ironman data
mr r3,REG_Count
branchl r12,PlayerBlock_LoadStocksLeft
subi r4,REG_PlayerCount,1
mulli r4,r4,0x1C
add r4,r4,REG_IronManData
stb r3,0x1B(r4)
#Check if no stocks left
cmpwi r3,0
bgt IronMan_Think_DeathCheckIncLoop
#Set someonedied flag
li REG_SomeoneDied,1
#Decrement their ironman index
lbz r3,0x0(r4)
subi r3,r3,1
stb r3,0x0(r4)
#Give them max stocks
lwz r3, -0x77C0 (r13)
lbz r3,6228(r3)
stb r3,0x1B(r4)
#Update Text
#Get text pointer
addi r3,REG_GObjData,OFST_TextPointers
mulli r4,REG_Count,4
lwzx r3,r3,r4
#Get iron man index
subi r4,REG_PlayerCount,1
mulli r4,r4,0x1C
add REG_Temp,r4,REG_IronManData
li r4,0
bl ScoreText
mflr r5
lbz r6,0x0(REG_Temp)
extsb r6,r6
addi r6,r6,1
branchl r12,Text_UpdateSubtextContents
#Check if theyre completely dead
lbz r3,0x0(REG_Temp)
extsb r3,r3
cmpwi r3,0
bge IronMan_Think_DeathCheckIncLoop
#This player is out of characters, display GAME
li r3,5
branchl r12,0x8016b33c
#Delay
li r3,40
branchl r12,0x8016b378
#End game
branchl r12,0x8016b328
#Destroy GObj
mr r3,REG_GObj
branchl r12,GObj_Destroy
b IronMan_ThinkExit
IronMan_Think_DeathCheckIncLoop:
addi REG_Count,REG_Count,1
cmpwi REG_Count,6
blt IronMan_Think_DeathCheckLoop
#Check if someone died
cmpwi REG_SomeoneDied,0
beq IronMan_ThinkExit
#Start ending this match now
li r3,EndTimer
stb r3,OFST_EndTimer(REG_GObjData)
#Freeze Game
li r3,8
branchl r12,0x8016b33c
branchl r12,0x8016b328
IronMan_ThinkExit:
restore
blr
#endregion
###############################################################
ScoreText:
blrl
.string "%d Left"
.align 2
ScorePosition:
blrl
.float -15.5
###############################################################
GetPlayersMatchInfo:
.set REG_LoopCount,9
.set REG_Count,10
.set REG_MatchData,11
.set REG_Player,12
#Backup
addi REG_MatchData,r3,0x68
mr REG_Player,r4
li REG_Count,0
li REG_LoopCount,0
GetPlayersMatchInfo_Loop:
lbz r3,0x1(REG_MatchData)
cmpwi r3,0x3
beq GetPlayersMatchInfo_IncLoop
#Check if this is the desired player
cmpw REG_Count,REG_Player
beq GetPlayersMatchInfo_Exit
addi REG_Count,REG_Count,1
GetPlayersMatchInfo_IncLoop:
addi REG_MatchData,REG_MatchData,0x24
addi REG_LoopCount,REG_LoopCount,1
cmpwi REG_LoopCount,6
blt GetPlayersMatchInfo_Loop
#Not Found
li r3,-1
b GetPlayersMatchInfo_Blr
GetPlayersMatchInfo_Exit:
mr r3,REG_MatchData
mr r4,REG_LoopCount
GetPlayersMatchInfo_Blr:
blr
###############################################################
InjectionExit:
mr r3,REG_MinorData
restore
li r6,0
================================================
FILE: ASM/Additional Codes/Game Modes/Iron Man/Initialize Lineups.asm
================================================
#To be inserted at 801ba344
.include "../../../Globals.s"
.set REG_MinorData,31
.set REG_IronManData,30
.set REG_MatchData,29
.set IronManData,0x8040a5e0
backup
#Save r3, cant get it otherwise
mr REG_MinorData,r3
#Get iron man data
load REG_IronManData,IronManData
#Get Match data
lwz REG_MatchData,0x14(REG_MinorData)
IronMan_InitLineupInit:
.set REG_Count,20
#Init
li REG_Count,0
IronMan_InitLineupLoop:
mr r3,REG_MatchData
mr r4,REG_Count
bl GetPlayersMatchInfo #Get the players data
cmpwi r3,-1
beq IronMan_InitLineupEnd
#Create Lineup
mulli r3,REG_Count,0x1C
add r3,r3,REG_IronManData
bl CreateLineupArray
IronMan_InitLineupIncLoop:
addi REG_Count,REG_Count,1
cmpwi REG_Count,6
blt IronMan_InitLineupLoop
IronMan_InitLineupEnd:
#Set match bits to skip game end checks (doing this myself)
li r3,0x80
stb r3,0x5(REG_MatchData)
#Set score display on
#Next Minor in-game
load r3,SceneController
li r4,1
stb r4,Scene.CurrentMinor(r3)
b Exit
###############################################################
CreateLineupArray:
.set REG_Array,31
.set REG_BaseArray,30
.set REG_Index,29
#backup
backup
mr REG_Array,r3
#Initialize Runtime Index
li r3,25
stb r3,0x0(REG_Array)
#Initialzie Stock Counter
lwz r3, -0x77C0 (r13)
lbz r3,6228(r3)
stb r3,0x1B(REG_Array)
addi REG_Array,REG_Array,1
#Get base array
bl IronManArray
mflr REG_BaseArray
#Copy Lineup Array
mr r3,REG_Array
mr r4,REG_BaseArray
li r5,26
branchl r12,memcpy
#Initialize Shuffle Index
li REG_Index,25
CreateLineupArray_Loop:
#Get random number between 0-25
li r3,26
branchl r12,HSD_Randi
#Swap the current index with this element
lbzx r4,r3,REG_Array
lbzx r5,REG_Index,REG_Array
stbx r4,REG_Index,REG_Array
stbx r5,r3,REG_Array
#Decrement index
subi REG_Index,REG_Index,1
cmpwi REG_Index,0
bge CreateLineupArray_Loop
CreateLineupArray_Exit:
restore
blr
###############################################################
GetPlayersMatchInfo:
.set REG_LoopCount,9
.set REG_Count,10
.set REG_MatchData,11
.set REG_Player,12
#Backup
addi REG_MatchData,r3,0x70
mr REG_Player,r4
li REG_Count,0
li REG_LoopCount,0
GetPlayersMatchInfo_Loop:
lbz r3,0x1(REG_MatchData)
cmpwi r3,0x3
beq GetPlayersMatchInfo_IncLoop
#Check if this is the desired player
cmpw REG_Count,REG_Player
beq GetPlayersMatchInfo_Exit
addi REG_Count,REG_Count,1
GetPlayersMatchInfo_IncLoop:
addi REG_MatchData,REG_MatchData,0x24
addi REG_LoopCount,REG_LoopCount,1
cmpwi REG_LoopCount,6
blt GetPlayersMatchInfo_Loop
#Not Found
li r3,-1
b GetPlayersMatchInfo_Blr
GetPlayersMatchInfo_Exit:
mr r3,REG_MatchData
mr r4,REG_LoopCount
GetPlayersMatchInfo_Blr:
blr
###############################################################
IronManArray:
blrl
.byte 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25
.align 2
###############################################################
Exit:
mr r3,REG_MinorData
restore
lwz r4, -0x77C0 (r13)
================================================
FILE: ASM/Additional Codes/Game Modes/Iron Man/Load Next Match.asm
================================================
#To be inserted at 801ba410
.include "../../../Globals.s"
.set REG_MatchData,31
.set REG_IronManData,30
.set IronManData,0x8040a5e0
backup
#Get Match Data
lwz REG_MatchData,-0x20(r3)
load REG_IronManData,IronManData
#Check if LRAStarted
lwz r3,0x14(r3)
lbz r3,0x10(r3)
cmpwi r3,7
beq ReturnToCSS
#Set the first character as the current character
addi r5,REG_IronManData,0x0
lbz r6,0x0(r5) #Get the next iron man character
extsb r0,r6
cmpwi r0,-1
beq ReturnToCSS
#Now do p2
addi r5,REG_IronManData,0x1C
lbz r6,0x0(r5) #Get the next iron man character
extsb r0,r6
cmpwi r0,-1
beq ReturnToCSS
#Load match scene again
li r3,2
branchl r12,0x801a42a0
b InjectionExit
ReturnToCSS:
li r3,0
branchl r12,0x801a42a0
b InjectionExit
InjectionExit:
restore
================================================
FILE: ASM/Additional Codes/Game Modes/Rotations Melee.asm
================================================
#To be inserted at 801b9090
.include "../../Globals.s"
#Store Pointer to onStartMelee function
lwz r4, -0x77C0 (r13)
addi r4, r4, 3992
bl Rotations_Init
mflr r5
stw r5,0x44(r4)
b InjectionExit
#region Rotations_Init
Rotations_Init:
blrl
.set REG_GObj,31
.set REG_Data,30
.set DataSize,64
backup
#Create GObj
li r3,22
li r4,23
li r5,0
branchl r12,GObj_Create
mr REG_GObj,r3
#Alloc Mem
li r3,DataSize
branchl r12,HSD_MemAlloc
mr REG_Data,r3
#Zero Data
mr r3,REG_Data
li r4,DataSize
branchl r12,ZeroAreaLength
#Attach Data
mr r3,REG_GObj
li r4,14
load r5,HSD_Free
mr r6,REG_Data
branchl r12,GObj_AddUserData
#Attach Process
mr r3,REG_GObj
bl Rotations_Think
mflr r4
li r5,23
branchl r12,GObj_AddProc
Rotations_InitExit:
restore
blr
#endregion
#region Rotations_Think
Rotations_Think:
blrl
#Registers
.set REG_GObj,31
.set REG_GObjData,30
#Data Offsets
.set GameState,0x0 #byte
.set P1Slot,0x1 #byte
.set P2Slot,0x2 #byte
.set LastPlayerSpawned,0x3 #byte
#Definitions
#GameState
.set FirstFrame,0x0
.set InProgress,0x1
#Constants
.set FreezeFrames, 1 * 60
backup
#Init Pointers
mr REG_GObj,r3
lwz REG_GObjData,0x2C(REG_GObj)
#Check state of game
lbz r3,GameState(REG_GObjData)
cmpwi r3,FirstFrame
beq Rotations_Think_FirstFrame
cmpwi r3,InProgress
beq Rotations_Think_InProgress
#region FirstFrame
Rotations_Think_FirstFrame:
#Ensure over 2 players are present
branchl r12,0x8016b558
cmpwi r3,3
bge Rotations_Think_FirstFrameContinue
#Destroy Think Function
mr r3,REG_GObj
branchl r12,0x80390228
b Rotations_ThinkExit
Rotations_Think_FirstFrameContinue:
.set REG_LoopCount,29
.set REG_PlayerSlotIndex,28
#Init Loop
li REG_LoopCount,0
li REG_PlayerSlotIndex,0
Rotations_Think_FirstFrameLoop:
#Check Players Presence
mr r3,REG_LoopCount
branchl r12,0x800322c0
cmpwi r3,0x2
bne Rotations_Think_FirstFrameIncLoop
#Player exists, store to data
addi r3,REG_GObjData,P1Slot
stbx REG_LoopCount,REG_PlayerSlotIndex,r3
#Store as last player spawned
stb REG_LoopCount,LastPlayerSpawned(REG_GObjData)
#Now do next player
addi REG_PlayerSlotIndex,REG_PlayerSlotIndex,1
#Check if finished doing both players
cmpwi REG_PlayerSlotIndex,2
bge Rotations_Think_FirstFrameSleepRemainingPlayersIncLoop
Rotations_Think_FirstFrameIncLoop:
addi REG_LoopCount,REG_LoopCount,1
cmpwi REG_LoopCount,6
blt Rotations_Think_FirstFrameLoop
#Now sleep the other players
Rotations_Think_FirstFrameSleepRemainingPlayersLoop:
.set REG_PlayerGObj,27
#Check Players Presence
mr r3,REG_LoopCount
branchl r12,0x800322c0
cmpwi r3,0x2
bne Rotations_Think_FirstFrameSleepRemainingPlayersIncLoop
#Get players GObj
mr r3,REG_LoopCount
branchl r12,0x80034110
mr REG_PlayerGObj,r3
#Sleep player
branchl r12,0x800bfd04
#Check if they have a follower
lwz r3,0x2C(REG_PlayerGObj)
lbz r3,0x2222(r3)
rlwinm. r0, r3, 30, 31, 31
beq Rotations_Think_FirstFrameSleepRemainingPlayers_DestroyHUD
#Get Follower GObj
mr r3,REG_LoopCount
li r4,1
branchl r12,0x8003418c
#SLeep them as well
branchl r12,0x800bfd04
Rotations_Think_FirstFrameSleepRemainingPlayers_DestroyHUD:
#Destroy their percent HUD
load r3,0x804a10c8
mulli r4,REG_LoopCount,100
add r3,r3,r4
lbz r4, 0x0010 (r3)
li r5,1
rlwimi r4,r5,7,24,24
rlwimi r4,r5,6,25,25
stb r4, 0x0010 (r3)
Rotations_Think_FirstFrameSleepRemainingPlayersIncLoop:
addi REG_LoopCount,REG_LoopCount,1
cmpwi REG_LoopCount,6
blt Rotations_Think_FirstFrameSleepRemainingPlayersLoop
#Change state to every frame
li r3,InProgress
stb r3,GameState(REG_GObjData)
b Rotations_ThinkExit
#endregion
#region InProgress
Rotations_Think_InProgress:
#Check For Dead Players
.set REG_PlayerSlot,29
.set REG_PlayerSlotIndex,28
.set REG_PlayerGObj,27
#Init Loop
li REG_PlayerSlotIndex,0
#################################
## Check For Dead Players Loop ##
#################################
Rotations_Think_InProgressLoop:
#Get Players Slot
addi r3,REG_GObjData,P1Slot
lbzx REG_PlayerSlot,REG_PlayerSlotIndex,r3
#Get Players GObj
mr r3,REG_PlayerSlot
branchl r12,0x80034110
mr REG_PlayerGObj,r3
lwz r3,0x2C(r3)
#Check If Player is still active (not sleep)
lbz r4,0x221F(r3)
rlwinm. r4,r4,0,27,27
bne Rotations_Think_InProgressIncLoop
#Check if READY,GO is over
lbz r4,0x221D(r3)
rlwinm. r4,r4,0,28,28
bne Rotations_Think_InProgressIncLoop
#Check if Blastzone code is being skipped
lbz r4,0x2219(r3)
rlwinm. r4,r4,0,25,25
beq Rotations_Think_InProgressIncLoop
#Rebirth gets here too, check if NOT rebirth/rebirthWait
lwz r4,0x10(r3)
cmpwi r4,ASID_Rebirth
beq Rotations_Think_InProgressIncLoop
cmpwi r4,ASID_RebirthWait
beq Rotations_Think_InProgressIncLoop
#If in any Star KO State, enter them into DeadUp
cmpwi r4,ASID_DeadUpStar
beq Rotations_Think_InProgressEnterDeadUp
cmpwi r4,ASID_DeadUpStarIce
beq Rotations_Think_InProgressEnterDeadUp
cmpwi r4,ASID_DeadUpFall
beq Rotations_Think_InProgressEnterDeadUp
b Rotations_Think_InProgressCheckDeadFrame
Rotations_Think_InProgressEnterDeadUp:
#Enter DeadUp
mr r3,REG_PlayerGObj
branchl r12,0x800d3e40
b Rotations_Think_InProgressIncLoop
Rotations_Think_InProgressCheckDeadFrame:
#Here we know the player is in a dead state
#Ensure he is in frame X of the dead animation
lwz r3,0x2C(REG_PlayerGObj)
lwz r4,0x2340(r3)
cmpwi r4,1
bgt Rotations_Think_InProgressIncLoop
#################################
## Search For Next Player Loop ##
#################################
Rotations_Think_InProgressSearchForNextPlayer:
.set REG_LoopCount,26
.set REG_OtherPlayerSlot,25
.set REG_LastPlayerSpawned,24
#Get other player
xori r3,REG_PlayerSlotIndex,0x1
addi r4,REG_GObjData,P1Slot
lbzx REG_OtherPlayerSlot,r3,r4
#Loop starts at LastPlayerSpawned+1
lbz REG_LastPlayerSpawned,LastPlayerSpawned(REG_GObjData)
mr REG_LoopCount,REG_LastPlayerSpawned
b Rotations_Think_InProgressSearchForNextPlayerIncLoop
Rotations_Think_InProgressSearchForNextPlayerLoop:
#Player who just died is in REG_PlayerSlot
#Player who is alive is in REG_OtherPlayerSlot
#Check if player is present
mr r3,REG_LoopCount
branchl r12,0x800322c0
cmpwi r3,0x2
bne Rotations_Think_InProgressSearchForNextPlayerIncLoop
#Ensure this isnt the player who just died
cmpw REG_LoopCount,REG_PlayerSlot
beq Rotations_Think_InProgressSearchForNextPlayerIncLoop
#Ensure this isnt the other player
cmpw REG_LoopCount,REG_OtherPlayerSlot
beq Rotations_Think_InProgressSearchForNextPlayerIncLoop
#This is a unique player, check if they have stock remainings
mr r3,REG_LoopCount
branchl r12,0x80033bd8
cmpwi r3,0
ble Rotations_Think_InProgressSearchForNextPlayerIncLoop
#Get GObj First
mr r3,REG_LoopCount
branchl r12,0x80034110
#Respawn
li r4,0x1
branchl r12,0x800bfd9c
#Save their slot to the GObjData
addi r3,REG_GObjData,P1Slot
stbx REG_LoopCount,REG_PlayerSlotIndex,r3
#Save this as the last player spawned
stb REG_LoopCount,LastPlayerSpawned(REG_GObjData)
#Now enter the recently deceased player into perm sleep
mr r3,REG_PlayerGObj
branchl r12,0x800bfd04
#Check if they have a follower
lwz r4,0x2C(REG_PlayerGObj)
lbz r3,0x2222(r4)
rlwinm. r0, r3, 30, 31, 31
beq Rotations_Think_InProgressIncLoop
#Get Follower GObj
lbz r3,0xC(r4)
li r4,1
branchl r12,0x8003418c
#SLeep them as well
branchl r12,0x800bfd04
b Rotations_Think_InProgressIncLoop
Rotations_Think_InProgressSearchForNextPlayerIncLoop:
addi REG_LoopCount,REG_LoopCount,1
cmpwi REG_LoopCount,6
blt Rotations_Think_InProgressSearchForNextPlayerIncLoopCheckIfDone
#Player count is over 6, loop back to 0
li REG_LoopCount,0
Rotations_Think_InProgressSearchForNextPlayerIncLoopCheckIfDone:
#Now check if we did a full loop
cmpw REG_LoopCount,REG_LastPlayerSpawned
bne Rotations_Think_InProgressSearchForNextPlayerLoop
#If we get here, no other players are reported as alive, so do nothing for normal respawn behvior
Rotations_Think_InProgressIncLoop:
addi REG_PlayerSlotIndex,REG_PlayerSlotIndex,1
cmpwi REG_PlayerSlotIndex,2
blt Rotations_Think_InProgressLoop
#Neither player is dead, exit think function
b Rotations_ThinkExit
#endregion
Rotations_ThinkExit:
restore
blr
#endregion
InjectionExit:
li r6,0
================================================
FILE: ASM/Additional Codes/Game Modes/Rotations Melee.s
================================================
#To be inserted at 801b9090
.include "../../Globals.s"
#Store Pointer to onStartMelee function
lwz r4, -0x77C0 (r13)
addi r4, r4, 3992
bl Rotations_Init
mflr r5
stw r5,0x44(r4)
b InjectionExit
#region Rotations_Init
Rotations_Init:
blrl
.set REG_GObj,31
.set REG_Data,30
.set DataSize,64
backup
#Create GObj
li r3,22
li r4,23
li r5,0
branchl r12,GObj_Create
mr REG_GObj,r3
#Alloc Mem
li r3,DataSize
branchl r12,HSD_MemAlloc
mr REG_Data,r3
#Zero Data
mr r3,REG_Data
li r4,DataSize
branchl r12,ZeroAreaLength
#Attach Data
mr r3,REG_GObj
li r4,14
load r5,HSD_Free
mr r6,REG_Data
branchl r12,GObj_AddUserData
#Attach Process
mr r3,REG_GObj
bl Rotations_Think
mflr r4
li r5,23
branchl r12,GObj_AddProc
Rotations_InitExit:
restore
blr
#endregion
#region Rotations_Think
Rotations_Think:
blrl
#Registers
.set REG_GObj,31
.set REG_GObjData,30
#Data Offsets
.set GameState,0x0 #byte
.set P1Slot,0x1 #byte
.set P2Slot,0x2 #byte
.set LastPlayerSpawned,0x3 #byte
#Definitions
#GameState
.set FirstFrame,0x0
.set InProgress,0x1
#Constants
.set FreezeFrames, 1 * 60
backup
#Init Pointers
mr REG_GObj,r3
lwz REG_GObjData,0x2C(REG_GObj)
#Check state of game
lbz r3,GameState(REG_GObjData)
cmpwi r3,FirstFrame
beq Rotations_Think_FirstFrame
cmpwi r3,InProgress
beq Rotations_Think_InProgress
#region FirstFrame
Rotations_Think_FirstFrame:
#Ensure over 2 players are present
branchl r12,0x8016b558
cmpwi r3,3
bge Rotations_Think_FirstFrameContinue
#Destroy Think Function
mr r3,REG_GObj
branchl r12,0x80390228
b Rotations_ThinkExit
Rotations_Think_FirstFrameContinue:
.set REG_LoopCount,29
.set REG_PlayerSlotIndex,28
#Init Loop
li REG_LoopCount,0
li REG_PlayerSlotIndex,0
Rotations_Think_FirstFrameLoop:
#Check Players Presence
mr r3,REG_LoopCount
branchl r12,0x800322c0
cmpwi r3,0x2
bne Rotations_Think_FirstFrameIncLoop
#Player exists, store to data
addi r3,REG_GObjData,P1Slot
stbx REG_LoopCount,REG_PlayerSlotIndex,r3
#Store as last player spawned
stb REG_LoopCount,LastPlayerSpawned(REG_GObjData)
#Now do next player
addi REG_PlayerSlotIndex,REG_PlayerSlotIndex,1
#Check if finished doing both players
cmpwi REG_PlayerSlotIndex,2
bge Rotations_Think_FirstFrameSleepRemainingPlayersIncLoop
Rotations_Think_FirstFrameIncLoop:
addi REG_LoopCount,REG_LoopCount,1
cmpwi REG_LoopCount,6
blt Rotations_Think_FirstFrameLoop
#Now sleep the other players
Rotations_Think_FirstFrameSleepRemainingPlayersLoop:
.set REG_PlayerGObj,27
#Check Players Presence
mr r3,REG_LoopCount
branchl r12,0x800322c0
cmpwi r3,0x2
bne Rotations_Think_FirstFrameSleepRemainingPlayersIncLoop
#Get players GObj
mr r3,REG_LoopCount
branchl r12,0x80034110
mr REG_PlayerGObj,r3
#Sleep player
branchl r12,0x800bfd04
#Check if they have a follower
lwz r3,0x2C(REG_PlayerGObj)
lbz r3,0x2222(r3)
rlwinm. r0, r3, 30, 31, 31
beq Rotations_Think_FirstFrameSleepRemainingPlayers_DestroyHUD
#Get Follower GObj
mr r3,REG_LoopCount
li r4,1
branchl r12,0x8003418c
#SLeep them as well
branchl r12,0x800bfd04
Rotations_Think_FirstFrameSleepRemainingPlayers_DestroyHUD:
#Destroy their percent HUD
load r3,0x804a10c8
mulli r4,REG_LoopCount,100
add r3,r3,r4
lbz r4, 0x0010 (r3)
li r5,1
rlwimi r4,r5,7,24,24
rlwimi r4,r5,6,25,25
stb r4, 0x0010 (r3)
Rotations_Think_FirstFrameSleepRemainingPlayersIncLoop:
addi REG_LoopCount,REG_LoopCount,1
cmpwi REG_LoopCount,6
blt Rotations_Think_FirstFrameSleepRemainingPlayersLoop
#Change state to every frame
li r3,InProgress
stb r3,GameState(REG_GObjData)
b Rotations_ThinkExit
#endregion
#region InProgress
Rotations_Think_InProgress:
#Check For Dead Players
.set REG_PlayerSlot,29
.set REG_PlayerSlotIndex,28
.set REG_PlayerGObj,27
#Init Loop
li REG_PlayerSlotIndex,0
#################################
## Check For Dead Players Loop ##
#################################
Rotations_Think_InProgressLoop:
#Get Players Slot
addi r3,REG_GObjData,P1Slot
lbzx REG_PlayerSlot,REG_PlayerSlotIndex,r3
#Get Players GObj
mr r3,REG_PlayerSlot
branchl r12,0x80034110
mr REG_PlayerGObj,r3
lwz r3,0x2C(r3)
#Check If Player is still active (not sleep)
lbz r4,0x221F(r3)
rlwinm. r4,r4,0,27,27
bne Rotations_Think_InProgressIncLoop
#Check if READY,GO is over
lbz r4,0x221D(r3)
rlwinm. r4,r4,0,28,28
bne Rotations_Think_InProgressIncLoop
#Check if Blastzone code is being skipped
lbz r4,0x2219(r3)
rlwinm. r4,r4,0,25,25
beq Rotations_Think_InProgressIncLoop
#Rebirth gets here too, check if NOT rebirth/rebirthWait
lwz r4,0x10(r3)
cmpwi r4,ASID_Rebirth
beq Rotations_Think_InProgressIncLoop
cmpwi r4,ASID_RebirthWait
beq Rotations_Think_InProgressIncLoop
#If in any Star KO State, enter them into DeadUp
cmpwi r4,ASID_DeadUpStar
beq Rotations_Think_InProgressEnterDeadUp
cmpwi r4,ASID_DeadUpStarIce
beq Rotations_Think_InProgressEnterDeadUp
cmpwi r4,ASID_DeadUpFall
beq Rotations_Think_InProgressEnterDeadUp
b Rotations_Think_InProgressCheckDeadFrame
Rotations_Think_InProgressEnterDeadUp:
#Enter DeadUp
mr r3,REG_PlayerGObj
branchl r12,0x800d3e40
b Rotations_Think_InProgressIncLoop
Rotations_Think_InProgressCheckDeadFrame:
#Here we know the player is in a dead state
#Ensure he is in frame X of the dead animation
lwz r3,0x2C(REG_PlayerGObj)
lwz r4,0x2340(r3)
cmpwi r4,1
bgt Rotations_Think_InProgressIncLoop
#################################
## Search For Next Player Loop ##
#################################
Rotations_Think_InProgressSearchForNextPlayer:
.set REG_LoopCount,26
.set REG_OtherPlayerSlot,25
.set REG_LastPlayerSpawned,24
#Get other player
xori r3,REG_PlayerSlotIndex,0x1
addi r4,REG_GObjData,P1Slot
lbzx REG_OtherPlayerSlot,r3,r4
#Loop starts at LastPlayerSpawned+1
lbz REG_LastPlayerSpawned,LastPlayerSpawned(REG_GObjData)
mr REG_LoopCount,REG_LastPlayerSpawned
b Rotations_Think_InProgressSearchForNextPlayerIncLoop
Rotations_Think_InProgressSearchForNextPlayerLoop:
#Player who just died is in REG_PlayerSlot
#Player who is alive is in REG_OtherPlayerSlot
#Check if player is present
mr r3,REG_LoopCount
branchl r12,0x800322c0
cmpwi r3,0x2
bne Rotations_Think_InProgressSearchForNextPlayerIncLoop
#Ensure this isnt the player who just died
cmpw REG_LoopCount,REG_PlayerSlot
beq Rotations_Think_InProgressSearchForNextPlayerIncLoop
#Ensure this isnt the other player
cmpw REG_LoopCount,REG_OtherPlayerSlot
beq Rotations_Think_InProgressSearchForNextPlayerIncLoop
#This is a unique player, check if they have stock remainings
mr r3,REG_LoopCount
branchl r12,0x80033bd8
cmpwi r3,0
ble Rotations_Think_InProgressSearchForNextPlayerIncLoop
#Get GObj First
mr r3,REG_LoopCount
branchl r12,0x80034110
#Respawn
li r4,0x1
branchl r12,0x800bfd9c
#Save their slot to the GObjData
addi r3,REG_GObjData,P1Slot
stbx REG_LoopCount,REG_PlayerSlotIndex,r3
#Save this as the last player spawned
stb REG_LoopCount,LastPlayerSpawned(REG_GObjData)
#Now enter the recently deceased player into perm sleep
mr r3,REG_PlayerGObj
branchl r12,0x800bfd04
#Check if they have a follower
lwz r4,0x2C(REG_PlayerGObj)
lbz r3,0x2222(r4)
rlwinm. r0, r3, 30, 31, 31
beq Rotations_Think_InProgressIncLoop
#Get Follower GObj
lbz r3,0xC(r4)
li r4,1
branchl r12,0x8003418c
#SLeep them as well
branchl r12,0x800bfd04
b Rotations_Think_InProgressIncLoop
Rotations_Think_InProgressSearchForNextPlayerIncLoop:
addi REG_LoopCount,REG_LoopCount,1
cmpwi REG_LoopCount,6
blt Rotations_Think_InProgressSearchForNextPlayerIncLoopCheckIfDone
#Player count is over 6, loop back to 0
li REG_LoopCount,0
Rotations_Think_InProgressSearchForNextPlayerIncLoopCheckIfDone:
#Now check if we did a full loop
cmpw REG_LoopCount,REG_LastPlayerSpawned
bne Rotations_Think_InProgressSearchForNextPlayerLoop
#If we get here, no other players are reported as alive, so do nothing for normal respawn behvior
Rotations_Think_InProgressIncLoop:
addi REG_PlayerSlotIndex,REG_PlayerSlotIndex,1
cmpwi REG_PlayerSlotIndex,2
blt Rotations_Think_InProgressLoop
#Neither player is dead, exit think function
b Rotations_ThinkExit
#endregion
Rotations_ThinkExit:
restore
blr
#endregion
InjectionExit:
li r6,0
================================================
FILE: ASM/Additional Codes/Game Modes/Tag Melee.asm
================================================
#To be inserted at 801b8e80
.include "../../Globals.s"
#Store Pointer to onStartMelee function
lwz r4, -0x77C0 (r13)
addi r4, r4, 3672
bl TagMelee_Init
mflr r5
stw r5,0x44(r4)
b InjectionExit
#region TagMelee_Init
TagMelee_Init:
blrl
.set REG_GObj,31
.set REG_Data,30
.set DataSize,64
backup
#Create GObj
li r3,22
li r4,23
li r5,0
branchl r12,GObj_Create
mr REG_GObj,r3
#Alloc Mem
li r3,DataSize
branchl r12,HSD_MemAlloc
mr REG_Data,r3
#Zero Data
mr r3,REG_Data
li r4,DataSize
branchl r12,ZeroAreaLength
#Attach Data
mr r3,REG_GObj
li r4,14
load r5,HSD_Free
mr r6,REG_Data
branchl r12,GObj_AddUserData
#Attach Process
mr r3,REG_GObj
bl TagMelee_Think
mflr r4
li r5,23
branchl r12,GObj_AddProc
TagMelee_InitExit:
restore
blr
#endregion
#region TagMelee_Think
TagMelee_Think:
blrl
#Registers
.set REG_GObj,31
.set REG_GObjData,30
#Data Offsets
.set GameState,0x0 #byte
.set ItSlot,0x1 #byte
.set Timer,0x2 #half
#Definitions
#GameState
.set Start,0x0
.set InProgress,0x1
.set Frozen,0x2
#Constants
.set FreezeFrames, 1 * 60
backup
#Init Pointers
mr REG_GObj,r3
lwz REG_GObjData,0x2C(REG_GObj)
#Check state of game
lbz r3,GameState(REG_GObjData)
cmpwi r3,Start
beq TagMelee_Think_Start
cmpwi r3,InProgress
beq TagMelee_Think_InProgress
cmpwi r3,Frozen
beq TagMelee_Think_Frozen
#region Start
TagMelee_Think_Start:
.set REG_LoopCount,29
.set REG_TotalPlayerCount,28
#########################################
## Start by counting all alive players ##
#########################################
#Init Loop
li REG_LoopCount,0
li REG_TotalPlayerCount,0
TagMelee_Think_StartCountAllPlayers:
#Check Players Presence
mr r3,REG_LoopCount
branchl r12,0x800322c0
cmpwi r3,0x2
bne TagMelee_Think_StartCountAllPlayersIncLoop
#Check if player has stocks remaining
mr r3,REG_LoopCount
branchl r12,0x80033bd8
cmpwi r3,0
ble TagMelee_Think_StartCountAllPlayersIncLoop
#Get Players GObj
mr r3,REG_LoopCount
branchl r12,0x80034110
lwz r3,0x2C(r3)
#Check if READY,GO is over
lbz r4,0x221D(r3)
rlwinm. r4,r4,0,28,28
bne TagMelee_ThinkExit
#Player exists, increment total count
addi REG_TotalPlayerCount,REG_TotalPlayerCount,1
TagMelee_Think_StartCountAllPlayersIncLoop:
addi REG_LoopCount,REG_LoopCount,1
cmpwi REG_LoopCount,6
blt TagMelee_Think_StartCountAllPlayers
#############################
## Now get a random player ##
#############################
.set REG_RandomPlayer,27
mr r3,REG_TotalPlayerCount
branchl r12,HSD_Randi
mr REG_RandomPlayer,r3
#######################################
## Get the corresponding player slot ##
#######################################
#Init Loop
li REG_LoopCount,0
li REG_TotalPlayerCount,0
TagMelee_Think_StartGetItSlot:
#Check Players Presence
mr r3,REG_LoopCount
branchl r12,0x800322c0
cmpwi r3,0x2
bne TagMelee_Think_StartGetItSlotIncLoop
#Check if player has stocks remaining
mr r3,REG_LoopCount
branchl r12,0x80033bd8
cmpwi r3,0
ble TagMelee_Think_StartGetItSlotIncLoop
#Is this who im looking for?
cmpw REG_RandomPlayer,REG_TotalPlayerCount
beq TagMelee_Think_StartFoundIt
#Player exists, increment total count
addi REG_TotalPlayerCount,REG_TotalPlayerCount,1
TagMelee_Think_StartGetItSlotIncLoop:
addi REG_LoopCount,REG_LoopCount,1
cmpwi REG_LoopCount,6
blt TagMelee_Think_StartGetItSlot
###################
## Store as "it" ##
###################
TagMelee_Think_StartFoundIt:
stb REG_LoopCount,ItSlot(REG_GObjData)
.set TimerMin, 10 * 60
.set TimerMax, 30 * 60
#Start random timer
li r3,TimerMax-TimerMin
branchl r12,HSD_Randi
addi r3,r3,TimerMin
sth r3,Timer(REG_GObjData)
#Change state to InProgress
li r3,InProgress
stb r3,GameState(REG_GObjData)
b TagMelee_Think_InProgress
#endregion
#region InProgress
TagMelee_Think_InProgress:
.set REG_LoopCount,29
.set REG_TotalPlayerCount,28
#Init Loop
li REG_LoopCount,0
li REG_TotalPlayerCount,0
TagMelee_Think_PunishPlayers:
#Check Players Presence
mr r3,REG_LoopCount
branchl r12,0x800322c0
cmpwi r3,0x2
bne TagMelee_Think_PunishPlayersIncLoop
#Check if player has stocks remaining
mr r3,REG_LoopCount
branchl r12,0x80033bd8
cmpwi r3,0
ble TagMelee_Think_PunishPlayersIncLoop
#Ensure this player os not it
lbz r3,ItSlot(REG_GObjData)
cmpw r3,REG_LoopCount
beq TagMelee_Think_PunishPlayersIncLoop
#Get this players gobj
mr r3,REG_LoopCount
branchl r12,PlayerBlock_LoadMainCharDataOffset
mr REG_PlayerGObj,r3
lwz REG_PlayerData,0x2C(REG_PlayerGObj)
#Check if they have a victim
lwz r3,0x2094(REG_PlayerData)
cmpwi r3,0
beq TagMelee_Think_PunishPlayersIncLoop
#If victim is not it, give the damage they just dealt
lwz r4,0x2C(r3)
TagMelee_Think_PunishPlayersIncLoop:
addi REG_LoopCount,REG_LoopCount,1
cmpwi REG_LoopCount,6
blt TagMelee_Think_PunishPlayers
##################
## Monitor "It" ##
##################
TagMelee_Think_InProgressMonitorIt:
#Get Players GObj
lbz r3,ItSlot(REG_GObjData)
branchl r12,0x80034110
mr REG_PlayerGObj,r3
#Check if player died
#Check if Blastzone code is being skipped
lwz r3,0x2C(REG_PlayerGObj)
lbz r4,0x2219(r3)
rlwinm. r4,r4,0,25,25
beq TagMelee_Think_InProgressMonitorItCheckForVictim
#Rebirth gets here too, check if NOT rebirth/rebirthWait
lwz r4,0x10(r3)
cmpwi r4,ASID_Rebirth
beq TagMelee_Think_InProgressMonitorItCheckForVictim
cmpwi r4,ASID_RebirthWait
beq TagMelee_Think_InProgressMonitorItCheckForVictim
#If in any Star KO State, enter them into DeadUp
cmpwi r4,ASID_DeadUpStar
beq TagMelee_Think_InProgressEnterDeadUp
cmpwi r4,ASID_DeadUpStarIce
beq TagMelee_Think_InProgressEnterDeadUp
cmpwi r4,ASID_DeadUpFall
beq TagMelee_Think_InProgressEnterDeadUp
b TagMelee_Think_InProgressFreezeAllPlayers
TagMelee_Think_InProgressEnterDeadUp:
#Enter DeadUp
lwz r3,0x0(r3)
branchl r12,0x800d3e40
b TagMelee_Think_InProgressFreezeAllPlayers
TagMelee_Think_InProgressMonitorItCheckForVictim:
#Check if player has a victim
lwz r3,0x2C(REG_PlayerGObj)
lwz r4,0x2094(r3)
cmpwi r4,0
beq TagMelee_Think_InProgressNoTag
#Ensure there is no hitbox exception (this should catch Thrown hitboxes)
lwz r5,0x1198(r3)
cmpwi r5,0
bne TagMelee_Think_InProgressRemoveVictim
#Get the victims damage source
lwz r5,0x2C(r4)
lwz r5,0x1868(r5)
#Check if source pointer exists
cmpwi r5,0x0
beq TagMelee_Think_InProgressRemoveVictim
#Check if source pointer is live (check userdata pointer)
lwz r6,0x2C(r5)
cmpwi r6,0 #if not, item most likely was removed on hit, so assume it was an item
beq TagMelee_Think_InProgressRemoveVictim
#Check if they were hit by an "item"
lhz r6,0x0(r5)
cmpwi r6,6
beq TagMelee_Think_InProgressNoTag
b TagMelee_Think_InProgressSetNewIt
/* bne TagMelee_Think_InProgressSetNewIt
#Check if hitbox is still active
lwz r6,0x2C(r5)
addi r6,r6,0x5D4 #Start of hitbox struct
lwz r5,0x0(r6) #check if hitbox is active
cmpwi r5,0x0
beq TagMelee_Think_InProgressSetNewIt
#Ensure it was non reflectable
lbz r5,0x42(r6) #get collision bools
rlwinm. r5, r5, 29, 31, 31
bne TagMelee_Think_InProgressNoTag
*/
TagMelee_Think_InProgressRemoveVictim:
li r4,0
stw r4,0x2094(r3)
b TagMelee_Think_InProgressNoTag
TagMelee_Think_InProgressSetNewIt:
#Set this as new "it"
mr REG_PlayerGObj,r4
lwz r3,0x2C(r4)
lbz r4,0xC(r3)
stb r4,ItSlot(REG_GObjData)
TagMelee_Think_InProgressNoTag:
#Apply GFX to "it"
lwz r3,0x2C(REG_PlayerGObj)
li r4,0x23 # darkness body aura
li r5,0
branchl r12,0x800bffd0
lwz r4,0x2C(REG_PlayerGObj)
li r3,0
stw r3,0x430(r4)
lhz r3,Timer(REG_GObjData)
subi r3,r3,1
sth r3,Timer(REG_GObjData)
#Check if up
cmpwi r3,0
bgt TagMelee_ThinkExit
#Timer up, kill "it"
addi r3,REG_PlayerGObj,0
branchl r12,0x800d3e40
########################
## Freeze All Players ##
########################
.set REG_LoopCount,29
.set REG_TotalPlayerCount,28
.set REG_PlayerGObj,27
.set REG_PlayerData,26
TagMelee_Think_InProgressFreezeAllPlayers:
#Init Loop
li REG_LoopCount,0
li REG_TotalPlayerCount,0
TagMelee_Think_InProgressFreezeAllPlayersLoop:
#Check Players Presence
mr r3,REG_LoopCount
branchl r12,0x800322c0
cmpwi r3,0x2
bne TagMelee_Think_InProgressFreezeAllPlayersIncLoop
#Check if player has stocks remaining
mr r3,REG_LoopCount
branchl r12,0x80033bd8
cmpwi r3,0
ble TagMelee_Think_InProgressFreezeAllPlayersIncLoop
#Player exists, get pointers
mr r3,REG_LoopCount
branchl r12,0x80034110
mr REG_PlayerGObj,r3
lwz REG_PlayerData,0x2C(REG_PlayerGObj)
#Freeze bool
li r5,1
lbz r4,0x2219(REG_PlayerData)
rlwimi r4,r5,2,29,29
stb r4,0x2219(REG_PlayerData)
#Remove any hitlag
li r4,0
stw r4,0x195C(REG_PlayerData)
stw r4,0x1958(REG_PlayerData)
#Skip Blastzone and Hitbox Collision Detection Code
lbz r3,0x2219(REG_PlayerData)
li r4,1
rlwimi r3,r4,6,25,25
stb r3,0x2219(REG_PlayerData)
#Freeze GFX if not dead
lbz r3,0x221E(REG_PlayerData)
rlwinm. r0,r3,0,24,24
bne TagMelee_Think_InProgressFreezeAllPlayersIncLoop
mr r3,REG_PlayerGObj
branchl r12,0x8005ba40
TagMelee_Think_InProgressFreezeAllPlayersIncLoop:
addi REG_LoopCount,REG_LoopCount,1
cmpwi REG_LoopCount,6
blt TagMelee_Think_InProgressFreezeAllPlayersLoop
#Set timer
li r3,60
sth r3,Timer(REG_GObjData)
#Change state to frozen
li r3,Frozen
stb r3,GameState(REG_GObjData)
b TagMelee_ThinkExit
#endregion
#region Frozen
TagMelee_Think_Frozen:
#Dec Timer
lhz r3,Timer(REG_GObjData)
subi r3,r3,1
sth r3,Timer(REG_GObjData)
#Check if up
cmpwi r3,0
bgt TagMelee_ThinkExit
#Respawn all
.set REG_LoopCount,29
.set REG_TotalPlayerCount,28
.set REG_PlayerGObj,27
#Init Loop
li REG_LoopCount,0
li REG_TotalPlayerCount,0
TagMelee_Think_FrozenRespawnAllPlayersLoop:
#Check Players Presence
mr r3,REG_LoopCount
branchl r12,0x800322c0
cmpwi r3,0x2
bne TagMelee_Think_FrozenRespawnAllPlayersIncLoop
#Check if player has stocks remaining
mr r3,REG_LoopCount
branchl r12,0x80033bd8
cmpwi r3,0
ble TagMelee_Think_FrozenRespawnAllPlayersIncLoop
#Get data
mr r3,REG_LoopCount
branchl r12,0x80034110
mr REG_PlayerGObj,r3
#Remove Items + Etc
mr r3,REG_PlayerGObj
branchl r12,0x800d331c
#Enter into Sleep
mr r3,REG_PlayerGObj
li r4,0x1
branchl r12,0x800bfd9c
TagMelee_Think_FrozenRespawnAllPlayersIncLoop:
addi REG_LoopCount,REG_LoopCount,1
cmpwi REG_LoopCount,6
blt TagMelee_Think_FrozenRespawnAllPlayersLoop
#Change state to start
li r3,Start
stb r3,GameState(REG_GObjData)
b TagMelee_ThinkExit
#endregion
TagMelee_ThinkExit:
restore
blr
#endregion
InjectionExit:
li r6,0
================================================
FILE: ASM/Additional Codes/Game Modes/Tag Melee.s
================================================
#To be inserted at 801b8e80
.include "../../Globals.s"
#Store Pointer to onStartMelee function
lwz r4, -0x77C0 (r13)
addi r4, r4, 3672
bl TagMelee_Init
mflr r5
stw r5,0x44(r4)
b InjectionExit
#region TagMelee_Init
TagMelee_Init:
blrl
.set REG_GObj,31
.set REG_Data,30
.set DataSize,64
backup
#Create GObj
li r3,22
li r4,23
li r5,0
branchl r12,GObj_Create
mr REG_GObj,r3
#Alloc Mem
li r3,DataSize
branchl r12,HSD_MemAlloc
mr REG_Data,r3
#Zero Data
mr r3,REG_Data
li r4,DataSize
branchl r12,ZeroAreaLength
#Attach Data
mr r3,REG_GObj
li r4,14
load r5,HSD_Free
mr r6,REG_Data
branchl r12,GObj_AddUserData
#Attach Process
mr r3,REG_GObj
bl TagMelee_Think
mflr r4
li r5,23
branchl r12,GObj_AddProc
TagMelee_InitExit:
restore
blr
#endregion
#region TagMelee_Think
TagMelee_Think:
blrl
#Registers
.set REG_GObj,31
.set REG_GObjData,30
#Data Offsets
.set GameState,0x0 #byte
.set ItSlot,0x1 #byte
.set Timer,0x2 #half
#Definitions
#GameState
.set Start,0x0
.set InProgress,0x1
.set Frozen,0x2
#Constants
.set FreezeFrames, 1 * 60
backup
#Init Pointers
mr REG_GObj,r3
lwz REG_GObjData,0x2C(REG_GObj)
#Check state of game
lbz r3,GameState(REG_GObjData)
cmpwi r3,Start
beq TagMelee_Think_Start
cmpwi r3,InProgress
beq TagMelee_Think_InProgress
cmpwi r3,Frozen
beq TagMelee_Think_Frozen
#region Start
TagMelee_Think_Start:
.set REG_LoopCount,29
.set REG_TotalPlayerCount,28
#########################################
## Start by counting all alive players ##
#########################################
#Init Loop
li REG_LoopCount,0
li REG_TotalPlayerCount,0
TagMelee_Think_StartCountAllPlayers:
#Check Players Presence
mr r3,REG_LoopCount
branchl r12,0x800322c0
cmpwi r3,0x2
bne TagMelee_Think_StartCountAllPlayersIncLoop
#Check if player has stocks remaining
mr r3,REG_LoopCount
branchl r12,0x80033bd8
cmpwi r3,0
ble TagMelee_Think_StartCountAllPlayersIncLoop
#Get Players GObj
mr r3,REG_LoopCount
branchl r12,0x80034110
lwz r3,0x2C(r3)
#Check if READY,GO is over
lbz r4,0x221D(r3)
rlwinm. r4,r4,0,28,28
bne TagMelee_ThinkExit
#Player exists, increment total count
addi REG_TotalPlayerCount,REG_TotalPlayerCount,1
TagMelee_Think_StartCountAllPlayersIncLoop:
addi REG_LoopCount,REG_LoopCount,1
cmpwi REG_LoopCount,6
blt TagMelee_Think_StartCountAllPlayers
#############################
## Now get a random player ##
#############################
.set REG_RandomPlayer,27
mr r3,REG_TotalPlayerCount
branchl r12,HSD_Randi
mr REG_RandomPlayer,r3
#######################################
## Get the corresponding player slot ##
#######################################
#Init Loop
li REG_LoopCount,0
li REG_TotalPlayerCount,0
TagMelee_Think_StartGetItSlot:
#Check Players Presence
mr r3,REG_LoopCount
branchl r12,0x800322c0
cmpwi r3,0x2
bne TagMelee_Think_StartGetItSlotIncLoop
#Check if player has stocks remaining
mr r3,REG_LoopCount
branchl r12,0x80033bd8
cmpwi r3,0
ble TagMelee_Think_StartGetItSlotIncLoop
#Is this who im looking for?
cmpw REG_RandomPlayer,REG_TotalPlayerCount
beq TagMelee_Think_StartFoundIt
#Player exists, increment total count
addi REG_TotalPlayerCount,REG_TotalPlayerCount,1
TagMelee_Think_StartGetItSlotIncLoop:
addi REG_LoopCount,REG_LoopCount,1
cmpwi REG_LoopCount,6
blt TagMelee_Think_StartGetItSlot
###################
## Store as "it" ##
###################
TagMelee_Think_StartFoundIt:
stb REG_LoopCount,ItSlot(REG_GObjData)
.set TimerMin, 10 * 60
.set TimerMax, 30 * 60
#Start random timer
li r3,TimerMax-TimerMin
branchl r12,HSD_Randi
addi r3,r3,TimerMin
sth r3,Timer(REG_GObjData)
#Change state to InProgress
li r3,InProgress
stb r3,GameState(REG_GObjData)
b TagMelee_Think_InProgress
#endregion
#region InProgress
TagMelee_Think_InProgress:
.set REG_LoopCount,29
.set REG_TotalPlayerCount,28
#Init Loop
li REG_LoopCount,0
li REG_TotalPlayerCount,0
TagMelee_Think_PunishPlayers:
#Check Players Presence
mr r3,REG_LoopCount
branchl r12,0x800322c0
cmpwi r3,0x2
bne TagMelee_Think_PunishPlayersIncLoop
#Check if player has stocks remaining
mr r3,REG_LoopCount
branchl r12,0x80033bd8
cmpwi r3,0
ble TagMelee_Think_PunishPlayersIncLoop
#Ensure this player os not it
lbz r3,ItSlot(REG_GObjData)
cmpw r3,REG_LoopCount
beq TagMelee_Think_PunishPlayersIncLoop
#Get this players gobj
mr r3,REG_LoopCount
branchl r12,PlayerBlock_LoadMainCharDataOffset
mr REG_PlayerGObj,r3
lwz REG_PlayerData,0x2C(REG_PlayerGObj)
#Check if they have a victim
lwz r3,0x2094(REG_PlayerData)
cmpwi r3,0
beq TagMelee_Think_PunishPlayersIncLoop
#If victim is not it, give the damage they just dealt
lwz r4,0x2C(r3)
TagMelee_Think_PunishPlayersIncLoop:
addi REG_LoopCount,REG_LoopCount,1
cmpwi REG_LoopCount,6
blt TagMelee_Think_PunishPlayers
##################
## Monitor "It" ##
##################
TagMelee_Think_InProgressMonitorIt:
#Get Players GObj
lbz r3,ItSlot(REG_GObjData)
branchl r12,0x80034110
mr REG_PlayerGObj,r3
#Check if player died
#Check if Blastzone code is being skipped
lwz r3,0x2C(REG_PlayerGObj)
lbz r4,0x2219(r3)
rlwinm. r4,r4,0,25,25
beq TagMelee_Think_InProgressMonitorItCheckForVictim
#Rebirth gets here too, check if NOT rebirth/rebirthWait
lwz r4,0x10(r3)
cmpwi r4,ASID_Rebirth
beq TagMelee_Think_InProgressMonitorItCheckForVictim
cmpwi r4,ASID_RebirthWait
beq TagMelee_Think_InProgressMonitorItCheckForVictim
#If in any Star KO State, enter them into DeadUp
cmpwi r4,ASID_DeadUpStar
beq TagMelee_Think_InProgressEnterDeadUp
cmpwi r4,ASID_DeadUpStarIce
beq TagMelee_Think_InProgressEnterDeadUp
cmpwi r4,ASID_DeadUpFall
beq TagMelee_Think_InProgressEnterDeadUp
b TagMelee_Think_InProgressFreezeAllPlayers
TagMelee_Think_InProgressEnterDeadUp:
#Enter DeadUp
lwz r3,0x0(r3)
branchl r12,0x800d3e40
b TagMelee_Think_InProgressFreezeAllPlayers
TagMelee_Think_InProgressMonitorItCheckForVictim:
#Check if player has a victim
lwz r3,0x2C(REG_PlayerGObj)
lwz r4,0x2094(r3)
cmpwi r4,0
beq TagMelee_Think_InProgressNoTag
#Ensure there is no hitbox exception (this should catch Thrown hitboxes)
lwz r5,0x1198(r3)
cmpwi r5,0
bne TagMelee_Think_InProgressRemoveVictim
#Get the victims damage source
lwz r5,0x2C(r4)
lwz r5,0x1868(r5)
#Check if source pointer exists
cmpwi r5,0x0
beq TagMelee_Think_InProgressRemoveVictim
#Check if source pointer is live (check userdata pointer)
lwz r6,0x2C(r5)
cmpwi r6,0 #if not, item most likely was removed on hit, so assume it was an item
beq TagMelee_Think_InProgressRemoveVictim
#Check if they were hit by an "item"
lhz r6,0x0(r5)
cmpwi r6,6
beq TagMelee_Think_InProgressNoTag
b TagMelee_Think_InProgressSetNewIt
/* bne TagMelee_Think_InProgressSetNewIt
#Check if hitbox is still active
lwz r6,0x2C(r5)
addi r6,r6,0x5D4 #Start of hitbox struct
lwz r5,0x0(r6) #check if hitbox is active
cmpwi r5,0x0
beq TagMelee_Think_InProgressSetNewIt
#Ensure it was non reflectable
lbz r5,0x42(r6) #get collision bools
rlwinm. r5, r5, 29, 31, 31
bne TagMelee_Think_InProgressNoTag
*/
TagMelee_Think_InProgressRemoveVictim:
li r4,0
stw r4,0x2094(r3)
b TagMelee_Think_InProgressNoTag
TagMelee_Think_InProgressSetNewIt:
#Set this as new "it"
mr REG_PlayerGObj,r4
lwz r3,0x2C(r4)
lbz r4,0xC(r3)
stb r4,ItSlot(REG_GObjData)
TagMelee_Think_InProgressNoTag:
#Apply GFX to "it"
lwz r3,0x2C(REG_PlayerGObj)
li r4,0x23 # darkness body aura
li r5,0
branchl r12,0x800bffd0
lwz r4,0x2C(REG_PlayerGObj)
li r3,0
stw r3,0x430(r4)
lhz r3,Timer(REG_GObjData)
subi r3,r3,1
sth r3,Timer(REG_GObjData)
#Check if up
cmpwi r3,0
bgt TagMelee_ThinkExit
#Timer up, kill "it"
addi r3,REG_PlayerGObj,0
branchl r12,0x800d3e40
########################
## Freeze All Players ##
########################
.set REG_LoopCount,29
.set REG_TotalPlayerCount,28
.set REG_PlayerGObj,27
.set REG_PlayerData,26
TagMelee_Think_InProgressFreezeAllPlayers:
#Init Loop
li REG_LoopCount,0
li REG_TotalPlayerCount,0
TagMelee_Think_InProgressFreezeAllPlayersLoop:
#Check Players Presence
mr r3,REG_LoopCount
branchl r12,0x800322c0
cmpwi r3,0x2
bne TagMelee_Think_InProgressFreezeAllPlayersIncLoop
#Check if player has stocks remaining
mr r3,REG_LoopCount
branchl r12,0x80033bd8
cmpwi r3,0
ble TagMelee_Think_InProgressFreezeAllPlayersIncLoop
#Player exists, get pointers
mr r3,REG_LoopCount
branchl r12,0x80034110
mr REG_PlayerGObj,r3
lwz REG_PlayerData,0x2C(REG_PlayerGObj)
#Freeze bool
li r5,1
lbz r4,0x2219(REG_PlayerData)
rlwimi r4,r5,2,29,29
stb r4,0x2219(REG_PlayerData)
#Remove any hitlag
li r4,0
stw r4,0x195C(REG_PlayerData)
stw r4,0x1958(REG_PlayerData)
#Skip Blastzone and Hitbox Collision Detection Code
lbz r3,0x2219(REG_PlayerData)
li r4,1
rlwimi r3,r4,6,25,25
stb r3,0x2219(REG_PlayerData)
#Freeze GFX if not dead
lbz r3,0x221E(REG_PlayerData)
rlwinm. r0,r3,0,24,24
bne TagMelee_Think_InProgressFreezeAllPlayersIncLoop
mr r3,REG_PlayerGObj
branchl r12,0x8005ba40
TagMelee_Think_InProgressFreezeAllPlayersIncLoop:
addi REG_LoopCount,REG_LoopCount,1
cmpwi REG_LoopCount,6
blt TagMelee_Think_InProgressFreezeAllPlayersLoop
#Set timer
li r3,60
sth r3,Timer(REG_GObjData)
#Change state to frozen
li r3,Frozen
stb r3,GameState(REG_GObjData)
b TagMelee_ThinkExit
#endregion
#region Frozen
TagMelee_Think_Frozen:
#Dec Timer
lhz r3,Timer(REG_GObjData)
subi r3,r3,1
sth r3,Timer(REG_GObjData)
#Check if up
cmpwi r3,0
bgt TagMelee_ThinkExit
#Respawn all
.set REG_LoopCount,29
.set REG_TotalPlayerCount,28
.set REG_PlayerGObj,27
#Init Loop
li REG_LoopCount,0
li REG_TotalPlayerCount,0
TagMelee_Think_FrozenRespawnAllPlayersLoop:
#Check Players Presence
mr r3,REG_LoopCount
branchl r12,0x800322c0
cmpwi r3,0x2
bne TagMelee_Think_FrozenRespawnAllPlayersIncLoop
#Check if player has stocks remaining
mr r3,REG_LoopCount
branchl r12,0x80033bd8
cmpwi r3,0
ble TagMelee_Think_FrozenRespawnAllPlayersIncLoop
#Get data
mr r3,REG_LoopCount
branchl r12,0x80034110
mr REG_PlayerGObj,r3
#Remove Items + Etc
mr r3,REG_PlayerGObj
branchl r12,0x800d331c
#Enter into Sleep
mr r3,REG_PlayerGObj
li r4,0x1
branchl r12,0x800bfd9c
TagMelee_Think_FrozenRespawnAllPlayersIncLoop:
addi REG_LoopCount,REG_LoopCount,1
cmpwi REG_LoopCount,6
blt TagMelee_Think_FrozenRespawnAllPlayersLoop
#Change state to start
li r3,Start
stb r3,GameState(REG_GObjData)
b TagMelee_ThinkExit
#endregion
TagMelee_ThinkExit:
restore
blr
#endregion
InjectionExit:
li r6,0
================================================
FILE: ASM/Additional Codes/Hide Nametag When Invisible.asm
================================================
#To be inserted at 802fccd8
.include "../Globals.s"
#Check if Doubles
load r3,0x8046b6a0
lbz r3,0x24D0(r3)
cmpwi r3, 0x1
beq Original
#Get PLayer
lbz r3, 0(r31)
branchl r12,0x80034110
#Get Player Data
lwz r4,0x2C(r3)
#Check if Mewtwo
lwz r3,0x4(r4)
cmpwi r3,0x10
bne NotMewtwoAridodge
#Check if Airdodging
lwz r3,0x10(r4)
cmpwi r3,0xEC
beq HideNametag
NotMewtwoAridodge:
#Get Invis Bit
lbz r3,0x221E(r4)
rlwinm. r3, r3, 0, 24, 24
beq- Original
HideNametag:
#Is Invisible, Hide Tag
lis r12, 0x802F
ori r12, r12, 0xCCC8
mtctr r12
bctr
Original:
cmplwi r30, 0
================================================
FILE: ASM/Additional Codes/Hide Player GFX When Hitboxes Enabled/Hide GFX When Hitboxes Enabled.asm
================================================
#To be inserted at 8005FE30
.include "../../Globals.s"
#Check if a GObj was sent as an arg
cmpwi r4,0
beq Original
#Check if this is a player GObj
lhz r8,0x0(r4)
cmpwi r8,0x4
beq Fighter
cmpwi r8,0x6
beq Item
b Original
Fighter:
#Get player's hitbox visibility flag
lwz r8,0x2C(r4)
lbz r8,0x21FC(r8)
rlwinm. r8,r8,0,30,30
beq Original
b Skip
Item:
#Get item's hitbox visibility flag
lwz r8,0x2C(r4)
lbz r8,0xDAA(r8)
rlwinm. r8,r8,0,30,30
beq Original
b Skip
Skip:
li r3,0
branch r12,0x80061d40
Original:
addi r28, r3, 0
================================================
FILE: ASM/Additional Codes/Hide Player GFX When Hitboxes Enabled/Hide OnHit GFX When Hitboxes Enabled 2.asm
================================================
#To be inserted at 8007a430
.include "../../Globals.s"
#Get player's hitbox visibility flag
lwz r12, 0x002C (r30)
lbz r12,0x21FC(r12)
rlwinm. r12,r12,0,30,30
beq Original
branch r12,0x8007a6a8
Original:
lwz r0, 0x0030 (r17)
================================================
FILE: ASM/Additional Codes/Hide Player GFX When Hitboxes Enabled/Hide OnHit GFX When Hitboxes Enabled.asm
================================================
#To be inserted at 8007a180
.include "../../Globals.s"
#Get player's hitbox visibility flag
lbz r0,0x21FC(r6)
rlwinm. r0,r0,0,30,30
beq Original
branch r12,0x8007a6a8
Original:
lwz r0, 0x0030 (r4)
================================================
FILE: ASM/Additional Codes/Hitbox Color Changes Based On Damage.asm
================================================
#To be inserted at 80009fa4
.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
mflr r0
stw r0, 0x4(r1)
stwu r1,-0x100(r1) # make space for 12 registers
stmw r20,0x8(r1)
.endm
.macro restore
lmw r20,0x8(r1)
lwz r0, 0x104(r1)
addi r1,r1,0x100 # release the space
mtlr r0
.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
.set playerdata,31
#r0 is free
#r5 is free
#18 = 0
#5 = 187
#minimum GB value - (damage * (minimum GB value /max damage)
#Get Values
lfs f5,0xC(r3) #Get Hitbox Damage
bl Floats
mflr r5
lfs f6,0x0(r5) #Min GB Value
lfs f7,0x4(r5) #Damage Value for Lightest Color
lfs f8,0x8(r5) #Damage Value for Darkest Color
#Check If Does Over Max Damage Accounted For
fcmpo cr0,f5,f8
blt CheckMin
li r6,0x0
b StoreGandB
CheckMin:
#Check If Does Under Min Damage Accounted For
fcmpo cr0,f5,f7
bgt Formula
lfs f8,0x0(r5) #Value for Lightest Color
b ConvertToDecimal
#Formula
Formula:
fsubs f8,f8,f7
fsubs f5,f5,f7
fsubs f7,f7,f7
fdivs f8,f6,f8 #(minimum GB value /max damage)
fmuls f8,f5,f8 #(damage * (minimum GB value /damage range)
fsubs f8,f6,f8 #minimum GB value - (damage * (minimum GB value /damage range)
#Convert To Decimal
ConvertToDecimal:
fctiwz f5,f8
stfd f5,-0xC(sp)
lwz r6,-0x8(sp) #Get Hitbox Damage as Int
#Store As G and B Value
StoreGandB:
subi r5, r13, 32768 #Get Hitbox Color in DOL
stb r6,0x1(r5) #G
stb r6,0x2(r5) #B
b exit
Floats:
blrl
.long 0x43580000 #Min GB Value 187
.long 0x40A00000 #Damage Value for Lightest Color 5
.long 0x41900000 #Damage Value for Darkest Color 18
exit:
================================================
FILE: ASM/Additional Codes/Hold A+B for Salty Runback + Hold A+X for Random Stage + Skip Result Screen.asm
================================================
#To be inserted at 801a5b14
.include "../Globals.s"
.set REG_LoopCount,29
#Init loop
li REG_LoopCount,0
Loop:
#Get players inputs
mr r3,REG_LoopCount
branchl r12,0x801a3680
#Check Inputs
rlwinm. r0, r4, 0, 23, 23 #check A
beq- LoopInc
rlwinm. r0, r4, 0, 22, 22 #check B
bne- Runback
rlwinm. r0, r4, 0, 21, 21 #check X
bne RandomStage
LoopInc:
addi REG_LoopCount,REG_LoopCount,1
cmpwi REG_LoopCount,4
blt Loop
b LoadCSS
Runback:
li r27,0x2 #reload match scene
b exit
RandomStage:
branchl r12,0x802599EC #get random stage ID
#convert SSS ID to internal stage ID
load r4,0x803f06D0 #load stage ID table
mulli r3, r3, 28 #stage ID to offset
add r4,r4,r3 #add to start of table
lbz r3,0xB(r4) #get internal stage ID
#Store to match struct
load r4,0x8045AC64 #load VS match struct
sth r3,0x2(r4) #store stage half to struct
#Store to preload table
load r4,0x8043207c #Preload Cache
stw r3,0xC(r4) #Store to Preload Cache
#Request Load
branchl r12,0x80018254
li r27,0x2 #reload match scene
b exit
LoadCSS:
li r27,0 # 4 is results
exit:
Original:
li r29, 0
================================================
FILE: ASM/Additional Codes/Hold Z for Rapid Frame Advance/New Inputs Don't Reset Rapid Timer.s
================================================
#To be inserted at 80377944
.include "../../Globals.s"
#Check if nothing is pressed
lwz r0, 0x0000 (r26)
cmpwi r0,0
beq Exit
#If something is pressed, dont reset timer
branch r12,0x80377984
Exit:
lwz r0, 0x0008 (r26)
================================================
FILE: ASM/Additional Codes/Hold Z for Rapid Frame Advance/P1 - Check Rapid Fire Input.asm
================================================
#To be inserted at 8016bbd4
lwz r0, 0x000C (r4)
================================================
FILE: ASM/Additional Codes/Hold Z for Rapid Frame Advance/P2 - Check Rapid Fire Input.asm
================================================
#To be inserted at 8016bc00
lwz r0, 0x000C (r4)
================================================
FILE: ASM/Additional Codes/Hold Z for Rapid Frame Advance/P3 - Check Rapid Fire Input.asm
================================================
#To be inserted at 8016bc2c
lwz r0, 0x000C (r4)
================================================
FILE: ASM/Additional Codes/Hold Z for Rapid Frame Advance/P4 - Check Rapid Fire Input.asm
================================================
#To be inserted at 8016bc58
lwz r0, 0x000C (r4)
================================================
FILE: ASM/Additional Codes/Idle Screen/Main.asm
================================================
#To be inserted at 80302788
.include "../../Globals.s"
.set IdleThreshold, (3*60) * 60
.set REG_DevelopText,31
.set REG_GObjData,30
.set REG_GObj,29
.set REG_Floats,28
backup
bl Floats
mflr REG_Floats
#Create Rectangle
li r3,32
branchl r12,HSD_MemAlloc
mr r8,r3
li r3,20
li r4,-25
li r5,-25
li r6,1
li r7,1
branchl r12,DevelopText_CreateDataTable
mr REG_DevelopText,r3
#Activate Text
lwz r3, -0x4884 (r13)
mr r4,REG_DevelopText
branchl r12,DevelopText_Activate
#Hide blinking cursor
li r3,0
stb r3,0x26(REG_DevelopText)
#Change BG Color
mr r3,REG_DevelopText
addi r4,REG_Floats,TextBG
branchl r12,DevelopText_StoreBGColor
#Hide Filter
mr r3,REG_DevelopText
branchl r12,DevelopText_HideBG
#Set Stretch
lfs f1,TextScale_X(REG_Floats)
stfs f1,0x8(REG_DevelopText)
lfs f1,TextScale_Y(REG_Floats)
stfs f1,0xC(REG_DevelopText)
#Create Background GObj
li r3,0
li r4,0
li r5,0
branchl r12,GObj_Create
mr REG_GObj,r3
#Allocate Space
li r3,64
branchl r12,HSD_MemAlloc
mr REG_GObjData,r3
#Zero
li r4,64
branchl r12,ZeroAreaLength
#Initialize
mr r6,REG_GObjData
mr r3,REG_GObj
li r4,4
load r5,HSD_Free
branchl r12,GObj_AddUserData
#Add Process
mr r3,REG_GObj
bl IdleThink
mflr r4
li r5,0
branchl r12,GObj_AddProc
#Store pointer to dev text
stw REG_DevelopText,0x0(REG_GObjData)
b Injection_Exit
IdleThink:
blrl
.set REG_GObjData,31
.set REG_Floats,30
.set IdleData_Text,0x0
.set IdleData_State,0x4
.set IdleData_VolumeBackup,0x8
.set IdleData_IdleCounter,0xC
backup
#Init
lwz REG_GObjData,0x2C(r3)
bl Floats
mflr REG_Floats
#Check if already muted
lwz r3,IdleData_State(REG_GObjData)
cmpwi r3,0x0
bne IdleThink_CheckToUnmute
IdleThink_CheckToMute:
#Check if anyone is inputting on this frame
li r3,4
branchl r12,Inputs_GetPlayerHeldInputs
cmpwi r4,0
beq IdleThink_CheckToMute_IncTimer
IdleThink_CheckToMute_ResetTimer:
li r3,0
stw r3,IdleData_IdleCounter(REG_GObjData)
b IdleThink_Exit
IdleThink_CheckToMute_IncTimer:
lwz r3,IdleData_IdleCounter(REG_GObjData)
addi r3,r3,1
stw r3,IdleData_IdleCounter(REG_GObjData)
cmpwi r3,IdleThreshold
blt IdleThink_Exit
#Mute Music
lwz r4,-0x7E1C(r13)
stw r4,IdleData_VolumeBackup(REG_GObjData)
li r3,0
branchl r12,cvt_sll_flt
lfs f2,VolumeMultiplier(REG_Floats)
fmuls f1,f1,f2
branchl r12,cvt_fp2unsigned
stw r3,-0x7E1C(r13)
#Display filter
lwz r3,IdleData_Text(REG_GObjData)
branchl r12,DevelopText_ShowBG
#Change state
li r3,1
stw r3,IdleData_State(REG_GObjData)
#Reset Timer
li r3,0
stw r3,IdleData_IdleCounter(REG_GObjData)
b IdleThink_Exit
IdleThink_CheckToUnmute:
#Check if anyone is inputting on this frame
li r3,4
branchl r12,Inputs_GetPlayerHeldInputs
cmpwi r4,0
beq IdleThink_Exit
#Unmute music
lwz r3,IdleData_VolumeBackup(REG_GObjData)
stw r3,-0x7E1C(r13)
#Hide Filter
lwz r3,IdleData_Text(REG_GObjData)
branchl r12,DevelopText_HideBG
#Change state
li r3,0
stw r3,IdleData_State(REG_GObjData)
b IdleThink_Exit
IdleThink_Exit:
restore
blr
######################
Floats:
blrl
.set TextScale_X,0x0
.set TextScale_Y,0x4
.set TextBG,0x8
.set VolumeMultiplier,0xC
.float 1000
.float 1000
.byte 0,0,0,130
.float 0.3
######################
Injection_Exit:
restore
mr r3, r31
================================================
FILE: ASM/Additional Codes/Initialize Stage Data.asm
================================================
#To be inserted at 801c154c
.include "../Globals.s"
#Initialize data
li r4,516
branchl r12,ZeroAreaLength
Exit:
cmplwi r26, 0
================================================
FILE: ASM/Additional Codes/Kill Zoom/Main.s
================================================
#To be inserted at 8016e5a8
.include "../../Globals.s"
CreateProc:
.set REG_Data,31
.set REG_GObj,30
backup
#Create GObj
li r3,4 #GObj Type (4 is the player type, this should ensure it runs before any player animations)
li r4,0 #On-Pause Function (dont run on pause)
li r5,0 #object priority
branchl r12,GObj_Create
mr REG_GObj,r3
#Alloc Mem
li r3,32
branchl r12,HSD_MemAlloc
mr REG_Data,r3
#Zero Data
mr r3,REG_Data
li r4,32
branchl r12,ZeroAreaLength
#Attach Data
mr r3,REG_GObj
li r4,14
load r5,HSD_Free
mr r6,REG_Data
branchl r12,GObj_AddUserData
#Create Proc
bl KillZoomThink
mflr r4 #Function
li r5,14 #Priority
branchl r12,GObj_AddProc
b CreateProc_Exit
#############################################################
KillZoomThink:
blrl
.set REG_GObjData,31
.set REG_PlayerData,30
.set REG_PlayerGObj,29
.set REG_Constants,28
#Init
backup
lwz REG_GObjData,0x2C(r3)
bl Constants
mflr REG_Constants
#Ensure match type is stock
branchl r12,0x8016ae50
lbz r0,0x4(r3)
rlwinm. r0,r0,0,0x20
bne KillZoomThink_IsStock
branchl r12,0x8016b094
cmpwi r3,0
beq KillZoomThink_Exit
KillZoomThink_IsStock:
#Check if currently zooming
load r3,0x80452c68
lwz r0,0x4(r3)
cmpwi r0,6
bne LoopThroughPlayers_GetFirstPlayer
#Decrement Freeze Timer
lwz r3,0x0(REG_GObjData)
subi r3,r3,1
stw r3,0x0(REG_GObjData)
cmpwi r3,0
bgt KillZoomThink_Exit
#Resume Game Speed
li r3,1
branchl r12,0x801a4674
#Restore camera to normal
branchl r12,0x8015cc14
b KillZoomThink_Exit
#Loop through all players
LoopThroughPlayers_GetFirstPlayer:
lwz r3, -0x3E74 (r13)
lwz REG_PlayerGObj, 0x0020 (r3)
b LoopThroughPlayers_CheckIfPlayerExists
LoopThroughPlayers_GetNextPlayer:
lwz REG_PlayerGObj,0x8(REG_PlayerGObj)
LoopThroughPlayers_CheckIfPlayerExists:
cmpwi REG_PlayerGObj,0x0
beq KillZoomThink_Exit
lwz REG_PlayerData,0x2C(REG_PlayerGObj)
#Ensure not in sleep
lbz r3, 0x221F(REG_PlayerData)
rlwinm. r0,r3,0,0x10
bne LoopThroughPlayers_GetNextPlayer
#Ensure not a follower
rlwinm. r0, r3, 29, 31, 31
beq FollowerSkip
#Check If Follower
lbz r3,0xC(REG_PlayerData)
branchl r12, PlayerBlock_LoadExternalCharID
load r4,0x803bcde0 #pdLoadCommonData table
mulli r0, r3, 3 #struct length
add r3,r4,r0 #get characters entry
lbz r0, 0x2(r3) #get subchar functionality
cmpwi r0,0x0 #if a follower, exit
beq LoopThroughPlayers_GetNextPlayer
FollowerSkip:
#Check if in hitstun
lbz r3, 0x221C(REG_PlayerData)
rlwinm. r0,r3,0,0x2
beq LoopThroughPlayers_GetNextPlayer
#Check if in hitlag
lbz r3, 0x221A(REG_PlayerData)
rlwinm. r0,r3,0,0x20
beq LoopThroughPlayers_GetNextPlayer
#Check if last frame of hitlag
lfs f1,-0x7418(rtoc) #1fp
lfs f2,0x195C(REG_PlayerData) #hitlag frames left
fcmpo cr0,f1,f2
bne LoopThroughPlayers_GetNextPlayer
#Check if will die from this hit
mr r3,REG_PlayerData
bl DIDraw
cmpwi r3,0
beq LoopThroughPlayers_GetNextPlayer
#Check if last stock
lbz r3,0xC(REG_PlayerData)
branchl r12,PlayerBlock_LoadStocksLeft
cmpwi r3,1
beq KillZoomThink_KOZoom
b KillZoomThink_KOFlash
KillZoomThink_KOZoom:
.set ZoomInFrames,6
.set FreezeFrames,ZoomInFrames+20
#Zoom in on this player
lwz r3,0x10B0(REG_PlayerData)
stw r3,0x80(sp)
lwz r3,0x10B4(REG_PlayerData)
stw r3,0x84(sp)
lwz r3,0x10B8(REG_PlayerData)
stw r3,0x88(sp)
addi r3,sp,0x80
lwz r4,0x1868(REG_PlayerData)
cmpwi r4,0x0
beq KillZoomThink_HitByNonPlayer
lhz r5,0x0(r4)
cmpwi r5,0x4
beq KillZoomThink_HitByPlayer
#Just use the victims sphere
KillZoomThink_HitByNonPlayer:
addi r3,sp,0x80
b KillZoomThink_ZoomInOnCoordinates
KillZoomThink_HitByPlayer:
lwz r4,0x2C(r4)
addi r4,r4,0x10B0
branchl r12,0x8000d46c #Add vectors
lfs f1,Divisor(REG_Constants)
lfs f2,0x80(sp)
fdivs f2,f2,f1
stfs f2,0x80(sp)
lfs f2,0x84(sp)
fdivs f2,f2,f1
stfs f2,0x84(sp)
lfs f2,0x88(sp)
fdivs f2,f2,f1
stfs f2,0x88(sp)
addi r3,sp,0x80
KillZoomThink_ZoomInOnCoordinates:
#Set coordinates
branchl r12,0x8002e818
#Adjust Zoom value
lfs f1,ZoomValue(REG_Constants)
stfs f1,0x88(sp)
addi r3,sp,0x80
branchl r12,0x8002ea64
#Adjust frames to zoom in
li r3,ZoomInFrames
branchl r12,0x8002f0e4
#Set Freeze Frames
li r3,FreezeFrames
stw r3,0x0(REG_GObjData)
#Freeze Game
li r3,1
branchl r12,0x801a4634
#Play SFX
li r3,0xDF
branchl r12,SFX_PlaySoundAtFullVolume
#Spawn GFX
lwz r3,0x0(REG_PlayerData)
li r4,0x1b3
li r5,3
li r6,0
li r7,0
addi r8,sp,0x80
addi r9,sp,0x8C
#Setup stack
li r0,0
stw r0,0x0(r8) #z scatter
stw r0,0x4(r8) #y scatter
stw r0,0x8(r8) #z scatter
li r0,0
stw r0,0x0(r9) #X offset
stw r0,0x4(r9) #y offset
stw r0,0x8(r9) #z offset
branchl r12,0x8009f834
#Spawn GFX
lwz r3,0x0(REG_PlayerData)
li r4,0xd5
li r5,3
li r6,0
li r7,0
addi r8,sp,0x80
addi r9,sp,0x8C
#Setup stack
li r0,0
stw r0,0x0(r8) #z scatter
stw r0,0x4(r8) #y scatter
stw r0,0x8(r8) #z scatter
li r0,0
stw r0,0x0(r9) #X offset
stw r0,0x4(r9) #y offset
stw r0,0x8(r9) #z offset
branchl r12,0x8009f834
b KillZoomThink_Exit
KillZoomThink_KOFlash:
#Play SFX
li r3,0x122 #12a #122 #0xff
branchl r12,SFX_PlaySoundAtFullVolume
#Spawn GFX
lwz r3,0x0(REG_PlayerData)
li r4,0x8e
li r5,3
li r6,0
li r7,0
addi r8,sp,0x80
addi r9,sp,0x8C
#Setup stack
li r0,0
stw r0,0x0(r8) #z scatter
stw r0,0x4(r8) #y scatter
stw r0,0x8(r8) #z scatter
li r0,0
stw r0,0x0(r9) #X offset
stw r0,0x4(r9) #y offset
stw r0,0x8(r9) #z offset
branchl r12,0x8009f834
#Spawn GFX
lwz r3,0x0(REG_PlayerData)
li r4,0x1e4
li r5,3
li r6,0
li r7,0
addi r8,sp,0x80
addi r9,sp,0x8C
#Setup stack
li r0,0
stw r0,0x0(r8) #z scatter
stw r0,0x4(r8) #y scatter
stw r0,0x8(r8) #z scatter
li r0,0
stw r0,0x0(r9) #X offset
stw r0,0x4(r9) #y offset
stw r0,0x8(r9) #z offset
branchl r12,0x8009f834
KillZoomThink_Exit:
restore
blr
#region DI Draw
DIDraw_Constants:
blrl
.set ECB_TopY,0x0 #scale * value
.set ECB_BottomY,0x4 #neg(scale * vlaue)
.set ECB_LeftX,0x8 #neg(scale * vlaue)
.set ECB_LeftY,0xC #0
.set ECB_RightX,0x10 #scale * value
.set ECB_RightY,0x14 #0
.set FirefoxDrawZ,0x18
.set AliveLineColor,0x1C
.set DeadLineColor,0x20
.set LeftWallColor,0x24
.set RightWallColor,0x28
.set CeilingColor,0x2C
.set GroundColor,0x30
.set ASDIColor,0x34
.float 9
.float 2.5
.float -3.3
.float 5.7
.float 3.3
.float 5.7
.float 10
.byte 0, 138, 255, 255
.byte 255, 55, 55, 255
.byte 12, 255, 41, 255
.byte 12, 255, 41, 255
.byte 255, 0, 255, 255
.byte 255, 255, 255, 255
.byte 255, 86, 20, 255
.set StackSize,0x300
.set Stack_BackedUpReg,0x8
.set Stack_BackedUpReg_Length,0x30
.set Stack_BackedUpFloats, (Stack_BackedUpReg+Stack_BackedUpReg_Length)
.set Stack_BackedUpFloats_Length,0x14
.set Stack_ECBBoneStruct, (Stack_BackedUpFloats+Stack_BackedUpFloats_Length)
.set Stack_ECBBoneStruct_Length,0x18
.set Stack_ECBStruct, (Stack_ECBBoneStruct+Stack_ECBBoneStruct_Length)
.set Stack_ECBStruct_Length,0x1AC
.set Stack_ASDIBackup, (Stack_ECBStruct+Stack_ECBStruct_Length)
.set Stack_ASDIBackup_Length,0x8
.set Stack_MiscSpace, (Stack_ASDIBackup+Stack_ASDIBackup_Length)
#gprs
.set REG_EventConstants,31
.set REG_PlayerData,30
.set REG_ECBStruct,20
.set REG_ECBBoneStruct,21
.set REG_LoopCount,22
.set REG_GX,23
.set REG_HeldInputs,24
.set REG_GroundState,24
.set REG_CollisionInfo,25
.set REG_Temp,26 #this register is used for the draw loop, make sure to change both
.set REG_OverrideRemainingFrames,27
#fprs
.set REG_arctan,31
.set REG_XComp,30
.set REG_YComp,29
.set REG_KnockbackX,28
.set REG_KnockbackY,27
.set REG_CurrXPos,26
.set REG_CurrYPos,25
.set REG_DIInput,24
.set REG_KnockbackMag,23
.set REG_CStickX,22
.set REG_CStickY,21
.set REG_ASDIX,22
.set REG_ASDIY,21
.set REG_Gravity,30
#constants
.set MaxColl,40
DIDraw:
mflr r0
stw r0, 0x4(r1)
stwu r1,-StackSize(r1) # make space for 12 registers
stmw r20,Stack_BackedUpReg(r1)
#backup
mr REG_PlayerData,r3
#Get Floats
bl DIDraw_Constants
mflr REG_EventConstants
#region GetInputs
DIDraw_PBInputs:
lfs REG_XComp,0x620(REG_PlayerData)
lfs REG_YComp,0x624(REG_PlayerData)
lwz REG_HeldInputs,0x65C(REG_PlayerData)
lfs REG_CStickX,0x638(REG_PlayerData)
lfs REG_CStickY,0x63C(REG_PlayerData)
#endregion
#Get original KB vector
lfs REG_KnockbackX,0x8C(REG_PlayerData)
lfs REG_KnockbackY,0x90(REG_PlayerData)
#Calculate player's influence over trajectory
#region GetArctan
DIDraw_GetArctan:
#Get atan2
fmr f1,REG_KnockbackY
fmr f2,REG_KnockbackX
branchl r12,0x80022c30
fmr REG_arctan,f1
#Do something
fmuls f1,REG_KnockbackY,REG_KnockbackY
fmadds REG_KnockbackMag,REG_KnockbackX,REG_KnockbackX,f1
lfs f0, -0x750C (rtoc)
fcmpo cr0,REG_KnockbackMag,f0
ble DIDraw_SkipUnk
#Do a bunch of stuff
frsqrte f2,REG_KnockbackMag
lfd f4, -0x74E0 (rtoc)
lfd f3, -0x74D8 (rtoc)
fmul f0,f2,f2
fmul f2,f4,f2
fnmsub f0,REG_KnockbackMag,f0,f3
fmul f2,f2,f0
fmul f0,f2,f2
fmul f2,f4,f2
fnmsub f0,REG_KnockbackMag,f0,f3
fmul f2,f2,f0
fmul f0,f2,f2
fmul f2,f4,f2
fnmsub f0,REG_KnockbackMag,f0,f3
fmul f0,f2,f0
fmul f0,REG_KnockbackMag,f0
frsp f0,f0
fmr REG_KnockbackMag,f0
DIDraw_SkipUnk:
#endregion
#region CalculateASDI
DIDraw_CalculateASDI:
#CStick has priority
#Check if cstick magnitude > 0.7
fmuls f1,REG_CStickX,REG_CStickX
fmuls f0,REG_CStickY,REG_CStickY
lwz r3, -0x514C (r13)
lfs f2, 0x04B0 (r3)
fadds f1,f1,f0
fmuls f0,f2,f2
fcmpo cr0,f1,f0
bge DIDraw_CalculateASDICStickApply
#Now check left stick
fmuls f1,REG_YComp,REG_YComp
fmuls f2,REG_XComp,REG_XComp
lwz r3, -0x514C (r13)
lfs f0, 0x04B0 (r3)
fmuls f0,f0,f0
fadds f1,f1,f2
fcmpo cr0,f1,f0
blt DIDraw_CalculateASDINone
DIDraw_CalculateASDILeftStickApply:
#Multiply by 3
lfs f1, 0x04BC (r3)
fmuls REG_ASDIX,REG_XComp,f1
fmuls REG_ASDIY,REG_YComp,f1
b DIDraw_CalculateASDIEnd
DIDraw_CalculateASDINone:
#Null ASDI
lfs REG_ASDIX, -0x750C (rtoc)
lfs REG_ASDIY, -0x750C (rtoc)
b DIDraw_CalculateASDIEnd
DIDraw_CalculateASDICStickApply:
#Multiply by 3
lfs f1, 0x04BC (r3)
fmuls REG_ASDIX,REG_CStickX,f1
fmuls REG_ASDIY,REG_CStickY,f1
DIDraw_CalculateASDIEnd:
#Save these values for later
stfs REG_ASDIX,Stack_ASDIBackup+0(sp)
stfs REG_ASDIY,Stack_ASDIBackup+4(sp)
#endregion
#region CalculateKBReduction
DIDraw_CalculateKBReduction:
#Check if holding L/R/Z
rlwinm. r0,REG_HeldInputs,0,0x80000000
beq DIDraw_CalculateKBReductionEnd
lwz r3, -0x514C (r13)
lfs f0, 0x01AC (r3)
fmuls REG_KnockbackMag,f0,REG_KnockbackMag
fmr f1,REG_arctan
branchl r12,cos
fmuls REG_KnockbackX,f1,REG_KnockbackMag
fmr f1,REG_arctan
branchl r12,sin
fmuls REG_KnockbackY,f1,REG_KnockbackMag
#Get new atan2
fmr f1,REG_KnockbackY
fmr f2,REG_KnockbackX
branchl r12,0x80022c30
fmr REG_arctan,f1
DIDraw_CalculateKBReductionEnd:
#endregion
#region CalculateDI
DIDraw_CalculateDI:
#If grounded, skip DI
lwz r3,0xE0(REG_PlayerData)
cmpwi r3,0
beq DIDraw_CalculateDIEnd
#If both inputting nothing, skip DI
lfs f1, -0x750C (rtoc)
fcmpo cr0,f1,REG_XComp
bne DIDraw_IsInputting
fcmpo cr0,f1,REG_YComp
beq DIDraw_CalculateDIEnd
DIDraw_IsInputting:
#If some condition is met, skip DI
lfs f0, -0x74E8 (rtoc)
fneg f1,REG_KnockbackX
fmuls f1,f1,f1
fmuls f2,REG_KnockbackY,REG_KnockbackY
fadds f1,f1,f2
fcmpo cr0,f1,f0
blt DIDraw_CalculateDIEnd
#Get DI value
fneg f2,REG_KnockbackX
fmuls f2,f2,REG_YComp
fmuls f3,REG_KnockbackY,REG_XComp
fadds f2,f2,f3
fmuls f2,f2,f2
fdivs REG_DIInput,f2,f1
lfs f4, -0x750C (rtoc)
#Cross product
stfs REG_XComp,Stack_MiscSpace+0(sp)
stfs REG_YComp,Stack_MiscSpace+4(sp)
lfs f0, -0x750C (rtoc)
stfs f0,Stack_MiscSpace+8(sp)
addi r3,REG_PlayerData,0x8C
addi r4,sp,Stack_MiscSpace+0
addi r5,sp,Stack_MiscSpace+12
branchl r12,0x80342e58
#Check if over 0
lfs f0, -0x750C (rtoc)
lfs f1,Stack_MiscSpace+20(sp)
fcmpo cr0,f1,f0
bge 0x8
fneg REG_DIInput,REG_DIInput
#Apply new angle
lwz r3, -0x514C (r13)
lfs f2, -0x7510 (rtoc)
lfs f0, 0x01A8 (r3)
fmuls f0,f2,f0
fmadds REG_arctan,f0,REG_DIInput,REG_arctan
fmr f1,REG_arctan
branchl r12,cos
fmuls REG_KnockbackX,REG_KnockbackMag,f1
fmr f1,REG_arctan
branchl r12,sin
fmuls REG_KnockbackY,REG_KnockbackMag,f1
DIDraw_CalculateDIEnd:
#endregion
#Perform collision checks for each frame of hitstun
#region DIDraw_Collision
#region DIDraw_CollisionLoop_Init
DIDraw_CollisionLoop_Init:
#Create an ECB struct on the stack
addi REG_ECBBoneStruct,sp,Stack_ECBBoneStruct
addi REG_ECBStruct,sp,Stack_ECBStruct
mr r3,REG_ECBStruct
branchl r12,0x80041ee4
#Get Current XY
lfs REG_CurrXPos,0xB0(REG_PlayerData)
lfs REG_CurrYPos,0xB4(REG_PlayerData)
#Init Loop
li REG_LoopCount,0
lfs REG_Gravity,-0x750C (rtoc)
lwz REG_GroundState,0xE0(REG_PlayerData)
li REG_OverrideRemainingFrames,0
#Allocate collision info struct
lfs f1,0x2340(REG_PlayerData)
fctiwz f1,f1
stfd f1,Stack_MiscSpace(sp)
lwz r3,Stack_MiscSpace+4(sp)
mulli r3,r3,CollInfo_Length #backing up X bytes per collision check
addi r3,r3,0x4 #small header containing the amount of collision checks
branchl r12,HSD_MemAlloc
mr REG_CollisionInfo,r3
#Init collision info struct
li r3,-1 #init as 0 checks
stw r3,0x0(REG_CollisionInfo)
#If grounded, copy over ground ECB data
cmpwi REG_GroundState,0
bne DIDraw_DrawTrajectory_SkipCopyGroundData
addi r3,REG_ECBStruct,0x130
addi r4,REG_PlayerData,0x820
li r5,0x28
branchl r12,memcpy
DIDraw_DrawTrajectory_SkipCopyGroundData:
#endregion
#region DIDraw_CollisionLoop_Start
DIDraw_CollisionLoop:
#region Initalize ECB Bone Positions
#Create ECB Bone struct
#If loop count < noECBUpdate-remaining hitlag fraes, use current ECB bottom Y offset
lwz r3,0x88C(REG_PlayerData)
lfs f1,0x195C(REG_PlayerData)
fctiwz f1,f1
stfd f1,Stack_MiscSpace(sp)
lwz r4,Stack_MiscSpace+0x4(sp)
sub r3,r3,r4
cmpw REG_LoopCount,r3
blt DIDraw_CollisionLoop_ECBBonesUseCurrent
#Copy Struct
mr r3,REG_ECBBoneStruct
addi r4,REG_EventConstants,ECB_TopY
li r5,0x18
branchl r12,memcpy
#If the player is grounded, ECB bottom is 0
cmpwi REG_GroundState,0
bne DIDraw_CollisionLoop_ECBBonesEnd
lfs f1, -0x750C (rtoc)
stfs f1,0x04(REG_ECBBoneStruct)
b DIDraw_CollisionLoop_ECBBonesEnd
DIDraw_CollisionLoop_ECBBonesUseCurrent:
#Use Current Bone Positions
lfs f1,0x778(REG_PlayerData)
stfs f1,0x00(REG_ECBBoneStruct)
lfs f1,0x780(REG_PlayerData)
stfs f1,0x04(REG_ECBBoneStruct)
lfs f1,0x78C(REG_PlayerData)
stfs f1,0x08(REG_ECBBoneStruct)
lfs f1,0x790(REG_PlayerData)
stfs f1,0x0C(REG_ECBBoneStruct)
lfs f1,0x784(REG_PlayerData)
stfs f1,0x10(REG_ECBBoneStruct)
lfs f1,0x788(REG_PlayerData)
stfs f1,0x14(REG_ECBBoneStruct)
b DIDraw_CollisionLoop_ECBBonesEnd
DIDraw_CollisionLoop_ECBBonesEnd:
#Store current position
lfs f1, -0x750C (rtoc)
stfs REG_CurrXPos,0x4(REG_ECBStruct)
stfs REG_CurrYPos,0x8(REG_ECBStruct)
stfs f1,0xC(REG_ECBStruct)
stfs REG_CurrXPos,0x10(REG_ECBStruct)
stfs REG_CurrYPos,0x14(REG_ECBStruct)
stfs f1,0x18(REG_ECBStruct)
#endregion
#region Apply ASDI
DIDraw_CollisionLoop_ApplyASDI:
#Apply ASDI X
fadds REG_CurrXPos,REG_CurrXPos,REG_ASDIX
#Only apply ASDI Y if in the air
cmpwi REG_GroundState,0
beq 0x8
fadds REG_CurrYPos,REG_CurrYPos,REG_ASDIY
#Null ASDI
lfs REG_ASDIX, -0x750C (rtoc)
lfs REG_ASDIY, -0x750C (rtoc)
#endregion
#region Decay Knockback
#Apply either gravity or traction
cmpwi REG_GroundState,1
bne DIDraw_CollisionLoop_DecayGrounded
DIDraw_CollisionLoop_DecayAerial:
#Account for gravity
lfs f1, 0x016C (REG_PlayerData)
lfs f2, 0x0170 (REG_PlayerData)
fneg f2,f2
fsubs REG_Gravity,REG_Gravity,f1
fcmpo cr0,REG_Gravity,f2
bge 0x8
fmr REG_Gravity,f2
#Decay KB Vector
fmr f1,REG_KnockbackY
fmr f2,REG_KnockbackX
branchl r12,0x80022c30 #Get arctan of the KB vector
fmr REG_arctan,f1
#Decay X KB
branchl r12,cos
lwz r3, -0x514C (r13)
lfs f2, 0x0204 (r3)
fnmsubs REG_KnockbackX,f2,f1,REG_KnockbackX
#Decay Y KB
fmr f1,REG_arctan
branchl r12,sin
lwz r3, -0x514C (r13)
lfs f2, 0x0204 (r3)
fnmsubs REG_KnockbackY,f2,f1,REG_KnockbackY
b DIDraw_CollisionLoop_DecayEnd
DIDraw_CollisionLoop_DecayGrounded:
#Get Ground Friction's multipllier
lwz r3,0x4(REG_PlayerData)
cmpwi r3,Popo.Int
beq DIDraw_CollisionLoop_DecayGrounded_isICs
cmpwi r3,Nana.Int
beq DIDraw_CollisionLoop_DecayGrounded_isICs
#Get grounds friction multiplier
lfs f1, -0x7A38 (rtoc)
lwz r0, 0x014C (REG_ECBStruct)
cmpwi r0,-1
beq DIDraw_CollisionLoop_DecayGrounded_isICs
lwz r3,0x150(REG_ECBStruct)
branchl r12,0x800569ec #Get ground's friction multiplier
b 0x8
DIDraw_CollisionLoop_DecayGrounded_isICs:
lfs f1, -0x7A38 (rtoc)
#Account for friction
lfs f0, 0x128 (REG_PlayerData)
fmuls f1,f0,f1
lwz r4, -0x514C (r13)
lfs f0, 0x0200 (r4)
fmuls f0,f1,f0
#Apply Friction to knockback
lfs f2, -0x76B0 (rtoc)
fcmpo cr0,REG_KnockbackX,f2
bge DIDraw_CollisionLoop_DecayGrounded_Subtract
fadds f0,f0,REG_KnockbackX
fmr REG_KnockbackX,f0
fcmpo cr0,f0,f2
ble DIDraw_CollisionLoop_DecayGroundedEnd
fmr REG_KnockbackX,f2
b DIDraw_CollisionLoop_DecayGroundedEnd
DIDraw_CollisionLoop_DecayGrounded_Subtract:
fsubs f0,REG_KnockbackX,f0
fmr REG_KnockbackX,f0
fcmpo cr0,f0,f2
bge DIDraw_CollisionLoop_DecayGroundedEnd
fmr REG_KnockbackX,f2
b DIDraw_CollisionLoop_DecayGroundedEnd
DIDraw_CollisionLoop_DecayGroundedEnd:
DIDraw_CollisionLoop_DecayEnd:
#endregion
#region Shift Positions
#Shift previous positions down
lfs f1,0x4(REG_ECBStruct)
lfs f2,0x8(REG_ECBStruct)
lfs f3,0xC(REG_ECBStruct)
stfs f1,0x1C(REG_ECBStruct)
stfs f2,0x20(REG_ECBStruct)
stfs f3,0x24(REG_ECBStruct)
#Store next position
fadds f1,REG_CurrXPos,REG_KnockbackX
stfs f1,0x4(REG_ECBStruct)
fadds f1,REG_CurrYPos,REG_KnockbackY
fadds f1,f1,REG_Gravity
stfs f1,0x8(REG_ECBStruct)
lfs f1, -0x778C (rtoc)
stfs f1,0xC(REG_ECBStruct)
#endregion
#region Run Collision Check
.if MaxColl>=0
#Only run X collision checks because theyre expensive
cmpwi REG_LoopCount,MaxColl
blt DIDraw_CollisionLoop_DetermineCollision
#Spoof as not touching anything
li r3,0
stw r3,0x134(REG_ECBStruct)
lfs REG_CurrXPos,0x4(REG_ECBStruct)
lfs REG_CurrYPos,0x8(REG_ECBStruct)
#If grounded and max collision checks, just stop updating position
cmpwi REG_GroundState,0
bne DIDraw_CollisionLoop_StageBehaviorEnd
li REG_OverrideRemainingFrames,1
b DIDraw_CollisionLoop_StageBehaviorEnd
.endif
DIDraw_CollisionLoop_DetermineCollision:
#Run collision
cmpwi REG_GroundState,1
beq DIDraw_CollisionLoop_AerialCollision
DIDraw_CollisionLoop_GroundCollision:
#Grounded Collision
mr r3,REG_ECBStruct
mr r4,REG_ECBBoneStruct
branchl r12,0x8004b21c
xori REG_GroundState,r3,0x1
b DIDraw_CollisionLoop_CollisionEnd
DIDraw_CollisionLoop_AerialCollision:
#Aerial Collision
mr r3,REG_ECBStruct
mr r4,REG_ECBBoneStruct
branchl r12,0x800475f4
DIDraw_CollisionLoop_CollisionEnd:
#endregion
#region Stage Collision Behavior
#Get new position
lfs REG_CurrXPos,0x4(REG_ECBStruct)
lfs REG_CurrYPos,0x8(REG_ECBStruct)
#Inc Collision ID
lwz r3,0x38(REG_ECBStruct)
addi r3,r3,1
stw r3,0x38(REG_ECBStruct)
#Determine line collision behavior
lwz r3,0x134(REG_ECBStruct)
rlwinm. r0,r3,0,0x8000
bne DIDraw_CollisionLoop_TouchingGround
rlwinm. r0,r3,0,0x6000
bne DIDraw_CollisionLoop_TouchingCeiling
rlwinm. r0,r3,0,0x20
bne DIDraw_CollisionLoop_TouchingWall
rlwinm. r0,r3,0,0x40
bne DIDraw_CollisionLoop_TouchingWall
DIDraw_CollisionLoop_TouchingNothing:
b DIDraw_CollisionLoop_StageBehaviorEnd
#region Touching Ground
DIDraw_CollisionLoop_TouchingGround:
#If grounded, dont run KB manip code
cmpwi REG_GroundState,0
beq DIDraw_CollisionLoop_StageBehaviorEnd
/*
#End check
li REG_OverrideRemainingFrames,1
*/
#Check if over max horizontal velocity
lwz r4, -0x514C (r13)
lfs f1, 0x0164 (r4)
fcmpo cr0,REG_KnockbackX,f1
ble 0x8
fmr REG_KnockbackX,f1
fneg f1,f1
fcmpo cr0,REG_KnockbackX,f1
bge 0x8
fmr REG_KnockbackX,f1
#Adjust KB
lfs f1,0x158(REG_ECBStruct)
fmuls REG_KnockbackX,REG_KnockbackX,f1
lfs f1,0x154(REG_ECBStruct)
fneg f1,f1
fmuls REG_KnockbackY,REG_KnockbackX,f1
#REMOVE ALL Y KB?
lfs REG_KnockbackY, -0x750C (rtoc)
#Set as grounded
li REG_GroundState,0
b DIDraw_CollisionLoop_StageBehaviorEnd
#endregion
#region Touching Ceiling
DIDraw_CollisionLoop_TouchingCeiling:
#If grounded, dont run KB manip code
cmpwi REG_GroundState,0
beq DIDraw_CollisionLoop_StageBehaviorEnd
#End check
li REG_OverrideRemainingFrames,1
/*
#Self-Induced velocity
lfs f1, -0x750C (rtoc)
stfs f1,Stack_MiscSpace+0x0(sp)
stfs REG_Gravity,Stack_MiscSpace+0x4(sp)
#KB-Induced
stfs REG_KnockbackX,Stack_MiscSpace+0x8(sp)
stfs REG_KnockbackY,Stack_MiscSpace+0xC(sp)
#Add vectors
addi r3,sp,Stack_MiscSpace+0x0
addi r4,sp,Stack_MiscSpace+0x8
branchl r12,0x8000d4a0
#Unk
addi r3,sp,Stack_MiscSpace+0x0
addi r4,REG_ECBStruct,0x190
branchl r12,0x8000dc6c
#Decay KB
lwz r3, -0x514C (r13)
lfs f1, 0x01BC (r3)
lfs f2,Stack_MiscSpace+0x0(sp)
lfs f3,Stack_MiscSpace+0x4(sp)
fmuls REG_KnockbackX,f1,f2
fmuls REG_KnockbackY,f1,f3
*/
b DIDraw_CollisionLoop_StageBehaviorEnd
#endregion
#region Touching Wall
DIDraw_CollisionLoop_TouchingWall:
#If grounded, dont run KB manip code
cmpwi REG_GroundState,0
beq DIDraw_CollisionLoop_StageBehaviorEnd
#End check
li REG_OverrideRemainingFrames,1
/*
#Get walls data
lwz r3,0x134(REG_ECBStruct)
rlwinm. r0,r3,0,0x20
bne DIDraw_CollisionLoop_LeftWallsData
rlwinm. r0,r3,0,0x40
bne DIDraw_CollisionLoop_RightWallsData
DIDraw_CollisionLoop_RightWallsData:
addi REG_Temp,REG_ECBStruct,380
b 0x8
DIDraw_CollisionLoop_LeftWallsData:
addi REG_Temp,REG_ECBStruct,360
#Self-Induced velocity
lfs f1, -0x750C (rtoc)
stfs f1,Stack_MiscSpace+0x0(sp)
stfs REG_Gravity,Stack_MiscSpace+0x4(sp)
#KB-Induced
stfs REG_KnockbackX,Stack_MiscSpace+0x8(sp)
stfs REG_KnockbackY,Stack_MiscSpace+0xC(sp)
#Add vectors
addi r3,sp,Stack_MiscSpace+0x0
addi r4,sp,Stack_MiscSpace+0x8
branchl r12,0x8000d4a0
#Unk
addi r3,sp,Stack_MiscSpace+0x0
mr r4,REG_Temp
branchl r12,0x8000dc6c
#Decay KB
lwz r3, -0x514C (r13)
lfs f1, 0x01BC (r3)
lfs f2,Stack_MiscSpace+0x0(sp)
lfs f3,Stack_MiscSpace+0x4(sp)
fmuls REG_KnockbackX,f1,f2
fmuls REG_KnockbackY,f1,f3
lfs REG_Gravity, -0x6DA0 (rtoc)
*/
b DIDraw_CollisionLoop_StageBehaviorEnd
#endregion
DIDraw_CollisionLoop_StageBehaviorEnd:
#endregion
#region Ground to Air Check
.if MaxColl>=0
DIDraw_CollisionLoop_GroundToAirCheck:
.set GroundToAirRemainingFrames,5
#Ensure not touching ground this frame
lwz r3,0x134(REG_ECBStruct)
rlwinm. r0,r3,0,0x8000
bne DIDraw_CollisionLoop_GroundToAirCheckEnd
#Ensure was touching ground last frame
lwz r3,0x138(REG_ECBStruct)
rlwinm. r0,r3,0,0x8000
beq DIDraw_CollisionLoop_GroundToAirCheckEnd
#End check
li REG_OverrideRemainingFrames,1
/*
#Check if over MaxColl
cmpwi REG_LoopCount,MaxColl
blt DIDraw_CollisionLoop_GroundToAirCheckEnd
#Check if REG_OverrideRemainingFrames is already set
cmpwi REG_OverrideRemainingFrames,0
bgt DIDraw_CollisionLoop_GroundToAirCheckEnd
#Set REG_OverrideRemainingFrames
li REG_OverrideRemainingFrames,GroundToAirRemainingFrames
*/
DIDraw_CollisionLoop_GroundToAirCheckEnd:
.endif
#endregion
#region Save Collision Info
.set CollInfo_Length,0x18
.set CollInfo_XPos,0x0
.set CollInfo_YPos,0x4
.set CollInfo_EnvBitfield,0x8
.set CollInfo_ECBTopY,0xC
.set CollInfo_ECBLeftY,0x10
.set CollInfo_KnockbackY,0x14
#Update collision check count
stw REG_LoopCount,0x0(REG_CollisionInfo)
#Get this frames offset in info struct
addi r3,REG_CollisionInfo,0x4 #skip past header
mulli r4,REG_LoopCount,CollInfo_Length
add r3,r3,r4
#Store data
stfs REG_CurrXPos,CollInfo_XPos(r3)
stfs REG_CurrYPos,CollInfo_YPos(r3)
lwz r4,0x134(REG_ECBStruct)
stw r4,CollInfo_EnvBitfield(r3)
lfs f1,0x88(REG_ECBStruct)
stfs f1,CollInfo_ECBTopY(r3)
lfs f1,0xA0(REG_ECBStruct)
stfs f1,CollInfo_ECBLeftY(r3)
stfs REG_KnockbackY,CollInfo_KnockbackY(r3)
#endregion
DIDraw_CollisionLoop_IncLoop:
#Check override frames first
cmpwi REG_OverrideRemainingFrames,0
ble DIDraw_CollisionLoop_IncLoopNoOverride
#Decrement override frames
subi REG_OverrideRemainingFrames,REG_OverrideRemainingFrames,1
cmpwi REG_OverrideRemainingFrames,0
bgt DIDraw_CollisionLoop_IncLoopNoOverride
#Override and exit loop prematurely
b DIDraw_CollisionLoop_IncLoopEnd
DIDraw_CollisionLoop_IncLoopNoOverride:
#Inc Loop
addi REG_LoopCount,REG_LoopCount,1
#Check if non-meteor cancellable
lbz r3,0x235A(REG_PlayerData)
cmpwi r3,1
bne DIDraw_CollisionLoop_IncLoopCheckHitstunFrames
lwz r3, -0x514C (r13)
lwz r3, 0x07F0 (r3)
cmpw REG_LoopCount,r3
bgt DIDraw_CollisionLoop_IncLoopEnd
DIDraw_CollisionLoop_IncLoopCheckHitstunFrames:
lfs f1,0x2340(REG_PlayerData)
fctiwz f1,f1
stfd f1,Stack_MiscSpace(sp)
lwz r3,Stack_MiscSpace+4(sp)
cmpw REG_LoopCount,r3
blt DIDraw_CollisionLoop
DIDraw_CollisionLoop_IncLoopEnd:
/*
.if MaxColl>=0
#Output collision checks count
bl DIDraw_CollisionLoop_Text
mflr r3
lwz r4,TM_GameFrameCounter(r13)
mr r5,REG_LoopCount
branchl r12,OSReport
b DIDraw_CollisionLoop_TextEnd
DIDraw_CollisionLoop_Text:
blrl
.string "frame %d performed %d collision checks\n"
.align 2
DIDraw_CollisionLoop_TextEnd:
.endif
*/
#endregion
#endregion
#region DIDraw_DeathCheck
DIDraw_DrawLoop_Init:
.set REG_DeathLoopCount,28
li REG_DeathLoopCount,0
DIDraw_DrawLoop_Init_DeathLoop:
addi r3,REG_CollisionInfo,0x4
mulli r4,REG_DeathLoopCount,CollInfo_Length
add r3,r3,r4 #get last frames info
lfs REG_CurrXPos,CollInfo_XPos(r3)
lfs REG_CurrYPos,CollInfo_YPos(r3)
lfs REG_KnockbackY,CollInfo_KnockbackY(r3)
branchl r12,0x80224b38 #right blastzone
fcmpo cr0,REG_CurrXPos,f1
bgt DIDraw_DrawLoop_Init_Dead
branchl r12,0x80224b50 #left blastzone
fcmpo cr0,REG_CurrXPos,f1
blt DIDraw_DrawLoop_Init_Dead
branchl r12,0x80224b80 #bottom blastzone
fcmpo cr0,REG_CurrYPos,f1
blt DIDraw_DrawLoop_Init_Dead
branchl r12,0x80224b68 #top blastzone
fcmpo cr0,REG_CurrYPos,f1
ble DIDraw_DrawLoop_Init_DeathLoop_Inc
cmpwi REG_GroundState,0
beq DIDraw_DrawLoop_Init_Dead
lwz r3, -0x514C (r13)
lfs f0, 0x04F0 (r3)
fcmpo cr0,REG_KnockbackY,f0
ble DIDraw_DrawLoop_Init_DeathLoop_Inc
DIDraw_DrawLoop_Init_Dead:
li r3,1
b DIDraw_DrawLoop_Init_DeathLoop_Exit
DIDraw_DrawLoop_Init_DeathLoop_Inc:
addi REG_DeathLoopCount,REG_DeathLoopCount,1
lwz r3,0x0(REG_CollisionInfo)
cmpw REG_DeathLoopCount,r3
blt DIDraw_DrawLoop_Init_DeathLoop
#Is alive, make blue
li r3,0
DIDraw_DrawLoop_Init_DeathLoop_Exit:
#endregion
DIDraw_Exit:
lmw r20,Stack_BackedUpReg(r1)
lwz r0, StackSize+4(r1)
addi r1,r1,StackSize # release the space
mtlr r0
blr
####################################################
#endregion
Constants:
blrl
.set ZoomValue,0x0
.set Divisor,0x4
.float 100
.float 2
CreateProc_Exit:
restore
lmw r24, 0x0038 (sp)
================================================
FILE: ASM/Additional Codes/Kill Zoom/Rumble During MH Zoom.s
================================================
#To be inserted at 8002e6e0
.include "../../Globals.s"
subi sp,sp,0x30
#Get some camera data
addi r3,sp,0x1C
load r4,0x80452c7c
branchl r12,0x8002958c
#Get rumble data
addi r3,sp,0x1C
branchl r12,0x8002a28c
#Apply rumble
addi r3,sp,0x1C
load r4,0x80452c7c
branchl r12,0x8002a0c0
addi sp,sp,0x30
lwz r0, 0x003C (sp)
================================================
FILE: ASM/Additional Codes/L+R+A Returns to CSS During SSS.asm
================================================
#To be inserted at 8025B8BC
.include "../Globals.s"
#Load first minor of current major
load r3,SceneController
lbz r3,0x0(r3)
================================================
FILE: ASM/Additional Codes/Lag Reduction Prompt/Main.asm
================================================
#To be inserted at 801bf930
.include "../../Globals.s"
#Parameters
.set PromptSceneID,8 #0
.set ExitSceneID,40
.set PromptCommonSceneID,10
.set InitialSelection,0
#Function Addresses
.set PostRetraceCallback,0x800195fc
.set UnkPadStruct,0x804329f0
#region Init New Scenes
.set REG_MinorSceneStruct,31
#Init and backup
backup
#Init LagPrompt major struct
li r3,PromptSceneID
bl LagPrompt_MinorSceneStruct
mflr r4
bl LagPrompt_SceneLoad
mflr r5
bl InitializeMajorSceneStruct
#Override LagPrompt SceneLoad
li r3,PromptCommonSceneID
branchl r12,0x801a4ce0
bl LagPrompt_SceneLoad
mflr r4
stw r4,0x8(r3)
b CheckProgressive
#region PointerConvert
PointerConvert:
lwz r4,0x0(r3) #Load bl instruction
rlwinm r5,r4,8,25,29 #extract opcode bits
cmpwi r5,0x48 #if not a bl instruction, exit
bne PointerConvert_Exit
rlwinm r4,r4,0,6,29 #extract offset bits
extsh r4,r4
add r4,r4,r3
stw r4,0x0(r3)
PointerConvert_Exit:
blr
#endregion
#region InitializeMajorSceneStruct
InitializeMajorSceneStruct:
.set REG_MajorScene,31
.set REG_MinorStruct,30
.set REG_SceneLoad,29
#Init
backup
mr REG_MajorScene,r3
mr REG_MinorStruct,r4
mr REG_SceneLoad,r5
#Get major scene struct
branchl r12,0x801a50ac
GetMajorStruct_Loop:
lbz r4, 0x0001 (r3)
cmpw r4,REG_MajorScene
beq GetMajorStruct_Exit
addi r3,r3,20
b GetMajorStruct_Loop
GetMajorStruct_Exit:
InitMinorSceneStruct:
.set REG_MinorStructParse,20
stw REG_MinorStruct,0x10(r3)
mr REG_MinorStructParse,REG_MinorStruct
InitMinorSceneStruct_Loop:
#Check if valid entry
lbz r3,0x0(REG_MinorStructParse)
extsb r3,r3
cmpwi r3,-1
beq InitMinorSceneStruct_Exit
#Convert Pointers
addi r3,REG_MinorStructParse,0x4
bl PointerConvert
addi r3,REG_MinorStructParse,0x8
bl PointerConvert
addi REG_MinorStructParse,REG_MinorStructParse,0x18
b InitMinorSceneStruct_Loop
InitMinorSceneStruct_Exit:
restore
blr
#endregion
#endregion
#region LagPrompt
#region LagPrompt_SceneLoad
############################################
#region LagPrompt_SceneLoad_Data
LagPrompt_SceneLoad_TextProperties:
blrl
.set PromptX,0x0
.set PromptY,0x4
.set ZOffset,0x8
.set CanvasScaling,0xC
.set Scale,0x10
.set YesX,0x14
.set YesY,0x18
.set YesScale,0x1C
.set NoX,0x20
.set NoY,0x24
.set NoScale,0x28
.set HighlightColor,0x2C
.set NonHighlightColor,0x30
.float 315 #REG_TextGObj X pos
.float 200 #REG_TextGObj Y pos
.float 0 #Z offset
.float 1 #Canvas Scaling
.float 1 #Text scale
.float 265 #Yes X pos
.float 300 #Yes Y pos
.float 1 #Yes scale
.float 365 #No X pos
.float 300 #No Y pos
.float 1 #No scale
.byte 251,199,57,255 #highlighted color
.byte 170,170,170,255 #nonhighlighted color
LagPrompt_SceneLoad_TopText:
blrl
.ascii "Are you using HDMI"
.short 0x8148
.byte 0
.align 2
LagPrompt_SceneLoad_Yes:
blrl
.string "Yes"
.align 2
LagPrompt_SceneLoad_No:
blrl
.string "No"
.align 2
#GObj Offsets
.set OFST_TextGObj,0x0
.set OFST_Selection,0x4
#endregion
#region LagPrompt_SceneLoad
LagPrompt_SceneLoad:
blrl
#Init
backup
LagPrompt_SceneLoad_CreateText:
.set REG_GObjData,27
.set REG_GObj,28
.set REG_SubtextID,29
.set REG_TextProp,30
.set REG_TextGObj,31
#GET PROPERTIES TABLE
bl LagPrompt_SceneLoad_TextProperties
mflr REG_TextProp
#Create canvas
li r3,0
li r4,0
li r5,9
li r6,13
li r7,0
li r8,14
li r9,0
li r10,19
branchl r12,0x803a611c
########################
## Create Text Object ##
########################
#CREATE TEXT OBJECT, RETURN POINTER TO STRUCT IN r3
li r3,0
li r4,0
branchl r12,Text_CreateTextStruct
#BACKUP STRUCT POINTER
mr REG_TextGObj,r3
stw REG_TextGObj,0x0(REG_GObjData)
#SET TEXT SPACING TO TIGHT
li r4,0x1
stb r4,0x49(REG_TextGObj)
#SET TEXT TO CENTER AROUND X LOCATION
li r4,0x1
stb r4,0x4A(REG_TextGObj)
#Store Base Z Offset
lfs f1,ZOffset(REG_TextProp) #Z offset
stfs f1,0x8(REG_TextGObj)
#Scale Canvas Down
lfs f1,CanvasScaling(REG_TextProp)
stfs f1,0x24(REG_TextGObj)
stfs f1,0x28(REG_TextGObj)
#Create Prompt
#Initialize Subtext
mr r3,REG_TextGObj #struct pointer
bl LagPrompt_SceneLoad_TopText
mflr r4
lfs f1,PromptX(REG_TextProp)
lfs f2,PromptY(REG_TextProp)
branchl r12,0x803a6b98
mr REG_SubtextID,r3
#Change Text Scale
mr r3,REG_TextGObj #struct pointer
mr r4,REG_SubtextID
lfs f1,Scale(REG_TextProp) #X offset of REG_TextGObj
lfs f2,Scale(REG_TextProp) #Y offset of REG_TextGObj
branchl r12,Text_UpdateSubtextSize
#Create Yes
#Initialize Subtext
mr r3,REG_TextGObj #struct pointer
bl LagPrompt_SceneLoad_Yes
mflr r4
lfs f1,YesX(REG_TextProp)
lfs f2,YesY(REG_TextProp)
branchl r12,0x803a6b98
mr REG_SubtextID,r3
#Change Text Scale
mr r3,REG_TextGObj #struct pointer
mr r4,REG_SubtextID
lfs f1,YesScale(REG_TextProp) #X offset of REG_TextGObj
lfs f2,YesScale(REG_TextProp) #Y offset of REG_TextGObj
branchl r12,Text_UpdateSubtextSize
#Create No
#Initialize Subtext
mr r3,REG_TextGObj #struct pointer
bl LagPrompt_SceneLoad_No
mflr r4
lfs f1,NoX(REG_TextProp)
lfs f2,NoY(REG_TextProp)
branchl r12,0x803a6b98
mr REG_SubtextID,r3
#Change Text Scale
mr r3,REG_TextGObj #struct pointer
mr r4,REG_SubtextID
lfs f1,NoScale(REG_TextProp) #X offset of REG_TextGObj
lfs f2,NoScale(REG_TextProp) #Y offset of REG_TextGObj
branchl r12,Text_UpdateSubtextSize
#Create GObj
li r3, 13
li r4,14
li r5,0
branchl r12, GObj_Create
mr REG_GObj,r3
#Allocate Space
li r3,64
branchl r12,HSD_MemAlloc
mr REG_GObjData,r3
#Zero
li r4,64
branchl r12,ZeroAreaLength
#Initialize
mr r6,REG_GObjData
mr r3,REG_GObj
li r4,4
load r5,0x8037f1b0
branchl r12,GObj_AddUserData
#Add Proc
mr r3,REG_GObj
bl LagPrompt_SceneThink
mflr r4 #Function to Run
li r5,0 #Priority
branchl r12, GObj_AddProc
#Store text gobj pointer
stw REG_TextGObj,OFST_TextGObj(REG_GObjData)
#Init Selection value
li r3,InitialSelection
stb r3,OFST_Selection(REG_GObjData)
#Highlight selection
mr r3,REG_TextGObj
li r4,InitialSelection+1
addi r5,REG_TextProp,HighlightColor
branchl r12,Text_ChangeTextColor
LagPrompt_SceneLoad_Exit:
restore
blr
#endregion
############################################
#endregion
#region LagPrompt_SceneThink
LagPrompt_SceneThink:
blrl
.set REG_TextProp,28
.set REG_Inputs,29
.set REG_GObjData,30
.set REG_GObj,31
#Init
backup
mr REG_GObj,r3
lwz REG_GObjData,0x2C(REG_GObj)
bl LagPrompt_SceneLoad_TextProperties
mflr REG_TextProp
#region Adjust Selection
#Adjust Menu Choice
#Get all player inputs
li r3,4
branchl r12,0x801a36c0
mr REG_Inputs,r3
#Check for movement to the right
rlwinm. r0,REG_Inputs,0,0x80
beq LagPrompt_SceneThink_SkipRight
#Adjust cursor
lbz r3,OFST_Selection(REG_GObjData)
addi r3,r3,1
stb r3,OFST_Selection(REG_GObjData)
extsb r3,r3
cmpwi r3,1
ble LagPrompt_SceneThink_HighlightSelection
li r3,1
stb r3,OFST_Selection(REG_GObjData)
b LagPrompt_SceneThink_CheckForA
LagPrompt_SceneThink_SkipRight:
#Check for movement to the left
rlwinm. r0,REG_Inputs,0,0x40
beq LagPrompt_SceneThink_CheckForA
#Adjust cursor
lbz r3,OFST_Selection(REG_GObjData)
subi r3,r3,1
stb r3,OFST_Selection(REG_GObjData)
extsb r3,r3
cmpwi r3,0
bge LagPrompt_SceneThink_HighlightSelection
li r3,0
stb r3,OFST_Selection(REG_GObjData)
b LagPrompt_SceneThink_CheckForA
LagPrompt_SceneThink_HighlightSelection:
#Unhighlight both options
lwz r3,OFST_TextGObj(REG_GObjData)
li r4,1
addi r5,REG_TextProp,NonHighlightColor
branchl r12,Text_ChangeTextColor
lwz r3,OFST_TextGObj(REG_GObjData)
li r4,2
addi r5,REG_TextProp,NonHighlightColor
branchl r12,Text_ChangeTextColor
#Highlight selection
lwz r3,OFST_TextGObj(REG_GObjData)
lbz r4,OFST_Selection(REG_GObjData)
addi r4,r4,1
addi r5,REG_TextProp,HighlightColor
branchl r12,Text_ChangeTextColor
#Play SFX
branchl r12,0x80174380
#endregion
#region Check for Confirmation
LagPrompt_SceneThink_CheckForA:
li r3,4
branchl r12,0x801a36a0
rlwinm. r0,r4,0,0x100
bne LagPrompt_SceneThink_Confirmed
rlwinm. r0,r4,0,0x1000
bne LagPrompt_SceneThink_Confirmed
b LagPrompt_SceneThink_Exit
LagPrompt_SceneThink_Confirmed:
#Play Menu Sound
branchl r12,0x80174338
#If yes, apply lag reduction
lbz r3,OFST_Selection(REG_GObjData)
cmpwi r3,0
bne LagPrompt_SceneThink_ExitScene
#endregion
#region Apply Code
.set REG_GeckoCode,12
#Apply lag reduction
bl LagReductionGeckoCode
mflr r3
bl ApplyGeckoCode
#Reset some pad variables to cancel the current alarm
load r3,UnkPadStruct
li r4,0
stw r4,0x4(r3)
stw r4,0x44(r3)
#Set new post retrace callback
load r3,PostRetraceCallback
branchl r12,0x80375934
#Now flush the instruction cache
lis r3,0x8000
load r4,0x3b722c #might be overkill but flush the entire dol file
branchl r12,0x80328f50
#endregion
LagPrompt_SceneThink_ExitScene:
branchl r12,0x801a4b60
LagPrompt_SceneThink_Exit:
restore
blr
#endregion
#region LagPrompt_SceneDecide
LagPrompt_SceneDecide:
backup
#Exit Scene
li r3,ExitSceneID
branchl r12,0x801a42e8
#Change Major
branchl r12,0x801a42d4
LagPrompt_SceneDecide_Exit:
restore
blr
############################################
#endregion
#region LagReductionGeckoCode
LagReductionGeckoCode:
blrl
.long 0x04019860
.long 0x4BFFFD9D
.long 0x041a4c24
.long 0xC0429A7C
.long 0xFF000000
#endregion
#region ApplyGeckoCode
ApplyGeckoCode:
.set REG_GeckoCode,12
mr REG_GeckoCode,r3
ApplyGeckoCode_Loop:
lbz r3,0x0(REG_GeckoCode)
cmpwi r3,0x4
beq ApplyGeckoCode_04
cmpwi r3,0xFF
beq ApplyGeckoCode_Exit
b ApplyGeckoCode_Exit
ApplyGeckoCode_04:
lwz r3,0x0(REG_GeckoCode)
rlwinm r3,r3,0,8,31
oris r3,r3,0x8000
lwz r4,0x4(REG_GeckoCode)
stw r4,0x0(r3)
addi REG_GeckoCode,REG_GeckoCode,0x8
b ApplyGeckoCode_Loop
ApplyGeckoCode_Exit:
blr
#endregion
#endregion
#region MinorSceneStruct
LagPrompt_MinorSceneStruct:
blrl
#Lag Prompt
.byte 0 #Minor Scene ID
.byte 00 #Amount of persistent heaps
.align 2
.long 0x00000000 #ScenePrep
bl LagPrompt_SceneDecide #SceneDecide
.byte PromptCommonSceneID #Common Minor ID
.align 2
.long 0x00000000 #Minor Data 1
.long 0x00000000 #Minor Data 2
#End
.byte -1
.align 2
#endregion
CheckProgressive:
#Check if progressive is enabled
branchl r12,0x80349278
cmpwi r3,0
beq NoProgressive
IsProgressive:
#Load LagPrompt
li r3, PromptSceneID
b Injection_Exit
NoProgressive:
#Exit Scene
li r3,ExitSceneID
Injection_Exit:
restore
================================================
FILE: ASM/Additional Codes/Last Unplug Closes All CSS Doors.asm
================================================
#To be inserted at 802605e4
.include "../Globals.s"
backup
#Check if all controllers are unplugged
load r3,HSD_Pad+0x144
li r4,0
UnplugLoop:
mulli r5,r4,68
add r5,r5,r3
lbz r5,0x41(r5)
extsb. r5,r5
beq Exit
addi r4,r4,1
cmpwi r4,4
blt UnplugLoop
.set REG_LoopCount,31
.set REG_DoorStruct,30
#All are unplugged, close all doors
load REG_DoorStruct,CSS_DoorStructs
li REG_LoopCount,0
DoorUpdateLoop:
#Change State
mulli r3,REG_LoopCount,0x24
add r3,r3,REG_DoorStruct
li r4,3
stb r4,CSSDoor_State(r3)
#Update Door State
mr r3,REG_LoopCount
branchl r12,CSS_UpdateCSPInfo
#Inc Loop
addi REG_LoopCount,REG_LoopCount,1
cmpwi REG_LoopCount,4
blt DoorUpdateLoop
Exit:
restore
lbz r0, 0x0004 (r31)
================================================
FILE: ASM/Additional Codes/Longer Nametags/8 Letter Tags/8Characters1.asm
================================================
#To be inserted at 8023c710
.include "../../../Globals.s"
cmplwi r3, 7
================================================
FILE: ASM/Additional Codes/Longer Nametags/8 Letter Tags/8Characters2.asm
================================================
#To be inserted at 8023c320
.include "../../../Globals.s"
cmplwi r3, 7
================================================
FILE: ASM/Additional Codes/Longer Nametags/8 Letter Tags/8Characters3.asm
================================================
#To be inserted at 8023c6c4
.include "../../../Globals.s"
cmplwi r3, 7
================================================
FILE: ASM/Additional Codes/Longer Nametags/8 Letter Tags/8Characters4.asm
================================================
#To be inserted at 8023cf9c
.include "../../../Globals.s"
cmpwi r27, 0x8
================================================
FILE: ASM/Additional Codes/Longer Nametags/8 Letter Tags/Adjust Cursor Position.asm
================================================
#To be inserted at 8023E0A4
.include "../../../Globals.s"
fsubs f0, f0, f2
bl Floats
mflr r4
lfs f1, 0(r4)
fdivs f0, f0, f1
b Exit
Floats:
blrl
.float 2
Exit:
================================================
FILE: ASM/Additional Codes/Longer Nametags/8 Letter Tags/Character Spacing.asm
================================================
#To be inserted at 8023cf74
.include "../../../Globals.s"
nop
================================================
FILE: ASM/Additional Codes/Longer Nametags/8 Letter Tags/Copy 8 Characters1.asm
================================================
#To be inserted at 8023cb08
.include "../../../Globals.s"
li r10,0
mr r9,r6
b GetTag_Loop
GetTag_IncLoop:
stb r3,0x0(r7)
addi r5,r5,1
addi r7,r7,1
addi r9,r9,1
GetTag_Loop:
lbz r3,0x0(r9)
cmpwi r3,0
bne GetTag_IncLoop
#Check if all 8 letters are read
addi r6,r6,3
mr r9,r6
addi r10,r10,1
cmpwi r10,8
blt GetTag_Loop
li r4,0
branch r12,0x8023cbec
================================================
FILE: ASM/Additional Codes/Longer Nametags/8 Letter Tags/Copy 8 Characters2.asm
================================================
#To be inserted at 8023c02c
.include "../../../Globals.s"
.set REG_Source,4
.set REG_Dest,7
.set REG_CharCount,8
.set REG_SourceCopied,9
li r10,0
li REG_CharCount,0
addi REG_Dest,r30,408
mr REG_SourceCopied,REG_Source
b GetTag_Loop
GetTag_IncLoop:
stb r3,0x0(REG_Dest)
addi REG_CharCount,REG_CharCount,1
addi REG_Dest,REG_Dest,1
addi REG_SourceCopied,REG_SourceCopied,1
GetTag_Loop:
lbz r3,0x0(REG_SourceCopied)
cmpwi r3,0
bne GetTag_IncLoop
#Check if all 8 letters are read
addi REG_Source,REG_Source,3
mr REG_SourceCopied,REG_Source
addi r10,r10,1
cmpwi r10,8
blt GetTag_Loop
mr r7,REG_CharCount
branch r12,0x8023c118
================================================
FILE: ASM/Additional Codes/Longer Nametags/8 Letter Tags/Disable Tag Rumble - Ignore Tag Rumble.asm
================================================
#To be inserted at 80167810
.include "../../../Globals.s"
nop
================================================
FILE: ASM/Additional Codes/Longer Nametags/8 Letter Tags/Disable Tag Rumble - Init.asm
================================================
#To be inserted at 8023c12c
.include "../../../Globals.s"
nop
================================================
FILE: ASM/Additional Codes/Longer Nametags/8 Letter Tags/Disable Tag Rumble - RumbleLoad.asm
================================================
#To be inserted at 80248c8c
.include "../../../Globals.s"
li r3,0
================================================
FILE: ASM/Additional Codes/Longer Nametags/8 Letter Tags/Disable Tag Rumble - RumbleThink.asm
================================================
#To be inserted at 802477f8
.include "../../../Globals.s"
li r3,0
================================================
FILE: ASM/Additional Codes/Longer Nametags/8 Letter Tags/ZeroNametagText.asm
================================================
#To be inserted at 8023e9e4
.include "../../../Globals.s"
li r3,0
subi r4,r31,3
li r5,0
Loop:
stbu r3,0x3(r4)
Loop_Inc:
addi r5,r5,1
cmpwi r5,8
blt Loop
mr r3, r15
================================================
FILE: ASM/Additional Codes/Longer Nametags/Scale Nametag BG/Main.asm
================================================
#To be inserted at 802fcfc8
.include "../../../Globals.s"
#Original
stfs f0, 0x002C (r28)
#Check if HMN
mr r3,r27
branchl r12,PlayerBlock_LoadSlotType
cmpwi r3,0
bne Exit
#Get nametag ID
mr r3,r27
branchl r12,PlayerBlock_LoadNameTagSlot #0x8003556c
cmpwi r3,120
beq Exit
#Get nametag text
branchl r12,Nametag_LoadNametagSlotText #0x8023754c
#Count letters
subi r3,r3,2
li r5,0
CountLetterLoop:
lbzu r4,0x2(r3)
cmpwi r4,0
beq CountLetterLoop_Exit
addi r5,r5,1
b CountLetterLoop
CountLetterLoop_Exit:
#Normal size if 4 or less
cmpwi r5,4
ble Exit
#Cast to float
li r3,0
subi r4,r5,4
branchl r12,cvt_sll_flt
bl Floats
mflr r3
lfs f2,0x0(r3)
lfs f3,0x2C(r28)
fdivs f2,f3,f2
fmuls f1,f1,f2
fadds f1,f1,f3
stfs f1, 0x002C (r28)
b Exit
Floats:
blrl
.float 4
Exit:
================================================
FILE: ASM/Additional Codes/Misc Hitbox Visualizer/Always Draw TopN For Items.asm
================================================
#To be inserted at 800593b0
.include "../../Globals.s"
backup
lwz r31,0x2C(r28)
#Draw TopN
lwz r10, -0x7920 (rtoc)
lwz r9, -0x791C (rtoc)
lwz r8, -0x7918 (rtoc)
lwz r7, -0x7914 (rtoc)
lwz r6, -0x7910 (rtoc)
lwz r5, -0x790C (rtoc)
lwz r4, -0x7908 (rtoc)
lwz r0, -0x7924 (rtoc)
stw r10, 0x00DC (sp)
stw r9, 0x00D8 (sp)
stw r8, 0x00D4 (sp)
stw r7, 0x00D0 (sp)
stw r6, 0x00CC (sp)
stw r5, 0x00C8 (sp)
stw r4, 0x00C4 (sp)
stw r0, 0x00C0 (sp)
branchl r12,0x80058ACC
li r3, 168
li r4, 0
li r5, 4
branchl r12,0x8033D0DC
lfs f3, 0x4C (r31) #X offset?
lfs f2, -0x7964 (rtoc)
lfs f4, 0x50 (r31) #Y offset?
fsubs f1,f3,f2
lfs f5, 0x54 (r31) #Z Offset
fadds f0,f2,f3
fsubs f6,f4,f2
stfs f1, -0x8000 (r30)
fadds f1,f2,f4
stfs f4, -0x8000 (r30)
stfs f5, -0x8000 (r30)
stfs f0, -0x8000 (r30)
stfs f4, -0x8000 (r30)
stfs f5, -0x8000 (r30)
stfs f3, -0x8000 (r30)
stfs f6, -0x8000 (r30)
stfs f5, -0x8000 (r30)
stfs f3, -0x8000 (r30)
stfs f1, -0x8000 (r30)
stfs f5, -0x8000 (r30)
Exit:
restore
branch r12,0x800593d0
================================================
FILE: ASM/Additional Codes/Misc Hitbox Visualizer/Display Chain ECBs - GObj 7.asm
================================================
#To be inserted at 800593dc
.include "../../Globals.s"
.set REG_CurrentGObj,31
.set REG_GX,30
backup
lis REG_GX,0xcc01
#Draw location of all chains (0x28)
lwz r3, -0x3E74 (r13)
lwz REG_CurrentGObj,0x28(r3)
b Loop_CheckNext
Loop:
.set REG_CurrentGObjData,29
#Get Data
lwz REG_CurrentGObjData,0x2C(REG_CurrentGObj)
/*
#Draw TopN
lwz r10, -0x7920 (rtoc)
lwz r9, -0x791C (rtoc)
lwz r8, -0x7918 (rtoc)
lwz r7, -0x7914 (rtoc)
lwz r6, -0x7910 (rtoc)
lwz r5, -0x790C (rtoc)
lwz r4, -0x7908 (rtoc)
lwz r0, -0x7924 (rtoc)
stw r10, 0x00DC (sp)
stw r9, 0x00D8 (sp)
stw r8, 0x00D4 (sp)
stw r7, 0x00D0 (sp)
stw r6, 0x00CC (sp)
stw r5, 0x00C8 (sp)
stw r4, 0x00C4 (sp)
stw r0, 0x00C0 (sp)
branchl r12,0x80058ACC
li r3, 168
li r4, 0
li r5, 4
branchl r12,0x8033D0DC
lfs f3, 0x4C (REG_CurrentGObjData) #X offset?
lfs f2, -0x7964 (rtoc)
lfs f4, 0x50 (REG_CurrentGObjData) #Y offset?
fsubs f1,f3,f2
lfs f5, 0x54 (REG_CurrentGObjData) #Z Offset
fadds f0,f2,f3
fsubs f6,f4,f2
stfs f1, -0x8000 (r30)
fadds f1,f2,f4
stfs f4, -0x8000 (r30)
stfs f5, -0x8000 (r30)
stfs f0, -0x8000 (r30)
stfs f4, -0x8000 (r30)
stfs f5, -0x8000 (r30)
stfs f3, -0x8000 (r30)
stfs f6, -0x8000 (r30)
stfs f5, -0x8000 (r30)
stfs f3, -0x8000 (r30)
stfs f1, -0x8000 (r30)
stfs f5, -0x8000 (r30)
*/
#Check if collision is up to date
lwz r0, -0x51F4 (r13)
lwz r4, 0x0038+48 (REG_CurrentGObjData)
cmpw r0,r4
bne Loop_Inc
#Draw ECB
addi r3,REG_CurrentGObjData,48
branchl r12,0x80058b5c
#Check if more
Loop_Inc:
lwz REG_CurrentGObj,0x8(REG_CurrentGObj)
Loop_CheckNext:
cmpwi REG_CurrentGObj,0
bne Loop
Exit:
restore
lmw r26, 0x0118 (sp)
================================================
FILE: ASM/Additional Codes/Misc Hitbox Visualizer/Main.asm
================================================
#To be inserted at 80080638
.include "../../Globals.s"
.set REG_PlayerData,31
.set REG_ItemGObj,30
.set REG_ItemData,29
backup
#Check char
lwz r3,0x4(REG_PlayerData)
cmpwi r3,Link.Int
beq Link
cmpwi r3,Popo.Int
beq Nana
/*
cmpwi r3,Pikachu.Int
beq Pikachu
cmpwi r3,Pichu.Int
beq Pikachu
*/
b Exit
##########################
Link:
#Check if boomerang exists
lwz REG_ItemGObj,0x2234(REG_PlayerData)
cmpwi REG_ItemGObj,0
beq Link_NoBoomerang
#Check if in state 3 (returning)
lwz REG_ItemData,0x2C(REG_ItemGObj)
lwz r3,0x24(REG_ItemData)
cmpwi r3,3
bne Link_NoBoomerang
#Draw circle of 6 radius around links current position
lfs f1,0xB0(REG_PlayerData)
stfs f1,0x80(sp)
lfs f1,0xB4(REG_PlayerData)
lwz r3,0x2D4(REG_PlayerData)
lfs f2,0x28(r3)
fadds f1,f1,f2
stfs f1,0x84(sp)
lfs f1,0xB8(REG_PlayerData)
stfs f1,0x88(sp)
addi r3,sp,0x80
lwz r4,0xC4(REG_ItemData)
lwz r4,0x4(r4)
lfs f1,0x2C(r4)
bl DrawBubble
Link_NoBoomerang:
/*
#Check if chain exists
lwz REG_ItemGObj,0x2238(REG_PlayerData)
cmpwi REG_ItemGObj,0
beq Link_NoChain
#Check if in state 8 (hangwait)
lwz REG_ItemData,0x2C(REG_ItemGObj)
lwz r3,0x24(REG_ItemData)
cmpwi r3,8
bne Link_NoChain
#Draw circle of 6 radius around the end of the hook
lfs f1,0xB0(REG_PlayerData)
stfs f1,0x80(sp)
lfs f1,0xB4(REG_PlayerData)
lwz r3,0x2D4(REG_PlayerData)
lfs f2,0x28(r3)
fadds f1,f1,f2
stfs f1,0x84(sp)
lfs f1,0xB8(REG_PlayerData)
stfs f1,0x88(sp)
addi r3,sp,0x80
lwz r4,0xC4(REG_ItemData)
lwz r4,0x4(r4)
lfs f1,0x40(r4)
bl DrawBubble
*/
Link_NoChain:
b Exit
##########################
Nana:
#up b nana search radius
lwz r3,0x10(REG_PlayerData)
cmpwi r3,0x160
beq Nana_UpB
cmpwi r3,0x15B
beq Nana_UpB
b Nana_NoUpB
Nana_UpB:
#Check if frame 4
li r3,0
li r4,4
branchl r12,cvt_sll_flt
lfs f2,0x894(REG_PlayerData)
fcmpo cr0,f1,f2
bne Nana_NoUpB
#Draw circle
addi r3,REG_PlayerData,0xB0
lwz r4,0x2D4(REG_PlayerData)
lfs f1,0x7C(r4)
bl DrawBubble
Nana_NoUpB:
b Exit
##########################
/*
Pikachu:
#Check AS
lwz r3,0x10(REG_PlayerData)
cmpwi r3,0x168
beq Pikachu_DownB
cmpwi r3,0x15C
beq Pikachu_DownB
b Pikachu_NoDownB
#Get thunder position
lwz r3,0x2340(REG_PlayerData)
cmpwi r3,0
beq Pikachu_NoDownB
addi r4,sp,0x80
branchl r12,0x802b1fe8
*/
Pikachu_NoDownB:
b Exit
##########################
DrawBubble:
backup
mr r4,r3
bl BubbleColors
mflr r5
addi r6,r5,4
branchl r12,0x80008fc8
restore
blr
BubbleColors:
blrl
.byte 255,255,255,128
.byte 128,0,0,128
##########################
Exit:
#Return
restore
lbz r0, 0x221D (r31)
================================================
FILE: ASM/Additional Codes/Neutral Respawn.asm
================================================
#To be inserted at 8016721c
.include "../Globals.s"
.set PlayerSlot,27
.set StaticBlock,26
.set SpawnTable,25
.set SpawnOrder,24
.set SpawnID,23
backup
#Don't run in singleplayer
branchl r12,0x8016b41c
cmpwi r3,0
bne Original
#Don't run for players 5 and 6
cmpwi PlayerSlot,5
bge Original
#Get static block
mr r3,PlayerSlot
branchl r12,Playerblock_LoadStaticBlock
mr StaticBlock,r3
#Get Neutral Spawn Table
bl NeutralRespawnTable
mflr SpawnTable
#Get this players spawn order
mr r3,PlayerSlot
bl GetSpawnOrder
mr SpawnOrder,r3
#Get stage ID
lwz r6,-0x6CB8 (r13)
li r5,0
#Get stage's spawn info
StageSearchLoop:
mulli r4,r5,0x5 #table length
add r4,r4,SpawnTable #get stage start
lbz r3,0x0(r4) #get stage ID
extsb r3,r3
cmpwi r3,-1 #check for end of table
beq Original
cmpw r3,r6 #check for matching stage ID
addi r5,r5,1 #inc count
bne StageSearchLoop
#Get ID
addi r4,r4,1 #Skip past stage ID
lbzx r3,SpawnOrder,r4
b Exit
######################
GetSpawnOrder:
.set LoopCount,31
.set SpawnOrder,30
.set PlayerSlot,28
backup
#Init variables
mr PlayerSlot,r3
li SpawnOrder,0
li LoopCount,0
#Start Loop
GetSpawnOrder_Loop:
#Load slot type
mr r3,LoopCount
branchl r12,PlayerBlock_LoadSlotType
cmpwi r3,0x1
bgt GetSpawnOrder_IncLoop #If >1, no player present
#Player is present, check if this is the one were looking for
cmpw PlayerSlot,LoopCount
beq GetSpawnOrder_Exit
#Increment offset
addi SpawnOrder,SpawnOrder,1
GetSpawnOrder_IncLoop:
addi LoopCount,LoopCount,1
cmpwi LoopCount,4
ble GetSpawnOrder_Loop
GetSpawnOrder_Exit:
mr r3,SpawnOrder #Return spawn order
restore
blr
######################
NeutralRespawnTable:
blrl
#FD
.byte 0x20 #Stage ID
.byte 0x00,0x01,0x02,0x03 #Nuetral Spawn Index
#Battlefield
.byte 0x1F #Stage ID
.byte 0x02,0x03,0x00,0x01 #Nuetral Spawn Index
#Yoshi's Story
.byte 0x08 #Stage ID
.byte 0x00,0x01,0x03,0x02 #Nuetral Spawn Index
#Dream Land
.byte 0x1C #Stage ID
.byte 0x01,0x03,0x00,0x02 #Nuetral Spawn Index
#FoD
.byte 0x02 #Stage ID
.byte 0x00,0x01,0x02,0x03 #Nuetral Spawn Index
#Pokemon Stadium
.byte 0x03 #Stage ID
.byte 0x00,0x01,0x02,0x03 #Nuetral Spawn Index
#Terminator
.byte 0xFF
.align 2
######################
Original:
restore
addi r3, r27, 0
b Skip
Exit:
restore
Skip:
================================================
FILE: ASM/Additional Codes/Neutral Respawn.s
================================================
#To be inserted at 8016721c
.include "../Globals.s"
.set PlayerSlot,27
.set StaticBlock,26
.set SpawnTable,25
.set SpawnOrder,24
.set SpawnID,23
backup
#Don't run in singleplayer
branchl r12,0x8016b41c
cmpwi r3,0
bne Original
#Don't run for players 5 and 6
cmpwi PlayerSlot,5
bge Original
#Get static block
mr r3,PlayerSlot
branchl r12,Playerblock_LoadStaticBlock
mr StaticBlock,r3
#Get Neutral Spawn Table
bl NeutralRespawnTable
mflr SpawnTable
#Get this players spawn order
mr r3,PlayerSlot
bl GetSpawnOrder
mr SpawnOrder,r3
#Get stage ID
lwz r6,-0x6CB8 (r13)
li r5,0
#Get stage's spawn info
StageSearch
gitextract_cp2hs4__/
├── .gitattributes
├── .gitignore
├── ASM/
│ ├── Additional Codes/
│ │ ├── Allow Staling in Develop Mode.asm
│ │ ├── Better Camera/
│ │ │ ├── C-Stick Pans Camera.asm
│ │ │ ├── CStickPanOffscreen/
│ │ │ │ ├── Bottom.asm
│ │ │ │ ├── Left.asm
│ │ │ │ ├── Right.asm
│ │ │ │ └── Top.asm
│ │ │ ├── SnapToOffscreenPlayers/
│ │ │ │ ├── Always Onscreen.asm
│ │ │ │ └── Snap.asm
│ │ │ └── Unrestricted Camera.asm
│ │ ├── Boot to CSS/
│ │ │ └── Boot to Main Menu Or CSS.s
│ │ ├── Boot to Event Mode/
│ │ │ ├── Boot to Main Menu Or CSS.asm
│ │ │ └── Main Menu Starts at Event Mode.asm
│ │ ├── CSS KO Star Codes/
│ │ │ ├── Calculate KO Stars Upon Exiting Dairantou.asm
│ │ │ └── Disable KO Star Deletion When Leaving CSS.asm
│ │ ├── Collision Link Draw Order Fix [Punkline]/
│ │ │ ├── New Draw Location.asm
│ │ │ └── Remove Original Draw.asm
│ │ ├── DEBUGLOG.s
│ │ ├── DPad Down to Random Stage.s
│ │ ├── Debug Mode Codes/
│ │ │ ├── Debug Language is English by Default.asm
│ │ │ ├── Exiting Debug Goes to Main Menu.asm
│ │ │ └── Tournament Mode Goes to Debug.asm
│ │ ├── Default Tournament Settings/
│ │ │ ├── 4 Stocks.asm
│ │ │ ├── 8 Minutes.asm
│ │ │ ├── No Items.asm
│ │ │ ├── Stock Mode.asm
│ │ │ └── Tournament Stages.asm
│ │ ├── Delete Bootup OSReports.asm
│ │ ├── Disable CSS Anim Loop.s
│ │ ├── Disable FoD Reflection.asm
│ │ ├── Disable FoD in Doubles.asm
│ │ ├── Disable Item Spawn in Develop Mode.asm
│ │ ├── Disable Item Spawn in Develop Mode.s
│ │ ├── Disable Rumble on Unplug.asm
│ │ ├── Disable Special Records/
│ │ │ ├── Disable Special Messages.asm
│ │ │ └── Disable Trophy Messages.asm
│ │ ├── Display Animation Name for Special Moves in Develop Mode/
│ │ │ └── Display Animation Name for Special Moves in Develop Mode.asm
│ │ ├── Display Ungrabbable Hurtboxes/
│ │ │ └── Main.asm
│ │ ├── Enable 1P in VS Mode No Time.asm
│ │ ├── Enable C Stick Always/
│ │ │ ├── Enable CStick for CPU in Debug.asm
│ │ │ ├── Rotate Camera with Dpad Down and C Stick - Initiate.asm
│ │ │ ├── Rotate Camera with Dpad Down and C Stick.asm
│ │ │ ├── Single Player Always Returns False.asm
│ │ │ └── Spoof Debug Level as 0 for Human C Stick Inputs.asm
│ │ ├── Faster CSS Load.asm
│ │ ├── Frame Advance Audio.s
│ │ ├── GX Draw/
│ │ │ └── Main.s
│ │ ├── Game Modes/
│ │ │ ├── All Star Test/
│ │ │ │ ├── Disable Invisible Melee.s
│ │ │ │ └── Initialize Lineups.s
│ │ │ ├── Chess Melee.asm
│ │ │ ├── Chess Melee.s
│ │ │ ├── Iron Man/
│ │ │ │ ├── Disable Invisible Melee.asm
│ │ │ │ ├── Initialize Lineups.asm
│ │ │ │ └── Load Next Match.asm
│ │ │ ├── Rotations Melee.asm
│ │ │ ├── Rotations Melee.s
│ │ │ ├── Tag Melee.asm
│ │ │ └── Tag Melee.s
│ │ ├── Hide Nametag When Invisible.asm
│ │ ├── Hide Player GFX When Hitboxes Enabled/
│ │ │ ├── Hide GFX When Hitboxes Enabled.asm
│ │ │ ├── Hide OnHit GFX When Hitboxes Enabled 2.asm
│ │ │ └── Hide OnHit GFX When Hitboxes Enabled.asm
│ │ ├── Hitbox Color Changes Based On Damage.asm
│ │ ├── Hold A+B for Salty Runback + Hold A+X for Random Stage + Skip Result Screen.asm
│ │ ├── Hold Z for Rapid Frame Advance/
│ │ │ ├── New Inputs Don't Reset Rapid Timer.s
│ │ │ ├── P1 - Check Rapid Fire Input.asm
│ │ │ ├── P2 - Check Rapid Fire Input.asm
│ │ │ ├── P3 - Check Rapid Fire Input.asm
│ │ │ └── P4 - Check Rapid Fire Input.asm
│ │ ├── Idle Screen/
│ │ │ └── Main.asm
│ │ ├── Initialize Stage Data.asm
│ │ ├── Kill Zoom/
│ │ │ ├── Main.s
│ │ │ └── Rumble During MH Zoom.s
│ │ ├── L+R+A Returns to CSS During SSS.asm
│ │ ├── Lag Reduction Prompt/
│ │ │ └── Main.asm
│ │ ├── Last Unplug Closes All CSS Doors.asm
│ │ ├── Longer Nametags/
│ │ │ ├── 8 Letter Tags/
│ │ │ │ ├── 8Characters1.asm
│ │ │ │ ├── 8Characters2.asm
│ │ │ │ ├── 8Characters3.asm
│ │ │ │ ├── 8Characters4.asm
│ │ │ │ ├── Adjust Cursor Position.asm
│ │ │ │ ├── Character Spacing.asm
│ │ │ │ ├── Copy 8 Characters1.asm
│ │ │ │ ├── Copy 8 Characters2.asm
│ │ │ │ ├── Disable Tag Rumble - Ignore Tag Rumble.asm
│ │ │ │ ├── Disable Tag Rumble - Init.asm
│ │ │ │ ├── Disable Tag Rumble - RumbleLoad.asm
│ │ │ │ ├── Disable Tag Rumble - RumbleThink.asm
│ │ │ │ └── ZeroNametagText.asm
│ │ │ └── Scale Nametag BG/
│ │ │ └── Main.asm
│ │ ├── Misc Hitbox Visualizer/
│ │ │ ├── Always Draw TopN For Items.asm
│ │ │ ├── Display Chain ECBs - GObj 7.asm
│ │ │ └── Main.asm
│ │ ├── Neutral Respawn.asm
│ │ ├── Neutral Respawn.s
│ │ ├── Neutral Spawn.asm
│ │ ├── On Crash/
│ │ │ ├── Clear Bootup OSReports.asm
│ │ │ ├── Disable Brinstar OSReport.asm
│ │ │ ├── Disable Effect AnimList OSReport.asm
│ │ │ ├── Disable Fourside OSReport.asm
│ │ │ ├── Disable Fourside OSReport2.asm
│ │ │ ├── Disable PS OSReport.asm
│ │ │ ├── Disable YoshisIsland OSReport.asm
│ │ │ ├── Disable mpcoll OSReport.asm
│ │ │ ├── Dont Output Compile Date on Assert.asm
│ │ │ ├── Dont Output Compile Date on Invalid Read.asm
│ │ │ ├── Enable OSReport Print to Screen.asm
│ │ │ ├── LRZ Shows Advanced Details/
│ │ │ │ ├── Any Debug Level Displays Advanced Details.s
│ │ │ │ └── Check for LRZ.s
│ │ │ ├── Only Show First 8 Lines of Stack.asm
│ │ │ └── Reboot With LRAStart.asm
│ │ ├── Output File Load Times/
│ │ │ ├── Output Load Time.s
│ │ │ └── Save Tick.s
│ │ ├── PRIM LITE/
│ │ │ ├── PRIM (1).asm
│ │ │ ├── PRIM (10).asm
│ │ │ ├── PRIM (11).asm
│ │ │ ├── PRIM (12).asm
│ │ │ ├── PRIM (13).asm
│ │ │ ├── PRIM (14).asm
│ │ │ ├── PRIM (15).asm
│ │ │ ├── PRIM (16).asm
│ │ │ ├── PRIM (17).asm
│ │ │ ├── PRIM (18).asm
│ │ │ ├── PRIM (19).asm
│ │ │ ├── PRIM (2).asm
│ │ │ ├── PRIM (20).asm
│ │ │ ├── PRIM (3).asm
│ │ │ ├── PRIM (4).asm
│ │ │ ├── PRIM (5).asm
│ │ │ ├── PRIM (6).asm
│ │ │ ├── PRIM (7).asm
│ │ │ ├── PRIM (8).asm
│ │ │ └── PRIM (9).asm
│ │ ├── Pad - Update During Frame Advance.asm
│ │ ├── Pause During Game Start/
│ │ │ ├── Check to Pause.asm
│ │ │ ├── Check to Pause.s
│ │ │ ├── Check to Unpause.asm
│ │ │ └── Check to Unpause.s
│ │ ├── Physics Display/
│ │ │ ├── Main.asm
│ │ │ └── Main.s
│ │ ├── QWERTY Keyboard.s
│ │ ├── Random CSS Music v2/
│ │ │ ├── random music modification.asm
│ │ │ ├── roll on bootup.asm
│ │ │ └── roll on match end.asm
│ │ ├── Randomize Hitboxes Each Stock/
│ │ │ └── Randomize Hitbox Values.s
│ │ ├── Rumble Off/
│ │ │ └── Rumble Off.asm
│ │ ├── Skip Memcard Prompt/
│ │ │ └── Skip Memcard Prompt.asm
│ │ ├── Stage Music = 50 50.asm
│ │ ├── Toggle Focused Player in Develop Mode Camera/
│ │ │ ├── Switch Focused Player in Develop Mode.asm
│ │ │ └── WIP/
│ │ │ └── Init CameraMode Struct When Develop is Enabled.s
│ │ ├── Toggle Rumble From CSS/
│ │ │ └── Toggle Rumble From CSS.asm
│ │ ├── Unlock Everything/
│ │ │ ├── Unlock All Characters/
│ │ │ │ ├── Spoof All Characters as Unlocked.asm
│ │ │ │ └── Spoof Individual Characters as Unlocked.asm
│ │ │ ├── Unlock All Rules/
│ │ │ │ ├── Unlock Random Stage Select.asm
│ │ │ │ └── Unlock Score Display.asm
│ │ │ ├── Unlock All Special Messages/
│ │ │ │ ├── Special Messages 1.asm
│ │ │ │ ├── Special Messages 2.asm
│ │ │ │ ├── Spoof No Pending Messages 2.asm
│ │ │ │ └── Spoof No Pending Messages.asm
│ │ │ ├── Unlock All Stages/
│ │ │ │ ├── Spoof All Stages Unlocked.asm
│ │ │ │ └── Spoof Individual Stage Unlocked.asm
│ │ │ ├── Unlock All Trophies/
│ │ │ │ ├── Fill Save Data.asm
│ │ │ │ ├── Have 99 of Every Trophy.asm
│ │ │ │ └── Spoof All Trophies as Unlocked.asm
│ │ │ ├── Unlock All-Star.asm
│ │ │ └── Unlock Sound Test.asm
│ │ ├── Unplugging Closes CSS Door.asm
│ │ ├── Use Save Banner #1.asm
│ │ ├── Winners Names are Gold on CSS/
│ │ │ ├── Change Name Color.asm
│ │ │ └── Remember Who LRA Started.asm
│ │ └── XYDisablesStart/
│ │ └── Main.asm
│ ├── Globals.s
│ ├── m-ex/
│ │ ├── Custom Playerdata Variables/
│ │ │ ├── Adjust Size.asm
│ │ │ ├── Initialize Extended Playerblock Values (Result Screen).asm
│ │ │ ├── Initialize Extended Playerblock Values.asm
│ │ │ └── OwnsAnim/
│ │ │ ├── Check Animation Owner.s
│ │ │ └── Store Animation Owner.s
│ │ ├── Header.s
│ │ ├── Standalone Functions/
│ │ │ ├── Audio_RequestFileLoad_Rewrite.asm
│ │ │ ├── Get MxDt Data.asm
│ │ │ ├── Get grFunction.asm
│ │ │ ├── GetFtItemID.asm
│ │ │ ├── GetGrItemID.asm
│ │ │ ├── GetKirbyCpData.asm
│ │ │ ├── GetMEXItemID.asm
│ │ │ ├── GetMEXPlaylist.asm
│ │ │ ├── Index Fighter Item.asm
│ │ │ ├── Init itFunction.asm
│ │ │ ├── KirbyStateChange.asm
│ │ │ ├── LoadRELDAT.asm
│ │ │ ├── MenuThink.asm
│ │ │ ├── Reloc.asm
│ │ │ ├── SFX_PlayStageSFX.asm
│ │ │ ├── SpawnMEXEffect.s
│ │ │ ├── SpawnMEXItem.asm
│ │ │ ├── Stock Icon Get Frame.asm
│ │ │ └── calloc.asm
│ │ └── UCF 0.8/
│ │ ├── Codes.txt
│ │ ├── UCF DB.asm
│ │ ├── UCF SD.asm
│ │ ├── UCF Store Inputs CPU.asm
│ │ ├── UCF Store Inputs.asm
│ │ ├── UCF Text.asm
│ │ └── UCF Tumble.asm
│ └── training-mode/
│ ├── Custom Events/
│ │ ├── A+B to Reset Event/
│ │ │ ├── Check for Reset on Game End.asm
│ │ │ └── Check for Reset on LRAStart.asm
│ │ ├── CSS and SSS/
│ │ │ ├── Add SSS To Event Match Scene List.asm
│ │ │ ├── Backup HMN And CPU Choices/
│ │ │ │ ├── Backup Event CPU.asm
│ │ │ │ └── Restore Event CPU.asm
│ │ │ ├── Display Event Name on CSS.asm
│ │ │ ├── Load CSS + Preload CPU.asm
│ │ │ ├── Load SSS For Certain Events.asm
│ │ │ └── Toggle CSS Icon Vibibility/
│ │ │ └── Toggle CSS Icon Vibibility.asm
│ │ ├── Credits Codes/
│ │ │ ├── Don't Display Info In TM Credits.asm
│ │ │ ├── Don't Display Titles In Training Mode Credits.asm
│ │ │ └── Swap Out Credit Names in TM Credits.asm
│ │ ├── Custom Event Code - Legacy.s
│ │ ├── Custom Event Code - Rewrite.asm
│ │ ├── Custom Event Preload Behavior/
│ │ │ ├── Disable Event Preload - CSS Enter.asm
│ │ │ ├── Disable Event Preload - Match Enter.asm
│ │ │ ├── Disable Event Preload.asm
│ │ │ ├── Dont Adjust CPU Color in Event Mode When Its Already in Use.asm
│ │ │ └── Load Character ssm Files.asm
│ │ ├── Event Select Screen/
│ │ │ ├── Backup FDD Backup on Event Choose.asm
│ │ │ ├── Better X and Y Event Jump/
│ │ │ │ ├── Jump Down - Update Cursor.asm
│ │ │ │ ├── Jump Down.asm
│ │ │ │ ├── Jump Up - Update Cursor.asm
│ │ │ │ └── Jump Up.asm
│ │ │ ├── Change ESS Proc To Pri 1.asm
│ │ │ ├── Choose Any Character for Events/
│ │ │ │ ├── Always Copy CSS Character Info.asm
│ │ │ │ ├── Always Show Select Character Texture.asm
│ │ │ │ └── Always Spoof AnyCharacter.asm
│ │ │ ├── Custom ESS Button Actions.asm
│ │ │ ├── Event High Scores/
│ │ │ │ ├── Load Event High Scores.asm
│ │ │ │ └── Save Event High Scores.asm
│ │ │ ├── Event Text/
│ │ │ │ ├── CannotScrollPastEventsOnPage.asm
│ │ │ │ ├── Custom Event Highscore Types.asm
│ │ │ │ ├── Display Custom Event Descriptions.asm
│ │ │ │ ├── Display Custom Event Names on ESS.asm
│ │ │ │ ├── Get Custom Event Description.asm
│ │ │ │ ├── Get Custom Event Description.s
│ │ │ │ ├── Get Custom Event Name.asm
│ │ │ │ ├── Get Custom Event Name.s
│ │ │ │ ├── Get Custom Event Page Name.asm
│ │ │ │ ├── Get Custom Event Page Name.s
│ │ │ │ ├── GetNumOfEventsOnCurrentPage.asm
│ │ │ │ ├── GetNumOfEventsOnCurrentPage.s
│ │ │ │ ├── Never Scroll If Less than 9 Events on Page.asm
│ │ │ │ ├── OnlyDisplayEventsOnPage.asm
│ │ │ │ └── SkipDisplayingEventNames.asm
│ │ │ ├── GetEventTutorialFileName.asm
│ │ │ ├── Restore FDD Backup on Main Menu Load.asm
│ │ │ ├── Spoof All Events as Not Played.asm
│ │ │ └── Version Indicator/
│ │ │ ├── Event Code Version Indicator.asm
│ │ │ ├── Remove Event Texture.asm
│ │ │ ├── Remove Version Indicator 1.asm
│ │ │ ├── Remove Version Indicator 2.asm
│ │ │ └── Toggle Tutorial Text.asm
│ │ └── Unlock All Events/
│ │ ├── Unlock Event 1.asm
│ │ └── Unlock Event 2.asm
│ ├── Globals.s
│ ├── Hooks/
│ │ ├── OnBoot.asm
│ │ ├── OnCSSLoad.asm
│ │ ├── OnSceneChange.asm
│ │ └── OnStartMelee.asm
│ ├── Misc/
│ │ ├── Adjust Pad Params/
│ │ │ ├── Adjust Menu Navigation Deadzone Boot.asm
│ │ │ ├── Adjust Menu Navigation Deadzone.asm
│ │ │ └── Increase Rapid Fire Timer.s
│ │ ├── Better VS Mode Frame Counter/
│ │ │ ├── Inc Counter.asm
│ │ │ └── Init Counter.asm
│ │ ├── Boot Up Tasks.asm
│ │ ├── CSS - Increase SIS Text Heap.asm
│ │ ├── Corneria - Move Ship on Stage Init.asm
│ │ ├── Count NonExistant Player Kills.asm
│ │ ├── Disable Calls to ScoreDisplay_Remove.asm
│ │ ├── Disable USB Screenshot.asm
│ │ ├── Display Stick Info When Paused/
│ │ │ ├── Create Text on Pause.asm
│ │ │ └── Remove Text on UnPause.asm
│ │ ├── Display Tweet Message And Version Number.asm
│ │ ├── Do Not Save Nametag Region to Memcard for GALE01.asm
│ │ ├── Edit Carrot Texture.s
│ │ ├── Edit Hyphen Texture.s
│ │ ├── Frame Advance Rewrite.asm
│ │ ├── GObj_Destory Exits When Input = 0.asm
│ │ ├── HSD_Update Tweak/
│ │ │ ├── Allow Z in VS While Paused.asm
│ │ │ ├── Always Run Debug Update.asm
│ │ │ ├── Check for DBLevel.asm
│ │ │ ├── Clear HSDUpdate for no Debug Melee.asm
│ │ │ └── Clear HSDUpdate for no Debug.asm
│ │ ├── Load .gct on Boot.s
│ │ ├── Load TmDt.asm
│ │ ├── Never Play Movies in Archives.asm
│ │ ├── OSReport Match Load Time/
│ │ │ ├── Output Time Since Last Tick.asm
│ │ │ └── Store Starting Tick.asm
│ │ ├── On No Save.asm
│ │ ├── Overwrite Compile Date.s
│ │ ├── PAL Changes/
│ │ │ ├── Character DAT Patcher.asm
│ │ │ ├── DK - Keep Up B Charge After Getting Hit out of Up B/
│ │ │ │ ├── Keep Charge Aerial Up B.asm
│ │ │ │ └── Keep Charge Grounded Up B.asm
│ │ │ ├── Detection Hitboxes Does Not Skip Hurtbox Collision Check.asm
│ │ │ ├── Fix Freeze Glitch.asm
│ │ │ ├── PAL CSS Indicator.asm
│ │ │ ├── PAL Stock Icons.asm
│ │ │ ├── Samus - Disable Extender/
│ │ │ │ ├── Disable Initial Extender Polling.asm
│ │ │ │ └── Disable Secondary Extender Polling.asm
│ │ │ └── Samus Cant Bomb Jump Out of Grapple.asm
│ │ ├── Save File Renaming.asm
│ │ ├── ScoreDisplay - Change GXLink Pri.asm
│ │ ├── SearchStringTable.asm
│ │ ├── Skip Assert for Respawn Platform.asm
│ │ ├── Skip Assert for no_reaction_always.asm
│ │ ├── Skip SetGroundStateAssert For Restore States.asm
│ │ ├── Store Version Number.s
│ │ ├── Text - Increment Max Size.asm.asm
│ │ └── Text Modifications/
│ │ ├── Add Symbols to ASCII-Menu Text Lookup Table.asm
│ │ ├── Make Spaces Not Store 00s.asm
│ │ ├── Make Spaces Store 0x1A.asm
│ │ └── Parse Numbers Correctly.asm
│ └── Onscreen Display/
│ ├── Act OOS Frame Display/
│ │ ├── Count During GuardOff.asm
│ │ ├── Count During ShieldWait.asm
│ │ ├── Display OOS Frame Count Standalone.asm
│ │ ├── GuardOff - Display OOS Frame Count.asm
│ │ ├── GuardWait - Display OOS Frame Count.asm
│ │ └── Init Frame Count.asm
│ ├── Act OOTumble/
│ │ ├── DamageFall - Check For Interrupt.asm
│ │ ├── DamageFlyTop - CheckForInterrupt.asm
│ │ ├── DamageLightHit - Check For Animation Interrupt.asm
│ │ ├── DamageLightHit - Check For Interrupt - Aerial Jump.asm
│ │ ├── DamageLightHit - Check ForInterrupt.asm
│ │ ├── Increment Post Hitstun Count.asm
│ │ ├── Original Counters and Variable Initializers/
│ │ │ ├── DamageFall - Increment Counter.asm
│ │ │ ├── DamageFlyRoll - Increment Counter.asm
│ │ │ ├── DamageFlyRoll - Init DamageFallCounter.asm
│ │ │ ├── DamageFlyTop - Increment Counter.asm
│ │ │ ├── DamageFlyTop - Init DamageFallCounter.asm
│ │ │ ├── DamageLightHit - Increment Counter.asm
│ │ │ ├── DamageLightHit - Init DamageFallCounter.asm
│ │ │ └── MissFoot - Init Counter.asm
│ │ └── Static Function - Display Frames Spent Post Hitstun.asm
│ ├── Act OoWait/
│ │ ├── Act OOWait- Standalone.asm
│ │ ├── Act OoWait - From Crouch.asm
│ │ ├── Act OoWait - From Landing.asm
│ │ └── Act OoWait - From Wait.asm
│ ├── Additional Playerblock Variables/
│ │ ├── Fastfall Timer/
│ │ │ ├── Display FF Timing.asm
│ │ │ ├── Increment Fastfall Variable.asm
│ │ │ └── Initialize Fastfall Variable.asm
│ │ ├── Frame Advantage/
│ │ │ ├── Initialize Frame Advantage Think.asm
│ │ │ └── Save Pointer to Shield Owner On Hit.asm
│ │ ├── Previous Move Instance Hit By/
│ │ │ └── Backup Previous Move Instance Player was Hit By.asm
│ │ └── StatesAndTimers/
│ │ ├── IncFrameCounts.asm
│ │ └── ShiftStates.asm
│ ├── Check For IC's Static Function.asm
│ ├── Combo Counter/
│ │ ├── Better Combo Counter/
│ │ │ ├── Custom Function Blrl + Keep Combo Counter Going For Missed Techs+Getups.asm
│ │ │ ├── Disregard Projectile Hitboxes w Same Move ID.asm
│ │ │ ├── Disregard Throw Hitboxes.asm.bak
│ │ │ ├── Interrupting Move with Same Move Gives a Unique ID.asm
│ │ │ ├── Keep Combo Counter Going For Missed Techs+Getups.asm
│ │ │ ├── Pummels and Multi-Hits Increment Total Damage But Not Combo Counter.asm
│ │ │ ├── Skip Original Combo End Check.asm
│ │ │ └── Throw Hitboxes Update (Last Damage Source) Variable in Playerblock.asm
│ │ └── Combo Counter - On Combo Increment.asm
│ ├── Dashback/
│ │ ├── Dashback Display - Static Function.asm
│ │ ├── Grab Out of Tilt Turn.asm.bak
│ │ └── Run Out of Tilt Turn.asm
│ ├── Fox Training Codes/
│ │ └── Side B Shorten Display.asm
│ ├── L Cancel Display NEW.asm
│ ├── Ledge Codes/
│ │ ├── Frames Spent in CliffWait.asm
│ │ ├── GALINT/
│ │ │ ├── GALINT Aerail Interrupt.asm
│ │ │ ├── GALINT Laser Land.asm
│ │ │ ├── GALINT Ledgedash.asm
│ │ │ ├── GALINT No Impact Land.asm
│ │ │ └── Standalaone - GALINT Display.asm
│ │ └── Ledgestall/
│ │ └── Ledgestall Display.asm
│ ├── Message Display System/
│ │ ├── Create Message Struct.asm
│ │ ├── Disable Hiding Score on Pause.asm
│ │ ├── Disable Showing Score on Unpause.asm
│ │ └── Display Message 2.0.asm
│ ├── SDI Display/
│ │ ├── Initialize Total SDI Inputs Variable.asm
│ │ └── SDI Display Main.asm
│ ├── Template.s
│ ├── Toggle UI/
│ │ ├── Can Disable All Toggles in Custom RSS.asm
│ │ ├── Disable Save to Bitfield Every Change.asm
│ │ ├── Load Alt Text When Loaded With L.asm
│ │ ├── Load Random Stage Select On L Press.asm
│ │ ├── Load Toggles When Loaded With L .asm
│ │ ├── Press L for OSD Indicator.asm
│ │ ├── Remove Press L for OSD Indicator.asm
│ │ ├── Remove Text When Leaving Custom RSS.asm
│ │ ├── Return to Event Screen When Pressing Start.asm
│ │ ├── Return to First Page When Loaded With L.asm
│ │ ├── Save Toggles When Loaded With L.asm
│ │ ├── Set Flag on Leaving Custom RSS.asm
│ │ └── XY To Adjust Max OSD.asm
│ └── Wavedash Display/
│ ├── Save Airdodge Y Angle.asm
│ └── Wavedash Timing Display.asm
├── Additional ISO Files/
│ ├── TvAmsTc.mth
│ ├── TvLC.mth
│ ├── TvLedDa.mth
│ ├── TvLedTc.mth
│ ├── TvPowSh.mth
│ ├── TvRvrsl.mth
│ ├── TvSDI.mth
│ ├── TvShDrp.mth
│ └── audio/
│ ├── TvAmsTc.hps
│ ├── TvLC.hps
│ ├── TvLedDa.hps
│ ├── TvLedTc.hps
│ ├── TvPowSh.hps
│ ├── TvRvrsl.hps
│ ├── TvSDI.hps
│ └── TvShDrp.hps
├── Build TM Codeset/
│ ├── Build Training Mode Codeset.bat
│ ├── codes.json
│ └── mac/
│ ├── codes.json
│ └── modifyStartDol.sh
├── Build TM Start.dol/
│ ├── Drag Melee v1.02 Start.dol Here.bat
│ └── patch.xdelta
├── MexTK/
│ ├── MexTK.exe.config
│ ├── cssFunction.txt
│ ├── evFunction.txt
│ ├── ftFunction.txt
│ ├── grFunction.txt
│ ├── include/
│ │ ├── archive.h
│ │ ├── audio.h
│ │ ├── boneset.h
│ │ ├── collision.h
│ │ ├── color.h
│ │ ├── css.h
│ │ ├── datatypes.h
│ │ ├── devtext.h
│ │ ├── effects.h
│ │ ├── fighter.h
│ │ ├── hsd.h
│ │ ├── inline.h
│ │ ├── item.h
│ │ ├── kirby.h
│ │ ├── match.h
│ │ ├── math.h
│ │ ├── memcard.h
│ │ ├── mex.h
│ │ ├── obj.h
│ │ ├── offsets.h
│ │ ├── preload.h
│ │ ├── result.h
│ │ ├── scene.h
│ │ ├── stage.h
│ │ ├── structs.h
│ │ ├── text.h
│ │ └── useful.h
│ ├── itFunction.txt
│ ├── kbFunction.txt
│ ├── melee.link
│ ├── mex.h
│ ├── mjFunction.txt
│ ├── mnFunction.txt
│ └── tmFunction.txt
├── README.md
└── patch/
├── events/
│ ├── lab/
│ │ ├── build.bat
│ │ ├── notes.txt
│ │ └── source/
│ │ ├── lab.c
│ │ ├── lab.h
│ │ └── lab_css.c
│ ├── lcancel/
│ │ ├── build.bat
│ │ └── source/
│ │ ├── lcancel.c
│ │ └── lcancel.h
│ ├── ledgedash/
│ │ ├── build.bat
│ │ └── source/
│ │ ├── ledgedash.c
│ │ └── ledgedash.h
│ └── wavedash/
│ ├── build.bat
│ └── source/
│ ├── wavedash.c
│ └── wavedash.h
└── tmdata/
├── build.bat
└── source/
├── events.c
└── events.h
SYMBOL INDEX (586 symbols across 34 files)
FILE: MexTK/include/archive.h
type ArchiveInfo (line 7) | struct ArchiveInfo
FILE: MexTK/include/collision.h
type ECBBones (line 22) | struct ECBBones
type DmgHazard (line 30) | struct DmgHazard
type CollData (line 43) | struct CollData
type CollGroupDesc (line 131) | struct CollGroupDesc // exists in stage file
type CollGroup (line 149) | struct CollGroup // exists in heap
type CollLineInfo (line 166) | struct CollLineInfo
type CollLine (line 194) | struct CollLine
type CollVert (line 214) | struct CollVert
type CollDataStage (line 221) | struct CollDataStage
FILE: MexTK/include/color.h
type GXColor (line 9) | struct GXColor
type ColorOverlay (line 17) | struct ColorOverlay
FILE: MexTK/include/css.h
type CSSBackup (line 10) | struct CSSBackup
type MnSelectChrDataTable (line 25) | struct MnSelectChrDataTable
type CSSCursorState (line 42) | enum CSSCursorState
type CSSCursor (line 49) | struct CSSCursor
type CSSPuck (line 61) | struct CSSPuck
type MnSlChrIcon (line 72) | struct MnSlChrIcon
type DoorState (line 87) | enum DoorState
type MnSlChrDoor (line 94) | struct MnSlChrDoor
type MnSlChrTagData (line 122) | struct MnSlChrTagData
type MnSlChrTag (line 136) | struct MnSlChrTag
type MnSlChrKOStar (line 149) | struct MnSlChrKOStar
type MnSlChrData (line 161) | struct MnSlChrData
type VSMinorData (line 188) | struct VSMinorData
FILE: MexTK/include/datatypes.h
type s8 (line 8) | typedef signed char s8;
type s16 (line 9) | typedef signed short s16;
type s32 (line 10) | typedef signed int s32;
type s64 (line 11) | typedef signed long long s64;
type u8 (line 12) | typedef unsigned char u8;
type u16 (line 13) | typedef unsigned short u16;
type u32 (line 14) | typedef unsigned int u32;
type u64 (line 15) | typedef unsigned long long u64;
type f32 (line 16) | typedef float f32;
type f64 (line 17) | typedef double f64;
type Vec2 (line 51) | struct Vec2
type Vec3 (line 57) | struct Vec3
type Vec4 (line 64) | struct Vec4
FILE: MexTK/include/devtext.h
type DevText (line 9) | struct DevText
FILE: MexTK/include/effects.h
type Effect (line 12) | struct Effect
type Particle (line 30) | struct Particle
type ptclGen (line 56) | struct ptclGen // allocated at 8039d9c8
type GeneratorAppSRT (line 83) | struct GeneratorAppSRT // allocated at 803a42b0
type Particle2 (line 127) | struct Particle2 // created at 80398c90. dont feel like labelling this, ...
FILE: MexTK/include/fighter.h
type FtCommonBone (line 25) | enum FtCommonBone
type Ft_AttackKind (line 432) | enum Ft_AttackKind
type Playerblock (line 460) | struct Playerblock
type PlayerData (line 505) | struct PlayerData
type FighterBone (line 538) | struct FighterBone
type DynamicsDesc (line 546) | struct DynamicsDesc
type DynamicsHitDesc (line 556) | struct DynamicsHitDesc
type DynamicsBehave (line 563) | struct DynamicsBehave
type ftDynamics (line 568) | struct ftDynamics
type ftData (line 577) | struct ftData
type ftChkDevice (line 605) | struct ftChkDevice // 80459a68
type SubactionHeader (line 621) | struct SubactionHeader
type MoveLogic (line 630) | struct MoveLogic
type ReflectDesc (line 643) | struct ReflectDesc
type ShieldDesc (line 654) | struct ShieldDesc
type AbsorbDesc (line 665) | struct AbsorbDesc
type HitVictim (line 676) | struct HitVictim
type ftHit (line 682) | struct ftHit
type FtHurt (line 726) | struct FtHurt
type FtDynamicBoneset (line 748) | struct FtDynamicBoneset
type FtDynamicRoot (line 758) | struct FtDynamicRoot
type FtDynamicHit (line 791) | struct FtDynamicHit
type FtAfterImageKey (line 801) | struct FtAfterImageKey
type CPU (line 807) | struct CPU
type ftCommonData (line 1156) | struct ftCommonData
type FighterData (line 1677) | struct FighterData
type FtParts (line 2634) | struct FtParts // is in the fighter data
type FtPartsDesc (line 2642) | struct FtPartsDesc
type FtDOBJUnk3 (line 2648) | struct FtDOBJUnk3
type FtDOBJUnk2 (line 2654) | struct FtDOBJUnk2
type FtPartsLookup (line 2660) | struct FtPartsLookup
type FtDOBJUnk (line 2669) | struct FtDOBJUnk // is in the fighter data
type FtCliffCatch (line 2681) | struct FtCliffCatch
FILE: MexTK/include/hsd.h
type HSD_ObjAllocData (line 46) | struct HSD_ObjAllocData
type HSD_Material (line 61) | struct HSD_Material
type HSD_Pad (line 70) | struct HSD_Pad
type HSD_Pads (line 96) | struct HSD_Pads
type HSD_Update (line 101) | struct HSD_Update
type HSD_VI (line 150) | struct HSD_VI
FILE: MexTK/include/inline.h
function fabs (line 15) | static float fabs(float x)
function abs (line 24) | static int abs(int x)
function enterKnockback (line 33) | static void enterKnockback(GOBJ *fighter, int angle, float mag)
function null (line 52) | static void null()
function PRIM_DRAW (line 57) | static void __attribute__((optimize("O0"))) PRIM_DRAW(PRIM *gx, float x,...
function C_QUATMtx (line 66) | static void C_QUATMtx(Vec4 *r, Mtx m)
function HSD_Pad (line 119) | static HSD_Pad *PadGet(int playerIndex, int padType)
function lerp (line 132) | static float lerp(Translation *anim, float currFrame)
function JOBJ_GetAnimFrame (line 157) | static float JOBJ_GetAnimFrame(JOBJ *joint)
function AOBJ (line 209) | static AOBJ *JOBJ_GetFirstAOBJ(JOBJ *jobj)
function AOBJ (line 270) | static AOBJ *JOBJ_GetJointAOBJ(JOBJ *jobj)
function DOBJ (line 299) | static DOBJ *JOBJ_GetDObjChild(JOBJ *joint, int dobj_index)
function Math_Vec2Angle (line 319) | static float Math_Vec2Angle(Vec2 *a, Vec2 *b)
function Math_Vec2Distance (line 340) | static float Math_Vec2Distance(Vec2 *a, Vec2 *b)
function Math_Vec3Distance (line 345) | static float Math_Vec3Distance(Vec3 *a, Vec3 *b)
FILE: MexTK/include/item.h
type itData (line 265) | struct itData
type itCommonAttr (line 292) | struct itCommonAttr
type ItemState (line 344) | struct ItemState
type SpawnItem (line 352) | struct SpawnItem
type itHit (line 370) | struct itHit
type ItemData (line 469) | struct ItemData
FILE: MexTK/include/kirby.h
type FtVarKirby (line 12) | struct FtVarKirby
FILE: MexTK/include/match.h
type MatchInit (line 37) | struct MatchInit
type MatchHUD (line 147) | struct MatchHUD
type CameraBox (line 174) | struct CameraBox
type MatchCamera (line 194) | struct MatchCamera
type MatchOffscreen (line 453) | struct MatchOffscreen
type Match (line 464) | struct Match // static match struct @ 8046b6a0
FILE: MexTK/include/memcard.h
type Memcard (line 25) | struct Memcard
type SnapshotInfo (line 2077) | struct SnapshotInfo
type SnapshotList (line 2084) | struct SnapshotList
type MemSnapIconData (line 2093) | struct MemSnapIconData
type MemcardSave (line 2099) | struct MemcardSave
type MemcardWork (line 2107) | struct MemcardWork
type MemcardUnk (line 2660) | struct MemcardUnk
type MemcardInfo (line 2675) | struct MemcardInfo
type Rules1 (line 2725) | struct Rules1
FILE: MexTK/include/mex.h
type MEX_GETDATA (line 10) | enum MEX_GETDATA
type PRIM (line 24) | struct PRIM
type Translation (line 29) | struct Translation
type MEXPlaylist (line 35) | struct MEXPlaylist
FILE: MexTK/include/obj.h
type GOBJ (line 99) | struct GOBJ
type GOBJProc (line 121) | struct GOBJProc
type GOBJList (line 132) | struct GOBJList
type GXList (line 157) | struct GXList
type TOBJ (line 164) | struct TOBJ
type AOBJ (line 195) | struct AOBJ
type MOBJ (line 206) | struct MOBJ
type JOBJDesc (line 227) | struct JOBJDesc
type COBJDesc (line 246) | struct COBJDesc
type DOBJ (line 289) | struct DOBJ
type JOBJ (line 300) | struct JOBJ
type WOBJ (line 320) | struct WOBJ
type COBJ (line 329) | struct COBJ
type _HSD_ImageDesc (line 380) | struct _HSD_ImageDesc
type _HSD_LightPoint (line 391) | struct _HSD_LightPoint
type _HSD_LightPointDesc (line 400) | struct _HSD_LightPointDesc
type _HSD_LightSpot (line 409) | struct _HSD_LightSpot
type _HSD_LightSpotDesc (line 418) | struct _HSD_LightSpotDesc
type _HSD_LightAttn (line 427) | struct _HSD_LightAttn
type LOBJ (line 437) | struct LOBJ
type JOBJAnimSet (line 462) | struct JOBJAnimSet
FILE: MexTK/include/preload.h
type PreloadChar (line 7) | struct PreloadChar
type Preload (line 13) | struct Preload
FILE: MexTK/include/result.h
type RstPlayer (line 7) | struct RstPlayer
type RstInit (line 65) | struct RstInit
FILE: MexTK/include/scene.h
type HEAP_KIND (line 10) | enum HEAP_KIND
type MINOR_KIND (line 18) | enum MINOR_KIND
type MajorScene (line 69) | struct MajorScene
type MinorScene (line 78) | struct MinorScene
type ScDataVS (line 89) | struct ScDataVS
type ScDataRst (line 98) | struct ScDataRst
FILE: MexTK/include/stage.h
type GrInternal (line 13) | enum GrInternal
type map_gobjDesc (line 57) | struct map_gobjDesc
type map_gobjData (line 66) | struct map_gobjData
type StageOnGO (line 220) | struct StageOnGO
type Stage (line 227) | struct Stage
type MapHead (line 373) | struct MapHead
type StageFile (line 385) | struct StageFile
FILE: MexTK/include/structs.h
type Vec2 (line 9) | typedef struct Vec2 Vec2;
type Vec3 (line 10) | typedef struct Vec3 Vec3;
type Vec4 (line 11) | typedef struct Vec4 Vec4;
type OSInfo (line 14) | typedef struct OSInfo OSInfo;
type OSCalendarTime (line 15) | typedef struct OSCalendarTime OSCalendarTime;
type CARDStat (line 16) | typedef struct CARDStat CARDStat;
type CARDFileInfo (line 17) | typedef struct CARDFileInfo CARDFileInfo;
type RGB565 (line 18) | typedef struct RGB565 RGB565;
type GOBJ (line 21) | typedef struct GOBJ GOBJ;
type GOBJProc (line 22) | typedef struct GOBJProc GOBJProc;
type GOBJList (line 23) | typedef struct GOBJList GOBJList;
type GXList (line 24) | typedef struct GXList GXList;
type JOBJ (line 25) | typedef struct JOBJ JOBJ;
type JOBJDesc (line 26) | typedef struct JOBJDesc JOBJDesc;
type DOBJ (line 27) | typedef struct DOBJ DOBJ;
type TOBJ (line 28) | typedef struct TOBJ TOBJ;
type AOBJ (line 29) | typedef struct AOBJ AOBJ;
type MOBJ (line 30) | typedef struct MOBJ MOBJ;
type WOBJ (line 31) | typedef struct WOBJ WOBJ;
type COBJ (line 32) | typedef struct COBJ COBJ;
type COBJDesc (line 33) | typedef struct COBJDesc COBJDesc;
type _HSD_ImageDesc (line 34) | typedef struct _HSD_ImageDesc _HSD_ImageDesc;
type _HSD_LightPoint (line 35) | typedef struct _HSD_LightPoint _HSD_LightPoint;
type _HSD_LightPointDesc (line 36) | typedef struct _HSD_LightPointDesc _HSD_LightPointDesc;
type _HSD_LightSpot (line 37) | typedef struct _HSD_LightSpot _HSD_LightSpot;
type _HSD_LightSpotDesc (line 38) | typedef struct _HSD_LightSpotDesc _HSD_LightSpotDesc;
type _HSD_LightAttn (line 39) | typedef struct _HSD_LightAttn _HSD_LightAttn;
type LOBJ (line 40) | typedef struct LOBJ LOBJ;
type JOBJAnimSet (line 41) | typedef struct JOBJAnimSet JOBJAnimSet;
type ArchiveInfo (line 44) | typedef struct ArchiveInfo ArchiveInfo;
type MapHead (line 45) | typedef struct MapHead MapHead;
type Stage (line 48) | typedef struct Stage Stage;
type StageOnGO (line 49) | typedef struct StageOnGO StageOnGO;
type map_gobjData (line 50) | typedef struct map_gobjData map_gobjData;
type map_gobjDesc (line 51) | typedef struct map_gobjDesc map_gobjDesc;
type StageFile (line 52) | typedef struct StageFile StageFile;
type MatchInit (line 55) | typedef struct MatchInit MatchInit;
type Match (line 56) | typedef struct Match Match;
type MatchHUD (line 57) | typedef struct MatchHUD MatchHUD;
type MatchCamera (line 58) | typedef struct MatchCamera MatchCamera;
type CameraBox (line 59) | typedef struct CameraBox CameraBox;
type MatchOffscreen (line 60) | typedef struct MatchOffscreen MatchOffscreen;
type Text (line 63) | typedef struct Text Text;
type TextAllocInfo (line 64) | typedef struct TextAllocInfo TextAllocInfo;
type DevText (line 67) | typedef struct DevText DevText;
type Effect (line 70) | typedef struct Effect Effect;
type Particle (line 71) | typedef struct Particle Particle;
type Particle2 (line 72) | typedef struct Particle2 Particle2;
type ptclGen (line 73) | typedef struct ptclGen ptclGen;
type GeneratorAppSRT (line 74) | typedef struct GeneratorAppSRT GeneratorAppSRT;
type GXColor (line 77) | typedef struct GXColor GXColor;
type ColorOverlay (line 78) | typedef struct ColorOverlay ColorOverlay;
type ItemData (line 81) | typedef struct ItemData ItemData;
type ItemState (line 82) | typedef struct ItemState ItemState;
type SpawnItem (line 83) | typedef struct SpawnItem SpawnItem;
type itData (line 84) | typedef struct itData itData;
type itCommonAttr (line 85) | typedef struct itCommonAttr itCommonAttr;
type itHit (line 86) | typedef struct itHit itHit;
type FighterData (line 89) | typedef struct FighterData FighterData;
type FighterBone (line 90) | typedef struct FighterBone FighterBone;
type Playerblock (line 91) | typedef struct Playerblock Playerblock;
type PlayerData (line 92) | typedef struct PlayerData PlayerData;
type MoveLogic (line 93) | typedef struct MoveLogic MoveLogic;
type SubactionHeader (line 94) | typedef struct SubactionHeader SubactionHeader;
type ftHit (line 95) | typedef struct ftHit ftHit;
type HitVictim (line 96) | typedef struct HitVictim HitVictim;
type FtHurt (line 97) | typedef struct FtHurt FtHurt;
type ReflectDesc (line 98) | typedef struct ReflectDesc ReflectDesc;
type ShieldDesc (line 99) | typedef struct ShieldDesc ShieldDesc;
type AbsorbDesc (line 100) | typedef struct AbsorbDesc AbsorbDesc;
type CPU (line 101) | typedef struct CPU CPU;
type ftData (line 102) | typedef struct ftData ftData;
type ftCommonData (line 103) | typedef struct ftCommonData ftCommonData;
type ftChkDevice (line 104) | typedef struct ftChkDevice ftChkDevice;
type FtSymbolLookup (line 105) | typedef struct FtSymbolLookup FtSymbolLookup;
type FtSymbols (line 106) | typedef struct FtSymbols FtSymbols;
type FtParts (line 107) | typedef struct FtParts FtParts;
type FtPartsDesc (line 108) | typedef struct FtPartsDesc FtPartsDesc;
type FtDOBJUnk (line 109) | typedef struct FtDOBJUnk FtDOBJUnk;
type FtPartsLookup (line 110) | typedef struct FtPartsLookup FtPartsLookup;
type FtDOBJUnk2 (line 111) | typedef struct FtDOBJUnk2 FtDOBJUnk2;
type FtDOBJUnk3 (line 112) | typedef struct FtDOBJUnk3 FtDOBJUnk3;
type FtDynamicBoneset (line 113) | typedef struct FtDynamicBoneset FtDynamicBoneset;
type FtDynamicRoot (line 114) | typedef struct FtDynamicRoot FtDynamicRoot;
type FtDynamicHit (line 115) | typedef struct FtDynamicHit FtDynamicHit;
type DynamicsDesc (line 116) | typedef struct DynamicsDesc DynamicsDesc;
type DynamicsHitDesc (line 117) | typedef struct DynamicsHitDesc DynamicsHitDesc;
type DynamicsBehave (line 118) | typedef struct DynamicsBehave DynamicsBehave;
type ftDynamics (line 119) | typedef struct ftDynamics ftDynamics;
type FtCliffCatch (line 122) | typedef struct FtCliffCatch FtCliffCatch;
type CSSBackup (line 125) | typedef struct CSSBackup CSSBackup;
type MnSelectChrDataTable (line 126) | typedef struct MnSelectChrDataTable MnSelectChrDataTable;
type VSMinorData (line 127) | typedef struct VSMinorData VSMinorData;
type CSSCursor (line 128) | typedef struct CSSCursor CSSCursor;
type CSSPuck (line 129) | typedef struct CSSPuck CSSPuck;
type MnSlChrData (line 130) | typedef struct MnSlChrData MnSlChrData;
type MnSlChrIcon (line 131) | typedef struct MnSlChrIcon MnSlChrIcon;
type MnSlChrDoor (line 132) | typedef struct MnSlChrDoor MnSlChrDoor;
type MnSlChrTag (line 133) | typedef struct MnSlChrTag MnSlChrTag;
type MnSlChrTagData (line 134) | typedef struct MnSlChrTagData MnSlChrTagData;
type MnSlChrKOStar (line 135) | typedef struct MnSlChrKOStar MnSlChrKOStar;
type Memcard (line 138) | typedef struct Memcard Memcard;
type MemcardWork (line 139) | typedef struct MemcardWork MemcardWork;
type MemcardUnk (line 140) | typedef struct MemcardUnk MemcardUnk;
type MemcardSave (line 141) | typedef struct MemcardSave MemcardSave;
type MemcardInfo (line 142) | typedef struct MemcardInfo MemcardInfo;
type SnapshotInfo (line 143) | typedef struct SnapshotInfo SnapshotInfo;
type SnapshotList (line 144) | typedef struct SnapshotList SnapshotList;
type MemSnapIconData (line 145) | typedef struct MemSnapIconData MemSnapIconData;
type Rules1 (line 146) | typedef struct Rules1 Rules1;
type CollData (line 149) | typedef struct CollData CollData;
type ECBBones (line 150) | typedef struct ECBBones ECBBones;
type DmgHazard (line 151) | typedef struct DmgHazard DmgHazard;
type CollLineInfo (line 152) | typedef struct CollLineInfo CollLineInfo;
type CollLine (line 153) | typedef struct CollLine CollLine;
type CollVert (line 154) | typedef struct CollVert CollVert;
type CollDataStage (line 155) | typedef struct CollDataStage CollDataStage;
type CollGroupDesc (line 156) | typedef struct CollGroupDesc CollGroupDesc;
type CollGroup (line 157) | typedef struct CollGroup CollGroup;
type HSD_Material (line 160) | typedef struct HSD_Material HSD_Material;
type HSD_Pad (line 161) | typedef struct HSD_Pad HSD_Pad;
type HSD_Pads (line 162) | typedef struct HSD_Pads HSD_Pads;
type HSD_Update (line 163) | typedef struct HSD_Update HSD_Update;
type HSD_VI (line 164) | typedef struct HSD_VI HSD_VI;
type HSD_ObjAllocData (line 165) | typedef struct HSD_ObjAllocData HSD_ObjAllocData;
type MajorScene (line 168) | typedef struct MajorScene MajorScene;
type MinorScene (line 169) | typedef struct MinorScene MinorScene;
type ScDataVS (line 170) | typedef struct ScDataVS ScDataVS;
type ScDataRst (line 171) | typedef struct ScDataRst ScDataRst;
type RstPlayer (line 174) | typedef struct RstPlayer RstPlayer;
type RstInit (line 175) | typedef struct RstInit RstInit;
type Preload (line 178) | typedef struct Preload Preload;
type PreloadChar (line 179) | typedef struct PreloadChar PreloadChar;
type FtVarKirby (line 182) | typedef struct FtVarKirby FtVarKirby;
type PRIM (line 185) | typedef struct PRIM PRIM;
type MEXPlaylist (line 186) | typedef struct MEXPlaylist MEXPlaylist;
type Translation (line 187) | typedef struct Translation Translation;
FILE: MexTK/include/text.h
type TextAllocInfo (line 11) | struct TextAllocInfo
type Text (line 18) | struct Text
FILE: MexTK/include/useful.h
type OSInfo (line 64) | struct OSInfo
type OSCalendarTime (line 136) | struct OSCalendarTime
type CARDStat (line 150) | struct CARDStat
type CARDFileInfo (line 173) | struct CARDFileInfo
type RGB565 (line 183) | struct RGB565
FILE: patch/events/lab/source/lab.c
type CPU_ACTIONS (line 861) | enum CPU_ACTIONS
function x_to_the_n (line 1612) | int x_to_the_n(int x, int n)
function u32 (line 1622) | u32 lz77_compress(u8 *uncompressed_text, u32 uncompressed_size, u8 *comp...
function u32 (line 1672) | u32 lz77_decompress(u8 *compressed_text, u8 *uncompressed_text)
function Lab_ChangePlayerPercent (line 1700) | void Lab_ChangePlayerPercent(GOBJ *menu_gobj, int value)
function Lab_ChangeFrameAdvance (line 1710) | void Lab_ChangeFrameAdvance(GOBJ *menu_gobj, int value)
function Lab_ChangeCPUPercent (line 1722) | void Lab_ChangeCPUPercent(GOBJ *menu_gobj, int value)
function Lab_ChangeCPUIntang (line 1732) | void Lab_ChangeCPUIntang(GOBJ *menu_gobj, int value)
function Lab_ChangeModelDisplay (line 1747) | void Lab_ChangeModelDisplay(GOBJ *menu_gobj, int value)
function Lab_ChangeHitDisplay (line 1769) | void Lab_ChangeHitDisplay(GOBJ *menu_gobj, int value)
function Lab_ChangeEnvCollDisplay (line 1791) | void Lab_ChangeEnvCollDisplay(GOBJ *menu_gobj, int value)
function Lab_ChangeCamMode (line 1796) | void Lab_ChangeCamMode(GOBJ *menu_gobj, int value)
function Lab_ChangeInfoRow (line 1825) | void Lab_ChangeInfoRow(GOBJ *menu_gobj, int value)
function Lab_ChangeInfoPreset (line 1832) | void Lab_ChangeInfoPreset(GOBJ *menu_gobj, int value)
function Lab_ChangeInfoSizePos (line 1894) | void Lab_ChangeInfoSizePos(GOBJ *menu_gobj, int value)
function Lab_ChangeInfoPlayer (line 1899) | void Lab_ChangeInfoPlayer(GOBJ *menu_gobj, int value)
function Lab_ChangeHUD (line 1904) | void Lab_ChangeHUD(GOBJ *menu_gobj, int value)
function Lab_Exit (line 1918) | void Lab_Exit(int value)
function GOBJ (line 1936) | GOBJ *InfoDisplay_Init()
function InfoDisplay_GX (line 2002) | void InfoDisplay_GX(GOBJ *gobj, int pass)
function InfoDisplay_Think (line 2007) | void InfoDisplay_Think(GOBJ *gobj)
function Fighter_GetOpponentDir (line 2369) | float Fighter_GetOpponentDir(FighterData *from, FighterData *to)
function CPUAction_CheckMultipleState (line 2380) | int CPUAction_CheckMultipleState(GOBJ *cpu, int group_kind)
function CPU_IsThrown (line 2467) | int CPU_IsThrown(GOBJ *cpu)
function CPU_IsGrabbed (line 2480) | int CPU_IsGrabbed(GOBJ *cpu)
function LCancel_CPUPerformAction (line 2493) | int LCancel_CPUPerformAction(GOBJ *cpu, int action_id, GOBJ *hmn)
function LCancel_CPUThink (line 2617) | void LCancel_CPUThink(GOBJ *event, GOBJ *hmn, GOBJ *cpu)
function Update_CheckPause (line 3378) | int Update_CheckPause()
function Update_CheckAdvance (line 3419) | int Update_CheckAdvance()
function DIDraw_Init (line 3467) | void DIDraw_Init()
function DIDraw_Update (line 3486) | void DIDraw_Update()
function DIDraw_GX (line 3903) | void DIDraw_GX()
function Update_Camera (line 3939) | void Update_Camera()
function Lab_SelectCustomTDI (line 3990) | void Lab_SelectCustomTDI(GOBJ *menu_gobj)
function CustomTDI_Update (line 4105) | void CustomTDI_Update(GOBJ *gobj)
function CustomTDI_Destroy (line 4205) | void CustomTDI_Destroy(GOBJ *gobj)
function Inputs_GX (line 4235) | void Inputs_GX(GOBJ *gobj, int pass)
function Inputs_Think (line 4245) | void Inputs_Think(GOBJ *gobj)
function Inputs_Init (line 4336) | void Inputs_Init()
function GOBJ (line 4407) | GOBJ *Record_Init()
function Record_CObjThink (line 4515) | void Record_CObjThink(GOBJ *gobj)
function Record_GX (line 4525) | void Record_GX(GOBJ *gobj, int pass)
function Record_Think (line 4634) | void Record_Think(GOBJ *rec_gobj)
function Record_Update (line 4728) | void Record_Update(int ply, RecInputData *input_data, int rec_mode)
function Record_InitState (line 4851) | void Record_InitState(GOBJ *menu_gobj)
function Record_RestoreState (line 4860) | void Record_RestoreState(GOBJ *menu_gobj)
function Record_ChangeHMNSlot (line 4866) | void Record_ChangeHMNSlot(GOBJ *menu_gobj, int value)
function Record_ChangeCPUSlot (line 4890) | void Record_ChangeCPUSlot(GOBJ *menu_gobj, int value)
function Record_ChangeHMNMode (line 4914) | void Record_ChangeHMNMode(GOBJ *menu_gobj, int value)
function Record_ChangeCPUMode (line 4946) | void Record_ChangeCPUMode(GOBJ *menu_gobj, int value)
function Record_GetRandomSlot (line 4979) | int Record_GetRandomSlot(RecInputData **input_data)
function Record_GetCurrFrame (line 5003) | int Record_GetCurrFrame()
function Record_GetEndFrame (line 5007) | int Record_GetEndFrame()
function Record_OnSuccessfulSave (line 5053) | void Record_OnSuccessfulSave()
function Memcard_Wait (line 5087) | void Memcard_Wait()
function Record_MemcardLoad (line 5097) | void Record_MemcardLoad(int slot, int file_no)
function Record_MenuThink (line 5256) | int Record_MenuThink(GOBJ *menu_gobj)
function Record_StartExport (line 5269) | void Record_StartExport(GOBJ *menu_gobj)
function Snap_CObjThink (line 5276) | void Snap_CObjThink(GOBJ *gobj)
function Savestates_Update (line 5295) | void Savestates_Update()
function RowPixelToBlockPixel (line 5351) | int RowPixelToBlockPixel(int pixel_x, int pixel_y, int width, int height)
function ImageScale (line 5369) | void ImageScale(RGB565 *out_img, RGB565 *in_img, int OutWidth, int OutHe...
function Export_Init (line 5391) | void Export_Init(GOBJ *menu_gobj)
function Export_Think (line 5511) | int Export_Think(GOBJ *export_gobj)
function Export_Destroy (line 5537) | void Export_Destroy(GOBJ *export_gobj)
function Export_SelCardInit (line 5572) | void Export_SelCardInit(GOBJ *export_gobj)
function Export_SelCardThink (line 5637) | int Export_SelCardThink(GOBJ *export_gobj)
function Export_SelCardExit (line 5793) | void Export_SelCardExit(GOBJ *export_gobj)
function Export_EnterNameInit (line 5805) | void Export_EnterNameInit(GOBJ *export_gobj)
function Export_EnterNameThink (line 5912) | int Export_EnterNameThink(GOBJ *export_gobj)
function Export_EnterNameExit (line 6123) | void Export_EnterNameExit(GOBJ *export_gobj)
function Export_ConfirmInit (line 6137) | void Export_ConfirmInit(GOBJ *export_gobj)
function Export_ConfirmThink (line 6175) | int Export_ConfirmThink(GOBJ *export_gobj)
function Export_ConfirmExit (line 6317) | void Export_ConfirmExit(GOBJ *export_gobj)
function Export_EnterNameUpdateKeyboard (line 6326) | void Export_EnterNameUpdateKeyboard(GOBJ *export_gobj)
function Export_Process (line 6365) | int Export_Process(GOBJ *export_gobj)
function Export_Compress (line 6501) | int Export_Compress(u8 *dest, u8 *source, u32 size)
function Event_Init (line 6515) | void Event_Init(GOBJ *gobj)
function Event_Update (line 6566) | void Event_Update()
function Event_Think (line 6581) | void Event_Think(GOBJ *event)
FILE: patch/events/lab/source/lab.h
type export_status (line 45) | enum export_status
type export_menuindex (line 52) | enum export_menuindex
type export_popup (line 58) | enum export_popup
type ButtonLookup (line 90) | typedef struct ButtonLookup
type buttons_enum (line 95) | typedef enum buttons_enum
type Arch_ImportData (line 164) | typedef struct Arch_ImportData
type Arch_LabData (line 171) | typedef struct Arch_LabData
type LCancelData (line 181) | typedef struct LCancelData
type InfoDisplayData (line 201) | typedef struct InfoDisplayData
type DIDraw (line 208) | typedef struct DIDraw
type DIDrawCalculate (line 214) | typedef struct DIDrawCalculate
type TDIData (line 222) | typedef struct TDIData
type CPUAction (line 228) | typedef struct CPUAction
type RecInputs (line 242) | typedef struct RecInputs
type RecInputData (line 258) | typedef struct RecInputData
type RecData (line 264) | typedef struct RecData
type RecordingSave (line 276) | typedef struct RecordingSave
type InputData (line 283) | typedef struct InputData
type ExportData (line 289) | typedef struct ExportData
type ExportMenuSettings (line 319) | typedef struct ExportMenuSettings
type ExportHeader (line 328) | typedef struct ExportHeader
type gen_option (line 447) | enum gen_option
type cpu_option (line 463) | enum cpu_option
type sdi_freq (line 486) | enum sdi_freq
type sdi_dir (line 495) | enum sdi_dir
type infdisp_rows (line 526) | enum infdisp_rows
type cpu_state (line 559) | enum cpu_state
type cpu_mash (line 572) | enum cpu_mash
type STICKDIR (line 620) | enum STICKDIR
type ImportMenuStates (line 682) | enum ImportMenuStates
type ImportConfirmKind (line 688) | enum ImportConfirmKind
type FileInfo (line 696) | typedef struct FileInfo
type ImportData (line 702) | typedef struct ImportData
FILE: patch/events/lab/source/lab_css.c
function OnCSSLoad (line 16) | void OnCSSLoad(ArchiveInfo *archive)
function Button_Create (line 62) | void Button_Create()
function Button_Think (line 87) | void Button_Think(GOBJ *button_gobj)
function GOBJ (line 120) | GOBJ *Menu_Create()
function Menu_Destroy (line 178) | void Menu_Destroy(GOBJ *menu_gobj)
function Menu_Think (line 211) | void Menu_Think(GOBJ *menu_gobj)
function Menu_SelCard_Init (line 238) | void Menu_SelCard_Init(GOBJ *menu_gobj)
function Menu_SelCard_Think (line 275) | void Menu_SelCard_Think(GOBJ *menu_gobj)
function Menu_SelCard_Exit (line 394) | void Menu_SelCard_Exit(GOBJ *menu_gobj)
function Menu_SelFile_Init (line 406) | void Menu_SelFile_Init(GOBJ *menu_gobj)
function Menu_SelFile_Think (line 549) | void Menu_SelFile_Think(GOBJ *menu_gobj)
function Menu_SelFile_Exit (line 762) | void Menu_SelFile_Exit(GOBJ *menu_gobj)
function Menu_SelFile_LoadPage (line 802) | int Menu_SelFile_LoadPage(GOBJ *menu_gobj, int page)
function Menu_SelFile_DeleteUnsupported (line 971) | void Menu_SelFile_DeleteUnsupported(GOBJ *menu_gobj)
function Menu_SelFile_DeleteFile (line 1049) | int Menu_SelFile_DeleteFile(GOBJ *menu_gobj, int file_index)
function Menu_SelFile_LoadAsyncThink (line 1099) | void Menu_SelFile_LoadAsyncThink(GOBJ *menu_gobj)
function Menu_Confirm_Init (line 1188) | void Menu_Confirm_Init(GOBJ *menu_gobj, int kind)
function Menu_Confirm_Think (line 1257) | void Menu_Confirm_Think(GOBJ *menu_gobj)
function Menu_Confirm_Exit (line 1527) | void Menu_Confirm_Exit(GOBJ *menu_gobj)
function Memcard_Wait (line 1541) | void Memcard_Wait()
FILE: patch/events/lcancel/source/lcancel.c
function Event_Init (line 76) | void Event_Init(GOBJ *gobj)
function Event_Think (line 100) | void Event_Think(GOBJ *event)
function Event_Exit (line 225) | void Event_Exit()
function LCancel_Init (line 242) | void LCancel_Init(LCancelData *event_data)
function LCancel_Think (line 319) | void LCancel_Think(LCancelData *event_data, FighterData *hmn_data)
function LCancel_HUDCamThink (line 441) | void LCancel_HUDCamThink(GOBJ *gobj)
function Tips_Toggle (line 454) | void Tips_Toggle(GOBJ *menu_gobj, int value)
function Tips_Think (line 462) | void Tips_Think(LCancelData *event_data, FighterData *hmn_data)
function Barrel_Think (line 613) | void Barrel_Think(LCancelData *event_data)
function GOBJ (line 711) | GOBJ *Barrel_Spawn(int pos_kind)
function Barrel_Null (line 820) | void Barrel_Null()
function Barrel_Break (line 824) | void Barrel_Break(GOBJ *barrel_gobj)
function Barrel_OnHurt (line 843) | int Barrel_OnHurt(GOBJ *barrel_gobj)
function Barrel_OnDestroy (line 874) | int Barrel_OnDestroy(GOBJ *barrel_gobj)
function Bezier (line 905) | float Bezier(float time, float start, float end)
FILE: patch/events/lcancel/source/lcancel.h
type LCancelData (line 4) | typedef struct LCancelData LCancelData;
type LCancelAssets (line 5) | typedef struct LCancelAssets LCancelAssets;
type LCancelData (line 7) | struct LCancelData
type LCancelAssets (line 45) | struct LCancelAssets
FILE: patch/events/ledgedash/source/ledgedash.c
function Event_Init (line 106) | void Event_Init(GOBJ *gobj)
function Event_Think (line 138) | void Event_Think(GOBJ *event)
function Event_Exit (line 159) | void Event_Exit()
function Ledgedash_HUDInit (line 176) | void Ledgedash_HUDInit(LedgedashData *event_data)
function Ledgedash_HUDThink (line 276) | void Ledgedash_HUDThink(LedgedashData *event_data, FighterData *hmn_data)
function Ledgedash_HUDCamThink (line 445) | void Ledgedash_HUDCamThink(GOBJ *gobj)
function Ledgedash_ResetThink (line 456) | void Ledgedash_ResetThink(LedgedashData *event_data, GOBJ *hmn)
function Ledgedash_InitVariables (line 504) | void Ledgedash_InitVariables(LedgedashData *event_data)
function Ledgedash_ToggleStartPosition (line 525) | void Ledgedash_ToggleStartPosition(GOBJ *menu_gobj, int value)
function Ledgedash_ToggleAutoReset (line 536) | void Ledgedash_ToggleAutoReset(GOBJ *menu_gobj, int value)
function GOBJ (line 552) | GOBJ *Ledgedash_HitLogInit()
function Ledgedash_HitLogThink (line 565) | void Ledgedash_HitLogThink(LedgedashData *event_data, GOBJ *hmn)
function Ledgedash_HitLogGX (line 635) | void Ledgedash_HitLogGX(GOBJ *gobj, int pass)
function Ledgedash_FtInit (line 667) | void Ledgedash_FtInit(LedgedashData *event_data)
function Ledgedash_ChangeLedgeThink (line 698) | void Ledgedash_ChangeLedgeThink(LedgedashData *event_data, GOBJ *hmn)
function Ledge_Find (line 732) | int Ledge_Find(int search_dir, float xpos_start, float *ledge_dir)
function Fighter_PlaceOnLedge (line 888) | void Fighter_PlaceOnLedge(LedgedashData *event_data, GOBJ *hmn, int line...
function Fighter_UpdatePosition (line 1057) | void Fighter_UpdatePosition(GOBJ *fighter)
function Fighter_UpdateCamera (line 1086) | void Fighter_UpdateCamera(GOBJ *fighter)
function RebirthWait_Phys (line 1104) | void RebirthWait_Phys(GOBJ *fighter)
function RebirthWait_IASA (line 1114) | int RebirthWait_IASA(GOBJ *fighter)
function Fighter_CheckFall (line 1139) | int Fighter_CheckFall(FighterData *hmn_data)
function Tips_Toggle (line 1157) | void Tips_Toggle(GOBJ *menu_gobj, int value)
function Tips_Think (line 1165) | void Tips_Think(LedgedashData *event_data, FighterData *hmn_data)
FILE: patch/events/ledgedash/source/ledgedash.h
type LedgedashData (line 4) | typedef struct LedgedashData LedgedashData;
type LedgedashAssets (line 5) | typedef struct LedgedashAssets LedgedashAssets;
type LdshHitlogData (line 6) | typedef struct LdshHitlogData LdshHitlogData;
type LdshHitboxData (line 7) | typedef struct LdshHitboxData LdshHitboxData;
type LedgedashData (line 14) | struct LedgedashData
type LedgedashAssets (line 55) | struct LedgedashAssets
type LdshHitboxData (line 61) | struct LdshHitboxData
type LdshHitlogData (line 69) | struct LdshHitlogData
type LDSH_ACTION (line 75) | enum LDSH_ACTION
FILE: patch/events/wavedash/source/wavedash.c
function Event_Init (line 76) | void Event_Init(GOBJ *gobj)
function Event_Think (line 100) | void Event_Think(GOBJ *event)
function Event_Exit (line 113) | void Event_Exit()
function Wavedash_Init (line 130) | void Wavedash_Init(WavedashData *event_data)
function Wavedash_Think (line 193) | void Wavedash_Think(WavedashData *event_data, FighterData *hmn_data)
function Wavedash_HUDCamThink (line 464) | void Wavedash_HUDCamThink(GOBJ *gobj)
function Bezier (line 475) | float Bezier(float time, float start, float end)
function Target_Init (line 482) | void Target_Init(WavedashData *event_data, FighterData *hmn_data)
function Target_Manager (line 521) | void Target_Manager(WavedashData *event_data, FighterData *hmn_data)
function GOBJ (line 576) | GOBJ *Target_Spawn(WavedashData *event_data, FighterData *hmn_data)
function Target_Think (line 669) | void Target_Think(GOBJ *target_gobj)
function Target_ChangeState (line 762) | void Target_ChangeState(GOBJ *target_gobj, int state)
function Target_GetWdashDistance (line 777) | float Target_GetWdashDistance(FighterData *hmn_data, float mag)
function Target_CheckArea (line 808) | int Target_CheckArea(WavedashData *event_data, int line, Vec3 *pos, floa...
FILE: patch/events/wavedash/source/wavedash.h
type WavedashData (line 23) | typedef struct WavedashData WavedashData;
type WavedashAssets (line 24) | typedef struct WavedashAssets WavedashAssets;
type TargetData (line 25) | typedef struct TargetData TargetData;
type WavedashData (line 27) | struct WavedashData
type WavedashAssets (line 72) | struct WavedashAssets
type TargetState (line 81) | enum TargetState
type TargetData (line 87) | struct TargetData
FILE: patch/tmdata/source/events.c
function Event_Init (line 4) | void Event_Init(GOBJ *gobj)
function EventInit (line 1204) | void EventInit(int page, int eventID, MatchInit *matchData)
function EventLoad (line 1369) | void EventLoad()
function EventUpdate (line 1437) | void EventUpdate()
function TM_ConsoleThink (line 1473) | void TM_ConsoleThink(GOBJ *gobj)
function TM_CreateConsole (line 1498) | void TM_CreateConsole()
function OnFileLoad (line 1525) | void OnFileLoad(ArchiveInfo *archive) // this function is run right afte...
function OnSceneChange (line 1537) | void OnSceneChange()
function OnBoot (line 1550) | void OnBoot()
function OnStartMelee (line 1556) | void OnStartMelee()
function Savestate_Save (line 1569) | int Savestate_Save(Savestate *savestate)
function Savestate_Load (line 1772) | int Savestate_Load(Savestate *savestate)
function Update_Savestates (line 2221) | void Update_Savestates()
function GOBJToID (line 2256) | int GOBJToID(GOBJ *gobj)
function FtDataToID (line 2273) | int FtDataToID(FighterData *fighter_data)
function BoneToID (line 2289) | int BoneToID(FighterData *fighter_data, JOBJ *bone)
function GOBJ (line 2318) | GOBJ *IDToGOBJ(int id)
function FighterData (line 2333) | FighterData *IDToFtData(int id)
function JOBJ (line 2349) | JOBJ *IDToBone(FighterData *fighter_data, int id)
function Event_IncTimer (line 2361) | void Event_IncTimer(GOBJ *gobj)
function TM_CreateWatermark (line 2366) | void TM_CreateWatermark()
function Hazards_Disable (line 2400) | void Hazards_Disable()
function Message_Init (line 2474) | void Message_Init()
function GOBJ (line 2505) | GOBJ *Message_Display(int msg_kind, int queue_num, int msg_color, char *...
function Message_Manager (line 2610) | void Message_Manager(GOBJ *mngr_gobj)
function Message_Destroy (line 2776) | void Message_Destroy(GOBJ **msg_queue, int msg_num)
function Message_Add (line 2809) | void Message_Add(GOBJ *msg_gobj, int queue_num)
function Message_CObjThink (line 2877) | void Message_CObjThink(GOBJ *gobj)
function BezierBlend (line 2886) | float BezierBlend(float t)
function Tip_Init (line 2892) | void Tip_Init()
function Tip_Think (line 2903) | void Tip_Think(GOBJ *gobj)
function Tip_Display (line 2971) | int Tip_Display(int lifetime, char *fmt, ...)
function Tip_Destroy (line 3095) | void Tip_Destroy()
function GOBJ (line 3117) | GOBJ *EventMenu_Init(EventDesc *event_desc, EventMenu *start_menu)
function EventMenu_Update (line 3156) | void EventMenu_Update(GOBJ *gobj)
function EventMenu_MenuGX (line 3283) | void EventMenu_MenuGX(GOBJ *gobj, int pass)
function EventMenu_TextGX (line 3290) | void EventMenu_TextGX(GOBJ *gobj, int pass)
function EventMenu_MenuThink (line 3298) | void EventMenu_MenuThink(GOBJ *gobj, EventMenu *currMenu)
function EventMenu_PopupThink (line 3629) | void EventMenu_PopupThink(GOBJ *gobj, EventMenu *currMenu)
function EventMenu_CreateModel (line 3776) | void EventMenu_CreateModel(GOBJ *gobj, EventMenu *menu)
function EventMenu_CreateText (line 3911) | void EventMenu_CreateText(GOBJ *gobj, EventMenu *menu)
function EventMenu_UpdateText (line 4031) | void EventMenu_UpdateText(GOBJ *gobj, EventMenu *menu)
function EventMenu_DestroyMenu (line 4247) | void EventMenu_DestroyMenu(GOBJ *gobj)
function EventMenu_CreatePopupModel (line 4291) | void EventMenu_CreatePopupModel(GOBJ *gobj, EventMenu *menu)
function EventMenu_CreatePopupText (line 4372) | void EventMenu_CreatePopupText(GOBJ *gobj, EventMenu *menu)
function EventMenu_UpdatePopupText (line 4414) | void EventMenu_UpdatePopupText(GOBJ *gobj, EventOption *option)
function EventMenu_DestroyPopup (line 4460) | void EventMenu_DestroyPopup(GOBJ *gobj)
function EventDesc (line 4481) | EventDesc *GetEventDesc(int page, int event)
function GetPageEventNum (line 4517) | int GetPageEventNum(int page)
function GetPageNum (line 4534) | int GetPageNum()
function u8 (line 4539) | u8 GetIsChooseCPU(int page, int event)
function u8 (line 4544) | u8 GetIsSelectStage(int page, int event)
function s8 (line 4549) | s8 GetFighter(int page, int event)
function s8 (line 4554) | s8 GetCPUFighter(int page, int event)
function s16 (line 4559) | s16 GetStage(int page, int event)
FILE: patch/tmdata/source/events.h
type evMenu (line 31) | typedef struct evMenu
type EventMenu (line 46) | typedef struct EventMenu EventMenu;
type EventMatchData (line 47) | typedef struct EventMatchData
type EventDesc (line 75) | typedef struct EventDesc
type EventPage (line 91) | typedef struct EventPage
type EventOption (line 97) | typedef struct EventOption
type EventMenu (line 110) | struct EventMenu
type MenuData (line 121) | typedef struct MenuData
type FtStateData (line 147) | typedef struct FtStateData
type FtState (line 635) | typedef struct FtState
type Savestate (line 641) | typedef struct Savestate
type evFunction (line 648) | typedef struct evFunction
type EventVars (line 655) | typedef struct EventVars
type MsgState (line 842) | enum MsgState
type MsgArea (line 848) | enum MsgArea
type MsgData (line 858) | typedef struct MsgData
type MsgMngrData (line 869) | typedef struct MsgMngrData
type MsgColors (line 879) | enum MsgColors
type TipMgr (line 916) | typedef struct TipMgr
Condensed preview — 475 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,715K chars).
[
{
"path": ".gitattributes",
"chars": 378,
"preview": "# Auto detect text files and perform LF normalization\n* text=auto\n\n# Custom for Visual Studio\n*.cs diff=csharp\n\n# St"
},
{
"path": ".gitignore",
"chars": 579,
"preview": "# Windows thumbnail cache files\nThumbs.db\nehthumbs.db\nehthumbs_vista.db\n\n# Folder config file\nDesktop.ini\n\n# Recycle Bin"
},
{
"path": "ASM/Additional Codes/Allow Staling in Develop Mode.asm",
"chars": 35,
"preview": "#To be inserted at 80089250\n\nb 0x8\n"
},
{
"path": "ASM/Additional Codes/Better Camera/C-Stick Pans Camera.asm",
"chars": 1321,
"preview": "#To be inserted at 8002cb30\n.include \"../../Globals.s\"\n\n.set Player,5\n.set FloatPointer,6\n\n#Float regs\n.set Deadzone,5\n."
},
{
"path": "ASM/Additional Codes/Better Camera/CStickPanOffscreen/Bottom.asm",
"chars": 32,
"preview": "#To be inserted at 8002c6e4\nnop\n"
},
{
"path": "ASM/Additional Codes/Better Camera/CStickPanOffscreen/Left.asm",
"chars": 32,
"preview": "#To be inserted at 8002c6bc\nnop\n"
},
{
"path": "ASM/Additional Codes/Better Camera/CStickPanOffscreen/Right.asm",
"chars": 32,
"preview": "#To be inserted at 8002c6a8\nnop\n"
},
{
"path": "ASM/Additional Codes/Better Camera/CStickPanOffscreen/Top.asm",
"chars": 32,
"preview": "#To be inserted at 8002c6d0\nnop\n"
},
{
"path": "ASM/Additional Codes/Better Camera/SnapToOffscreenPlayers/Always Onscreen.asm",
"chars": 777,
"preview": "#To be inserted at 8002cf34\n.include \"../../../Globals.s\"\n\n.set REG_Pauser,31\n.set REG_Count,30\n\nbackup\n\n#Get player por"
},
{
"path": "ASM/Additional Codes/Better Camera/SnapToOffscreenPlayers/Snap.asm",
"chars": 804,
"preview": "#To be inserted at 8002c5f0\n.include \"../../../Globals.s\"\n\n\n.set REG_Pauser,31\n.set REG_Count,30\n\nbackup\n\n#Get player po"
},
{
"path": "ASM/Additional Codes/Better Camera/Unrestricted Camera.asm",
"chars": 424,
"preview": "#To be inserted at 8002f5bc\nloc_0x0:\n lis r3, 0x8048\n lbz r3, -25240(r3)\n rlwinm. r3, r3, 0, 30, 30\n beq- loc_0x48\n "
},
{
"path": "ASM/Additional Codes/Boot to CSS/Boot to Main Menu Or CSS.s",
"chars": 67,
"preview": "#To be inserted at 801BFA20\n.include \"../../Globals.s\"\n\n li r3,2\n"
},
{
"path": "ASM/Additional Codes/Boot to Event Mode/Boot to Main Menu Or CSS.asm",
"chars": 566,
"preview": "#To be inserted at 801BFA20\n.include \"../../Globals.s\"\n\n.set LoopCount,12\n.set InputStruct,11\n\n#Check if any player is p"
},
{
"path": "ASM/Additional Codes/Boot to Event Mode/Main Menu Starts at Event Mode.asm",
"chars": 246,
"preview": "#To be inserted at 801b02dc\n.include \"../../Globals.s\"\n\n.set entity,31\n.set player,31\n.set playerdata,31\n\n#Spoof current"
},
{
"path": "ASM/Additional Codes/CSS KO Star Codes/Calculate KO Stars Upon Exiting Dairantou.asm",
"chars": 647,
"preview": "#To be inserted at 8016ebac\n.include \"../../Globals.s\"\n\n#Check if VS Mode\n load r3,SceneController\n lbz r3,Scene.Curre"
},
{
"path": "ASM/Additional Codes/CSS KO Star Codes/Disable KO Star Deletion When Leaving CSS.asm",
"chars": 60,
"preview": "#To be inserted at 801a5600\n.include \"../../Globals.s\"\n\nnop\n"
},
{
"path": "ASM/Additional Codes/Collision Link Draw Order Fix [Punkline]/New Draw Location.asm",
"chars": 372,
"preview": "#To be inserted at 80030288\n.include \"../../Globals.s\"\n\nbranchl r12,0x80030A78\ncmpwi r3, 0\nbeq- _return\n# checks for col"
},
{
"path": "ASM/Additional Codes/Collision Link Draw Order Fix [Punkline]/Remove Original Draw.asm",
"chars": 60,
"preview": "#To be inserted at 8005a2ec\n.include \"../../Globals.s\"\n\nnop\n"
},
{
"path": "ASM/Additional Codes/DEBUGLOG.s",
"chars": 2048,
"preview": "#To be inserted at 801a4cb4\n.include \"../Globals.s\"\n\n.set GObj_Create,0x803901f0\n.set GObj_AddUserData,0x80390b68\n.set G"
},
{
"path": "ASM/Additional Codes/DPad Down to Random Stage.s",
"chars": 373,
"preview": "#To be inserted at 8026325c\n.include \"../Globals.s\"\n\n#Get Random Stage Byte\nload r4,0x8045BF17\n\n#Check for DPad Down\n r"
},
{
"path": "ASM/Additional Codes/Debug Mode Codes/Debug Language is English by Default.asm",
"chars": 44,
"preview": "#To be inserted at 803fa258\n.long 0x00000001"
},
{
"path": "ASM/Additional Codes/Debug Mode Codes/Exiting Debug Goes to Main Menu.asm",
"chars": 37,
"preview": "#To be inserted at 801B0A14\nli\tr3, 1\n"
},
{
"path": "ASM/Additional Codes/Debug Mode Codes/Tournament Mode Goes to Debug.asm",
"chars": 36,
"preview": "#To be inserted at 8022D638\nli\tr0, 6"
},
{
"path": "ASM/Additional Codes/Default Tournament Settings/4 Stocks.asm",
"chars": 44,
"preview": "#To be inserted at 803D4A4C\n.long 0x04000A00"
},
{
"path": "ASM/Additional Codes/Default Tournament Settings/8 Minutes.asm",
"chars": 44,
"preview": "#To be inserted at 803D4A50\n.long 0x08010100"
},
{
"path": "ASM/Additional Codes/Default Tournament Settings/No Items.asm",
"chars": 44,
"preview": "#To be inserted at 803D4A60\n.long 0xFF000000"
},
{
"path": "ASM/Additional Codes/Default Tournament Settings/Stock Mode.asm",
"chars": 45,
"preview": "#To be inserted at 803D4A48\n.long 0x00340000\n"
},
{
"path": "ASM/Additional Codes/Default Tournament Settings/Tournament Stages.asm",
"chars": 44,
"preview": "#To be inserted at 803D4A78\n.long 0xE70000B0"
},
{
"path": "ASM/Additional Codes/Delete Bootup OSReports.asm",
"chars": 143,
"preview": "#To be inserted at 80160154\n.include \"../Globals.s\"\n\n# Remove all previous OSReports\n load r3,0x804cf7e8\n li r4,0\n s"
},
{
"path": "ASM/Additional Codes/Disable CSS Anim Loop.s",
"chars": 35,
"preview": "#To be inserted at 80263384\n\nb 0x10"
},
{
"path": "ASM/Additional Codes/Disable FoD Reflection.asm",
"chars": 439,
"preview": "#To be inserted at 8008114c\n.include \"../Globals.s\"\n\n.set REG_ReflectCallback,31\n\n#Save reflection callback\n mr r3,r0\n"
},
{
"path": "ASM/Additional Codes/Disable FoD in Doubles.asm",
"chars": 1162,
"preview": "#To be inserted at 80266ce0\n.include \"../Globals.s\"\n\n#######################################\n## Runs During CSS -> SSS T"
},
{
"path": "ASM/Additional Codes/Disable Item Spawn in Develop Mode.asm",
"chars": 59,
"preview": "#To be inserted at 80226530\n.include \"../Globals.s\"\n\n nop\n"
},
{
"path": "ASM/Additional Codes/Disable Item Spawn in Develop Mode.s",
"chars": 59,
"preview": "#To be inserted at 80226530\n.include \"../Globals.s\"\n\n nop\n"
},
{
"path": "ASM/Additional Codes/Disable Rumble on Unplug.asm",
"chars": 332,
"preview": "#To be inserted at 803775a4\n.include \"../Globals.s\"\n\n#Check if unplugged\n lbz\tr3, 0x000A (r25) #current read\n extsb "
},
{
"path": "ASM/Additional Codes/Disable Special Records/Disable Special Messages.asm",
"chars": 32,
"preview": "#To be inserted at 80173eec\nblr\n"
},
{
"path": "ASM/Additional Codes/Disable Special Records/Disable Trophy Messages.asm",
"chars": 32,
"preview": "#To be inserted at 80172898\nblr\n"
},
{
"path": "ASM/Additional Codes/Display Animation Name for Special Moves in Develop Mode/Display Animation Name for Special Moves in Develop Mode.asm",
"chars": 899,
"preview": "#To be inserted at 80226acc\n.include \"../../Globals.s\"\n\n.set entity,31\n.set playerdata,28\n.set player,29\n\n#Get Animation"
},
{
"path": "ASM/Additional Codes/Display Ungrabbable Hurtboxes/Main.asm",
"chars": 287,
"preview": "#To be inserted at 8000a284\n.include \"../../Globals.s\"\n\n#Check if vuln\n cmpwi r6,0\n bne Exit\n#Check if this is an ungr"
},
{
"path": "ASM/Additional Codes/Enable 1P in VS Mode No Time.asm",
"chars": 481,
"preview": "#To be inserted at 80263064\n.include \"../Globals.s\"\n\n.set REG_ReadyPlayers,31\n\nbackup\n\n#Backup players\n mr REG_ReadyP"
},
{
"path": "ASM/Additional Codes/Enable C Stick Always/Enable CStick for CPU in Debug.asm",
"chars": 31,
"preview": "#To be inserted at 8006ae00\nnop"
},
{
"path": "ASM/Additional Codes/Enable C Stick Always/Rotate Camera with Dpad Down and C Stick - Initiate.asm",
"chars": 268,
"preview": "#To be inserted at 802274f0\n.include \"../../Globals.s\"\n\n#Get Inputs\n load r4,0x804c1fac\n mulli r3,r30,68\n add r3,r3,"
},
{
"path": "ASM/Additional Codes/Enable C Stick Always/Rotate Camera with Dpad Down and C Stick.asm",
"chars": 250,
"preview": "#To be inserted at 80227b70\n.include \"../../Globals.s\"\n\n#Get Inputs\n load r4,0x804c1fac\n add r4,r4,r5\n\n#Check for dpa"
},
{
"path": "ASM/Additional Codes/Enable C Stick Always/Single Player Always Returns False.asm",
"chars": 32,
"preview": "#To be inserted at 8016B480\nnop\n"
},
{
"path": "ASM/Additional Codes/Enable C Stick Always/Spoof Debug Level as 0 for Human C Stick Inputs.asm",
"chars": 36,
"preview": "#To be inserted at 8006AE90\nli\tr0, 0"
},
{
"path": "ASM/Additional Codes/Faster CSS Load.asm",
"chars": 36,
"preview": "#To be inserted at 802641B0\nli\tr0, 1"
},
{
"path": "ASM/Additional Codes/Frame Advance Audio.s",
"chars": 333,
"preview": "#To be inserted at 80359750\n.include \"../Globals.s\"\n\n load r5,0x80479d48\n\n# If game unpaused, play sound\n lbz r3,0x20("
},
{
"path": "ASM/Additional Codes/GX Draw/Main.s",
"chars": 34643,
"preview": "#To be inserted at 80080e40\n.include \"../../Globals.s\"\n\n.set REG_PlayerData,30\n.set REG_Interrupt,28\n\nbackup\n\n#check f"
},
{
"path": "ASM/Additional Codes/Game Modes/All Star Test/Disable Invisible Melee.s",
"chars": 10078,
"preview": "#To be inserted at 801ba5d0\n.include \"../../../Globals.s\"\n\n.set REG_MinorData,31\n.set REG_IronManData,30\n.set REG_Mat"
},
{
"path": "ASM/Additional Codes/Game Modes/All Star Test/Initialize Lineups.s",
"chars": 3049,
"preview": "#To be inserted at 801ba544\n.include \"../../../Globals.s\"\n\n.set REG_MinorData,31\n.set REG_IronManData,30\n.set REG_Mat"
},
{
"path": "ASM/Additional Codes/Game Modes/Chess Melee.asm",
"chars": 5814,
"preview": "#To be inserted at 801b8c74\n.include \"../../Globals.s\"\n\n#Store Pointer to onStartMelee function\n lwz\tr4, -0x77C0 (r13)\n"
},
{
"path": "ASM/Additional Codes/Game Modes/Chess Melee.s",
"chars": 5814,
"preview": "#To be inserted at 801b8c74\n.include \"../../Globals.s\"\n\n#Store Pointer to onStartMelee function\n lwz\tr4, -0x77C0 (r13)\n"
},
{
"path": "ASM/Additional Codes/Game Modes/Iron Man/Disable Invisible Melee.asm",
"chars": 7930,
"preview": "#To be inserted at 801ba3d4\n.include \"../../../Globals.s\"\n\n.set REG_MinorData,31\n.set REG_IronManData,30\n.set REG_Mat"
},
{
"path": "ASM/Additional Codes/Game Modes/Iron Man/Initialize Lineups.asm",
"chars": 3071,
"preview": "#To be inserted at 801ba344\n.include \"../../../Globals.s\"\n\n.set REG_MinorData,31\n.set REG_IronManData,30\n.set REG_Mat"
},
{
"path": "ASM/Additional Codes/Game Modes/Iron Man/Load Next Match.asm",
"chars": 834,
"preview": "#To be inserted at 801ba410\n.include \"../../../Globals.s\"\n\n.set REG_MatchData,31\n.set REG_IronManData,30\n.set IronMan"
},
{
"path": "ASM/Additional Codes/Game Modes/Rotations Melee.asm",
"chars": 8339,
"preview": "#To be inserted at 801b9090\n.include \"../../Globals.s\"\n\n#Store Pointer to onStartMelee function\n lwz\tr4, -0x77C0 (r13)\n"
},
{
"path": "ASM/Additional Codes/Game Modes/Rotations Melee.s",
"chars": 8339,
"preview": "#To be inserted at 801b9090\n.include \"../../Globals.s\"\n\n#Store Pointer to onStartMelee function\n lwz\tr4, -0x77C0 (r13)\n"
},
{
"path": "ASM/Additional Codes/Game Modes/Tag Melee.asm",
"chars": 10750,
"preview": "#To be inserted at 801b8e80\n.include \"../../Globals.s\"\n\n#Store Pointer to onStartMelee function\n lwz\tr4, -0x77C0 (r13)\n"
},
{
"path": "ASM/Additional Codes/Game Modes/Tag Melee.s",
"chars": 10750,
"preview": "#To be inserted at 801b8e80\n.include \"../../Globals.s\"\n\n#Store Pointer to onStartMelee function\n lwz\tr4, -0x77C0 (r13)\n"
},
{
"path": "ASM/Additional Codes/Hide Nametag When Invisible.asm",
"chars": 601,
"preview": "#To be inserted at 802fccd8\n.include \"../Globals.s\"\n\n#Check if Doubles\n load r3,0x8046b6a0\n lbz r3,0x24D0(r3)\n cmpwi "
},
{
"path": "ASM/Additional Codes/Hide Player GFX When Hitboxes Enabled/Hide GFX When Hitboxes Enabled.asm",
"chars": 569,
"preview": "#To be inserted at 8005FE30\n.include \"../../Globals.s\"\n\n#Check if a GObj was sent as an arg\n cmpwi r4,0\n beq Original\n"
},
{
"path": "ASM/Additional Codes/Hide Player GFX When Hitboxes Enabled/Hide OnHit GFX When Hitboxes Enabled 2.asm",
"chars": 239,
"preview": "#To be inserted at 8007a430\n.include \"../../Globals.s\"\n\n#Get player's hitbox visibility flag\n lwz\tr12, 0x002C (r30)\n l"
},
{
"path": "ASM/Additional Codes/Hide Player GFX When Hitboxes Enabled/Hide OnHit GFX When Hitboxes Enabled.asm",
"chars": 210,
"preview": "#To be inserted at 8007a180\n.include \"../../Globals.s\"\n\n#Get player's hitbox visibility flag\n lbz r0,0x21FC(r6)\n rlwin"
},
{
"path": "ASM/Additional Codes/Hitbox Color Changes Based On Damage.asm",
"chars": 2233,
"preview": "#To be inserted at 80009fa4\n.macro branchl reg, address\nlis \\reg, \\address @h\nori \\reg,\\reg,\\address @l\nmtctr \\reg\nbctrl"
},
{
"path": "ASM/Additional Codes/Hold A+B for Salty Runback + Hold A+X for Random Stage + Skip Result Screen.asm",
"chars": 1193,
"preview": "#To be inserted at 801a5b14\n.include \"../Globals.s\"\n\n.set REG_LoopCount,29\n\n#Init loop\n li REG_LoopCount,0\nLoop:\n#Get "
},
{
"path": "ASM/Additional Codes/Hold Z for Rapid Frame Advance/New Inputs Don't Reset Rapid Timer.s",
"chars": 228,
"preview": "#To be inserted at 80377944\n.include \"../../Globals.s\"\n\n#Check if nothing is pressed\n lwz\tr0, 0x0000 (r26)\n cmpwi r0,0"
},
{
"path": "ASM/Additional Codes/Hold Z for Rapid Frame Advance/P1 - Check Rapid Fire Input.asm",
"chars": 48,
"preview": "#To be inserted at 8016bbd4\nlwz\tr0, 0x000C (r4)\n"
},
{
"path": "ASM/Additional Codes/Hold Z for Rapid Frame Advance/P2 - Check Rapid Fire Input.asm",
"chars": 48,
"preview": "#To be inserted at 8016bc00\nlwz\tr0, 0x000C (r4)\n"
},
{
"path": "ASM/Additional Codes/Hold Z for Rapid Frame Advance/P3 - Check Rapid Fire Input.asm",
"chars": 48,
"preview": "#To be inserted at 8016bc2c\nlwz\tr0, 0x000C (r4)\n"
},
{
"path": "ASM/Additional Codes/Hold Z for Rapid Frame Advance/P4 - Check Rapid Fire Input.asm",
"chars": 48,
"preview": "#To be inserted at 8016bc58\nlwz\tr0, 0x000C (r4)\n"
},
{
"path": "ASM/Additional Codes/Idle Screen/Main.asm",
"chars": 3342,
"preview": "#To be inserted at 80302788\n.include \"../../Globals.s\"\n\n.set IdleThreshold, (3*60) * 60\n\n.set REG_DevelopText,31\n.set "
},
{
"path": "ASM/Additional Codes/Initialize Stage Data.asm",
"chars": 135,
"preview": "#To be inserted at 801c154c\n.include \"../Globals.s\"\n\n#Initialize data\n li r4,516\n branchl r12,ZeroAreaLength\n\nExit:\n "
},
{
"path": "ASM/Additional Codes/Kill Zoom/Main.s",
"chars": 27460,
"preview": "#To be inserted at 8016e5a8\n.include \"../../Globals.s\"\n\n\nCreateProc:\n.set REG_Data,31\n.set REG_GObj,30\n\nbackup\n\n#Creat"
},
{
"path": "ASM/Additional Codes/Kill Zoom/Rumble During MH Zoom.s",
"chars": 344,
"preview": "#To be inserted at 8002e6e0\n.include \"../../Globals.s\"\n\nsubi sp,sp,0x30\n\n#Get some camera data\n addi r3,sp,0x1C\n loa"
},
{
"path": "ASM/Additional Codes/L+R+A Returns to CSS During SSS.asm",
"chars": 131,
"preview": "#To be inserted at 8025B8BC\n.include \"../Globals.s\"\n\n#Load first minor of current major\n load r3,SceneController\n lbz "
},
{
"path": "ASM/Additional Codes/Lag Reduction Prompt/Main.asm",
"chars": 10740,
"preview": "#To be inserted at 801bf930\n.include \"../../Globals.s\"\n\n#Parameters\n.set PromptSceneID,8 #0\n.set ExitSceneID,40\n.set "
},
{
"path": "ASM/Additional Codes/Last Unplug Closes All CSS Doors.asm",
"chars": 748,
"preview": "#To be inserted at 802605e4\n.include \"../Globals.s\"\n\nbackup\n\n#Check if all controllers are unplugged\n load r3,HSD_Pad+"
},
{
"path": "ASM/Additional Codes/Longer Nametags/8 Letter Tags/8Characters1.asm",
"chars": 72,
"preview": "#To be inserted at 8023c710\n.include \"../../../Globals.s\"\n\ncmplwi r3, 7\n"
},
{
"path": "ASM/Additional Codes/Longer Nametags/8 Letter Tags/8Characters2.asm",
"chars": 72,
"preview": "#To be inserted at 8023c320\n.include \"../../../Globals.s\"\n\ncmplwi r3, 7\n"
},
{
"path": "ASM/Additional Codes/Longer Nametags/8 Letter Tags/8Characters3.asm",
"chars": 72,
"preview": "#To be inserted at 8023c6c4\n.include \"../../../Globals.s\"\n\ncmplwi r3, 7\n"
},
{
"path": "ASM/Additional Codes/Longer Nametags/8 Letter Tags/8Characters4.asm",
"chars": 74,
"preview": "#To be inserted at 8023cf9c\n.include \"../../../Globals.s\"\n\ncmpwi r27, 0x8\n"
},
{
"path": "ASM/Additional Codes/Longer Nametags/8 Letter Tags/Adjust Cursor Position.asm",
"chars": 176,
"preview": "#To be inserted at 8023E0A4\n.include \"../../../Globals.s\"\n\n fsubs f0, f0, f2\n bl Floats\n mflr r4\n lfs f1, 0(r4)\n "
},
{
"path": "ASM/Additional Codes/Longer Nametags/8 Letter Tags/Character Spacing.asm",
"chars": 63,
"preview": "#To be inserted at 8023cf74\n.include \"../../../Globals.s\"\n\nnop\n"
},
{
"path": "ASM/Additional Codes/Longer Nametags/8 Letter Tags/Copy 8 Characters1.asm",
"chars": 391,
"preview": "#To be inserted at 8023cb08\n.include \"../../../Globals.s\"\n\n li r10,0\n mr r9,r6\n b GetTag_Loop\nGetTag_IncLoop:\n stb"
},
{
"path": "ASM/Additional Codes/Longer Nametags/8 Letter Tags/Copy 8 Characters2.asm",
"chars": 676,
"preview": "#To be inserted at 8023c02c\n.include \"../../../Globals.s\"\n\n.set REG_Source,4\n.set REG_Dest,7\n.set REG_CharCount,8\n.se"
},
{
"path": "ASM/Additional Codes/Longer Nametags/8 Letter Tags/Disable Tag Rumble - Ignore Tag Rumble.asm",
"chars": 63,
"preview": "#To be inserted at 80167810\n.include \"../../../Globals.s\"\n\nnop\n"
},
{
"path": "ASM/Additional Codes/Longer Nametags/8 Letter Tags/Disable Tag Rumble - Init.asm",
"chars": 63,
"preview": "#To be inserted at 8023c12c\n.include \"../../../Globals.s\"\n\nnop\n"
},
{
"path": "ASM/Additional Codes/Longer Nametags/8 Letter Tags/Disable Tag Rumble - RumbleLoad.asm",
"chars": 68,
"preview": "#To be inserted at 80248c8c\n.include \"../../../Globals.s\"\n\nli r3,0\n"
},
{
"path": "ASM/Additional Codes/Longer Nametags/8 Letter Tags/Disable Tag Rumble - RumbleThink.asm",
"chars": 68,
"preview": "#To be inserted at 802477f8\n.include \"../../../Globals.s\"\n\nli r3,0\n"
},
{
"path": "ASM/Additional Codes/Longer Nametags/8 Letter Tags/ZeroNametagText.asm",
"chars": 189,
"preview": "#To be inserted at 8023e9e4\n.include \"../../../Globals.s\"\n\n li r3,0\n subi r4,r31,3\n li r5,0\nLoop:\n stbu r3,0x3(r"
},
{
"path": "ASM/Additional Codes/Longer Nametags/Scale Nametag BG/Main.asm",
"chars": 840,
"preview": "#To be inserted at 802fcfc8\n.include \"../../../Globals.s\"\n\n#Original\n stfs\tf0, 0x002C (r28)\n\n#Check if HMN\n mr r3,r27"
},
{
"path": "ASM/Additional Codes/Misc Hitbox Visualizer/Always Draw TopN For Items.asm",
"chars": 1095,
"preview": "#To be inserted at 800593b0\n.include \"../../Globals.s\"\n\nbackup\n\nlwz r31,0x2C(r28)\n\n#Draw TopN\n lwz\tr10, -0x7920 (rtoc)\n"
},
{
"path": "ASM/Additional Codes/Misc Hitbox Visualizer/Display Chain ECBs - GObj 7.asm",
"chars": 1717,
"preview": "#To be inserted at 800593dc\n.include \"../../Globals.s\"\n\n.set REG_CurrentGObj,31\n.set REG_GX,30\n\nbackup\n\n lis REG_GX,"
},
{
"path": "ASM/Additional Codes/Misc Hitbox Visualizer/Main.asm",
"chars": 2677,
"preview": "#To be inserted at 80080638\n.include \"../../Globals.s\"\n\n.set REG_PlayerData,31\n.set REG_ItemGObj,30\n.set REG_ItemData"
},
{
"path": "ASM/Additional Codes/Neutral Respawn.asm",
"chars": 2520,
"preview": "#To be inserted at 8016721c\n.include \"../Globals.s\"\n\n.set PlayerSlot,27\n.set StaticBlock,26\n.set SpawnTable,25\n.set Spaw"
},
{
"path": "ASM/Additional Codes/Neutral Respawn.s",
"chars": 2520,
"preview": "#To be inserted at 8016721c\n.include \"../Globals.s\"\n\n.set PlayerSlot,27\n.set StaticBlock,26\n.set SpawnTable,25\n.set Spaw"
},
{
"path": "ASM/Additional Codes/Neutral Spawn.asm",
"chars": 7550,
"preview": "#To be inserted at 8016e510\n.include \"../Globals.s\"\n\n\n.set MatchInfo,31\n.set SpawnTable,30\n.set REG_PlayerSlot,28\n\nbacku"
},
{
"path": "ASM/Additional Codes/On Crash/Clear Bootup OSReports.asm",
"chars": 146,
"preview": "#To be inserted at 80160154\n.include \"../../Globals.s\"\n\n# Remove all previous OSReports\n load r3,0x804cf7e8\n li r4,0\n"
},
{
"path": "ASM/Additional Codes/On Crash/Disable Brinstar OSReport.asm",
"chars": 32,
"preview": "#To be inserted at 801fe738\nnop\n"
},
{
"path": "ASM/Additional Codes/On Crash/Disable Effect AnimList OSReport.asm",
"chars": 32,
"preview": "#To be inserted at 800a0080\nnop\n"
},
{
"path": "ASM/Additional Codes/On Crash/Disable Fourside OSReport.asm",
"chars": 32,
"preview": "#To be inserted at 801f3500\nnop\n"
},
{
"path": "ASM/Additional Codes/On Crash/Disable Fourside OSReport2.asm",
"chars": 32,
"preview": "#To be inserted at 801f35c0\nnop\n"
},
{
"path": "ASM/Additional Codes/On Crash/Disable PS OSReport.asm",
"chars": 32,
"preview": "#To be inserted at 801c3a84\nnop\n"
},
{
"path": "ASM/Additional Codes/On Crash/Disable YoshisIsland OSReport.asm",
"chars": 32,
"preview": "#To be inserted at 80202a40\nnop\n"
},
{
"path": "ASM/Additional Codes/On Crash/Disable mpcoll OSReport.asm",
"chars": 36,
"preview": "#To be inserted at 8005a2f8\n\nb 0x30\n"
},
{
"path": "ASM/Additional Codes/On Crash/Dont Output Compile Date on Assert.asm",
"chars": 31,
"preview": "#To be inserted at 80228aec\nnop"
},
{
"path": "ASM/Additional Codes/On Crash/Dont Output Compile Date on Invalid Read.asm",
"chars": 31,
"preview": "#To be inserted at 80228bf0\nnop"
},
{
"path": "ASM/Additional Codes/On Crash/Enable OSReport Print to Screen.asm",
"chars": 35,
"preview": "#To be inserted at 80397878\nb 0x20C"
},
{
"path": "ASM/Additional Codes/On Crash/LRZ Shows Advanced Details/Any Debug Level Displays Advanced Details.s",
"chars": 63,
"preview": "#To be inserted at 80394eac\n.include \"../../../Globals.s\"\n\nnop\n"
},
{
"path": "ASM/Additional Codes/On Crash/LRZ Shows Advanced Details/Check for LRZ.s",
"chars": 208,
"preview": "#To be inserted at 80395704\n.include \"../../../Globals.s\"\n\n#Get Held Buttons\n lwz r3,0xC0(r30)\n#Check for LRZ\n cmpwi r"
},
{
"path": "ASM/Additional Codes/On Crash/Only Show First 8 Lines of Stack.asm",
"chars": 40,
"preview": "#To be inserted at 80394afc\ncmpwi\tr29, 8"
},
{
"path": "ASM/Additional Codes/On Crash/Reboot With LRAStart.asm",
"chars": 290,
"preview": "#To be inserted at 80397c10\n.include \"../../Globals.s\"\n\n# Get inputs\nlwz r3,0xC0(r31)\nrlwinm. r0,r3,0,0x20\nbeq Exit\nrlwi"
},
{
"path": "ASM/Additional Codes/Output File Load Times/Output Load Time.s",
"chars": 802,
"preview": "#To be inserted at 8001674c\n.include \"../../Globals.s\"\n\n.set REG_Tick,20\n.set REG_FileSize,21\n.set REG_FileName,30\n\nb"
},
{
"path": "ASM/Additional Codes/Output File Load Times/Save Tick.s",
"chars": 98,
"preview": "#To be inserted at 80016714\n.include \"../../Globals.s\"\n\nmftbl\tr4\nstw\tr4,-8(rtoc)\n\nlwz\tr4, 0 (r28)\n"
},
{
"path": "ASM/Additional Codes/PRIM LITE/PRIM (1).asm",
"chars": 168,
"preview": "#To be inserted @ 800C2D3C\n\nloc_0x0:\n lis r0, 0x800C\n ori r0, r0, 0x2690\n mtlr r0\n blrl\n addi r5, r24, 0x1\n lis r0"
},
{
"path": "ASM/Additional Codes/PRIM LITE/PRIM (10).asm",
"chars": 57,
"preview": "#To be inserted @ 800c26c0\n\n rlwinm r3, r30, 19, 31, 31\n"
},
{
"path": "ASM/Additional Codes/PRIM LITE/PRIM (11).asm",
"chars": 56,
"preview": "#To be inserted @ 800c272c\n\n rlwinm r3, r30, 2, 30, 31\n"
},
{
"path": "ASM/Additional Codes/PRIM LITE/PRIM (12).asm",
"chars": 199,
"preview": "#To be inserted @ 800C268C\n\nloc_0x0:\n mflr r0\n stw r0, 4(r1)\n stwu r1, -16384(r1)\n stmw r30, 16(r1)\n mr r30, r3\n m"
},
{
"path": "ASM/Additional Codes/PRIM LITE/PRIM (13).asm",
"chars": 196,
"preview": "#To be inserted @ 800C2690\n\nloc_0x0:\n mflr r0\n stw r0, 4(r1)\n stwu r1, -16384(r1)\n lis r0, 0x8033\n ori r0, r0, 0xC3"
},
{
"path": "ASM/Additional Codes/PRIM LITE/PRIM (14).asm",
"chars": 96,
"preview": "#To be inserted @ 800C2DA0\n\nloc_0x0:\n lwz r0, 0x4004(r1)\n addi r1, r1, 0x4000\n mtlr r0\n blr\n"
},
{
"path": "ASM/Additional Codes/PRIM LITE/PRIM (15).asm",
"chars": 49,
"preview": "#To be inserted @ 802EAA38\n\n lfd f1, -32608(r2)\n"
},
{
"path": "ASM/Additional Codes/PRIM LITE/PRIM (16).asm",
"chars": 47,
"preview": "#To be inserted @ 802E8D68\n\nlfd f1, -32608(r2)\n"
},
{
"path": "ASM/Additional Codes/PRIM LITE/PRIM (17).asm",
"chars": 45,
"preview": "#To be inserted @ 804DD860\n\n.long 0x00101303\n"
},
{
"path": "ASM/Additional Codes/PRIM LITE/PRIM (18).asm",
"chars": 45,
"preview": "#To be inserted @ 804DD864\n\n.long 0x00001455\n"
},
{
"path": "ASM/Additional Codes/PRIM LITE/PRIM (19).asm",
"chars": 208,
"preview": "#To be inserted @ 800C2674\n\nloc_0x0:\n lwz r3, -8576(r2)\n lwz r4, -8572(r2)\n lis r0, 0x800C\n ori r0, r0, 0x268C\n mtl"
},
{
"path": "ASM/Additional Codes/PRIM LITE/PRIM (2).asm",
"chars": 47,
"preview": "#To be inserted @ 802E8B48\n\nlfd f1, -32608(r2)\n"
},
{
"path": "ASM/Additional Codes/PRIM LITE/PRIM (20).asm",
"chars": 114,
"preview": "#To be inserted @ 800C2734\n\nloc_0x0:\n lmw r30, 16(r1)\n lwz r0, 0x4004(r1)\n addi r1, r1, 0x4000\n mtlr r0\n blr\n"
},
{
"path": "ASM/Additional Codes/PRIM LITE/PRIM (3).asm",
"chars": 105,
"preview": "#To be inserted @ 804DD848\n\nloc_0x0:\n lis r0, 0x8036\n ori r3, r0, 0x1FC4\n mtctr r3\n li r3, -1\n bctr\n"
},
{
"path": "ASM/Additional Codes/PRIM LITE/PRIM (4).asm",
"chars": 812,
"preview": "#To be inserted @ 804DD84C\n\nloc_0x0:\n mflr r0\n stw r0, 4(r1)\n stwu r1, -64(r1)\n stmw r29, 16(r1)\n mr r30, r3\n mr r"
},
{
"path": "ASM/Additional Codes/PRIM LITE/PRIM (5).asm",
"chars": 152,
"preview": "#To be inserted @ 800C2684\n\nloc_0x0:\n rlwinm r3, r31, 20, 30, 31\n rlwinm r4, r31, 24, 29, 31\n rlwinm r5, r31, 28, 29,"
},
{
"path": "ASM/Additional Codes/PRIM LITE/PRIM (6).asm",
"chars": 34,
"preview": "#To be inserted @ 800c2688\n\nb 0xC\n"
},
{
"path": "ASM/Additional Codes/PRIM LITE/PRIM (7).asm",
"chars": 55,
"preview": "#To be inserted @ 800c26b0\n\nrlwinm r3, r30, 20, 31, 31\n"
},
{
"path": "ASM/Additional Codes/PRIM LITE/PRIM (8).asm",
"chars": 55,
"preview": "#To be inserted @ 800c26b4\n\nrlwinm r4, r30, 24, 29, 31\n"
},
{
"path": "ASM/Additional Codes/PRIM LITE/PRIM (9).asm",
"chars": 55,
"preview": "#To be inserted @ 800c26b8\n\nrlwinm r5, r30, 21, 31, 31\n"
},
{
"path": "ASM/Additional Codes/Pad - Update During Frame Advance.asm",
"chars": 200,
"preview": "#To be inserted at 801a4e48\n\n# doing this to make the menu inputs work with the TM menu\n# while the engine is paused. no"
},
{
"path": "ASM/Additional Codes/Pause During Game Start/Check to Pause.asm",
"chars": 31,
"preview": "#To be inserted at 8016CA9C\nnop"
},
{
"path": "ASM/Additional Codes/Pause During Game Start/Check to Pause.s",
"chars": 31,
"preview": "#To be inserted at 8016CA9C\nnop"
},
{
"path": "ASM/Additional Codes/Pause During Game Start/Check to Unpause.asm",
"chars": 31,
"preview": "#To be inserted at 8016CC1C\nnop"
},
{
"path": "ASM/Additional Codes/Pause During Game Start/Check to Unpause.s",
"chars": 31,
"preview": "#To be inserted at 8016CC1C\nnop"
},
{
"path": "ASM/Additional Codes/Physics Display/Main.asm",
"chars": 9182,
"preview": "#To be inserted at 80225554\n.include \"../../Globals.s\"\n\n.set GObj_Create,0x803901f0\n.set GObj_AddUserData,0x80390b68\n.se"
},
{
"path": "ASM/Additional Codes/Physics Display/Main.s",
"chars": 9182,
"preview": "#To be inserted at 80225554\n.include \"../../Globals.s\"\n\n.set GObj_Create,0x803901f0\n.set GObj_AddUserData,0x80390b68\n.se"
},
{
"path": "ASM/Additional Codes/QWERTY Keyboard.s",
"chars": 929,
"preview": "#To be inserted at 803edc1c\n.long 0x804D4DD4 \n.long 0x804D4CAC \n.long 0x804D4CAC \n.long 0x804D4D98 \n.long 0x804D4D9C \n.l"
},
{
"path": "ASM/Additional Codes/Random CSS Music v2/random music modification.asm",
"chars": 957,
"preview": "#To be inserted at 8015ecec\n.macro branchl reg, address\nlis \\reg, \\address @h\nori \\reg,\\reg,\\address @l\nmtctr \\reg\nbctrl"
},
{
"path": "ASM/Additional Codes/Random CSS Music v2/roll on bootup.asm",
"chars": 752,
"preview": "#To be inserted at 801a45a8\n.macro branchl reg, address\nlis \\reg, \\address @h\nori \\reg,\\reg,\\address @l\nmtctr \\reg\nbctrl"
},
{
"path": "ASM/Additional Codes/Random CSS Music v2/roll on match end.asm",
"chars": 522,
"preview": "#To be inserted at 8016eba8\n.macro branchl reg, address\nlis \\reg, \\address @h\nori \\reg,\\reg,\\address @l\nmtctr \\reg\nbctrl"
},
{
"path": "ASM/Additional Codes/Randomize Hitboxes Each Stock/Randomize Hitbox Values.s",
"chars": 589,
"preview": "#To be inserted at 80071240\n.include \"../../Globals.s\"\n\n.set REG_Script,29\n.set REG_FighterGObj,28\n.set REG_Sum,30\n.s"
},
{
"path": "ASM/Additional Codes/Rumble Off/Rumble Off.asm",
"chars": 46,
"preview": "#To be inserted at 803d4a70\n\n.long 0x00000000\n"
},
{
"path": "ASM/Additional Codes/Skip Memcard Prompt/Skip Memcard Prompt.asm",
"chars": 328,
"preview": "#To be inserted at 801af6f4\n.include \"../../Globals.s\"\n\n.set MEMCARD_NONE,0xF\n.set MEMCARD_NONE2,0xD\n\n#Check if no memca"
},
{
"path": "ASM/Additional Codes/Stage Music = 50 50.asm",
"chars": 37,
"preview": "#To be inserted at 801C26B0\nli\tr0, 50"
},
{
"path": "ASM/Additional Codes/Toggle Focused Player in Develop Mode Camera/Switch Focused Player in Develop Mode.asm",
"chars": 1218,
"preview": "#To be inserted at 802276f4\n.include \"../../Globals.s\"\n\n.set REG_Inputs,31\n.set REG_FocusedPlayer,30\n.set REG_CameraStru"
},
{
"path": "ASM/Additional Codes/Toggle Focused Player in Develop Mode Camera/WIP/Init CameraMode Struct When Develop is Enabled.s",
"chars": 152,
"preview": "#To be inserted at 8016e898\n.include \"../../Globals.s\"\n\nlwz\tr0, -0x6C98 (r13)\ncmpwi r0,3\nblt Original\n\nbranchl r12,0x800"
},
{
"path": "ASM/Additional Codes/Toggle Rumble From CSS/Toggle Rumble From CSS.asm",
"chars": 1018,
"preview": "#To be inserted at 802608D8\n.include \"../../Globals.s\"\n\n#CREDIT: Dan Salvato\n\nloc_0x0:\n lbz r3, 7(r31)\n cmpwi r3, 0x0\n"
},
{
"path": "ASM/Additional Codes/Unlock Everything/Unlock All Characters/Spoof All Characters as Unlocked.asm",
"chars": 37,
"preview": "#To be inserted at 80164b14\nli\tr3, 1\n"
},
{
"path": "ASM/Additional Codes/Unlock Everything/Unlock All Characters/Spoof Individual Characters as Unlocked.asm",
"chars": 37,
"preview": "#To be inserted at 801648f4\nli\tr3, 1\n"
},
{
"path": "ASM/Additional Codes/Unlock Everything/Unlock All Rules/Unlock Random Stage Select.asm",
"chars": 37,
"preview": "#To be inserted at 8015ee4c\nli\tr3, 1\n"
},
{
"path": "ASM/Additional Codes/Unlock Everything/Unlock All Rules/Unlock Score Display.asm",
"chars": 37,
"preview": "#To be inserted at 8015ee14\nli\tr3, 1\n"
},
{
"path": "ASM/Additional Codes/Unlock Everything/Unlock All Special Messages/Special Messages 1.asm",
"chars": 68,
"preview": "#To be inserted at 8015d968\n.include \"../../../Globals.s\"\n\nli r3,1\n"
},
{
"path": "ASM/Additional Codes/Unlock Everything/Unlock All Special Messages/Special Messages 2.asm",
"chars": 68,
"preview": "#To be inserted at 8015d9d8\n.include \"../../../Globals.s\"\n\nli r3,1\n"
},
{
"path": "ASM/Additional Codes/Unlock Everything/Unlock All Special Messages/Spoof No Pending Messages 2.asm",
"chars": 68,
"preview": "#To be inserted at 8017229c\n.include \"../../../Globals.s\"\n\nli r3,0\n"
},
{
"path": "ASM/Additional Codes/Unlock Everything/Unlock All Special Messages/Spoof No Pending Messages.asm",
"chars": 68,
"preview": "#To be inserted at 801737b0\n.include \"../../../Globals.s\"\n\nli r3,0\n"
},
{
"path": "ASM/Additional Codes/Unlock Everything/Unlock All Stages/Spoof All Stages Unlocked.asm",
"chars": 37,
"preview": "#To be inserted at 80164658\nli\tr3, 1\n"
},
{
"path": "ASM/Additional Codes/Unlock Everything/Unlock All Stages/Spoof Individual Stage Unlocked.asm",
"chars": 36,
"preview": "#To be inserted at 801644e8\nli\tr3, 1"
},
{
"path": "ASM/Additional Codes/Unlock Everything/Unlock All Trophies/Fill Save Data.asm",
"chars": 290,
"preview": "#To be inserted at 8015f6f8\n.include \"../../../Globals.s\"\n\n#Get trophy data\n lwz\tr3, -0x77C0 (r13)\n addi\tr3, r3, 7376\n"
},
{
"path": "ASM/Additional Codes/Unlock Everything/Unlock All Trophies/Have 99 of Every Trophy.asm",
"chars": 38,
"preview": "#To be inserted at 8030490c\nli\tr3, 99\n"
},
{
"path": "ASM/Additional Codes/Unlock Everything/Unlock All Trophies/Spoof All Trophies as Unlocked.asm",
"chars": 37,
"preview": "#To be inserted at 803044f0\nli\tr3, 1\n"
},
{
"path": "ASM/Additional Codes/Unlock Everything/Unlock All-Star.asm",
"chars": 37,
"preview": "#To be inserted at 8015ee98\nli\tr3, 1\n"
},
{
"path": "ASM/Additional Codes/Unlock Everything/Unlock Sound Test.asm",
"chars": 37,
"preview": "#To be inserted at 8015eddc\nli\tr3, 1\n"
},
{
"path": "ASM/Additional Codes/Unplugging Closes CSS Door.asm",
"chars": 63,
"preview": "#To be inserted at 802605fc\n.include \"../Globals.s\"\n li r6,3\n"
},
{
"path": "ASM/Additional Codes/Use Save Banner #1.asm",
"chars": 235,
"preview": "#To be inserted at 8001c838\n.include \"../Globals.s\"\n\n.set entity,31\n.set player,31\n\n#Check if Memcard\n\tlis\tr3,0x8000\n\tlw"
},
{
"path": "ASM/Additional Codes/Winners Names are Gold on CSS/Change Name Color.asm",
"chars": 2683,
"preview": "#To be inserted at 80265220\n.include \"../../Globals.s\"\n\n#Check If Player Won Last Game\n mr r3,r29\n bl CheckIfWonLast"
},
{
"path": "ASM/Additional Codes/Winners Names are Gold on CSS/Remember Who LRA Started.asm",
"chars": 230,
"preview": "#To be inserted at 8016ea30\n.include \"../../Globals.s\"\n\n#Original Codeline\n stb\tr0, 0x0010 (r30)\n\n#Check If LRA Start\n "
},
{
"path": "ASM/Additional Codes/XYDisablesStart/Main.asm",
"chars": 323,
"preview": "#To be inserted at 803775bc\n.include \"../../Globals.s\"\n\n#Check if pressing start\n rlwinm. r3,r0,0,0x1000\n beq Injectio"
},
{
"path": "ASM/Globals.s",
"chars": 23621,
"preview": "#####################\n## Melee Variables ##\n#####################\n#Static Memory Locations\n.set pdLoadCommonData,0x803bc"
},
{
"path": "ASM/m-ex/Custom Playerdata Variables/Adjust Size.asm",
"chars": 106,
"preview": "#To be inserted @ 800679bc\n.include \"../../Globals.s\"\n.include \"../Header.s\"\n\nli\tr4, FighterDataTotalSize\n"
},
{
"path": "ASM/m-ex/Custom Playerdata Variables/Initialize Extended Playerblock Values (Result Screen).asm",
"chars": 277,
"preview": "#To be inserted at 800BE830\n.include \"../../Globals.s\"\n.include \"../Header.s\"\n\n#Backup Data Pointer After Creation\naddi\t"
},
{
"path": "ASM/m-ex/Custom Playerdata Variables/Initialize Extended Playerblock Values.asm",
"chars": 282,
"preview": "#To be inserted at 80068eec\n.include \"../../Globals.s\"\n.include \"../Header.s\"\n\n#Backup Data Pointer After Creation\n add"
},
{
"path": "ASM/m-ex/Custom Playerdata Variables/OwnsAnim/Check Animation Owner.s",
"chars": 199,
"preview": "#To be inserted @ 8006fe20\n.include \"../../../Globals.s\"\n.include \"../../Header.s\"\n\n.set REG_PlayerData,3\n\n#Check if an"
},
{
"path": "ASM/m-ex/Custom Playerdata Variables/OwnsAnim/Store Animation Owner.s",
"chars": 371,
"preview": "#To be inserted @ 80069ce0\n.include \"../../../Globals.s\"\n.include \"../../Header.s\"\n\n.set REG_OpponentGObj,23\n.set REG_"
},
{
"path": "ASM/m-ex/Header.s",
"chars": 15806,
"preview": "#Constants\n.set PersonalEffectStart,5000 # used for stage effects, need to rework this?\n.set EffMdlStart,5000\n.set P"
},
{
"path": "ASM/m-ex/Standalone Functions/Audio_RequestFileLoad_Rewrite.asm",
"chars": 419,
"preview": "#To be inserted @ 803d705c\n.include \"../../Globals.s\"\n.include \"../Header.s\"\n\n.set REG_SSMID,3\n.set REG_ToLoadOrig,12\n"
},
{
"path": "ASM/m-ex/Standalone Functions/Get MxDt Data.asm",
"chars": 1562,
"preview": "#To be inserted @ 803d7094\n.include \"../../Globals.s\"\n.include \"../Header.s\"\n\nbackup\n\n# check if over\n cmpwi r3,8\n bg"
},
{
"path": "ASM/m-ex/Standalone Functions/Get grFunction.asm",
"chars": 293,
"preview": "#To be inserted @ 803d7068\n.include \"../../Globals.s\"\n.include \"../Header.s\"\n\n.set REG_Temp,12\n.set REG_Dest,3\n\nload "
},
{
"path": "ASM/m-ex/Standalone Functions/GetFtItemID.asm",
"chars": 1088,
"preview": "#To be inserted @ 803d7088\n.include \"../../Globals.s\"\n.include \"../Header.s\"\n\n.set REG_FighterID,31\n.set REG_ArticleID"
},
{
"path": "ASM/m-ex/Standalone Functions/GetGrItemID.asm",
"chars": 1111,
"preview": "#To be inserted @ 803d708C\n.include \"../../Globals.s\"\n.include \"../Header.s\"\n\n.set REG_FighterID,31\n.set REG_ArticleID"
},
{
"path": "ASM/m-ex/Standalone Functions/GetKirbyCpData.asm",
"chars": 157,
"preview": "#To be inserted @ 803d7084\n.include \"../../Globals.s\"\n.include \"../Header.s\"\n\nmulli r3,r3,0x4\nlwz r4,OFST_KirbyAbilityR"
},
{
"path": "ASM/m-ex/Standalone Functions/GetMEXItemID.asm",
"chars": 1498,
"preview": "#To be inserted @ 803d7064\n.include \"../../Globals.s\"\n.include \"../Header.s\"\n\n.set REG_GObj,31\n.set REG_ArticleID,30\n."
},
{
"path": "ASM/m-ex/Standalone Functions/GetMEXPlaylist.asm",
"chars": 410,
"preview": "#To be inserted @ 803d707C\n.include \"../../Globals.s\"\n.include \"../Header.s\"\n\n.set REG_StageExtID,11\n.set REG_Playlist,1"
},
{
"path": "ASM/m-ex/Standalone Functions/Index Fighter Item.asm",
"chars": 1401,
"preview": "#To be inserted @ 803d7058\n.include \"../../Globals.s\"\n.include \"../Header.s\"\n\n.set REG_FighterID,31\n.set REG_ArticleDa"
},
{
"path": "ASM/m-ex/Standalone Functions/Init itFunction.asm",
"chars": 4584,
"preview": "#To be inserted @ 803d7070\n.include \"../../Globals.s\"\n.include \"../Header.s\"\n\n/*\nr3 = file header\nr4 = index\nr5 = fighte"
},
{
"path": "ASM/m-ex/Standalone Functions/KirbyStateChange.asm",
"chars": 4924,
"preview": "#To be inserted @ 803d7080\n.include \"../../Globals.s\"\n.include \"../Header.s\"\n\n# void KirbyStateChange(GOBJ *fighter, int"
},
{
"path": "ASM/m-ex/Standalone Functions/LoadRELDAT.asm",
"chars": 2390,
"preview": "#To be inserted @ 803d7080\n.include \"../../Globals.s\"\n.include \"../Header.s\"\n\n# args are\n# r3 = file name\n# r4 = array t"
},
{
"path": "ASM/m-ex/Standalone Functions/MenuThink.asm",
"chars": 7529,
"preview": "#To be inserted @ 803d7090\n.include \"../../Globals.s\"\n.include \"../Header.s\"\n\n# slippi hack\n.set OFST_R13_SWITCH_TO_ONLI"
},
{
"path": "ASM/m-ex/Standalone Functions/Reloc.asm",
"chars": 2928,
"preview": "#To be inserted @ 803d7074\n.include \"../../Globals.s\"\n.include \"../Header.s\"\n\n##########################################"
},
{
"path": "ASM/m-ex/Standalone Functions/SFX_PlayStageSFX.asm",
"chars": 445,
"preview": "#To be inserted @ 803d7078\n.include \"../../Globals.s\"\n.include \"../Header.s\"\n\n.set REG_SFXID,31\n\nbackup\n\n#r3 = stage SF"
},
{
"path": "ASM/m-ex/Standalone Functions/SpawnMEXEffect.s",
"chars": 392,
"preview": "#To be inserted @ 803d7060\n.include \"../../Globals.s\"\n.include \"../Header.s\"\n\n.set REG_EffectID,31\n.set REG_PlayerGObj"
},
{
"path": "ASM/m-ex/Standalone Functions/SpawnMEXItem.asm",
"chars": 1853,
"preview": "#To be inserted @ 80268648\n.include \"../../Globals.s\"\n.include \"../Header.s\"\n\n.set REG_GObj,31\n.set REG_ItemSpawnStruc"
},
{
"path": "ASM/m-ex/Standalone Functions/Stock Icon Get Frame.asm",
"chars": 1477,
"preview": "#To be inserted @ 803d7060\n.include \"../../Globals.s\"\n.include \"../Header.s\"\n\n.set REG_InternalID,31\n.set REG_CostumeI"
},
{
"path": "ASM/m-ex/Standalone Functions/calloc.asm",
"chars": 304,
"preview": "#To be inserted @ 803d706C\n.include \"../../Globals.s\"\n.include \"../Header.s\"\n\n.set REG_Size,31\n.set REG_Alloc,30\n\n#ini"
},
{
"path": "ASM/m-ex/UCF 0.8/Codes.txt",
"chars": 2035,
"preview": "C20CA1E8 0000002B #UCF DB.asm\nD01F002C 7C0802A6\n90010004 9421FF00\nBE810008 48000121\n7FC802A6 C03F0894\nC05E0000 FC011040\n"
},
{
"path": "ASM/m-ex/UCF 0.8/UCF DB.asm",
"chars": 3282,
"preview": "#To be inserted at 800C9A44\n.include \"../../Globals.s\"\n.include \"../Header.s\"\n\n.set REG_PlayerData,31\n.set REG_Floats,30"
}
]
// ... and 275 more files (download for full content)
About this extraction
This page contains the full source code of the UnclePunch/Training-Mode GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 475 files (243.6 MB), approximately 656.3k tokens, and a symbol index with 586 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.