Phantasy Star Iv Rom Editor

Posted on  by  admin

Phantasy Star ROM OffsetsPosted: Mon Jun 18, 2007 4:34 amHello. It's nice to see a nice older system still getting some love! I was shocked at finding the depth of information available on this site!I've recently finished creating a minor mod for Phantasy Star IV, with eight versions to be exact, and I'm looking for a new project in the Phantasy Star universe. I decided upon Phantasy Star I since I'd like to give it some replay value for players like myself that can almost make it through the dungeons without a map, (heh, almost.) All of my mod patches have been simple value alterations, and I don't think this one will be any different. I came across this site in a search to see if anyone had some of the information that I haven't yet found, as I've seen through my searches that many of the users here have intimate knowledge of the games.Anyway, I've been snooping about the ROM for quite a while and I've got all the data I need to create a mod patch except for two things:1.

The Equipment! I've figured out the index for the equipment, and found it listed for sale in the shop lists starting at F717, but I can't find where the actual offensive or defensive values are stored and by whom these items are usable! This is by far my largest stumbling block, as I'd like to edit the values of some of the weapons and armor.2. I've identified all the monster's spells, and I see how the spells are made available in the area of character level-ups at F8AF, but like the first, I can't find where the assignation of whom learns which spells, how much they cost, or the damage (or healing) value of the spells are at.

I'd like to make a few modifications wherever it is!That's everything. I've figured out the rest I need to know. Any help is greatly appreciated! Posted: Mon Jun 18, 2007 8:47 amSome of the info is in, for example the weapon/armour/shield stats are at $1996. Much is still not documented, but you should be able to debug through with a breakpoint on relevant memory or ROM values, or a search through a full disassembly for relevant calls (eg.

$1916 updates the current stats whenever the character levels up or changes their equipment, so the equipment compatibility check must be near one of them).One observation I'd make is that a phenomenal amount of stuff in the game is hard-coded, rather than data-driven - there's more likely to be a bunch of code dealing with these issues individually than a table of data driving some more generic code. Some of the info is in, for example the weapon/armour/shield stats are at $1996. Much is still not documented, but you should be able to debug through with a breakpoint on relevant memory or ROM values, or a search through a full disassembly for relevant calls (eg. $1916 updates the current stats whenever the character levels up or changes their equipment, so the equipment compatibility check must be near one of them).One observation I'd make is that a phenomenal amount of stuff in the game is hard-coded, rather than data-driven - there's more likely to be a bunch of code dealing with these issues individually than a table of data driving some more generic code.Wow, you've got a ton of data there! Everything looks straightforward except for the page numbers.

How is that determined? I was reading through another thread, but I don't understand which page you enter into the SMS Offset Converter to get the correct offset with your ROM offset.

For instance: how do you convert $1996 into a ROM address?From my searching I can tell you the three??? Stats in LevelStats are as follows: 1.

Phantasy Star 4 Retranslation

Low Byte of Experience needed for level, 2. High Byte of Experience needed for level, 3. The last is a change. Where you have listed Magic known, that is partially correct for the next to last byte. The first is the number of Spells a character can use in combat, the second, (the??? One) is the number of Spells a character can use outside of combat.With the Low Byte first, then the High Byte second, it made it pretty difficult to figure out what the number was, (being backwards!) But it is done the same in the shop data that way too.

That looks like the only thing I have found that can add to your work. Amazing!BTW, great job to everyone that worked on the PSI re-translation project! I'm definitely going to go through a full play-through of it when I get the chance! Everything looks straightforward except for the page numbers.

How is that determined? I was reading through another thread, but I don't understand which page you enter into the SMS Offset Converter to get the correct offset with your ROM offset. For instance: how do you convert $1996 into a ROM address?$1996 will always be $1996. Most of the game code lives in the unmapped region below $8000. You would only convert the other way if you saw something likeld a,$10ld ($ffff),acall $8123by typing page = $10, frame 2 offset = $8123 and it'll tell you the ROM address is $40123.

$1996 will always be $1996. Most of the game code lives in the unmapped region below $8000. You would only convert the other way if you saw something likeld a,$10ld ($ffff),acall $8123by typing page = $10, frame 2 offset = $8123 and it'll tell you the ROM address is $40123.Oh geez, thanks. I asked because I couldn't find the same code at 1996 in the rom; because I was looking at an American translation! The same code of 1996 in the American translation is at 183A!

