<- 1  -   of 222 ->
^^
vv
List results:
Search options:
Use \ before commas in usernames
I don't remember offhand where the item text is located, but this document specifies the format that the letters are stored in:
http://jathys.zophar.net/supermetroid/kejardon/TextFormat.txt
Should be easy enough to find by doing a search for a string of the letters you're looking for in a hex editor.
I'm having no luck with that. Could I please get a second opinion?
OMG FLAN!!!!!!!
Quote from Kuro Inzen:
I'm having no luck with that. Could I please get a second opinion?


Lol. Sounds like your asking a doctor.

Here's a great guide written up by DChronos. There's quite a few good guides up at http://www.metroidconstruction.com

As for the item names in the status screen, they're just graphics, not text, so you can easliy edit them in TLP. Just open the ROM with it and go to about 1B0000. They're after all the map tiles.
attachment:

So far, my hack's nothing but a physics and graphics edit. I'm doing level editing last. My problem is this: How do I expand the HUD to add another digit to the SUPER and POWERBOMB ammo count like normal missiles?
Quote from Kuro Inzen:
How do I expand the HUD to add another digit to the SUPER and POWERBOMB ammo count like normal missiles?

ASM.
okay, how about a response from someone who would offer directions on how to do this?
Quote from Kuro Inzen:
okay, how about a response from someone who would offer directions on how to do this?

You are going to need to learn a programming language known as ASM (65c816 to be more specific).  Once you have learned ASM, how to do this will be blatantly obvious to you, but I'll lay out some of the basic thinking I would use to tackle the problem:
1) There will be coding (the ASM) that tells the game to write the numbers to the HUD. Currently, it only writes two of them. You would need to hijack that coding. You could do this by either: a) Overwriting an existing command to create a jumping point to your new code (JSR) -or- b) Look at the existing code in detail and see if there are pieces that can be shortened up a bit to allow you to fit your new coding in without the jump.
2) You would need need to compare (CMP) Samus health with $64 (100, non-hex) to see whether you need to place a 0 or a 1.  If going higher than 199, you'd have to add the appropriate checks for that as well.  I would recommend looking at the existing algorithm for the other 2 slots and use the existing code that determines this, as it's probably just another JSR.
3) The HUD (which starts at $7EC608 in the RAM) would most likely be written to, indexed by X (LDA $C608,X).  The X value may already be set for you, but you would need to look at the existing code to find out.  Assuming it's not already set, you would figure X by finding the tile number *2.  As for what value to write, that would simply be whatever a 0 or a 1 is in the tile table data (you'd want to look at the tiles in a tile editor to know what place they are, because few people would have this memorized.
4) After doing this, you'd want to make sure (assuming, of course you made a jump to your code instead of shrinking the existing code), to insert whatever coding you had to overwrite to make your jump, and then return to the original coding (RTS).

Sorry I didn't offer enough directions before.  If these ones aren't detailed enough, I'd be glad to write up the pages and pages it would take to teach you ASM, but that's what tutorials are for, and really is what you need here.  There is no easy answer.  You really have only 2 options:
1) Learn ASM (on-line tutorials, irc channels, threads on this very board that have patches released *with coding to learn from*, etc...).
2) Beg someone else to do it for you.
Embarrasing Fact: Power suit made by lowest bidder
Quote from Jathys:
3) You would need need to compare (CMP) Samus health with $64 (100, non-hex) to see whether you need to place a 0 or a 1.  If going higher than 199, you'd have to add the appropriate checks for that as well.  I would recommend looking at the existing algorithm for the other 2 slots and use the existing code that determines this, as it's probably just another JSR.

It's actually a division by 10, then the remainder of the division is added to the tile value for 0. Or it uses the remainder as an index to a table of tile values, I forget which. The former would be more efficient but I would almost bet Nintendo used the latter anyways.
The most significant digits isn't divided by 10 and is simply added (or indexed) directly. Which is why that digit becomes glitched when it is bigger than 9.
Quote from Kejardon:
The former would be more efficient but I would almost bet Nintendo used the latter anyways.

