Register - Login
Views: 87834131
Main - Memberlist - Active users - Calendar - Wiki - IRC Chat - Online users
Ranks - Rules/FAQ - JCS - Stats - Latest Posts - Color Chart - Smilies
12-15-17 12:41:39 AM

Jul - SM64 Hacking - Behaviour Scripts New poll - New thread - New reply
Pages: 1 2 3 4 5Next newer thread | Next older thread
yoshiman
Member
Level: 22


Posts: 86/95
EXP: 55912
For next: 2438

Since: 12-21-07
From: London, England

Since last post: 8.0 years
Last activity: 8.0 years

Posted on 07-08-08 05:36:59 PM Link | Quote
It's good that my videos have been so helpful. The way I often find object behaviours and graphic IDs is to find the object or spawn it and then I can look at the behaviour pointers in its object structure. Knowing the start of the behaviour script segment it's simple to work out the segment/offset value. This value can then be searched for and will either be found in the coding or in a look up table (e.g., an item box).

As for the graphic ID, that uses a look up table so you just need to search for the graphic pointer value in the RAM, subtract it from the start of the table and divide it by four (as the pointers are 4 bytes long). For non-common graphic objects this has to be done in the levels that have that graphics loaded.
messiaen
Catgirl
Level: 64


Posts: 162/1085
EXP: 2167295
For next: 46802

Since: 11-20-07


Since last post: 3.0 years
Last activity: 2.0 years

Posted on 07-09-08 08:38:33 PM (last edited by messiaen at 09-08-08 01:05 PM) Link | Quote
I was experimenting with the "Burning" behaviour (0x0C84) and turns out that the command 0x34 is used for animations, but in a simpler way than the 0x27 animation pointer. All other behaviors which use the 0x34 are "unused", or one could say, "spawned" ones. It is placed between the 0x08 and 0x09 ones:

From the 0x0C84 Burning Behavior (Edit: corrected):

21AAB8/000CB8 08 00 00 00
21AABC/000CBC 10 2B 00 00
21AAC0/000CC0 34 1A 00 02
21AAC4/000CC4 09 00 00 00

Maybe the second byte (1A) could be the RAM offset index (refer to previous posts for more info on this). The fourth byte seems always to be 02 or 04. Remove the 0x34 from the behavior and the flames won't be animated. The earlier 0x10 doesn't seems to be related with the animation.

Edit: List of useful behaviors for custom objects. You have to change the 0x2A collision pointer so that it points to your object:


Breakable When hit by a Cannon (0x624 or 0x638) <-- 0x624 is a alternate using 0x04 jump.

Clock-like rotation (0x6E0) <-- Clock-like Rotation on the "Y" axis.

