Sprite Graphics Editing
Page 2 of 3
Page 2 of 3 • 1, 2, 3
Re: Sprite Graphics Editing
Moving amos pallete is at 02B759: 0b not headered. Normally 0b is green but the green gets rewritten to gold. I guess green sprites (green soldiers) won't work with Amos in screen. You can use the palette key, just substract 10 similar to the deku scrub (blue is 09 instead of 19, red is 07 instead 17).
blue amos 02B759: 0b -> 09:
Tektites are loaded twice:
06/B422 (that when calculating it with sprite index C9) but this doesn't count. You need to change:
blue tektite 03/0D8E: 09 (blue - here you need to change the palette as with the amos: blue is 09 instead of 19, red is 07 instead 17)
red tektite 03/0D8f: 07 (red - here you need to change the palette as with the amos: blue is 09 instead of 19, red is 07 instead 17)
Summary:
blue amos 02B759: 0b -> 09:
Tektites are loaded twice:
06/B422 (that when calculating it with sprite index C9) but this doesn't count. You need to change:
blue tektite 03/0D8E: 09 (blue - here you need to change the palette as with the amos: blue is 09 instead of 19, red is 07 instead 17)
red tektite 03/0D8f: 07 (red - here you need to change the palette as with the amos: blue is 09 instead of 19, red is 07 instead 17)
Summary:
- Code:
crab giving rupees when lifted bush: 03/2915: 09
amos when awoke: 02/B759: 0b
blue tektite 03/0D8E: 09
red tektite 03/0D8f: 07
all without header. Use the palette key and substract 10 to give new palette (e.g. red 17=07, blue 19=09, etc.)
Conn- Since : 2013-06-30
Re: Sprite Graphics Editing
It seems like the screens are having their own palette; if I set a green soldier into a screen with the amos, he will change golden (did not change the green soldier palette):
Does anybody know more here? This may also be important to know for the deku platforms at which conditions the color changes, SePH, as mentioned in the pm... (I know e.g. that the glove make a palette replacement...)
Does anybody know more here? This may also be important to know for the deku platforms at which conditions the color changes, SePH, as mentioned in the pm... (I know e.g. that the glove make a palette replacement...)
Conn- Since : 2013-06-30
Re: Sprite Graphics Editing
All the sprites in the game use different palette sets, you can read about it in my compendium faq (pages 230 to 238) and then this picture will make more sense to you!
You can edit all those sets directly in the graphic schemes menu in HM (you can have up to 71 different palette sets which is more then enough ). Each palette number gives you the opportunity to change the dungeon palette that loads (in dungeons only) and three palettes related to sprites!
You can edit all those sets directly in the graphic schemes menu in HM (you can have up to 71 different palette sets which is more then enough ). Each palette number gives you the opportunity to change the dungeon palette that loads (in dungeons only) and three palettes related to sprites!
Founder- Since : 2012-06-19
Re: Sprite Graphics Editing
Ah I see, so this isn't a problem That's good.
Then you just need to tell me which palette I should switch the superbomb (for bright green) and the deku platform into in the list you're going to make ^^
Then you just need to tell me which palette I should switch the superbomb (for bright green) and the deku platform into in the list you're going to make ^^
Conn- Since : 2013-06-30
Re: Sprite Graphics Editing
Yeah it's actually really easy to make new palette sets. Once my meal/supper has arrived and has been eat, I'll get working on all this
Founder- Since : 2012-06-19
Re: Sprite Graphics Editing
Well, thanks to you guys, I was able to fix the Deku Scrub and the Tektites. Bit for the other monsters like the Tektites, where the same ID has 2 different forms based on what coordinate it's placed on, is there a method I can use to find that data? The Leevers in the Desert Palace spring to mind. Or is it just trial and error based on searching for a certain string? (I searched 03 0B because those would be the palette numbers from that table that the Leevers use, and came up with 90-some results.)
Darkprince909- Since : 2013-10-17
Re: Sprite Graphics Editing
Well my guess is that since nobody documented this before, each sprite probably has to be documented one by one. Seing there's 255+ sprites in the game I wouldn't be surprised there's lots of digits!
Founder- Since : 2012-06-19
Re: Sprite Graphics Editing
Well then it looks like this thread now has a dual purpose, getting the palettes sorted out for Quest for Calatia, and documenting all these Hex locations for the entire Zelda 3 hacking community.
Darkprince909- Since : 2013-10-17
Re: Sprite Graphics Editing
It would be amazing to create such a list and tie it to Erockbrox sprite encyclopedia from the compendium!
Founder- Since : 2012-06-19
Re: Sprite Graphics Editing
Well Zack, Josh, and I are building a master spreadsheet of all the new enemies (don't ask about them, our lips are sealed aside from what we willingly reveal ) and the palette Hex location is one of the values we're recording on there (both in the palette table and elsewhere in the rom, like the bushcrab and Tektites). There's some we won't be able to find without help, because Josh and I don't really know our way around the rom, and Zack is busy with other things related to the hack, but we're putting it all in a centralized place. When we have it all, I'm sure we could pass it on to you guys.
What I really need to know, though, is what area of the rom the rest of the 2-version-1-ID enemies' palettes are, and most of the rest of the table should come together pretty easily.
What I really need to know, though, is what area of the rom the rest of the 2-version-1-ID enemies' palettes are, and most of the rest of the table should come together pretty easily.
Darkprince909- Since : 2013-10-17
Re: Sprite Graphics Editing
Check with geiger (show ram) 7e/0f50, x region. Mostly sprite palettes are stored at the end: 7e/0f5e, 7e/0f5f (depends on the number of sprites on screen, each has his own ram).
you can directly change the value. So e.g, in this pic, the red soldier's palette was at 7e/0f5d: 07. I changed it to 05 and got it:
In a second step you need to find from which rom address it is loaded and stored to 7e/0f50,x /in this case 7e/0f5d, this is done with breakpoints and logs.
Normal sprites are loaded by screen change, L2 sprites are loaded by the action (e.g., removing the bush). So you just need to check from where the palette value is stored to 7e/0f50,x.
you can directly change the value. So e.g, in this pic, the red soldier's palette was at 7e/0f5d: 07. I changed it to 05 and got it:
In a second step you need to find from which rom address it is loaded and stored to 7e/0f50,x /in this case 7e/0f5d, this is done with breakpoints and logs.
Normal sprites are loaded by screen change, L2 sprites are loaded by the action (e.g., removing the bush). So you just need to check from where the palette value is stored to 7e/0f50,x.
Conn- Since : 2013-06-30
Re: Sprite Graphics Editing
I think I understand the first part fine (I'll test that part out later today when I have time) but the second part is French to me. Where do I find these breakpoints and logs, and how do I use them? (I apologize for being kinda clueless about this.)
Darkprince909- Since : 2013-10-17
Re: Sprite Graphics Editing
You need to get familiar with Geiger. Here are my tutorials that may help you:
http://zeldix.forumotion.com/t134-coding-for-absolute-beginners
If you still have problems come back at me, I'm sorry that I'm not able to give more information right now, SePH gave me a bunch of homework.
http://zeldix.forumotion.com/t134-coding-for-absolute-beginners
If you still have problems come back at me, I'm sorry that I'm not able to give more information right now, SePH gave me a bunch of homework.
Conn- Since : 2013-06-30
Re: Sprite Graphics Editing
After reading those tutorials, I think I understand how to do most of it. I would make a breakpoint (this is what I'm not sure how to do) somehow immediately after the sprites on the screen loaded, have it trace and write the log, search for the offset the palette was stored at (7e/0f50 area), and there should be the address of the code that wrote that value there. Then I load the Rom in a hex editor, go to that address, and change the byte?
Darkprince909- Since : 2013-10-17
Re: Sprite Graphics Editing
Look at this image. I know that the palette is loaded when I get into that screen, so I set the stuff before.
Click "breakpoints" -> type 7e0f5d (we found out above), make hook at write and log with cpu.
Explanation: execute, geiger stops if an address is executed. Read/write geiger is executed when value gets written to ram or is read from ram or rom.
trace once: repeated addresses aren't logged - here you may have to switch it off ( and get 100 of MBs of log waste, since the address is repeated each time a sprite loads its palette
Go into the screen with the sprite, Geiger will stop twice when the value is written to ram(forget the stz, only the sta is important):
Then open your log and search for the address at which geiger stopped. Be careful, the address is executed multiple times, but we need where the value is written to 7e/0f5d (0d:0f5d in below code):
$0D/B863 B9 59 B3 LDA $B359,y[$0D:B39A] A:861B X:000D Y:0041 P:envMXdizc
$0D/B866 9D 60 0E STA $0E60,x[$0D:0E6D] A:8619 X:000D Y:0041 P:envMXdizc
$0D/B869 29 0F AND #$0F A:8619 X:000D Y:0041 P:envMXdizc
$0D/B86B 9D 50 0F STA $0F50,x[$0D:0F5D] A:8609 X:000D Y:0041 P:envMXdizc
$0D/B869 29 0F AND #$0F A:8619 X:000D Y:0041 P:envMXdizc
$0D/B86B 9D 50 0F STA $0F50,x[$0D:0F5D] A:8609 X:000D Y:0041 P:envMXdizc
You now see where the value comes from, 0d/b39a, what is rom 06/b39a - 19.
It sounds complicated but you need to practice.
Click "breakpoints" -> type 7e0f5d (we found out above), make hook at write and log with cpu.
Explanation: execute, geiger stops if an address is executed. Read/write geiger is executed when value gets written to ram or is read from ram or rom.
trace once: repeated addresses aren't logged - here you may have to switch it off ( and get 100 of MBs of log waste, since the address is repeated each time a sprite loads its palette
Go into the screen with the sprite, Geiger will stop twice when the value is written to ram(forget the stz, only the sta is important):
Then open your log and search for the address at which geiger stopped. Be careful, the address is executed multiple times, but we need where the value is written to 7e/0f5d (0d:0f5d in below code):
$0D/B863 B9 59 B3 LDA $B359,y[$0D:B39A] A:861B X:000D Y:0041 P:envMXdizc
$0D/B866 9D 60 0E STA $0E60,x[$0D:0E6D] A:8619 X:000D Y:0041 P:envMXdizc
$0D/B869 29 0F AND #$0F A:8619 X:000D Y:0041 P:envMXdizc
$0D/B86B 9D 50 0F STA $0F50,x[$0D:0F5D] A:8609 X:000D Y:0041 P:envMXdizc
$0D/B869 29 0F AND #$0F A:8619 X:000D Y:0041 P:envMXdizc
$0D/B86B 9D 50 0F STA $0F50,x[$0D:0F5D] A:8609 X:000D Y:0041 P:envMXdizc
You now see where the value comes from, 0d/b39a, what is rom 06/b39a - 19.
It sounds complicated but you need to practice.
Conn- Since : 2013-06-30
Re: Sprite Graphics Editing
Okay, I think I have a basic grasp on how to do this now. I was able to replicate what you did with the Red Soldier. But after trying this with the Leevers in the Dungeon Palace, it leads me to $0D:B3CA - 03, but when I change it, it doesn't do anything.
(the 02 02 02 02 in the line are the leevers on screen in the first room. I changed the value in the RAM and they change like the soldier. The other form of leever uses 0A in the RAM here, and I was able to change him in the RAM too.)
And I don't see what my next step is. I'm happy this method definitely works for enemies that don't share their ID with anything else, but I don't need those. The ones I don't have are the enemies that share their ID with either another monster (eg. Rocklops and Mimic, or Light and Dark World counterparts) or another version of themselves (eg. Leevers, Octo-Orbs, andTektites). Did you find the addresses for the Tektites using this method?
(the 02 02 02 02 in the line are the leevers on screen in the first room. I changed the value in the RAM and they change like the soldier. The other form of leever uses 0A in the RAM here, and I was able to change him in the RAM too.)
And I don't see what my next step is. I'm happy this method definitely works for enemies that don't share their ID with anything else, but I don't need those. The ones I don't have are the enemies that share their ID with either another monster (eg. Rocklops and Mimic, or Light and Dark World counterparts) or another version of themselves (eg. Leevers, Octo-Orbs, and
Darkprince909- Since : 2013-10-17
Re: Sprite Graphics Editing
You need of course watch where the 02 is coming from, not the 03:
$0D/B8D1 9E 50 0F STZ $0F50,x[$06:0F53] A:864D
$0D/B86B 9D 50 0F STA $0F50,x[$0D:0F53] A:8603
$06/8DF9 9D 50 0F STA $0F50,x[$06:0F53] A:8D02
So, not the middle but the last in the tracing is giving the palette.
And here it comes from in the log:
$06/8DF6 B9 E7 8D LDA $8DE7,y[$06:8DE8] A:8D01
$06/8DF9 9D 50 0F STA $0F50,x[$06:0F53] A:8D02
06/8de8 is pc 03/0dea:02 -> new palette
$0D/B8D1 9E 50 0F STZ $0F50,x[$06:0F53] A:864D
$0D/B86B 9D 50 0F STA $0F50,x[$0D:0F53] A:8603
$06/8DF9 9D 50 0F STA $0F50,x[$06:0F53] A:8D02
So, not the middle but the last in the tracing is giving the palette.
And here it comes from in the log:
$06/8DF6 B9 E7 8D LDA $8DE7,y[$06:8DE8] A:8D01
$06/8DF9 9D 50 0F STA $0F50,x[$06:0F53] A:8D02
06/8de8 is pc 03/0dea:02 -> new palette
Conn- Since : 2013-06-30
Re: Sprite Graphics Editing
So it's always the last row of text to show up in Geiger before the ROM starts running again that I need to look for? I think this just finally clicked for me . I can't try it with any other sprites right now, because I'm on a school computer and Geiger won't open, but I checked in the log from last night, and I found that code. In this case I would ctrl+f for $06:0F53, find an entry with a matching accumulator value to what was in Geiger, and find the closest LDA above it, and what's in the brackets is the address they're loaded from, and is what I need to change?
Wait... how do I get from the $06:8DE8 to $03:0DE8? I think that's the only thing I don't understand yet (provided the paragraph above is accurate...)
Wait... how do I get from the $06:8DE8 to $03:0DE8? I think that's the only thing I don't understand yet (provided the paragraph above is accurate...)
Darkprince909- Since : 2013-10-17
Re: Sprite Graphics Editing
$06:8DE8 or 68DE8 is a SNES address, since you are running a SNES game with the emulator. So you need to convert it to PC or Hex address, to look for it in the Rom. What you need is the address calculator, like Snestuff.
Download snestuff
http://www.romhacking.net/utilities/841/
Then you select a Lorom, (include or exclude header), type the snes address and the program will auto calculate the Hex address. 068DE8 Snes is 030DE8 pc (hex).
Entire process: tracing, find the LDA or STA in Ram, both will tell you what Snes address to load or store the value to. Then convert Snes to PC address (which is the actual location in Rom, editable in the hex editor).
Download snestuff
http://www.romhacking.net/utilities/841/
Then you select a Lorom, (include or exclude header), type the snes address and the program will auto calculate the Hex address. 068DE8 Snes is 030DE8 pc (hex).
Entire process: tracing, find the LDA or STA in Ram, both will tell you what Snes address to load or store the value to. Then convert Snes to PC address (which is the actual location in Rom, editable in the hex editor).
Puzzledude- Since : 2012-06-20
Re: Sprite Graphics Editing
Take
$0D/B8D1 9E 50 0F STZ $0F50,x[$06:0F53] A:864D X:0003
it says $0f50,x
where the sprite number is in the x register. Inthis example x=03 so it loads the address 06/0f53
Ah Puzz and I made the reply at the same time. I use Lunar address to convert snes to pc. I explained that already here:
http://zeldix.forumotion.com/t255-i-need-someone-to-convert-some-cpu-addresses-for-me-p
Use of the program is self-explaining... just be careful of the hook at the header set.
$0D/B8D1 9E 50 0F STZ $0F50,x[$06:0F53] A:864D X:0003
it says $0f50,x
where the sprite number is in the x register. Inthis example x=03 so it loads the address 06/0f53
Ah Puzz and I made the reply at the same time. I use Lunar address to convert snes to pc. I explained that already here:
http://zeldix.forumotion.com/t255-i-need-someone-to-convert-some-cpu-addresses-for-me-p
Use of the program is self-explaining... just be careful of the hook at the header set.
Conn- Since : 2013-06-30
Re: Sprite Graphics Editing
Awesome! Thanks for bearing with me and helping me understand what's going on with this. I'll put this information to good use, and I'll try to compile a document with every address for each sprite, so all the information is in one, easy, quick location. Sorry you had to explain it to me 50 times for me to pick up on it
Darkprince909- Since : 2013-10-17
Re: Sprite Graphics Editing
I'm happy to help other people so that they can help themselves and won't have to request me all the time
One note, you can only trace when the sprites change to L2 (e.g., at the ruby crab you must pull off the plant while tracing to get the second address). Other sprites as the leevers and tektites use a second load of the palette during the screen transition.
One note, you can only trace when the sprites change to L2 (e.g., at the ruby crab you must pull off the plant while tracing to get the second address). Other sprites as the leevers and tektites use a second load of the palette during the screen transition.
Conn- Since : 2013-06-30
Re: Sprite Graphics Editing
I was able to find the Rocklops palettes pretty easily last night, using your method. So it looks like I finally did pick up on it. I have a semi-related question, though. Do you know how the game decides whether to load the Rocklops or the Mimic? Is it room-dependent?
Darkprince909- Since : 2013-10-17
Re: Sprite Graphics Editing
I do not know what mimics are and which difference in load you mean...
Conn- Since : 2013-06-30
Re: Sprite Graphics Editing
I think he means the Green and the Red rocklops, or the different sprite of Rocklops (named the same way), which mimics you backward (mirror like) when you walk. I haven't yet figuered out how the game does that, but it seems to be room related. So the game knows what to load, depending on the room number.
Puzzledude- Since : 2012-06-20
Page 2 of 3 • 1, 2, 3
Similar topics
» Some NPC Sprite Requests
» Transfer sprite hex data Asm
» Reshaper's Sprite ASM Files
» Zelda 3 Sprite Editor
» Anya, a sprite in a gown.
» Transfer sprite hex data Asm
» Reshaper's Sprite ASM Files
» Zelda 3 Sprite Editor
» Anya, a sprite in a gown.
Page 2 of 3
Permissions in this forum:
You cannot reply to topics in this forum