View Full Version: Interested in scripts

fuzziqer >>GameCube Action Replay Simulator and Control Simulator >>Interested in scripts


<< Prev | Next >>

_glook- 06-12-2006
Interested in scripts
I am really interested in script making but I don't really know what to do. I've got GCNrd but I don't know what to do after I've found the RAM address of what I want (like x coordinates in Super Smash Brothers). Can anyone help?

biolizard89- 06-12-2006

Download GCN Code Helper from http://staff.littlemoonproductions.com/biolizard89/gcars-cs/cthelper.zip Make a code with the address you found and the value 0. That's one line of the script. An entire script is just a bunch of those codes.

_glook- 06-12-2006

Whoa, thanks a bunch man. One last thing though, I remember fuzz saying something about certain variables changing in the RAM locations so they're hard to pin down. Is this something I should be worrying about? From looking at Fuzziquer's scripts, it looks like some of these variables are hard to pin down.

biolizard89- 06-13-2006

Whoa, thanks a bunch man. One last thing though, I remember fuzz saying something about certain variables changing in the RAM locations so they're hard to pin down. Is this something I should be worrying about? From looking at Fuzziquer's scripts, it looks like some of these variables are hard to pin down. Some games have variables that move around in RAM. These are called pointer variables. To find the variable's pointer's location, there are various things you can do. Some involve using breakpoints and ASM. Another, easier way is to just find the variable's address once, make it move (e.g. by changing levels), find it again, find the distance in RAM that it moved, and search for addresses whose value changed by that amount. You need the la-*test*-('") version of GCNrd (1.10b) to do this, because only it supports multiple simultaneous searches. 1.00b will not work with this method. There was a discussion on pointer codes on GSCentral.org last year, if you search through their archives, you might find it.

