Jump to content

Ideka

Member
  • Posts

    38
  • Joined

  • Last visited

  • Days Won

    6

Posts posted by Ideka

  1. Like stated in the video description (on Youtube though, so I get why you missed it) that's simply caused by my crappy computer. This was the best, least laggy footage I could manage to record, believe it or not.

  2. My latest accomplishment in ASM hacking:

    Coded the actor in pure MIPS assembly. I suppose it was a bit trickier than it'd have been with C, but it allowed for a very optimized overlay at only 0x310 bytes long.

    • Like 1
  3. Okay. The last month(s?) I've been taking a break from the whole hacking thing, simply because I didn't have any time to spare for it. But now that Summer's coming up, I can gradually start picking up this hobby again! Here's a code I wrote quickly for a simple "marathon" mini-game where you gain 200 rupees if you win, or lose them if you don't:

     

     

    .org HOOK
    J game
    nop
    
    .org 80600000
    
    game:
    Lui t0, UPPER ADRESS OF OPPONENT Z POSTION
    
    Lh k0, LOWER ADRESS OF OPPONENT Z POSITION(t0) ; loads the opponent z coordinate into k0
    
    Li k1, c58f ; Z coordinate for winning point
    
    Beq k1, k0 lose ; if the opponent's z postition is equal to the winning point, branch to lose
    nop
    
    Lui gp, 8022
    
    Lh gp, 45dc(gp) ; loads link's z coordinate into gp
    
    Beq k1, gp, win ; if link's z position is equal to the winning point, branch to win
    Nop
    
    j game
    nop
    
    Win:
    Sw r0, LOWER ADRESS OF OPPONENT Z POSITION(t0) ; sets the opponent's z position to 0
    
    Lui t0, 8016
    
    Lh t1, e694(t0) ; loads rupee amount
    
    Addiu t1, t1, 00c8 ; calculates new rupee amount
    
    Sh t1, e694(t0) ; stores new rupee amount
    
    J return:
    
    Lose:
    Lui t0, 8016
    
    Lh t1, e694(t0) ; loads rupee amount
    
    Addiu t1, t1, fe00 ; calculates new rupee amount
    
    Sh t1, e694(t0) ; stores new rupee amount
    
    Return:
    J game ; jumps back to start of hack
    Nop

     

    I obviously need to locate the adress of the Z coordinate of the opponent actor (which I plan to be the Running Man), but this is quite easy. My major problem is finding a good hook that runs every frame. If any of you guys have any tips or feedback on this hack, please tell me! Anything would be appreciated, really. Thanks.

  4. Hmm... Using ANDI doesn't seem to work very well, it always makes the effect present with multiple other tunics. Perhaps I'm using it the wrong way? Here's the most recent source (haven't looked into the SLTI opcode yet):

     

     

    .org 80087234
    j 80600000
    nop
    
    .org 80600000
    
    lui k0, 8016
    lb k1, e6d0(k0)
    andi k1, k1, 0003
    bnel k1, r0, magic
    lb k1, e693(k0)
    j return
    sh t9, 0030(t0)
    
    magic:
    bgezl s0, return
    sh t9, 0030(t0)
    blezl k1, return
    sh t9, 0030(t0)
    li t2, 0004
    beql t2, k1, return
    sb r0, e693(k0)
    li t2, 0003
    beql t2, k1, return
    sb r0, e693(k0)
    li t2, 0002
    beql t2, k1, return
    sb r0, e693(k0)
    li t2, 0001
    beql t2, k1, return
    sb r0, e693(k0)
    addiu k1, k1, fffa
    j return
    sb k1, e693(k0)
    
    
    return:
    j 80087238
    lh a1, 0030(t0) 

     

     

    Thanks for any help!

  5. Wow, thanks a lot Jason, I'm impressed by how easily you analyzed my hack! Those are definitely really useful advice, I think my opcode list is quite outdated (circa 98) so I'll look into that to avoid future mistakes. And yes, I have it patched to ROM. I would release a patch, but there's a possibility that this is going to be used in a major hack, so I'll wait until that's decided.

  6. So, I've devoted a few weeks to it, and I think that I'm finally starting to get a grasp around the basics of ASM hacking. Here's where I'll post any future major hacks I'll eventually make.

     

    OoT Magic Armor:

     

    Source:

     

     

    .org 80087234
    j 80600000 ; jump to routine
    nop 
    
    .org 80600000
    
    lui k0, 8016 ; load upper adress into k0
    lb k1, e6d0(k0) ; load current equipped tunic value into k1
    li t2, 0013 ; load 0013 (normal boots and zora tunic equipeed value) into t2
    beql k1, t2, magic ; if k1 is equal to t2, branch to "magic" label
    lb k1, e693(k0) ; delay slot, loads current magic value into k1 if above statement is true
    li t2, 0023 ; load 0033 (heavy boots and zora tunic equipped value) into t2
    beql k1, t2, magic ; if k1 is equal to t2, branch to "magic" label
    lb k1, e693(k0) ; delay slot, loads current magic value into k1 if above statement is true
    li t2, 0033 ; load 0033 (heavy boots and zora tunic equipped value) into t2
    beql k1, t2, magic ; if k1 is equal to t2, branch to "magic" label
    lb k1, e693(k0) ; delay slot, loads current magic value into k1 if above statement is true
    j return ; if any of the above statements are false, jump to "return" label
    sh t9, 0030(t0)
    
    magic:
    bgezl s0, return ; if new health value is greater than zero, branch to "return" label
    sh t9, 0030(t0) ;
    blezl k1, return ; if magic amount is less than or equal to zero, branch to "return" label
    sh t9, 0030(t0)
    li t2, 0004 ; load 0004 into t2
    beql t2, k1, return ; if k1 is equal to t2, branch to "return" label
    sb r0, e693(k0) ; delay slot, nulls the magic amount if above statement is true
    li t2, 0003 ; load 0003 into t2
    beql t2, k1, return ; if k1 is equal to t2, branch to "return" label
    sb r0, e693(k0) ; delay slot, nulls the magic amount if above statement is true
    li t2, 0002 ; load 0002 into t2
    beql t2, k1, return ; if k1 is equal to t2, branch to "return" label
    sb r0, e693(k0) ; delay slot, nulls the magic amount if above statement is true
    li t2, 0001 ; load 0001 into t2
    beql t2, k1, return ; if k1 is equal to t2, branch to "return" label
    sb r0, e693(k0) ; delay slot, nulls the magic amount if above statement is true
    addiu k1, k1, fffa ; decreasing the current magic amount stored in k1
    j return ; jumps to "return" label
    sb k1, e693(k0) ; stores new magic value into k0
    
    
    return:
    j 80087238 ; jumps back to original routine
    lh a1, 0030(t0) 

    Yes, it could probably be made a lot shorter, but there's nothing I can do with my current capabilites.

     

     

    Thanks for reading, and keep a look out for any future updates!

    • Like 11
  7. Slightly off-topic, but why did you name this topic exactly like SoD's old topic(if I remember it correctly) over at glitchkill? Also, like haddockd said, it would be a good idea to actually mention what you are having issues with.

  8. Wow, thanks so much everybody! I didn't expect to get these many replies, it's very appreciated. I'll look into all of these things soon. I had heard that $801A0000 was freespace, but I'll be sure to try with $80600000 as well. Also I got the Renegade assembler working,  which should help me greatly. Again, thanks!

  9. Hey everyone!
    Recently I decided to finally get my ass off and take on the huge task of learning r4300i disassembly. I have basically spent the last two weeks just trying to find documentation on the subject, and learn whatever I could from it. This, I hope anyways, has probably given me some decent knowledge in the very basics of MIPS disassembly.
     
    A few days ago I started trying to write ASM hacks of my own (for the OoT MQ debug ROM). Obviously I wanted to start with something simple, namely that the current Rupee amount would increase by 1 each time that the D-pad up button was pressed. I used the source of
     as a base when (trying) to write the hack, which resulted in what I thought was a pretty legit-looking code. Of course it didn't work at all in-game. The closest result I managed to get was that the game paused each time that D-pad up was pressed, which is kinda cool but not very close to the desired effect.
     
    I have tried to fix the problem by myself for a time now, but I just don't seem to have the knowledge to locate the problem. I suspect that some instruction might be missing, or that I may have constructed the hack in a weird way. Another, "sillier" possibility is that I've just assembled the gs code incorrectly, since I had to do it manually due to neither the Renegade64 nor Galatea assemblers working correctly on my computer. I haven't been able to find any of these issues though, and I have checked the gameshark code multiple times for faults I couldn't find. I think that the solution simply just lies beyond me and my current capabilities.
     
    I hope that maybe some of our experienced and knowledgeable MIPS-disassemblers will show up and save the day, but any help would be mostly appreciated really. Anyway, here's the source and gs code:

     

    Source:

     

    .ORG 0x80047E50
    J 0x801A0000
    NOP
    
    
    .ORG 0x801A0000
    LUI T0, 0x8016 ; Loads upper adress to rupee amount in T0
    LH T4, 0xE694(T0) ; Loads halfword from T0 into T4
    
    LUI T0, 0x8016 ; Loads upper adress to controller buttons
    LHU T2, 0x6AF0(T0) ; Loads unsigned half-word into T2 from T0(controller buttons)
    ADDIU T3, R0, 0x0800 ; Dpad-up stored into T3
    BEQL T2, T3, 0x801A001C ; If T2(controller buttons) equals to T3(Dpad-up pressed), branch to 0x811A001C
    ADDIU T4, T4, 0x0001 ; Adds immediate value 0x0001 to T4(current rupee amount)
    
    .ORG 0x801A001C
    LUI T0, 8016 ; Loads upper adress to rupee amount
    SH T4, 0xE694(T0) ; Stores new rupee amount(T4) into current rupee amount(T0)
    J 0x80047e58
    LH V0, 0xE690(V0) ; "this is what was replaced at 0x80047E50" (source: savestate)
    SLTI AT, V0, 0x0011 ; "if taken out it would cause a lot of trouble" (source: savestate)
    
    NOTES:
    0x8015E694 = Rupee amount

    GS code (assembled by hand, may be incorrect):

    81047E50 0806
    81047E52 8000
    81047E54 0000
    81047E56 0000
    811A0000 3C08
    811A0002 8016
    811A0004 850C
    811A0006 E694
    811A0008 3C08
    811A000A 8016
    811A000C 950A
    811A000E 6AF0
    811A0010 240B
    811A0012 0800
    811A0014 516A
    811A0016 8006
    811A0018 258C
    811A001A 0001
    811A001C 3C08
    811A001E 8016
    811A0020 A50C
    811A0022 E694
    811A0034 0801
    811A0036 1F96
    811A0038 8442
    811A003A E690
    811A003C 2841
    811A003E 0011

     
    And again: any help would really mean a lot to me! Thanks for reading!
  10. I've only been playing for like 5 minutes when this is being posted, so far most things seems fine except for three minor issues:

    1. The game freezes when trying to open the menu

    2. Many sentences seems to be missing punctuation

    3. The cutscene disabler still seems to be functional

  11. I sure will be playing this one B-) Isn't this like the first full zoldo hack in 2 years(since Voyager of Time)? Awesome work on getting it completed, now we'll just have to bring attention to it.

    I suggest (if you haven't already done it) posting threads about this in multiple forums that may have interest in it, like Zelda Universe, Zelda Speedruns, Zelda Dungeon etc. And again: awesome work on actually getting this project done. That seems to have been a rare quality among Zelda modders through the years.

  12. Can't remember where I found this, but I think it was made by Flotonic:

     

    FD Command:

    Format:
    FD TT 00 00 BB XX XX XX
    TT = Texture Type
    BB = Texture Bank
    XX XX XX = Location of Texture in whatever the bank is
     
    Description:
    It makes your model look pretty with textures! :D
     
    Example:
    You find this in a Display List:
    FD 48 00 00 04 01 17 80
    Compare to format:
    FD TT 00 00 BB XX XX XX
     
    You're probably like "OHH MY GOSH!!!! BB IS 04 AND I DON'T KNOW WHAT THAT IS!" Smart people refer to the BANK LISTING. 04 signals that the texture is located in and loaded from gameplay_keep. You'd change the bank to 06 if you're changing it to use a texture already in the .zobj, obviously, and you'll be changing the location. Anyway. From this, we can tell that the texture type is 48, an 8-Bit CI texture. It's located at 0x11780 in gameplay_keep.
     
  13. I guess by small, I meant in relation to the size of the head display list, but here it is (starts at offset 0x9298 in object_gnd.ZOBJ):

     

     

    E7 00 00 00 00 00 00 00 E3 00 10 01 00 00 00 00 
    D7 00 00 02 FF FF FF FF FD 10 00 00 06 00 BE 80 
    F5 10 00 00 07 0D 00 40 E6 00 00 00 00 00 00 00 
    F3 00 00 00 07 0F F2 00 E7 00 00 00 00 00 00 00 
    F5 10 08 00 00 0D 00 40 F2 00 00 00 00 03 C0 3C 
    FC 12 7E 03 FF FF F3 F8 E2 00 00 1C C8 11 20 78 
    D9 F3 FF FF 00 00 00 00 D9 FF FF FF 00 03 04 00 
    FA 00 00 00 FF FF FF FF DE 00 00 00 08 00 00 00 
    01 02 00 40 06 00 72 C8 06 00 02 04 00 02 00 06 
    06 08 00 0A 00 00 08 0C 06 02 0E 04 00 0E 02 0C 
    06 0E 08 04 00 08 0E 0C 06 10 12 14 00 16 14 12 
    06 16 12 18 00 10 18 12 06 10 14 18 00 14 16 18 
    06 1A 1C 1E 00 1C 1A 20 06 22 1C 20 00 1C 22 1E 
    06 22 1A 1E 00 22 20 1A 06 24 26 28 00 26 24 2A 
    06 2C 24 28 00 24 2C 2A 06 26 2E 28 00 2E 26 2A 
    06 2E 2C 28 00 2C 2E 2A 06 30 32 34 00 36 34 32 
    06 38 34 3A 00 36 3A 34 06 30 3C 32 00 36 32 3C 
    06 30 3A 3C 00 36 3C 3A 01 00 60 0C 06 00 74 B8 
    06 00 02 04 00 02 06 04 06 02 08 06 00 04 0A 00 
    06 00 0A 08 00 08 0A 06 E7 00 00 00 00 00 00 00 
    FD 10 00 00 06 00 B3 80 F5 10 00 00 07 0D 43 40 
    E6 00 00 00 00 00 00 00 F3 00 00 00 07 1F F2 00 
    E7 00 00 00 00 00 00 00 F5 10 08 00 00 0D 43 40 
    F2 00 00 00 00 03 C0 7C FC 11 FF FF FF FF F2 38 
    E2 00 00 1C C8 11 30 78 D9 FD FF FF 00 00 00 00 
    DE 00 00 00 08 00 00 00 01 00 A0 14 06 00 75 18 
    06 00 02 04 00 02 00 06 06 08 0A 0C 00 0A 08 0E 
    06 02 10 04 00 10 02 06 06 0A 12 0C 00 12 0A 0E 
    DF 00 00 00 00 00 00 00 

     

     

     

    How I port the textures:

     

    1. I first look at what offset the FD command points to for the texture

    2. Then I use Flotonic's tool "textdoc.EXE" to find the size of the texture(s) I want to port

    3. Then I paste them at new offsets, which I write down

    4, When I'm done with that I simply repoint the 3 last bytes of the FD commands to their new texture offsets

     

    Thanks.

     

    ------------------------------------------

    EDIT:

    Fixed the problem by removing the DE commands in the display list.

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.