Door Behavior (0xB0C) <-- (Animation is on a shared bank [0x03], so that's safe)

Grindel-like Behavior (0xB58)

Twomp-like Behavior (0xB8C or 0xBc8)

Moving & Solid Behav (0xCFC) <-- When you step on it, it goes down until it hits the ground and then gradually
ascend to its initial position.

Elevator (0xD30) <-- Sort like the previous one. Should be tested a bit more before including it.

Tilting Platform (0x1030) <-- Works nice

Squishable Platforms (0x1064) <-- As used in Bowser's Fire Sea. Works better with very big objects.

Rotation 2 (0x10D8) <-- Not only rotates but also produces fire

"Unused" (0x1340) <-- Elevator-like movement

"Unused" (0x15E4) <-- Very cool, pound it to destroy and produces some "fireworks" . Can't remember where this is
used in the game.

"Unused" (0x1B88) <-- 180 degrees "X" rotation, stops for a second, 180 degrees "X" rotation.

Rotating CCW (0x1D14) <-- Better than 0x10D8 as it doesn't produces fire.

Sinks When Stepping on it (0x1D40) <-- Sinks just a little bit.

Moving Horizontally (0x1D78) <-- Move a bit, then return. Also sinks a bit. Probably best used on water/lava.

Rotating CW With Fire Bars (0x1DA8) <-- Similar to 0x10D8, but the fire is continuous and on both sides of the
platform/object.

"Unused" (0x1E04) <-- Floating on water/Lava. This is a sub-object created by the "Floating Wood Bridge" behavior
(0x1E30), but works on its own as a "floating behavior".

Rotation Around Y Axis (0x1E6C) <-- A bit faster than the "Clock" rotation.

Sinking in Lava (0x1E94) <-- Almost the same as the Sinking Platform behavior.

Tilting Inverted Pyramid (0x1EF8) <-- Good tilting effect for most objects.

Tox Box (0x1F90) <-- Rotation data is stored in the checksum area, so it works on all levels.

Platform Swivel 2 (0x2194) <-- Falls very quickly, stops for a few seconds and return to original position.

Elevator (0x28CC) <-- Can't remember where this is used in the game, but it produces a tilting in X axis effect.

Elevator (0x292C) <-- Like Swivel 2, but a bit slower.

Rotating Merry-Go-Round (0x2968) <-- Rotates Slowly around Y axis

"Unused" (0x38E8) <-- Rotates 45 degrees around Z axis.

Moving Back & Forth 1 (0x3910) <-- As used in Twomp's Fortress. Works very well!

Spindel Behavior (0x3B00) <-- This one is quite fun .

Moving Up And Down (0x3B30) <-- Moves up and down in a somewhat restricted amplitude. [Olhar ASM]

Pyramid Elevator (0x3B60) <-- Like other elevators, however this doesn't seem to return to its original position.

Pitoune 2 (0x3F40) <-- Used in the Rolling Log.

Unknown (0x3F78) <-- Rotates (falls) 90 degrees around Z axis. Not a friendly behavior .

Pitoune (0x3FA4) <-- Can't tell the difference from Pitoune 2.

Arrow Lift Behavior (0x4314) <-- Just boves back and forth?

Poundable (0x481C) <-- It works. Careful because there is a 0x32 scaling in its behavior. When pounded 3 times, a
sound will play

Clock Pendulum Behavior (0x4C24) <-- Oscilates.

Sliding Platform (0x4C94) <-- Slides in a aggressive pattern.

Clock Platform Behavior (0x4D28) <-- Goes up and Down) [Olhar ASM: 80307B58)

Clock Main Rotation (0x4D64) <-- Rotates very slowly a few degrees each time, like a clock

Rotating Clock Platform (0x4D90) <-- Rotates around "X" axis

Grindel Behavior (0x525C) <-- Naked agression!

Pendulum-like Movement (0x54B8) <-- Similar to 0x4C24

"Unused" (0x5504) <-- Falls a bit, then explode. Where is this used?!


Doogie1012
Member
Level: 14


Posts: 17/35
EXP: 11969
For next: 1102

Since: 10-21-08


Since last post: 7.0 years
Last activity: 4.0 years

Posted on 12-29-08 09:43:10 AM Link | Quote
I was wondering if anyone had checked to see if the speeches by Bowser, King Bom-Omb etc could be removed via the behaviour script, I'm hoping they used one 0C command for the speech so we could possibly remove it?

If we achieve this, then we can make multiple bowser boss fights without the player having to speak to all of them. Though I guess the speech asm would end up triggering/turning on the boss fight anyway.
messiaen
Catgirl
Level: 64


Posts: 448/1085
EXP: 2167295
For next: 46802

Since: 11-20-07


Since last post: 3.0 years
Last activity: 2.0 years

Posted on 12-29-08 03:42:38 PM Link | Quote
While you can get some interesting results by combining all these 0x0C calls, specific actions require a deeper look into the code. What the 0x0C command sets are the entry-points for these objects code. If it is located between a "08 00 00 00" and "09 00 00 00" block, this means it will be countinously executed. If not, it's only executed once (ie, for setting up variables or reading arguments from 0x24 level commands).

Example:

ROM Addr: 0021E52C Hex Behav: 1300472C
Description: Goomba Walk
21E52C/00472C 00 05 00 00
21E530/004730 11 01 20 49
[...]
21E558/004758 0C 00 00 00 80 2F F4 08 <-- Only gets executed once
21E560/004760 08 00 00 00
21E564/004764 0C 00 00 00 80 2F F9 6C <-- Main object loop
21E56C/00476C 09 00 00 00