Lesson learned.If I can find the Spell power, Who can use the various equips, and the Gun damage, (must be separate from the equipment values,) I'll be set. Posted: Sat Jun 23, 2007 1:36 amLast edited by The Komrade on Sat Jul 07, 2007 11:04 pm; edited 1 time in totalWell, I still haven't figure out break points in Meka, but here is a list of where all the shop data is found in the American ROM and what is sold there.

Star

Well, I still haven't figure out break points in Meka,How could I help you with that? 'b $1234' will break execution whenever CPU access (read/write/execute) address $1234 in CPU space. Then there's various parameters than you can read by entering 'help b'.

The only downside yet if you can't break on ROM addresses, it only works on CPU address. So you have to figure out how a given ROM 16kb page is mapped on CPU to provide its CPU address. Any questions?PS: Someday I will work on a way to setup breakpoints givne ROM addresses directly. How could I help you with that? 'b $1234' will break execution whenever CPU access (read/write/execute) address $1234 in CPU space.

Then there's various parameters than you can read by entering 'help b'. The only downside yet if you can't break on ROM addresses, it only works on CPU address. So you have to figure out how a given ROM 16kb page is mapped on CPU to provide its CPU address. Any questions?I don't think I made myself clear.

I was doing some tests to try and get the hang of breakpoints, so I picked a value I knew, $c40a, which is the address in the Memory Editor and Maxim's disassembly which changes Alis's weapon to whatever index you list. I changed it a few times with the Memory Editor, and confirmed this to be the RAM location.

So I set a breakpoint a $c40a, and switched her weapon in the game, and it did not break. I've tried expanding the range of the breakpoint, but I can never get it to break from the game and tell which address was affected.Am I totally misunderstanding breakpoints? Is $c40a the wrong place to create a breakpoint for Alis's weapon index? Do I need to convert $c40a to something else and break there?

I've read through a related topic on Hacking Shinobi, but I can't see what I'm doing wrong. I tried breaking on $c40a and it seemed to work, it was hit when opening the equipment menu, when fighting, etc - I didn't try equipping a new weapon because it takes a while from the start of the game to get a new one.Ok, that example confirmed what I thought should happen, and I finally managed to figure out what I was doing wrong by trying everything with this knowledge confirmed. My problems were a complete newbie error on my part.I wasn't using the continue command in the debugger. I just kept adding a break, closing it and playing on, without the debugger active, wondering why it didn't ever break. This is my first attempt at hacking beyond values, and I hadn't used a debugger before.

Thanks for the patience, and all the replies. I should be good to go on my own now. Thanks!In regard to disassembly, I've seen several users on these boards mention SMSExamine as the best tool, but it seems to have disappeared from the internet. Does anyone know where I can find it?Lastly, now that I'm looking into Phantasy Star's assembly language on my own, could someone suggest the best documents for learning what all the opcodes are, etc? I don't know what all the abbreviations and the syntax involved stand for.

I'd like to be able to read it all on my own:). Posted: Tue Jun 26, 2007 7:07 amThat's it! Thanks, Maxim! The -5 is what enabled me to figure it out! Changing the $fb to an $e2 makes the gun do 30 damage, I suppose that correlates with -30? How'd you figure that negative value? Is that z80 specific?

Anyway, all three of the numbers are a negative equivalent of the actual damage they do in the game! So the offsets needing to be changed are:Needle gun damage is at 11CC: $fb or -5(5 damage in game)Heat gun damage at 11D0: $f6 or -10?(10 damage in game)Laser gun damage at 11D4: $ec or -20?(20 damage in game)My first inkling was in changing the hex value to 1e to equal 30 possible damage, but it instantly killed all the enemies. I'm thrilled to finally figure that one out! Posted: Tue Jun 26, 2007 8:35 amThis is called notation.

It's a system for representing signed numbers that means the exact same CPU hardware can do both signed and unsigned maths. In 8 bits, you can represent either 0.255 ($0.$ff) as unsigned, or -128.+127 as signed. To convert a hex number to 2's comp, you'd doConvert hex to decimalIf it's bigger than 127, subtract 256And the reverse:If it's negative, add 256Convert decimal to hexIt's not Z80 specific at all, practically all CPUs use 2's complement maths these days, they just extend it to 16, 32, 64 bits. This is called notation. It's a system for representing signed numbers that means the exact same CPU hardware can do both signed and unsigned maths. In 8 bits, you can represent either 0.255 ($0.$ff) as unsigned, or -128.+127 as signed. To convert a hex number to 2's comp, you'd doConvert hex to decimalIf it's bigger than 127, subtract 256And the reverse:If it's negative, add 256Convert decimal to hexIt's not Z80 specific at all, practically all CPUs use 2's complement maths these days, they just extend it to 16, 32, 64 bits.That explains a PSIV bug I ran into.

