14 users online: Darknubs, E-man38, JupiHornet, LightAligns, Nowieso, purple block,  RussianMan, Saela,  Segment1Zone2, SJandCharlieTheCat, Skunkynator, Souldbminer,  TickTockClock, Tomas2008 - Guests: 103 - Bots: 123 Users: 54,919 (2,079 active)
Latest user: Lokomelo
Not logged in.
Posts by shyguyhex
shyguyhex's Profile - Posts by shyguyhex
Pages: « 1 2 3 4 5 6 7 8 9 10 »



(Click to view full size)
-
Download Bowser64 Alpha 7.26
Changelog
Todo/ideas list
Script language plans
-

Bowser64 is a Super Mario 64 RAM editor designed to work with any emulator. Right now it features a memory editor tailored for object editing, and two all purpose memory editor windows used for data analysis/comparison and pointer tracking. You'll notice from the screenshot above that all of the data is very colorful for easier readability. The red background colors indicate changing data, the green text represents differences between the two memory windows when comparison mode is turned on, the blue text represents pointers, and the various back colors in the object editor are for data-typing and better readability (which is unfinished).

I've also incorporated a console with the following commands:
Code
segments  - show ram segments table
collision - show collision info
inj       - inject hex data from cmd line
injf      - inject hex file from /injf/
mwarp     - make an injf file that will move Mario
clear     - clear the console
(I ran an example of the 'injf' command in the screenshot above, where I inject a simple asm hack from the file seen in notepad++)

---------
To get started
Make sure SM64 is running in your emulator and then: File -> Open RAM...

^ You'll then see this window; click your emulator's process and then click "Open process". Bowser64 will then look for the emulator's virtual memory base so it can start hacking. A message box will pop up telling you the address of the virtual memory base it will use, click okay. You can then open the tools from the RAM menu.
--------
Many features still to come; be sure to check out the todo/ideas list for future plans !
I'm open to adding any ideas from the community so be sure to post them :D

This project is early alpha so you can expect some bugs, but if you do happen to find something that seems like a serious problem, you can let me know here.

(note: right now it takes a little while for it to find the vm base for pj64 and 1964 because that part's not optimized yet, it will find nemu's right away however)


This is the best post
Originally posted by Mr. GreenThunder
This works in general with any N64 Game, right?



It will as soon as I add better optimization for VM basing. Right now it's just purposed for SM64. In the future I'll probably have it repurposed for all n64 games and have the sm64 stuff just be an add-on module or something.


This is the best post
Originally posted by Tarek701
Nice tool, you've made there. Currently I'm working on a MIPS R4300i Assembler. This + an assembler can be handy as well.

Also, to add to your "to-do" list, for patching I also suggest BPS. It's way better than PPF and really small.


Support for ASM patching/injection is definitely going to be added in the near future. I'm in the process of writing a script language that should encompass it.

I put together a little list of my ideas for the script language here
http://file.s.gp/syntax_example.txt

And as for your BPS idea, I'll see what I can do.

Also I happened to write an r4300i assembler a little while ago in javascript here http://file.s.gp/sgasm.php - feel free to grab any source/ideas from it if it helps :)


This is the best post
Nice macro and psuedo op ideas. I was also considering adding a few psuedocodes to mine, which would handle stack frame sizes and return address storage automatically.

Maybe something like

s_start
# asm code
s_end

# check for any JAL's, put RA on the stack if so
# add 4 to the frame size when there's a store op with an SP destination
# load the return address from the stack back into RA if there were jals


This is the best post
I read somewhere that the rom/ram loads need to be aligned properly for the hacks work on real hardware. I'm not sure which hacks are like that.

Quote
And where can I find patches that make them work on ED64?


Unfortunately it wouldn't be that simple.


This is the best post
Quote
First, how do I edit the sounds that Mario makes? Is there a specific program I have to use? I downloaded n64 sound list tool (the only result I got when googling "n64 sound editor") but when I opened a rom nothing happened.


You would edit Mario's ASM calls to the function at 8031EB00


Quote
Second, how to I change the color palette for objects such as the caps and Metal Mario?


The caps all refer to one color so you would probably need to do some microcode and asm editing to add more colors which would be a little difficult. And I believe metal Mario uses a texture, not a color.

Quote
And finally, how do I add the blowing wind from levels such as Tiny-Huge island and Tall Tall Mountain? I tried the "Blowing Wind" object, but it didn't seem to do anything :/


Set the ground's collision flag to 38 for 'flying wind' and 2C for regular wind.


This is the best post
Quote
I guess I'll have to learn how to do that :p. Do you know of any good tutorials on that?


