Jump to content

Jason777

Member
  • Posts

    908
  • Joined

  • Last visited

  • Days Won

    26

Everything posted by Jason777

  1. Makes me think of Wind Waker version of Twilight Princess's Sacred Grove.
  2. Wait... I'm a little confused as to what Ocarinbot does? It interests me though
  3. Great job on this Three_Pendants! It seems that this works much in the same way that the exits are set through the warp actor. Off-topic: Are you Xu Yuan?
  4. Sure thing, Sanguinetti. There's actually two ways to go about searching for the Damage Table (as well as other common attributes of actors i.e. health, speed); I have named these methods as actor panel attribute referencing and attribute setting function calls The first method is where we would just search for specific integers that are relative to the actor panel. For damage charts we would look for 0x98 in decimal which is 152, for health we would look for 0xAF in decimal which is 175, and for speed we would look for 0x68 in decimal which is 104. We would specifically be looking at results who follow the format of storing data (opcodes using sw, sh, swc1, etc) at a specified offset which is 0x98, 0xAF, or 0x68 bytes away from the base offset in another register (usually s0). This will let us know that whatever register we are storing at the address specified contains a pointer or value for that specific actor attribute. In the case of damage charts we merely look up a ways for the occurence of a pointer to the .data section within an actor being stored within or register; for health or speed we will most likely have immediate values being stored within our registers. It is possible for our speed or health values to actually be stored within the .data section (although highly unlikely) of the actor so you will have to watch out, too. In the end, you really just have to watch for whatever is being stored into our register before the registers contents are stored at the address (0x98, 0x68, 0xAF, etc) in the actor panel. The second method, which will most likely provide more precise results but may also give you the possibility of being farther away from where the register is set, is to look up external function calls to functions commonly used by actors when setting common attributes. In the case of damage charts we would be looking for calls to 0x8005C364 (jal external_func_8005C364) and for speed we would be looking for function calls to 0x800A51A0 (jal external_func_800A51A0). ... So those are the methods I usually use when looking up actor attributes. I usually start with actor panel attribute referencing and then, if I'm having trouble, I move on to attribute setting function calls. More information on damage charts.
  5. I know you can pull through (as demonstrated by VoT) so I will be paying special attention to this project
  6. Like JSA said, it's almost certain that your map is too big to use when using TIG's exporter mod. SharpOcarina throws those exceptions when something has gone beyond the boundries of what is possible for the game. The only things that cause this are: -- Too many vertices -- Too many faces -- XYZ coordinates of vertices are too far/small -- Texture sizes are too large -- The resulting map size may be too big Out of those, every single one of them is about 99% unlikely (it imports fine off of SketchUp's exporter) besides XYZ coordinates being too far... which has to do with the scale of the map.
  7. Jason777

    Help editing Gohma

    I'm actually thinking about making an entire section on the wiki dedicated entirely to actors. One article wouldn't be enough to explain the things which comprise of an actor...Articles under the actor section would be damage charts, damage done to link, health, speed, weight, functions commonly used by actors, a general breakdown of an MIPS ELF binary, etc.It would be dedicated soley to potential future creation of complicated actors (basic ones have already been made).
  8. Jason777

    Help editing Gohma

    Heavy, this will be of use to you... Speed Values: http://glitchkill.proboards.com/index.cgi?board=ootmod&action=display&thread=4766&page=5 Health Values: http://glitchkill.proboards.com/index.cgi?action=gotopost&board=ootmod&thread=4766&post=42781
  9. I was messing with speed values today and I seem to have found travel speeds within RAM actors or "actor panels". (*(f32*)(RAM_Actor + 0x68)) : Actor speed (not to be mistaken for animation speed) (RAM Offset) I found this by looking at some old documentation that zeldazelda had made on changing the speeds within the Iron Knuckle. There were a few speed values that were being read from the rodata in the actor so I was looking at the instructions that utilized it. After reading the speed value into a2, it would usually make a call to this function... void external_func_800A51A0(RAM_Actor * a0, void * a1, f32 a2, uint32_t a3) // I don't actually know what all the arguments are for sure besides a2^ I assume that this function has to do with setting the speed of the actor. Alternatively, you could set the speed for the actor by going to float word at 0x68 bytes away from the start of the RAM actor and changing it there. For actors that are using an animation that doesn't have them move foward, the value at this is offset is 0. Hmmm... I seem to have found an efficient way of looking up speed values. These are my notes that I have taken on it today. For those who care for it, it may be kinda hard to read: // RAM_ACTOR + 0x68 = Speed? // 00E2AEF0 = IRON KNUCKLE ROM START // 80A74310 = VIRTUAL START // 00E2F5C0 (ROM) = IRON KNUCKLES WALK SPEED // 46D0 (in actor) // (In rodata... used right before $L000028...) data_80A789B0: .ascii "En_Ik_inConfrontion_Init : %d !!!!!!!!!!!!!!!!n000" data_80A789E0: .single 0.900000 // 00E2C00A (ROM) = PULLING AXE AWAY FROM SIDE HIT // 111A (in actor) // (In func_80A753D0...) lui a2,0x3fc0 li a3,0 jal external_func_800A51A0 // 00E2BD86 (ROM) = PULLING AXE AWAY FROM FRONT HIT // 0E96 (in actor) // (In $L000056...) lui a2,0x3fc0 li a3,0 jal external_func_800A51A0 // 00E2BA6E (ROM) = FRONT AXE SLICE // 0B7E (in actor) // (In func_80A74E2C...) lui a2,0x3fc0 jal external_func_800A51A0 // 00E2B74A (ROM) = RUNNING WHEN ARMOR IS OFF // 085A (in actor) // (In $L000028...) lui a2,0x3f80 li a3,0 swc1 $f18,16($sp) sw $zero,20($sp) jal external_func_800A51A0 swc1 $f4,24($sp) or a0,s0,$zero jal external_func_8002F828 li a1,14783 // (@ 85A in actor...) lui $at,0x4020 mtc1 $at,$f6 nop swc1 $f6,104(s0) $L000029: lh t8,182(s0) lui a1,%hi(data_80A74BA4) addiu a1,a1,%lo(data_80A74BA4) or a0,s0,$zero jal func_80A74390 sh t8,50(s0) lw $ra,44($sp) lw s0,40($sp) addiu $sp,$sp,48 jr $ra nop Oh yeah, this is zeldazelda's post: http://glitchkill.proboards.com/index.cgi?action=gotopost&board=ootmod&thread=4766&post=49807
  10. I'm thoroughly impressed with how much you got done in 5 days!
  11. Jason777

    Help editing Gohma

    Mallos, I believe this will help you out greatly: http://viper.shadowflareindustries.com/index.php?doc=n64asm
  12. For function arguments, I've always assumed it to be a0, a1, a2, a3, (sp + 0x10), ... and so on. I've never heard of fastcalling
  13. Jason777

    Help editing Gohma

    You can just open the zovl file in a hex editor. File extensions mean nothing in OoT modding. And that brief explanation was pretty much a mini-tutorial. Mallos, I just learned what the opcodes do and how some basic things on how the CPU works (a jal places a return address in ra, signed numbers are after 0x7FFF, etc) and then I put that knowledge to the test by starting off with simple things like spawning actors with L button
  14. You've been placing a lot of things in free space, huh? I would recommend just injecting your dungeon over the map area that were planning on replacing. Literally, use the start offset of the scene/map and inject the dungeon there.
  15. I think I'm getting close to finding the function that causes an actor to die... I was looking at things that set Queen Gohma's health today when I found an instruction that checks to see if her health is 0. If it is, then it would make a call to a function within the actor (probably a function which plays the unique death cutscene that all bosses have) and then would make an external function call to 0x80032C7C. I believe that this may be the function that actually causes an actor to die... Now for those who are confused and saying "you already found the kill actor function?", that function was more of a routine to "unload" an actor from the game. Anyways, I would look into this function if I had anymore time. ???? external_func_80032C7C(RAM_Actor * a0, RAM_Actor * a1) : Possibly causes a specified actor to die? $L000182: addiu v1,v1,%lo(data_80919150) bne v1,v0,$L000183 lw t6,44($sp) lw a0,0(t6) jal external_func_800635D0 sw v1,36($sp) beq v0,$zero,$L000183 lw v1,36($sp) lbu t7,175(s0) li a1,14352 or a0,s0,$zero subu t8,t7,v0 sb t8,175(s0) lb t9,175(s0) blez t9,$L000184 nop jal external_func_8002F828 or a0,s0,$zero jal func_8091683C or a0,s0,$zero lw a0,52($sp) jal external_func_800299AC addiu a1,s0,56 b $L000185 li t0,10$L000184: jal func_80915F38 lw a1,52($sp) lw a0,52($sp) jal external_func_80032C7C or a1,s0,$zero li t0,10Taken from: http://spinout182.com/mqd/Boss_Goma.S
  16. Jason777

    Help editing Gohma

    There are certain things that are standard for all RAM actors... for example, actors with health store their health at 0xAF bytes away from their actor panel. The pointer to the actor panel is commonly stored within register s0 of an actors disassembly (if not then s0 usually holds a pointer to Link's actor panel). The way that you would go about searching for a way to change an actors health would be like this... [*]Find your disassembled actor on spinout's site. For Queen Gohma, this would be it: http://spinout182.com/mqd/Boss_Goma.S [*]Press ctrl+F to start a search. [*]Enter in the decimal form of 0xAF... it would be 175. We do this because the program that disassembles actors, zOVLDis, usually has everything in the decimal format. [*]Out of the results that you get, look for ones that are of the following formats: sb xx, 175 (yy)// Where xx and yy can be any register but different from each other. Usually yy tends to be s0. sb xx, %lo(data_vvvvvvvv) (yy) // Where xx and yy can be any register but different from each other and vvvvvvvv is a virtual offset to the data section within the actor. This is a lot less common then the first format but it is possible.[*]In Queen Gohmas's case, I found only two instructions which set her health (lucky me!):// Found in func_80915A94; This shows that it sets the actor's health to 0x0A (or 10)li t7,10li t8,255sb t7,175(s0) // Found in func_80919F8C; this is seems to be the code in the actor that decrements the actor's health when hit and checks to see if the actor should die.lbu t7,175(s0)li a1,14352or a0,s0,$zerosubu t8,t7,v0sb t8,175(s0)lb t9,175(s0)blez t9,$L000184 I'll probably come back later and tell you what exactly you need to change, but I'll leave it at note of telling you that the first result is the one you want to modify. Huh... I just realized I made a little mini-tutorial on locating common actor variables (like health) and hacking actors with assembly. I would've thought that it would be harder to explain. EDIT: Heavy, go to this offset in Queen Gohma's compiled actor (http://spinout182.com/mqd/Boss_Goma.zovl) and modify the byte according to your needs... 0x2F7 : Queen Gohma's health. It is 0x0A by default. If you want a ROM address to work with then here you go... 0x00CDF367 : ROM offset of Queen Gohma's health. It is 0x0A by default.
  17. Jason777

    Help editing Gohma

    MIPS assembly is about as hard as N64 game modding can get. It helps to approach assembly code from the perspective of a coder to try and figure out why they would write things certain ways.
  18. Jason777

    Help editing Gohma

    You would edit her object in order to change her color. Look in the object list on spinout's site. As for speed and other attributes like health, you would modify those in the actor (Boss_Goma). If you really want to know, I would suggest opening up her disassembled actor by clicking the src link and then look for instructions that write to her health in the actor panel. If you're interested, you should probably start learning MIPS assembly.
  19. This is some great information, Airikita. Keep it coming. You seem to have great ability and success when reverse engineering the game so I don't doubt that you will be able the crack the cutscene format to a great extent.
  20. Kind of an old photo (when I was 16), but I haven't changed too much. The only change is shorter hair and a longer face... Anyways I was with a really good of friend of mine that day when I tried kicking her off her chair at the computer I'm 18 right now.
  21. The Majora's Clock item really looks interesting. I can't wait to see what it does.
  22. She loved it I was pretty smug afterwards haha.
  23. I really don't know as I've always just relied on a tool to do it for me I took a snippet of SoulofDiety's (KaminoTamashi) code... printf("oknrecalculating crc... "); uint32_t crc[2], d, r, t1, t2, t3, t4, t5, t6 = 0xDF26F436; t1 = t2 = t3 = t4 = t5 = t6; rewind(fp); fread(data, 1, 0x00101000, fp); for (i = 0x00001000; i < 0x00101000; i += 4) { d = (data[i] << 24) | (data[i + 1] << 16) | (data[i + 2] << 8) | data[i + 3]; if ((t6 + d) < t6) t4++; t6 += d; t3 ^= d; r = (d << (d & 0x1F)) | (d >> (32 - (d & 0x1F))); t5 += r; if (t2 > d) t2 ^= r; else t2 ^= t6 ^ d; t1 += ((data[0x00000750 + (i & 0xFF)] << 24) | (data[0x00000751 + (i & 0xFF)] << 16) | (data[0x00000752 + (i & 0xFF)] << 8) | data[0x00000753 + (i & 0xFF)]) ^ d; } crc[0] = t6 ^ t4 ^ t3; crc[1] = t5 ^ t2 ^ t1; crc[0] = (crc[0] >> 24) | ((crc[0] >> 8) & 0xFF00) | ((crc[0] << 8) & 0xFF0000) | ((crc[0] << 24) & 0xFF000000); crc[1] = (crc[1] >> 24) | ((crc[1] >> 8) & 0xFF00) | ((crc[1] << 8) & 0xFF0000) | ((crc[1] << 24) & 0xFF000000); fseek(fp, 0x10, SEEK_SET); fwrite(crc, 1, 8, fp); printf("okn");Taken from: http://www.the-gcn.com/topic/2251-sods-software/?p=34693
  24. Jason777

    PROM?

    I asked my girlfriend to prom two weeks ago through a text hack of Mario Kart Wii. I just thought it was pretty nifty and was wondering what you all think
×
×
  • Create New...

Important Information

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