_glook- 06-14-2006
HOLY CRAAAAAPPP!!!
I found the "real damage" variable for player 1 in SSBM!!! ... On Hyrule Temple. Stupid pointer variables. Thanks for all your help biolizard. But there's still something bugging me. Like the entirety that is GCN CodeType Helper. I haven't found a tutorial on it and I need help. What do you mean by "the value to 0"? There's all this codetype stuff on the form and it's making my head spin! Oh and since it IS a pointer variable (I searched GSCentral like you said), is scripting for a pointer harder than for a non-pointer? What do I do with the pointer once I find it? It doesn't look like I can directly get data using the pointer variable, especially considering the pointer variable's value doesn't even contain the address of the memory location that contains the "damage value". Also, I got 3 different pointer codes. They all have the same value so I'm assuming I can just go ahead and use just any one of them, right? Update: Okay, I've messed with the GCN Codetype helper and I THINK I have the right scripts. Basically, for a 32 bit pointer variable, I should click "32 bit" and let's say my address of the pointer variable is 80452000. I stick this in "address" and then choose "Struct Write" in "Type 0". It displays "44452000 xxxxxxxx xxxxxxxx: Word to write to address (pointer at 80452000)" And then just stick 00000000 for x, right? Anyway, thanks so much for your help. After we get SSBM stabalized, me and worm were thinking of making scripts for other games too. Too bad I sold my copies of Mario Kart and F-Zero just recently :(.

biolizard89- 06-14-2006
Re: HOLY CRAAAAAPPP!!!
Update: Okay, I've messed with the GCN Codetype helper and I THINK I have the right scripts. Basically, for a 32 bit pointer variable, I should click "32 bit" and let's say my address of the pointer variable is 80452000. I stick this in "address" and then choose "Struct Write" in "Type 0". It displays "44452000 xxxxxxxx xxxxxxxx: Word to write to address (pointer at 80452000)" And then just stick 00000000 for x, right? That's correct, as long as the variable is not offset from the pointer value. For example, if the pointer reads 01234567, then that will work if the address of the actual variable is also 01234567. If it's offset from that by a certain number of bytes, you'll have to use two 16-bit Struct Write codes. This is because they allow an offset. The first 16-bit code will be the offset (in units of two bytes) that the variable is from the value of the pointer. The second code will be the same, but with the offset incremented by 1 (since you're using the second two bytes). At least, that's what I remember; it's been a while since I did much of this. Anyway, thanks so much for your help. After we get SSBM stabalized, me and worm were thinking of making scripts for other games too. Too bad I sold my copies of Mario Kart and F-Zero just recently :(. No problem. Other games that would be cool to script (besides Mario Kart and F-Zero) would be 1080 Avalanche, Sonic Riders, and Super Monkey Ball 1. I have a somewhat complete script for Super Monkey Ball 2, but it crashes on boot due to something weird occurring. I really need to figure that out and fix it.

_glook- 06-14-2006

sorry

_glook- 06-14-2006
Re: HOLY CRAAAAAPPP!!!
That's correct, as long as the variable is not offset from the pointer value. For example, if the pointer reads 01234567, then that will work if the address of the actual variable is also 01234567. If it's offset from that by a certain number of bytes, you'll have to use two 16-bit Struct Write codes. This is because they allow an offset. The first 16-bit code will be the offset (in units of two bytes) that the variable is from the value of the pointer. The second code will be the same, but with the offset incremented by 1 (since you're using the second two bytes). At least, that's what I remember; it's been a while since I did much of this.Oh snap! Guess I need to redo all of those. Scripts I made. Hopefully, the game won't mind me only using one of the 3 pointer variables I found. They all contained the same offset address value anyway. I'm sorry if I'm being a bother but I just want to make sure I'm doing this exactly right. The pointer variable's address is 80451170. To make sure I did it right, I checked it on two different stages. On Mushroom Kingdom, the value of the pointer variable was 80C7CA80 but the actual damage variable was at 80C7E310. In Fountain of Dreams, value = 80C7BA40 but the damage variable was at 80C7D2D0. The offset was 1890 each time so I know I did it right (I think). I put this into GCN Codetype helper: Codetype: Under "type 0", Struct Write Address: 80451170 16 bit My output: "42451170 xxxxyyyy xxxx: Halfword offset from pointer yyyy: Halfword to write to address ((pointer at 80451170)+offset*2)" So my script would be two lines like so: 42451170 18900000 42451170 18910000 Right? Again, thanks a ton for your help. We couldn't have gotten this far without you. No problem. Other games that would be cool to script (besides Mario Kart and F-Zero) would be 1080 Avalanche, Sonic Riders, and Super Monkey Ball 1. I have a somewhat complete script for Super Monkey Ball 2, but it crashes on boot due to something weird occurring. I really need to figure that out and fix it.ooh. Well I might get Sonic Riders as soon as it's not so expensive anymore. And maybe I'll -*test*-('") Soul Calibur II. Ah well.

biolizard89- 06-14-2006
Re: HOLY CRAAAAAPPP!!!
That's correct, as long as the variable is not offset from the pointer value. For example, if the pointer reads 01234567, then that will work if the address of the actual variable is also 01234567. If it's offset from that by a certain number of bytes, you'll have to use two 16-bit Struct Write codes. This is because they allow an offset. The first 16-bit code will be the offset (in units of two bytes) that the variable is from the value of the pointer. The second code will be the same, but with the offset incremented by 1 (since you're using the second two bytes). At least, that's what I remember; it's been a while since I did much of this.Oh snap! Guess I need to redo all of those. Scripts I made. Hopefully, the game won't mind me only using one of the 3 pointer variables I found. They all contained the same offset address value anyway. I'm sorry if I'm being a bother but I just want to make sure I'm doing this exactly right. The pointer variable's address is 80451170. To make sure I did it right, I checked it on two different stages. On Mushroom Kingdom, the value of the pointer variable was 80C7CA80 but the actual damage variable was at 80C7E310. In Fountain of Dreams, value = 80C7BA40 but the damage variable was at 80C7D2D0. The offset was 1890 each time so I know I did it right (I think). I put this into GCN Codetype helper: Codetype: Under "type 0", Struct Write Address: 80451170 16 bit My output: "42451170 xxxxyyyy xxxx: Halfword offset from pointer yyyy: Halfword to write to address ((pointer at 80451170)+offset*2)" So my script would be two lines like so: 42451170 18900000 42451170 18910000 Right? Looking at it quickly, everything looks correct. If you want to check if it works in the game, you can use my GCARS-CS Recorder (stickied in this forum), but it looks like it will work fine. Again, thanks a ton for your help. We couldn't have gotten this far without you. No problem. I'm glad to help out when it results in more and better GCARS-CS scripts. No problem. Other games that would be cool to script (besides Mario Kart and F-Zero) would be 1080 Avalanche, Sonic Riders, and Super Monkey Ball 1. I have a somewhat complete script for Super Monkey Ball 2, but it crashes on boot due to something weird occurring. I really need to figure that out and fix it.ooh. Well I might get Sonic Riders as soon as it's not so expensive anymore. And maybe I'll -*test*-('") Soul Calibur II. Ah well. That'd be cool. If you make any progress, please post.

_glook- 06-15-2006

After -*test*-('")ing my scripts out with psychotic (and running in to some very amusing errors, I'm already looking back and laughing), we concluded that my scripts didn't work. But they worked perfectly in GCNrd. That's when I noticed: "yyyy: Halfword to write to address ((pointer at 80451170)+offset*2)" So "offset" here isn't even really "offset". It's the actual offset divided by 2. Right? I'm going to modify this (1890 / 2 = C48), so that instead of putting 42451170 18900000 42451170 18910000, I'll do 42451170 0C480000 42451170 0C490000. I'll -*test*-('") this out with psychotic and fill you in on if it worked or not.

Forumer™ is Voted #1 Free Forum Hosting provider
Build your own community today with the largest message board hosting company.