You would want to use Nemu's debugger to trace the calls and replace the sound index argument that gets passed into the function.

Here's an example:

^ Here I put a PC break on the 8031EB00 function and then made Mario punch, which paused the game's execution



^ Now while the execution is stopped, I check the RA register (the return address register) and it's 80274FA8, so that's where the call came from


^ Now I go to 80274FA8 in the commands and scrolled up a bit; at 80274F94, 241E:8081 is loaded into the argument 0 register (using the lui and ori operations) 241E is the ID for mario's punch sound :)


^ Now in memory view, I went to the address of the two instructions that load the sound into arg0 and copied the data (3C04241E34848081)


^ And now with the rom open in a hex editor I searched for 3C04241E34848081 and found that the instructions are at 0x0002FF94

So if I were to for example replace the 241E at that address, with something like 3039 (refering to this list of IDs), Mario would sound like chain chomp whenever he punches :D Hope this helps!

Quote
But what if I don't want to make them seperate colors, but just change it? Is there a tool, or do I still have to manually do it?


I'm not sure where mario's colors are in ROM but in RAM you would find them at 8007EC20. I'm not sure if there's a tool for it.


This is the best post




I just wanted to say that I got the base of the b64 script interpreter finished! :D

If anyone wants to test it out: http://bin.smwcentral.net/u/25323/script.exe

The interpreter can work as a standalone provided you feed your emulator's process id and virtual memory base into the command line arguments.

Code
script.exe (mode) (script path) (pid) (vm base)


Example:
Code
script.exe 0 "path/to/script.b64" 3344 10020000

