Jump to content

Jason777

Member
  • Posts

    908
  • Joined

  • Last visited

  • Days Won

    26

Everything posted by Jason777

  1. I think I have a converted ZOBJ somewhere...
  2. Anybody remember Linktank or Dogboi? EDIT: Ahahaha I remember Linktank taking credit for so much crap: https://sites.google.com/site/linktank11/legend-of-zelda-modding EDIT2: Fucking dogboi: http://www.glitchkill.proboards.com/thread/4647/post-zelda-oot-mm-hacks EDIT3: Alright, I'm done being an ass... I think.
  3. I remember looking back at his documents around 2010 or 2011... he's been working on this for a really long time! EDIT: Jesus, he practically wrote 3D collision detection...
  4. Yo, software chairman (or "Head of Modding Tools") reporting in. I'll be keeping that position thanks.
  5. Jason777

    This or That?

    Reeses Pieces because M&Ms... no. Poo or Pee?
  6. I doubt you lack the intelligence to do what I'm about to suggest (you've been around for years), but have you checked the ROM CRC?
  7. You need 32x32 or 32x64 or 16x16 or etc. The readme tells you which texture sizes are compatible with the N64.
  8. Your texture dimensions are off. Keep in mind I'm not talking about scaling.
  9. Are all your faces that are "solid" white in SketchUp? If not then you need to reverse some faces. A picture(s) of your map and its collision in SketchUp would probably help clear some things up.
  10. The readme should help quite a bit. Start by going to File->New Scene. From there, feed it collision map and then you can add rooms by going to the "room" or "mesh" tab.
  11. Hylian Toolbox is the most modern importer you can get. However, I think SharpOcarina is far more specialized tool for importing. I've rarely had problems there. I don't care what people say about it-- it does its job damn well.
  12. To tell you the truth, half the maps you scrapped aren't all that bad. It's really the textures as well as the flow into textures that need work. Besides that, I really do like the geometry of quite a few maps.
  13. I would totally understand it being that way. It really didn't make sense for the number to be 0xFFF1 and not be interpreted as a signed number so that's why I initially thought of it like that. Also, in DeathBasket's Boss Rush hack, he would use a cutscene value of 0xFFEC to disable playing a cutscene.
  14. Yup, I wanted the warp hack to work with an original unmodified game without completely screwing over the boss warps. I haven't completely tested all the warps, but they should work (in theory).
  15. A thorough explanation of how the hack works... If we look at the routine data_80999A68, specifically $L000046, we begin to see the logic that the warp applies when deciding the next exit. It starts off by checking to see if the player is in Dodongo's Cavern Boss room. This, in way, is check to see if the player just faught King Dodongo. From here it decides to take exit 0x013D and cutscene 0x000F. lh v0,164(s0) // Load current scene number li $at,18 bnel v0,$at,$L000049 // If current scene != Dodongo's Cavern Boss, goto $L000049 li $at,17 jal external_func_80035B4C // Seems to return something related to alternate headers or flags li a0,37 bne v0,$zero,$L000050 li t4,1146 // Exit 0x047A jal external_func_80035B74 li a0,37 or a0,s0,$zero jal external_func_80084D10 li a1,109 lui $at,0x1 addu $at,$at,s0 li t2,317 // Exit 0x013D sh t2,7706($at) // Set next exit lui $at,0x8016 li t3,0xfff1 // Cutscene 0x000F (0xFFF1 = -0x000F) b $L000051 // Goto exit label sh t3,-1422($at) // Set next cutscene We also see at $L000050 that exit 0x047A is taken. The conditional check in the above code snippet seems to have to do with event, scene, or map flags. If the player wasn't in the Dodongo's Cavern Boss room, it checks to see if they were in the Deku Tree Boss room at $L000049. If so, it decides to take exit 0x00EE and cutscene 0x000F. bnel v0,$at,$L000052 // If current scene != Deku Tree Boss, goto $L000052 li $at,19 jal external_func_80035B4C // Seems to return something related to alternate headers or flags li a0,7 bne v0,$zero,$L000053 li t7,1111 // Exit 0x0457 jal external_func_80035B74 li a0,7 jal external_func_80035B74 li a0,9 or a0,s0,$zero jal external_func_80084D10 li a1,108 lui $at,0x1 addu $at,$at,s0 li t5,238 // Exit 0x00EE sh t5,7706($at) // Set next exit lui $at,0x8016 li t6,0xfff1 // Cutscene 0x000F (0xFFF1 = -0x000F) b $L000051 // Goto exit label sh t6,-1422($at) // Set next cutscene We also see at $L000053 that exit 0x0457 is taken. The conditional check in the above code snippet seems to have to do with event, scene, or map flags. If the player wasn't in the Deku Tree Boss room, it checks to see if they were in the Jabu Jabu's Belly Boss room at $L000052. If so, it decides to take exit 0x010E and cutscene 0x0000. bne v0,$at,$L000051 // If current scene != JabuJabu's Belly Boss, goto $L000051 (exit label) li t8,270 // Exit 0x010E lui $at,0x1 addu $at,$at,s0 sh t8,7706($at) // Set next exit lui $at,0x8016 sh $zero,-1422($at) // Set next cutscene There may be logic concerning using an alternate exit, check $L000060. All other logic concerning exits in the elemental temples, can be seen in routine data_8099A5EC starting at $L000070. This routine is used before data_80999A68 and can be proven by tracing back function references. By now we should have picked up where exits and cutscenes are stored: Exit values can usually be found by looking for instances of ",7706(" and by looking at assembly beforehand, we can see that the exit number is stored at 0x80223E3A Cutscene values can usually be found by looking for instances of ",-1422(" and by looking at assembly beforehand, we can see that the cutscene number is stored at 0x8015FA72 With this in mind, and the order of checks that warp makes when deciding the exit, we begin to devise our hack.We don't want to interfere with any of the exits taken by boss warps so we should try to come up with an "else" statement where we apply our hack Because I don't want to go through the headache of recompiling the warp actor and/or fixing reallocations through manual addition of code, we want to keep within the original size of the actor Okay, so we see that $L000052 is the last check the actor makes before deciding the exit to take, this will be where we insert our "else" statement. Now we just need to find free space... well we're in luck because just above the start of $L000052 and in $L000053 we see this:lui $at,0x1 addu $at,$at,s0 sh t7,7706($at) // Set next exit lui $at,0x8016 b $L000051 // Goto exit label sh $zero,-1422($at) li $at,19 It's a part of $L000053 where we are taken to exit 0x0457. It is branched to from $L000049 and most likely the result of alternate header or event flag checks. What's so special about that code snippet? Well, with a little examination, we see that it makes an unconditional branch to $L000051 (which is a label where the warp is done deciding which exit to take), but that's besides that point. It's the code that follows immediately afterwards that's of interest: b $L000051 // Goto exit label sh $zero,-1422($at) li $at,19 We see in the delay slot (the instruction directly after the branch) that we set the cutscene number to 0x0000. The delay slot may be in use, but the instruction directly after the delay slot is never executed at all. This gives us exactly 1 unused instruction. Now we change the original branch to $L000052 in $L000051 to this: bnel v0,$at,$L000052 - 1 // If current scene != Deku Tree Boss, goto one instruction before $L000052 This won't actually compile, it's just to help make things more easily readible. So now we branch to the instruction located just before $L000052 which is: li $at,19 We're loading 19 into $at in order to make the scene number check at the start of $L000052. Now we consider that the new start of $L000052. We replace the instruction there with a check to see if the player is in the Jabu Jabu's Belly Boss room: bne v0,$at,PC + 2 // If current scene != JabuJabu's Belly Boss, goto 2 opcodes ahead This won't actually compile, it's just to help make things more easily readible. We jump two ahead because we still want to set an exit number. Now we replace the instruction at the original start of $L000052 with an instruction that reads the actor's Y rotation into $t8: bne $t8,0x00B6(s1) // Load Y rotation of actor into $t8 From previous checks, it was concluded that at this point in the actor's code, register s1 contained the address of the actor panel. Now the hack is complete. The way it works is that if the user is not in Jabu Jabu's Belly Boss room, it reads the Y rotation into $t8 and then merely skips the instruction that sets $t8 to exit 0x010E while continuing to execute the code in $L000052. If the user is in Jabu Jabu's Belly Boss room, then it still sets $t8 to the Y rotation of the actor but then $t8 is immediately overwritten with exit number 0x010E because the branch was not taken. Either way, the code for $L000052 is still executed. The logic can be written like so: if (CURRENT_SCENE == JABU_JABU_BOSS) { NEXT_EXIT = 0x010E; } else { NEXT_EXIT = Y_ROTATION; } NEXT_CUTSCENE = 0x0000; SetNextExit(NEXT_EXIT, NEXT_CUTSCENE); Hopefully this pseudo-code clears things up for you. In the end, here were the changes made to the actor file: 0x1438 : "54 41 00 1B" to "54 41 00 1A" <--- Changes a branch to $L000052 to branch to one opcode before $L000052 0x14A4 : "24 01 00 13" to "14 41 00 02" <--- Replaces an unused opcode located one opcode before $L000052 to a branch to 2 opcodes in front of it 0x14A8 : "14 41 00 06" to "86 38 00 B6" <--- Loads the Y rotation into t8Now, I doubt you'll be able to optimize the code in the actor file to load the cutscene value from the Z rotation and still have the same file size, but this should have given you a good idea why $L000052 would be the best place to insert the hack. In the end, you should try to model the code to represent this:if (CURRENT_SCENE == JABU_JABU_BOSS) { NEXT_EXIT = 0x010E; NEXT_CUTSCENE = 0x0000; } else { NEXT_EXIT = Y_ROTATION; NEXT_CUTSCENE = Z_ROTATION; } SetNextExit(NEXT_EXIT, NEXT_CUTSCENE);
  16. I don't have much time to do it myself. In the mod source, there is a text document with notes that describe where I modified the actor to use Y rotation if it was not spawned by a boss. That area would be perfect to have the actor load Z rotation and establish cutscene values. I would do it myself but the warp actor just so happens to be one of those few actors that have trouble recompiling -- they reference virtual addresses that are out of bounds or in the .bss section -- so inserting a couple more commands will be tedious without nOVL and zOVLDis. Besides that, it was already hard enough to make the hack without needing extra space.
  17. Try to prove or disprove that OoT is turing complete!
  18. Hylian Toolbox can take care of all the hierarchy and display list modifyinv you need. The main problem is getting animations from other actor's to work with Link. I think I suggested asking spinout for permission and then fixing up his play as * hack. That way would require the least amount of work if you wanted to be able to use original animations for objects. Maybe I could write a converter from the standard animation to Link's format.
  19. Besides having it being recognized as a different floor within the dungeon map, multiple floors are not any different than other rooms in a map. You just have some stairs you go up and a transition actor to load the next map.
  20. It's a little upsetting to see how some people let knowledge of the identity of the creator get in the way of recognizing the significance of the posted material. I don't really care who made this; what was accomplished is quite extraordinary (buggy or not) and I look forward to the release of technical details.
  21. Sairugoth, cen had made a multiplayer hack long before spinout. Spinout ended up making his own.
  22. The arrow rupee decrement patch removes arrow amounts and has the bow use the rupee count instead. That's why I said I had made hacks related to what you want to do. What I was pointing you to were the notes and documents - they have information on how to have the arrows use different item amounts. If you need more help then I'll go out and pick everything specific to your needs.
  23. Sepulcher, I have some notes you should look at. I made a couple of hacks related to what you want to do (i.e. Izou Zelda and OoT Rebirth). For getting the mastersword to disappear, look through the stuff in this folder: https://www.cs.utexas.edu/~jason777/Izou_Zelda/Misc/ For getting the projectile ammo for Young Link to use bow ammo: https://www.cs.utexas.edu/~jason777/OoT_Rebirth/Arrow_Rupee_Decrement/ I made a hack for using the bow as child Link... CloudMax made a much better hack for the same thing and posted it somewhere.
  24. I started taking a class on computer architecture this semester and have grown an interest in the logic behind it all. Every now and then I find myself pondering how I would implement certain instruction sets with AND, OR, and NOT gates. Here's an implementation of stack architecture that only has 3 instructions (among other notes taken in class):
  25. How do you handle scenes with alternate headers and animated textures?
×
×
  • Create New...

Important Information

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