There does seem to be a definite pattern to that effect.
Edit history:
Tyjet66: 2009-10-16 03:12:57 pm
What'd you say?
Alright I just expanded my rom for the first time (never experimented with it) here is what I did:
-clicked "expand ROM"
-went to the room I wanted and opened up the pointers
-changed level data to "E08000"

Then I got this:


I was using this as a guide:
3.5 Increasing Room Size Limits


  If you're tired of running out of space for a room, there's a cure. You'll just need some free space in the SMC to work with. SMILE has an option for expanding ROM space, so that's the best way to get some more room. The banks created by the "expand ROM" option will start at E0 and go on from there. A single bank is good enough for at least a dozen large rooms, so let's just expand it once for now.
  What you'll want to do next is open up the room you want to edit and pull up the pointers window. Change the Level Data pointer to point to free space. For your first new room, this would be E08000 (300000 in hex). Note this is E0-8-000 and not E0-0-000! Pointers will never have anything below 8000 in the second two bytes! As long as you make sure you're above 8000 for the bytes after the bank, go ahead and save, and you'll see right away that your size limit has changed to some ridiculous value. You can now edit to your heart's content and not worry a smidgen about silly room size issues.
  There is one more thing you should do, though, and that's add this room to the "level_entries" text file for SMILE, stored under the Smile/files folder. Add its hex location (300000) at the end of the file. This will make sure that SMILE keeps you from overwriting other rooms.
  Any time you decide to do this to rooms hereafter, you'll need to take an extra step and open up your ROM in a hex editor. Check where the free space begins after your new room at the very end of the ROM, so that you're not overwriting your first new room with your second one. If your new room goes from hex address 300000 to 301200, you'll want to use an address somewhere else. If you want to leave yourself a few hundred bytes in case you decide to edit the old first room later on, You should pick an address like 301400. Plug that into your pointer window to see what the pointer for that location should be (in this case, it's E09400, again, NOT E01400, as that's not above 8000!). Put this value into your Level Data pointer, and save. Don't forget to add this room's hex address (301400) to the "level_entries" file!


After I changed the pointer and I tried saving I got that weird room size limit, I chose not to save the room then SMILE crashed, what did I do wrong?

EDIT: Now just entering the room causes SMILE to crash. I'm so glad I made a copy of my rom.
EDIT2: Dammit, now I have to redo that room.

attachment:
Super Secret Area - Dead Ahead!
Have you updated the Level Entries.txt?

It's mentioned in the same piece, and mentions not overwriting stuff.

From what I understand, the wording is a little inaccurate, and you should:

Expand the ROM.
Edit Level Entries.txt.
Open SMILE, and change pointers.

Rather than the order it's in that guide.

Perhaps somebody more experienced can clarify this, but that's how it reads to me.
Quote from Tyjet66:
You said stuff, but this wasn't it. Just putting this box here so you remember you said it.

As for SMILE telling you there's a negative amount of space available:
-SMILE doesn't actually calculate space available for rooms, because there's no legitimate way to do this.  SMILE simply checks the level_entries text file, which (with a few minor mistakes) figures the amount of space you have, by comparing it to the entry in the list that is the "next" one.  If you haven't added another entry, then SMILE messes up, as there's nothing to compare to.  Add an entry for $E08400 and SMILE would tell you there's $400 bytes left.  You can simply ignore the warning too though (I do) if you know you're not overwriting things.

As for the crash after choosing not to save . . . Were you trying to save in the pointer editor at the time or in the level editor?  Quite likely, there's (another) SMILE bug I didn't know about yet and need to fix.  Any crashes in that room now, could have been caused by the crash you got the first time.