(Mode 0 is ram and 1 is rom, but I haven't added rom patching functionality yet. 10020000 is the static vm base for nemu btw)


This is the best post
Originally posted by Anoliah

Are you using an extended ROM? When I added a break on the 8031EB00 function in an unmodified SM64 ROM, the emulator pauses before I even punch. So I tried to do the same in an extended ROM, but after I got past the press start screen, Nemu wouldn't load the File select screen so I was staring at a white screen with no sound.

Edit: I decided to just edit the sound (since you gave the adresses and stuff), but it wouldn't open in PJ64 (It said that it was stuck in an infinite loop). It worked fine in Nemu, but my controller doesn't work well with Nemu.



Ahh, my bad, the code in that region is actually checksum protected, which I completely forgot about. The reason why it worked in Nemu is because it skips checksum protection if the calculated checksum is wrong. If you edit the rom using Lemasm, it gives you an option to recalculate the checksum after editing.

Also the execution kept stopping because you were in a noisy place :p try placing a breakpoint while inside the castle.


This is the best post
Originally posted by Anoliah
I can't edit the hex values in Lemasm for some reason. Is there something special I have to do? I already checked edit mode on.


LemAsm is a bit quirky. Try checking "View > MIPS disassembly" and see if it lets you type anything in then


This is the best post
Originally posted by Anoliah
Originally posted by shyguyhex
LemAsm is a bit quirky. Try checking "View > MIPS disassembly" and see if it lets you type anything in then


It lets me edit things now, but it doesn't seem to be hex.


I think lemasm only lets you edit when it's in assembly mode.

Anyways, I just realized you can completely get rid of the final checksum comparison from the rom by setting:

0000066C = 00000000
00000678 = 00000000

Project64 and Nemu will give you an unknown bootcode error message, but the rom will run fine regardless.


This is the best post


So this is basically what the entire language is going to look like when it's finished.

I would also like to add a keyword like "crc_restore" (or "crc" because all of the keywords are 3 letters long) which would auto restore the checksum at 0x10 after patching. If anyone can hook me up with how the crc algorithm works I'd really appreciate it #tb{^V^}

Edit: just found an app called RN64crc which should do the job


This is the best post
I think the site could benefit from

img{max-width: 800px; height: auto;}

Because it's a little annoying when someone posts a huge image that wrecks the entire page's layout.

Also I noticed here and on Jul that < style> tags aren't sanitized anywhere. Is it suppose to be like that?


This is the best post
Originally posted by Yoshimaster96
I have a very complex question, so I gave it its own thread. Here it is:

I want to implement gravity towards a point (planetary gravity), but in order to do that, I would need to know where the code to implement gravity is (so I can edit it). If anyone knows where the code is, please let me know.

Well the closest thing I can think of to gravity towards a fixed point in the game is probably the lift in cool cool mountain (If you move it anywhere and make mario jump on, it will still move back to the ropes). You might be able to copy some of the code from that object's behavior asm and apply it to mario (or just be really good with cop1 math/instructions, and write the entire formula yourself).

Now making mario flip over, and walk 'right side up' in relation to the custom gravity would be the hard part. I wouldn't say your idea is impossible but it would be a pretty hard one to code.

And just out of curiosity, what were you planning on doing with the text printing?


This is the best post
You have a nice page there but I feel like this section of the site does a pretty good job with patch archiving already, with onsite download links and everything. I suppose having an external wikia page wouldn't hurt though.

This is the best post
Originally posted by Mr. GreenThunder
Only threads on this forum.

Oh of course, because if it's from another website, it's automatically useless and shouldn't be seen by anybody.
--

I got some that might be good for this or the faq thread

I'll soon be adding mem search functionality to b64 but in the mean time cheat engine http://www.cheatengine.org/ has been a valuable resource to me and it's probably the best tool out there for searching through and modifying memory (I'll probably add a little address conversion tutorial to my files later).

A behavior scripts guide http://file.s.gp/bhv.htm (unfinished).

A guide for the struct offsets in ram level objects http://file.s.gp/obj.htm (also unfinished)

A little gameshark code formatter for nemu's cheat file (since entering a gs code into nemu takes like a year)http://file.s.gp/nemugs.php

Direct link to Sketchup 7 download http://fs13.filehippo.com/8417/0e8e5cf9e7d248729d71f11428c992da/GoogleSketchUpWEN.exe

Direct link to sketchup OBJ exporter plugin (frauber's edit) https://sites.google.com/site/messiaen64/level-importer/ObjExporter.rb?attredirects=0

HxD, my favorite hex editor (can also edit ram, but you can't switch endianess) http://mh-nexus.de/en/downloads.php?product=HxD

RN64crc http://n64.icequake.net/mirror/64scener.parodius.com/tools.htm wonderful tool that checks/recalculates the checksums of n64 roms.


This is the best post

(progress update)





The b64 script asm keyword and rom extension/patching options will be available in the next release, along a gameshark code manager, and better options for pointer/seg-offset following. I hope to get this stuff done in the next few days.

And I had two more ideas that I was considering

A patch repo/manager/downloader ?
I was thinking of maybe having patches being hosted on a public server and have a thing for bowser64 that just lets you down download patches, scripts, etc and apply them to roms.

A behavior script assembler ?
This might be somewhat redundant, but it would basically translate something like:
Code
init 0x00
  set 0x05 0x0000
  or  0x01 0x0100
  or  0x03 0x0001
  sphere 0x25 0xA0
  set interaction 0x0080
  ground
main
  call 0x802CB1C0
  call 0x8029CA58
  call 0x802CB264
end

to
Code
00000000
  10050000
  11010100
  11030001
  23000000 002500A0
  102A0080
  1E000000
08000000
  0C000000 802CB1C0
  0C000000 8029CA58
  0C000000 802CB264
09000000


If anyone likes this and would like to suggest some keywords for commands, by all means

Little edit:


yay#w{:>}


This is the best post
Originally posted by IllumiNavi
I'm trying to change certain sound effects, specifically the "It's a me, Mario!" like Skelux did in Star Road with the "Let's-uh go!" How would one go about doing this?


I posted a little tutorial on this page http://smwc.me/1150515


This is the best post
I wrote up a little tutorial/address converter for cheat engine here
http://bin.smwcentral.net/u/25323/CE.html
If there's anything I should clarify, lemme know and I'll update it


This is the best post
Originally posted by Mr. GreenThunder
Originally posted by Some source
if it isn't 64MB and higher, you are in luck and the hack will most likely work.

Do you not know hacks are now expanded by 114MB?

wot m8? I'm pretty sure that 64MB is the maximum size that an N64 will address. And 114MB isn't a multiple of 8mb.

edit

Originally posted by cpuHacka101
Wrong. According to this source,

That's actually pretty interesting. It probably wouldn't be too hard to make a little tool that moves all of the files and then remap the pointers (however that might create problems for some of the more complex hacks). Or, to get rid of the problem from the source, an alternate decompressor could be made, and then a different mode for the alternate extended ROM could be added to TT64/other tools.


nother edit

I think this 'one-byte-off' thing is also why Nemu doesn't like vl-tone's rom. I did a little experiment with changing one of the pointers in BoB's level script to point to an uncompressed version of one of the MIO0 files, and the level loaded fine in Nemu, no crashes or glitches


This is the best post
Pages: « 1 2 3 4 5 6 7 8 9 10 »
shyguyhex's Profile - Posts by shyguyhex