About the message boxes, 0x802A4BE4 is the function that creates these, so what you could try is to just NOP them (replace the instruction with 0's) so it doesn't get executed and see what happens.

Download the most recent disassembly file here: http://sites.google.com/site/messiaen64/checksum-area-disassembly-big. Now search for JAL 0x802A4BE4. For this function, register A3 will contain the message number (use Text Wrangler for reference). So what you should look for is the instance where 0x802A4BE4 is called where A3 equals the message number for the boss message. Here is an example:

802A7F7C: JAL 0x802A4BE4 <-- "Show Dialog Box" Function
802A7F80: ADDIU A3, R0, 0x0080 <-- Argument 3 = Message number (80 = 128)

You can use Nemu memory editor to go to 0x802A7F7C, replace it with 00000000 and save the game (important). Now go to whoever says that message and see what happens.

If you have ASM-specific question, feel free to ask them in the ASM Hacking thread.
yoshiman
Member
Level: 22


Posts: 90/95
EXP: 55912
For next: 2438

Since: 12-21-07
From: London, England

Since last post: 8.0 years
Last activity: 8.0 years

Posted on 01-26-09 02:02:36 PM Link | Quote
Sorry this is off topic to what you was previously talking about but VL-TONE asked me to have a look at an invisible object in the waterfall outside the castle. The object he mentioned is actually hidden in the waterfall area even when using my code to see the invisible objects; there are two other invisible objects at the top and middle of the waterfall that you can use when using my code.

The object that VL-TONE wanted to know about which has the behaviour 0x13003C90 is used by the object at 0x80349748 outside the castle for the NTSC game. Its only purpose is to call the function 0x802F0950, which thanks to Nemu I can show you:

802F0950: ADDIU SP, SP, 0xFFE8
802F0954: SW RA, 0x0014 (SP)
802F0958: LUI T6, 0x8034
802F095C: LW T6, 0xCBD0 (T6)
802F0960: ADDIU AT, R0, 0x0003
802F0964: LBU T7, 0x0000 (T6)
802F0968: BNE T7, AT, 0x802F0978
802F096C: NOP
802F0970: BEQ R0, R0, 0x802F0994
802F0974: NOP
802F0978: LUI A0, 0x6010
802F097C: LUI A1, 0x8033
802F0980: ADDIU A1, A1, 0x31F0
802F0984: JAL 0x8031EB00 play_sound2
802F0988: ORI A0, A0, 0x4001
802F098C: BEQ R0, R0, 0x802F0994
802F0990: NOP
802F0994: LW RA, 0x0014 (SP)
802F0998: ADDIU SP, SP, 0x0018
802F099C: JR RA
802F09A0: NOP

Using my naming of the functions, the behaviour function calls the play_sound2 function which is used, for example, to play the pause sound. So, this behaviour plays a sound whenever you go outside the castle, except that the sound seems to be blank, or at least it is when I transfer the sound values (0x60104001) to the pause coding.

The value 0x10 is loaded from a pointer which I don't know it's purpose and why it plays the sound unless it's equal to 0x03. If you want proof that the waterfall object does play a sound when you go outside the castle, this Gameshark code changes the sound to that of the pause sound effect. It's for the NTSC version; turn the code on before the title screen appears. You'll hear the sound when outside the castle and if you go inside and out again.

812F097A 7002
812F098A FF81

Why would this invisible object need to be placed in the waterfall, I don't think the sound function is capable of 3D sound so it can't be to do with position? The pointer that the sound function needs seems to be to do with soud related variables.
VL-Tone
Member
Super Mario 64 forum moderator
Level: 51


Posts: 377/621
EXP: 953104
For next: 60834

Since: 07-27-07
From: Montreal, Canada

Since last post: 108 days
Last activity: 77 days

Posted on 01-26-09 10:36:21 PM (last edited by VL-Tone at 01-26-09 10:37 PM) Link | Quote
Nice to see you around here yoshiman! (BTW, you're doing amazing stuff in SM64 via RAM hacking, your videos are always entertaining in many ways ).

What you forgot to say is that what makes this object "interesting" is that it's also found precisely where the "L is Real" plaque is in the castle courtyard.

More recently I suspected it had something to do with sound. It was named "Camera anchor" in TT64 for the longest time, because of some silly early assumption I had back when I started TT64. Other objects that I also named "Camera anchor" eventually were found to be sound generators for birds, crickets and other ambient sounds, that why I thought that this one may also be sound related.

The game engine does use some primitive 3d sound positioning, as the bird sound generators (behav pointer 0x13003C7C) are strategically placed around the Castle grounds, these and the waterfall sound will move in the stereo field when you move around the level. (BTW I just realized testing this that my emulator has the left and right channel reversed...)

What I identified as being the waterfall sound generator was another invisible object found in the waterfall, but much lower (0x13003C30).

Both the bird and water fall sound behavior script show that an ASM function is called each frame while playing:

0021DA7C / 13003C7C [ 00 08 00 00 ]

0021DA80 / 13003C80 [ 08 00 00 00 ]
0021DA84 / 13003C84 [ 0C 00 00 00 80 2F 08 98 ]
0021DA8C / 13003C8C [ 09 00 00 00 ]


But behavior 13003C90 on the other hand has its 0x0C function call outside the 0x08...0x09 loop, so it means it's only called once when the behavior is first called.

0021DA90 / 13003C90 [ 00 08 00 00 ]

0021DA94 / 13003C94 [ 0C 00 00 00 80 2F 09 50 ]
0021DA9C / 13003C9C [ 08 00 00 00 ]
0021DAA0 / 13003CA0 [ 09 00 00 00 ]


That's why I think it may be a sound initialization feature pertaining to ambient sounds. That doesn't explain why the particular placement on the top of the waterfall, or in the star statue in the courtyard. Removing the object from the game doesn't seem to change anything noticeable.

And one last thing, the two other invisible objects at the top of the waterfall are level exits for the Metal Cap level (dead or alive).


yoshiman
Member
Level: 22


Posts: 91/95
EXP: 55912
For next: 2438

Since: 12-21-07
From: London, England

Since last post: 8.0 years
Last activity: 8.0 years

Posted on 01-27-09 08:14:45 AM (last edited by yoshiman at 01-27-09 01:01 PM) Link | Quote
Thanks VL-TONE, I'm here to help. I had a look at another invisible object outside the castle, the one that is the near the tree with the 1-up. I've only just looked at the coding, the object has behaviour 13003C7C and it too plays a sound or initializes something to do with sound when you go outside the castle. But this object checks the value at offset 0x144 in the object structure to see what sound is played although the one I tried was blank.

I had a look at the invisible objects in the tree you get a 1-up mushroom from outside the castle. The invisible object at the top of the tree spawns the 1-up in advance and the invisible object near to the top of the tree. When Mario climbs the tree he touches and removes the object which writes 1 to offset 0xF4 in the 1-up object. As Mario does a handstand he touches and removes the second invisible object which writes 2 to offset 0xF4 in the 1-up object, activating it. It seems the need for the first invisible object is to make sure that Mario climbed the tree.
VL-Tone
Member
Super Mario 64 forum moderator
Level: 51


Posts: 378/621
EXP: 953104
For next: 60834

Since: 07-27-07
From: Montreal, Canada

Since last post: 108 days
Last activity: 77 days

Posted on 01-28-09 10:53:06 PM Link | Quote
Originally posted by yoshiman
Thanks VL-TONE, I'm here to help. I had a look at another invisible object outside the castle, the one that is the near the tree with the 1-up. I've only just looked at the coding, the object has behaviour 13003C7C and it too plays a sound or initializes something to do with sound when you go outside the castle. But this object checks the value at offset 0x144 in the object structure to see what sound is played although the one I tried was blank.


The 13003C7C behavior has been confirmed to produce the ambient bird/crickets sounds. There are 3 objects using it in Castle Ground, each using a different behavior parameter (0, 1 and 2 respectively) but I didn't experiment to see what the parameters do.

Interesting stuff about the hidden 1up. Note that another invisible object appears when Mario climbs the tree, which spawns falling leaves.
messiaen
Catgirl
Level: 64


Posts: 472/1085
EXP: 2167295
For next: 46802

Since: 11-20-07


Since last post: 3.0 years
Last activity: 2.0 years

Posted on 01-31-09 02:37:50 PM Link | Quote
Behavior 0x01AC is connected with the Activate Cap Switch (0x01CC). Once the a cap switch is pressed, it stops using behavior 0x11c and instead use 0x1ac, which is just a solidity behavior for the pressed switch:


ROM Addr: 00219FAC Hex Behav: 130001AC
>>>>>>>>>>Unused Behavior?
219FAC/0001AC 00 09 00 00
219FB0/0001B0 11 01 00 09
219FB4/0001B4 2A 00 00 00 05 00 34 48 ; collision for pressed switch
219FBC/0001BC 08 00 00 00
219FC0/0001C0 0C 00 00 00 80 38 39 CC ; solidity
219FC8/0001C8 09 00 00 00
yoshiman
Member
Level: 22


Posts: 95/95
EXP: 55912
For next: 2438

Since: 12-21-07
From: London, England

Since last post: 8.0 years
Last activity: 8.0 years

Posted on 02-20-09 11:15:39 AM Link | Quote
I have done a code which spawns ten yellow coins and a single blue coin instead of the water bomb in Bob-omb Battlefield. What is strange is that for every water bomb two objects are spawned which are the water bomb and its shadow (which in my code I swapped for yellow and blue coins):

NTSC

80306174 LUI T2, 0x1300
80306178 ADDIU T2, T2, 0x4BA8 Water bomb behaviour
8030617C ADDIU T0, R0, 0x0054 Water bomb GFX ID

80306254 LUI A2, 0x1300
80306258 ADDIU A2, A2, 0x4BD4 Water bomb shadow behaviour
80306264 ADDIU A1, R0, 0x0055 Water bomb shadow GFX ID

At first I thought it was to do with the shadow size needing to change on just one axis but that's not possible. Can anyone think of why the shadow is separate?
Stevoisiak
Member
Level: 36


Posts: 222/283
EXP: 288615
For next: 19495

Since: 11-22-07
From: New York, Long Island

Since last post: 7.0 years
Last activity: 1.0 years

Posted on 02-20-09 11:29:46 AM Link | Quote
Originally posted by Doogie1012
I was wondering if anyone had checked to see if the speeches by Bowser, King Bom-Omb etc could be removed via the behaviour script, I'm hoping they used one 0C command for the speech so we could possibly remove it?

If we achieve this, then we can make multiple bowser boss fights without the player having to speak to all of them. Though I guess the speech asm would end up triggering/turning on the boss fight anyway.

Have you tried making multiple bowsers? You only need to speak to one of them. The main problem is that the others wont activate until you spin their tails.
Bob-omb8194
Still Explodin'
Level: 75


Posts: 8/1654
EXP: 3817263
For next: 9641

Since: 02-19-09
From: NC, US

Since last post: 6.0 years
Last activity: 6.0 years

Posted on 02-20-09 07:03:23 PM (last edited by Bob-omb8194 at 02-20-09 07:20 PM) Link | Quote
A discovery that I used in one of my hacks was a working Mini Chilly Bully behaviour.
It is in VL_Tone's Behaviour document:

ROM Addr: 0021D4C8 Hex Behav: 130036C8
>>>>>>>>>>Unused Behavior?
21D4C8/0036C8 00 04 00 00
21D4CC/0036CC 11 01 00 09
21D4D0/0036D0 27 26 00 00 06 00 39 94
21D4D8/0036D8 1E 00 00 00
21D4DC/0036DC 2D 00 00 00
21D4E0/0036E0 10 1B 00 10
21D4E4/0036E4 0C 00 00 00 80 2E B0 5C
21D4EC/0036EC 08 00 00 00
21D4F0/0036F0 10 05 00 00
21D4F4/0036F4 0C 00 00 00 80 2E B9 D0
21D4FC/0036FC 09 00 00 00

It works very well, and only works in Cool Cool Mountain and Snowman's Land. In Cool Cool Mountain, the bully melts half way down the mountain.

Edit: I also found a star with a hex behaviour of 1300F5B0. It only works in Whomp's Fortress.
messiaen
Catgirl
Level: 64


Posts: 482/1085
EXP: 2167295
For next: 46802

Since: 11-20-07


Since last post: 3.0 years
Last activity: 2.0 years

Posted on 02-21-09 09:14:27 AM Link | Quote

It works very well, and only works in Cool Cool Mountain and Snowman's Land. In Cool Cool Mountain, the bully melts half way down the mountain.


Try this Gameshark code, it should fix the problem with the "melting" Bully:

81338590 c59c
81338592 4000

The Chilly Boss ASM constantly checks if the Y position is less than 1030 to trigger some special action (I guess when you beat him), so this code just changes this value to -5000.


Edit: I also found a star with a hex behaviour of 1300F5B0. It only works in Whomp's Fortress.


0xF5B0 is an invalid behavior pointer, as the last behavior is 56A4.
Bob-omb8194
Still Explodin'
Level: 75


Posts: 13/1654
EXP: 3817263
For next: 9641

Since: 02-19-09
From: NC, US

Since last post: 6.0 years
Last activity: 6.0 years

Posted on 02-21-09 04:16:23 PM Link | Quote
Thank you, that could help make a better hack.
VL-Tone
Member
Super Mario 64 forum moderator
Level: 51


Posts: 399/621
EXP: 953104
For next: 60834

Since: 07-27-07
From: Montreal, Canada

Since last post: 108 days
Last activity: 77 days

Posted on 02-21-09 04:34:58 PM Link | Quote
Originally posted by messiaen
Try this Gameshark code, it should fix the problem with the "melting" Bully:

81338590 c59c
81338592 4000

The Chilly Boss ASM constantly checks if the Y position is less than 1030 to trigger some special action (I guess when you beat him), so this code just changes this value to -5000.



Interestingly, I was just recently trying to find a way to hack Yoshi's behavior (asm) code to prevent him from disappearing when he's lower than the castle roof.

I added a new feature to the behavior script dumper so that it prints the ROM address of 0x0C functions.


0021E338 / 13004538 [ 00 04 00 00 ]
0021E33C / 1300453C [ 11 01 20 09 ]
0021E340 / 13004540 [ 27 26 00 00 05 02 41 E8 ]
0021E348 / 13004548 [ 2F 00 00 00 00 80 00 00 ]
0021E350 / 13004550 [ 1E 00 00 00 ]
0021E354 / 13004554 [ 23 00 00 00 00 A0 00 96 ]
0021E35C / 1300455C [ 28 00 00 00 ]
0021E360 / 13004560 [ 2D 00 00 00 ]
0021E364 / 13004564 [ 0C 00 00 00 80 2F 8E 54 ] ROM addr: 000B3E50
0021E36C / 1300456C [ 08 00 00 00 ]
0021E370 / 13004570 [ 10 05 00 00 ]
0021E374 / 13004574 [ 0C 00 00 00 80 2F 96 5C ] ROM addr: 000B4658
0021E37C / 1300457C [ 09 00 00 00 ]



To find the ROM address, just subtract 0x80245004 from the RAM address (I'm not sure if it works for all 0x0C functions though)

Now, using that I was able to find in ROM the value that determines the number of stars needed before Yoshi appears... It's at 0xB3EC7 in ROM, with the current value being 0x78 (120). Change it to 0x00 and Yoshi will always be on the roof.

The remaining problem is that when Yoshi is lower than the castle roof, he disappears after 2 seconds (if you're quick enough, you can still go talk to him). I guess that a similar height check exists for Yoshi and it could be modified just like the chill bully.

I found a few other things that can be permanently modified in ROM using much the same technique, like the number of stars needed before MIPS (the rabbit) appears (I forgot to note the actual offset, but it wouldn't be hard to find it again).

Other interesting find, the model ID and behavior for what is spawned by the "Metal Ball Generator 2" behavior.

At 0xAA0B3 (in ROM) you can set the model ID and at 0xAA0A6 there are two bytes used for the behavior pointer of the spawned object. Modifying these you can make it spawn Goombas, Bob-ombs, 1ups, Yoshis? and whatever object you want. Only one little problem, the Metal Ball Generator 2 behavior only activates when Mario is at a certain distance, when he's too close it stops spawning objects.
messiaen
Catgirl
Level: 64


Posts: 486/1085
EXP: 2167295
For next: 46802

Since: 11-20-07


Since last post: 3.0 years
Last activity: 2.0 years

Posted on 02-22-09 07:33:10 AM Link | Quote
Just a little correction, the conversion is actually RAM - 0x80245000, otherwise you'll be an instruction ahead.

Yoshi's last Y value is a 32-bit float read from 0x80338974, in ROM 0xF3974. The value is 0x45034000, which translates to 2100 (decimal).

Most hardcoded stuff (collision, pointers, model ID, scaling) is usually in the first 0x0C call, outside of the 'loop area'. Its usually pretty straightforward, just setting some initial parameters for the RAM object.
Bob-omb8194
Still Explodin'
Level: 75


Posts: 17/1654
EXP: 3817263
For next: 9641

Since: 02-19-09
From: NC, US

Since last post: 6.0 years
Last activity: 6.0 years

Posted on 02-22-09 10:04:20 AM (last edited by Bob-omb8194 at 02-22-09 02:34 PM) Link | Quote
Originally posted by VL-Tone


I found a few other things that can be permanently modified in ROM using much the same technique, like the number of stars needed before MIPS (the rabbit) appears (I forgot to note the actual offset, but it wouldn't be hard to find it again).






This is off of Messiaen's site:
int RED_COINS_FOR_STAR = 0xADF83; // Default = 08 max
int RED_COINS_FOR_STAR2 = 0xADDDF; // Default = 08
int START_LIVES = 0x1001B; // Default = 04
int STARS_FOR_YOSHI = 0xB3EC6; // Default 0x78
int STARS_FOR_MIPS_1 = 0xB34CA; // Default 0x0F (First time he appears)
int STARS_FOR_MIPS_2 = 0xB3522; // Default 0x32 (Second time time he appears)
int PRINCESS_SLIDE_TIME_LIMIT = 0xB7A6; // Default: 0x0276 (21 seconds). # Time = seconds * 30 (dec).
int KOOPA_PATH_BOB = 0xF024D7; // inside Bob-omb's level bank 07 (extended ROM)
int STAR_FROM_KOOPA_BOB = 0xED868; // X, Y, Z star location (integers)
int KOOPA_PATH_THI = 0xF69F70; // Tiny-Huge Island
int STAR_FROM_KOOPA_THI = 0xED878;// X,Y, Z

Hope it helps.

BTW: Does anyone know where the pointers that define when Bowser's Sub dissapears and the poles appear, when the sky in Jolly Roger Bay changes and gets rid of the fog, or when the mushrooms from the bowsers level appear?
rstewart215804
User
Crazed Mario 64 Hacker!!!
Level: 11


Posts: 18/18
EXP: 4674
For next: 1311

Since: 09-12-07


Since last post: 8.0 years
Last activity: 7.0 years

Posted on 02-22-09 04:13:11 PM Link | Quote
Did you guys know there is a function pointer list at 0x8038b9b0 for all the behavior commands? Just by looking at the function in ram you can understand behaviors better.

For instance the 0x2A command does nothing more than get the bank&offset from itself, have the 0x80277F0 function turns the bank&offset into a ram pointer, and stores that pointer at the address of word[80361160] + 0x218.
messiaen
Catgirl
Level: 64


Posts: 487/1085
EXP: 2167295
For next: 46802

Since: 11-20-07


Since last post: 3.0 years
Last activity: 2.0 years

Posted on 02-22-09 04:17:02 PM (last edited by messiaen at 02-22-09 04:33 PM) Link | Quote
Thanks to Cellar Dweller almost 100% of the behavior commands are now documented. Most of them are pretty straighforward, providing easy access to the object struct. Check out his notes for commented disassemblies and descriptions of them:

Cellar Dweller's Mario 64 notes.

By the way, it's nice to see you around .
uberoe
User
Level: 10


Posts: 6/17
EXP: 3915
For next: 499

Since: 05-31-09


Since last post: 7.0 years
Last activity: 7.0 years

Posted on 05-31-09 06:45:35 PM Link | Quote
I could'nt find an oppropriate thread for this question but this one is the closest to the question, so you guys know when you fight bowser or free the chain chop you know those little cutscenes does anyone know what makes them happen or how they work i know it deals with the behav.
Pages: 1 2 3 4 5Next newer thread | Next older thread
Jul - SM64 Hacking - Behaviour Scripts New poll - New thread - New reply




Rusted Logic

Acmlmboard - commit 2f1bc75 [2017-08-27]
©2000-2017 Acmlm, Xkeeper, Inuyasha, et al.

32 database queries, 10 query cache hits.
Query execution time: 0.177418 seconds
Script execution time: 0.028219 seconds
Total render time: 0.205637 seconds