Make sure you're running the most recent SMILE (lots of fixes in each release).  If you are, feel free to send me an ips of the bad rom (and tell me what room is the issue).  I can almost definitely fix the room while fixing the SMILE bug.
What'd you say?
Quote from Quietus:
Expand the ROM.
Edit Level Entries.txt.
Open SMILE, and change pointers.

I'll try this.

Quote from Jathys:
As for the crash after choosing not to save . . . Were you trying to save in the pointer editor at the time or in the level editor?  Quite likely, there's (another) SMILE bug I didn't know about yet and need to fix.  Any crashes in that room now, could have been caused by the crash you got the first time.

Make sure you're running the most recent SMILE (lots of fixes in each release).  If you are, feel free to send me an ips of the bad rom (and tell me what room is the issue).  I can almost definitely fix the room while fixing the SMILE bug.


I believe I was trying to save in the pointers. I also believe I'm using the latest version of SMILE but I already deleted that rom so I can't create an IPS.

Here is exactly what I did if you wish to try it for yourself:
-clicked "expand ROM"
-went to room 79D9C and opened up the pointers
-changed level data to "E08000"
-saved pointers
-at the "Copy data or leave it?" window I clicked "yes"
-I was then confronted with that warning (see picture)
-I clicked "no" and then SMILE crashed

Hope that helps.
OMG FLAN!!!!!!!
Ahhhh,I know what caused your crash Tyjet. When you clicked to copy data, SMILE would have taken all the data for the level design for that room, removed it from it's original location, and put it at 300000. Thus leaving free space in the original location.
Then when you clicked "no" because of space limits, SMILE reverted back to the original pointer, but didn't put back the data. This in turn pointed to free space for the level data, which is what caused the crash.

Remember, if you KNOW there is no important data where you're trying to save to, don't worry about the warning, like Jathys said.
Quote from Jathys:
Quote from Kuro Inzen:
okay, how about a response from someone who would offer directions on how to do this?

You are going to need to learn a programming language known as ASM (65c816 to be more specific).  Once you have learned ASM, how to do this will be blatantly obvious to you, but I'll lay out some of the basic thinking I would use to tackle the problem:
1) There will be coding (the ASM) that tells the game to write the numbers to the HUD. Currently, it only writes two of them. You would need to hijack that coding. You could do this by either: a) Overwriting an existing command to create a jumping point to your new code (JSR) -or- b) Look at the existing code in detail and see if there are pieces that can be shortened up a bit to allow you to fit your new coding in without the jump.
2) You would need need to compare (CMP) Samus health with $64 (100, non-hex) to see whether you need to place a 0 or a 1.  If going higher than 199, you'd have to add the appropriate checks for that as well.  I would recommend looking at the existing algorithm for the other 2 slots and use the existing code that determines this, as it's probably just another JSR.
3) The HUD (which starts at $7EC608 in the RAM) would most likely be written to, indexed by X (LDA $C608,X).  The X value may already be set for you, but you would need to look at the existing code to find out.  Assuming it's not already set, you would figure X by finding the tile number *2.  As for what value to write, that would simply be whatever a 0 or a 1 is in the tile table data (you'd want to look at the tiles in a tile editor to know what place they are, because few people would have this memorized.
4) After doing this, you'd want to make sure (assuming, of course you made a jump to your code instead of shrinking the existing code), to insert whatever coding you had to overwrite to make your jump, and then return to the original coding (RTS).

Sorry I didn't offer enough directions before.  If these ones aren't detailed enough, I'd be glad to write up the pages and pages it would take to teach you ASM, but that's what tutorials are for, and really is what you need here.  There is no easy answer.  You really have only 2 options:
1) Learn ASM (on-line tutorials, irc channels, threads on this very board that have patches released *with coding to learn from*, etc...).
2) [glow=red,2,300]Beg someone else to do it for you.[/glow]