Phantasy Star Iv Rom Editor Free

Anyway, I'm getting a lot more fluent now with reading through the code. Right now, I'm looking into the healing spells and healing items. The break is at 1e75. I understand everything here except the 'd'. There's no 'd' in this function anywhere, and I've gone through all the previous function calls listed above this code, but I can't find a 'd' anywhere.

I'll offer my translation to make sure I'm reading this right. 1e75 dd4606 ld b,(ix+#06)1e78 dd7e01 ld a,(ix+#01)1e7b 82 add a,d1e7c 3002 jr nc,#1e80; (2)1e7e 3eff ld a,#ff1e80 b8 cp b1e81 3801 jr c,#1e84; (1)1e83 78 ld a,b1e84 dd7701 ld (ix+#01),aFirst, b is loaded with the character's max hp. Then a is loaded with the character's current hp. The next 'add' instruction is obviously the current hp + what I'm looking for, 'd', the value of the spell or item being used. The next part is concerned with if there is any remainder in the equation and acts accordingly, finally writing the new value to the character's current hp at instruction 1e84.I'll keep going it over on my own for now. I'll post if I find the answer myself. Posted: Mon Jul 23, 2007 9:17 amLast edited by The Komrade on Mon Aug 18, 2008 11:05 pm; edited 1 time in totalHello.

Pdf

I've been very busy lately, but during my spare time, I've been trying to teach myself how to work with tilesets, as I haven't done graphical hacking before. I managed to find the character sprites on my own and change them around, but I still haven't been able to figure out how to change how the Spell names are displayed.

The character sprites weren't that hard to find in a tile editor program because they were so large, but I'm completely stumped as to even what to start with in regard to the Spell names.Will the changes I intend to make be made in a hex editor, or in a tile editor? One of the changes I've been trying to make is to have 'RISE' appear below Myau's EXIT. I've been experimenting with Meka's Tilemap Viewer and Tileset Viewer, to eliminate as many newbie questions as possible. The Tilemap Viewer obviously always has the same Index and X Y address at that spot on the screen, with merely the value changing depending on whether the cursor is on the foreground or the background. So the information I need to focus on is from the tiles on the Tileset Viewer then, right? But I don't want to change the values of a specific tile in a hex editor, because it will change it for all those blank tiles, won't it? How do I force a change to occur in one specific location?

Or am I just way off? I refuse to give up until I figure this out! Posted: Tue Jul 24, 2007 4:00 amI'll go back a step; perhaps I'm looking at this incorrectly. I've tried relative searches for many of the spell names, but I don't find anything. To look for RISE, I've tried searching the rom for the values the rest of the game text follows, with a relevant search of 52 49 53 45. I've also tried a relevant search using the data section on Meka's Tilemap Viewer when I move the cursor across the four letters as follows: 10DC 10D3 10DD 10CF.

I've also tried searching off the individual letters, R, I, S, and E from the values on the Tiles Viewer, dropping the 10s, (is that right?) and searching for DC D3 DD CF. One other I've tried is also from the Tilemap Viewer off the information on the pattern line, searching for 00DC 00D3 00DD 00CF.Am I searching in the correct fashion? You might want to locate the characters address in VRAM, then setup a write breakpoint on VRAM at this location, from there you can find the source of the data. I've got them, thanks to your assistance! All I needed was some principles to guide me.

The Spell names start at 6F6F6 with 'HEAL' stored as 13F3 11D2 10CF 10CB 10D6 etc. My searches through the hex editor didn't work because I didn't account for the vertical line that is part of the left side of the Spell menu.Thanks again to you guys! I can now change anything I want to in the game; all it'll take now is the time to implement them! I really am grateful to you Bock, and Maxim. Not only did you lead me on my way to creating this hack, but you've got some amazing tools built into Mekaw.

Anyone making their own emulator should be as diligent as you have been to include awesome tools like the Debugger, the Tile Editor, and the Tile Viewer. Great job, guys! Posted: Sun Jul 29, 2007 1:10 pmMegaUpload refuses to let me dowload it.Some suggestions:1 - When making a dowload available through a file hosting service, post it in two or more different services, so that if one of them refuses to let the user download the file, the other may work.

Some good ones are and2 - You should make available at your site at least a short description about what the patch is about.3 - Don't use MegaUpload. It used to be a good service but, nowadays, it is a real pain; 90% of time it simply refuses the download. No, I don't intend to pay to use it.

Coments are closed