This is going to be extremely difficult.. ADD and Coding do not mix.
-gets on knees and begs-
The only thing i know how to do coding-wise is modify existing HEX values, and that's with Earthbound. -sobs-
Quote from Sadiztik Fish:
Ahhhh,I know what caused your crash Tyjet. When you clicked to copy data, SMILE would have taken all the data for the level design for that room, removed it from it's original location, and put it at 300000. Thus leaving free space in the original location.

Ummm... SMILE may have copied the data to the new location, but it does *not* remove the data from the original location.
Edit history:
Sadiztik Fish: 2009-10-16 11:03:04 pm
OMG FLAN!!!!!!!
Quote from Jathys:
Quote from Sadiztik Fish:
Ahhhh,I know what caused your crash Tyjet. When you clicked to copy data, SMILE would have taken all the data for the level design for that room, removed it from it's original location, and put it at 300000. Thus leaving free space in the original location.

Ummm... SMILE may have copied the data to the new location, but it does *not* remove the data from the original location.


Really? I thought it did. Hmmm my bad. It does with Door out pointers though, so I thought it'd do it with others.
I guess, there is a bug. It happends with me too. Pointer of Level Data is stored as E08000 after this step
Quote from Tyjet66:
-at the "Copy data or leave it?" window I clicked "yes"

Then SMILE warns you about possible overwriting of the data.

Quote from Tyjet66:
-I clicked "no" and then SMILE crashed

If click "No", data will not be transferred to E08000, but the pointer of Level Data will lead to E08000, because it was saved before that. Then SMILE reads level data from E08000 and crashing, because there is nothing at that address.
OMG FLAN!!!!!!!
Ahh then I was kinda right, just the wrong way around.

Anyway, I just did some dissasembling of the scrolling sky code, cause I'm trying to add another screen. The bad thing is, I have no idea how the game does that. The code I got out of the rom seems to be what causes the scrolling, not what draws it.

To be more specific, the scrolling sky originally has 5 screens, the lowest being the mountains. The 6th screen down will then repeat the sky, meaning that from screen 5 down it will go mountains, then the top sky again, and so on. What I want to do is make the sky repeat every 6 screens, and just have the lower 2 lines of the 5th screen (the dirt) repeat over the 6th.

A pic for clarity. The upper row of screens would be the 5th screen from the top, and the background that comes up. next one down is obviously the 6th, and the background that originally comes up on the left, what I want on the right.


I would think that it uses a tiletable of some sort, but where it is or it's format I have no idea.

attachment:
Sadiztik Fish
Maybe you should just use BG for the rooms with sea in Crateria? Both of them are 6 screens in height. Just replace tiles in BG at lowest 2 screens with rocks.

Quote from Jathys:
Sorry I didn't offer enough directions before.  If these ones aren't detailed enough, I'd be glad to write up the pages and pages it would take to teach you ASM, but that's what tutorials are for, and really is what you need here.  There is no easy answer.  You really have only 2 options:
1) Learn ASM (on-line tutorials, irc channels, threads on this very board that have patches released *with coding to learn from*, etc...).
2) Beg someone else to do it for you.

Knowing and understanding ASM commands is a first step. But how can I find where to change the needed data? Disassemble the whole ROM? Is there a more easy way?

As for HUD (for example), I don't even know, in which bank I should search placements of objects (missiles, energy tanks etc.)
Edit history:
Sadiztik Fish: 2009-10-18 01:54:03 am
OMG FLAN!!!!!!!
Quote from JAM:
Sadiztik Fish
Maybe you should just use BG for the rooms with sea in Crateria? Both of them are 6 screens in height. Just replace tiles in BG at lowest 2 screens with rocks.


Oh it's all good now. I was having a shower and I figured it out. Did the best facepalm too. It's the BG_data pointer that draws the BGs. I just need to find a way to edit that. I assume it uses a tiletable, though I haven't actually checked yet.

I do have a few questions regarding ASM/Hex though.

1. How to remove the FX1 from torizo. (guessing it's just a few NOPs, but I don't know where that data is)
2. Removing the "waving" effect from Phantoon's intro and death animations. He would only pixelate, and not wave around the screen.
3. Remove the waving effect from Wave beam, so it fires in a straight line
4. Change the sound made by firing beams (mainly just the wave beam)
5. I found the code that splits Spazer and Plasma, and was trying to make it work on Wave and Ice. I sort of got it going. Spazer and Plasma were no longer linked up (though having both at once froze the game still), but the wave+ice part didn't. It was kinda screwy. Sometimes selecting ice would turn off plasma, same with wave and spazer. So im assuming there's another piece of code for it.

Code:
	PHP
	REP #$30
	LDA $24 
	EOR #$FFFF
	AND $09A6
	BIT #$0004 
	BNE $21 
	BIT #$0008 
	BEQ END
	LDA $24
	BIT #$0008 
	BNE END
	LDA $09A6
	BIT #$0004
	BEQ END
	AND #$FFFB
	STA $09A6
	LDA $C072
	STA $00
	BRA $1A
	LDA $24
	BIT #$0004 
	BNE END 
	LDA $09A6
	BIT #$0008
	BEQ END
	AND #$FFF7
	STA $09A6
	LDA $C074
	STA $00
	LDA #$0C00
	STA $12
	LDA #$000A
	STA $16
	JSR $A29D
	PLP
	RTS


I changed all the BIT #$0008/#$0004 to #$0002 and #$0001 respectively to account for wave and ice instead, and the 2 ANDs that check for the plasma/spazer bits.
Also, I know that the branch options go to END, and there is no END in there, but that wasn't the whole code I had. I had other stuff for wave+ice as well, whic  screw up those brach opcodes.


Bah! I have so much info in my head im trying to organise. Any help would be greatly appreciated, though this is pretty advanced stuff im asking. :/
What'd you say?
I alright, I expanded my rom, put room data pointer to E08000, the room takes up 910, I want 1000 reserved. How do I go about finding what to put my next room at?
OMG FLAN!!!!!!!
Room data is (i think) the only value in the rom that goes by decimal values, not hexidecimal. If you want to give your room 1000 bytes to use, open the calculator (found in accessories), turn it into a scientific calculator, enter 1000, then click the hex option to the left side. THe number you get will be 1000 in hex ($3E8). Now you simply add that to E08000, and put that into the level_entries. You can use this calculator way if you're bothered to, but I find it easier to just have the level_entires open an the room in SMILE, and just change the level_entries, then save it and the room until you have what you want.

Also, that calculator is invaluable to advanced hacking (as it can quickly convert between hex, decimal and binary), so it's a good idea to have a shortcut somewhere so you remember it.
Quote from Sadiztik Fish:
I do have a few questions regarding ASM/Hex though.

1. How to remove the FX1 from torizo. (guessing it's just a few NOPs, but I don't know where that data is)
2. Removing the "waving" effect from Phantoon's intro and death animations. He would only pixelate, and not wave around the screen.
3. Remove the waving effect from Wave beam, so it fires in a straight line
4. Change the sound made by firing beams (mainly just the wave beam)
5. I found the code that splits Spazer and Plasma, and was trying to make it work on Wave and Ice. I sort of got it going. Spazer and Plasma were no longer linked up (though having both at once froze the game still), but the wave+ice part didn't. It was kinda screwy. Sometimes selecting ice would turn off plasma, same with wave and spazer. So im assuming there's another piece of code for it.
Bah! I have so much info in my head im trying to organise. Any help would be greatly appreciated, though this is pretty advanced stuff im asking. :/


1. I'm fairly certain I know how to find that now, so maybe I'll find that today.
5. Check your PMs.
ok, so i decided to start on a mini hack, and i tried to play it and i guess the thing was corrupt because it didn't even have the Nintendo sign pop up.

so is there a way to transfer the room to another fresh rom?