1 page
^^
vv
List results:
Search options:
Use \ before commas in usernames
I recently decided to start making my own Super Metroid hack and have been messing around in SMILE learning about placing titles, because I want to map out rooms first, but I'm having a problem with the ship in the first Crataria room.

I read in the Moonedit SMILE FAQ that unless I knew how to move the ship (The starting location for Samus, not the sprite of the ship itself) that I was better off leaving it where it was, so I decided to do that, but the room was to large length wise and to small hight wise for what I had in mind. Originally I wanted a room that was 5x4 screens large but because I didn't know how to move the ship I decided to leave it where it was and resize the room to fit what I wanted. In order to keep the ship in position I resized the room to 6x6 screens but when I went to test Samus wouldn't appear at the ship and everything just messed up. I then tried to just add screens to the bottom but SMILE wouldn't let me telling me that I was only allowed 50 screens for the room.

Basically I just want to know how to move the ship so that I can make the room the way I wanted it, or if someone could just make the room for me keeping the ship where it is but having it work correctly in a 6x6 room, or the same thing but a 5x4 room instead with the ship on screen X4Y2 (second screen from the right, second screen from the bottom).

>_> It's probably asking to much for the latter 2 options, but if anyone can help I would appreciate it.
Thread title: 
Edit history:
Kejardon: 2009-01-31 03:00:47 pm
Embarrasing Fact: Power suit made by lowest bidder
Moving the ship is straightforward. Move it along with the terrain behind it. Not really anything you need to tweak for that. However, if it's supposed to land at a different height, you'll want to edit a few things. Example x-kas code from my notes:
Code:
	;A2A80F is the CMP with height to slow Samus's ship at
	;A2A8AD is the CMP with height to stop Samus's ship at

;Values for stopping on the third screen 
org $A2A80F	;Position to slow after
	CMP #$0180
org $A2A8AD	;Position to stop after
	CMP #$024F
org $A2A8B2	;Position to go to when stopped, this should be the same as the previous value
	LDA #$024F

you can also just use a hex-editor and go to the relevant addresses to change the values.

Then you have to edit Samus's save spawning position for Crateria. It was saves...$00 and $12 I think? 80C4C5 and 80C5C1 in the ROM, although SMILE should be able to edit them just fine.

::edit:: oh, and while I'm at it, the position for the icon on the pause screen is at 82C853 / 82C855 (X / Y)
Thank you, that really helped. The room is working fine now.
Ethan
This can actually be done in SMILE itself, just go to area load stations and play around.
I actually have another question.

I'm working on doors now, which are working, but when you enter it the screen has to scroll up a bit because you can also see part of the screen below it. That seems pretty normal, but after it does this the door in the next room overlaps itself (see attached picture). I don't know why it does that, I originally thought it was a scrolling problem so I set the screens below the door in the other room to red, but that didn't work. I also tried removing the door caps but they just showed up anyway after entering the room.

Thanks in advance to those that try to help. It's really bugging me.

attachment:
Doors must be in the center of the screen if they have a doorcap. In that pic, it looks like the doors you're traveling through are one block too low.
Edit history:
YukiKitsune: 2009-02-04 03:03:47 pm
Thanks for the fast response. That fixed it, I cant believe I missed something as simple as that.
If I have more questions I hope you all will help. <3

EDIT: How does the game decide if Zebas is awake?
I believe if you have to have a room that locks until a certain number of enemies are killed. (Ex: Old Mother Brain room after you get morph and missles.) Once you unlock a door like that and move through it Zebes will be awake.
How can I add states to a room? Not all the rooms have a state for the escape and I was thinking that would be a problem later on.
Due to how tightly things are packed where the room headers are, you're best off copying a room and making it into a whole new room. Find an already existing room with the appropriate amount of states you want, and copy its header, pasting it in free space in the same bank. Basically, the room number in the drop down list is the start of the header data for that room. So if you were using the Landing Site as a base, you'd start copying from 791F8 in your hex editor. I don't really know the exact amounts of data you have to copy for a room with only the standard/room with 2 roomstates/etc. but what I do to figure it out is that I know that from the start of the last level data pointer in that header you need to copy 26 more bytes.

Once you've copied the header and pasted it in the free space below (must not go over 7FFFF though), take a note of the location you pasted it at, go into SMILE's files and add that number into the document called mdb.txt. Then you can open up that room in SMILE and start changing all of its pointers for stuff that you don't want to be shared with other rooms.
I just noticed something while looking through all the rooms that you run though while escaping. They all have a PLM that is a question mark in a red box and only in the escape state. Does anyone know what this thing is used for?
...
I asked the same thing in #jzd a few days ago.  The common belief is that it could possibly be what activates the explosion graphics, and also what prevents Metroids from respawning(it appears in every Metroid room as well).
The ones in the Metroid rooms set the "Metroids in this room are dead" roomstate once you've killed all the metroids in the room. The ones in the escape do absolutely nothing.
As far as I know, they do nothing. they have no effect to rooms you add them to.
OR, possibly, they're what writes to the RAM to tell the game to make the events happen. (But this would only be needed in the metroid rooms... wtf?)

EDIT: Crap, DSO beat me.
Go ahead. Stare.
Maybe they make the acid rise in those rooms?
Embarrasing Fact: Power suit made by lowest bidder
THE PLMS, THEY DO NOTHING.
or if you insist on knowing the details, the PLMs all immediately write an address to their pre-plm instruction pointer. This address is indexed by the PLM's room argument (high/low in SMILE) and must be a multiple of 2 if you don't want to run garbage as code. The values are as follows:
00: RTS
02: RTS
04: RTS
06: RTS
08: RTS
0A: RTS
0C: RTS
0E: RTS
10: RTS
12: Set event $10 when room is cleared.
14: Set event $11 when room is cleared.
16: Set event $12 when room is cleared.
18: Set event $13 when room is cleared.

Values above 18 are not meant to be used.
I still have the logs of when I disassembled this. Sadly, I did basically no ranting although this truly does deserve ranting.
Code:
[15:07] * Topic set by Jathys on 7/11/2005 7:57:59 PM
...
[19:10] <Kejardon> baha
[19:10] <Kejardon> DB44 has a single PLM instruction: Do nothing.
[19:11] <Kejardon> MoN, when are you going to upload a new version?
[19:11] <Drewseph> wtf!
[19:11] <Drewseph> then why is it a key factor in changing events for that?
[19:11] <Kejardon> It must use just pre-PLM commands
[19:14] <Kejardon> Are those hex values or decimal?
[19:15] <Drewseph> which ones
[19:15] <Drewseph> ohh
[19:15] <Drewseph> those har hex
[19:16] <Kejardon> I'm guessing decimal... the first non-RTS is 12d
[19:16] <Kejardon> Doh
[19:16] <Drewseph> the index of plm to effect metroid hall 1 is 12 index 00 unknown
[19:16] <Drewseph> shaft 1 is 14 00
[19:16] <Drewseph> hall2 16, and shaft 2 18
[19:18] <Kejardon> LDA $0E50
[19:18] <Kejardon> CMP $0E52
[19:18] <Kejardon> Jath: Are those kills / target kills?
[19:19] <Kejardon> actually, it looks like the first is target kills, and the latter current kills
[19:19] <Jathys> I believe so, yes
[19:19] <Kejardon> k
[19:19] <Kejardon> Then these are all stupidly hardcoded
[19:20] <Kejardon> *very* stupidly
[19:21] <Kejardon> Ok, let me just explain this, so you can see how stupid it is
[19:22] <Kejardon> X is loaded with the value (12, 14, 16, 18)
[19:22] <Kejardon> it is then used to go to a jump table
[19:22] <Kejardon> Each routine is the same exact thing
[19:23] <Kejardon> except that a single load is different (LDA #$0010, #$0011, #$0012, #$0013
[19:24] <Drewseph> whoa!
[19:24] <Drewseph> thats wtupidly easy
[19:24] <Drewseph> I knew it had to laod a #$0011-13 at somepoint
[19:25] <Drewseph> so, a plm can easily be written to run to a routine of many event values?
[19:25] <Kejardon> Are those the only four rooms that use DB44?
[19:25] <Drewseph> no
[19:25] <Drewseph> all the rooms in the escape routehack them
[19:25] <Drewseph> have**
[19:25] <Drewseph> all different values too
[19:25] <Kejardon> What values?
[19:25] <Drewseph> not sure at the moment
[19:25] <Kejardon> 0 - E do absolutely nothing
[19:26] <Kejardon> actually, 0-10. Miscounted again. >_>
[19:26] <Drewseph> most just crash
[19:26] <Drewseph> I've messed around with it a bit
[19:26] <Kejardon> lol...
[19:27] <Kejardon> It's an index value to a jump table to code
[19:27] <Kejardon> Any odd values will most likely crash
[19:27] <Kejardon> and values over a certain point will also most likely crash
[19:27] <Kejardon> in fact, it looks like only 12, 14, 16, and 18 will do anything
[19:27] <Drewseph> whats the code it jumps to?
[19:28] <Kejardon> LDA $0E50
[19:28] <Kejardon> CMP $0E52
[19:28] <Kejardon> BCC #$07
[19:28] <Kejardon> LDA #$0010
[19:28] <Kejardon> JSL $8081FA
[19:28] <Kejardon> RTS
[19:28] <Drewseph> kej
[19:28] <Drewseph> Landing site is 08
[19:28] <Kejardon> except the #$0010 can change
[19:29] <Kejardon> may be 11, 12, or 13
[19:29] <Kejardon> Landing site does nothing then
[19:29] <Drewseph> oA is crateria highway
[19:29] <Kejardon> You can delete it and it shouldn't make a difference
[19:29] <Drewseph> 0C is the stairway
[19:29] <Kejardon> only 12, 14, 16, and 18 should matter
[19:30] <Drewseph> I think that controls acid raising
[19:30] <Drewseph> anyways kej, I need a plm to alter event states
[19:31] <Drewseph> maybe I can get this plm to point to free space where I can put event code values?
[19:31] <Drewseph> hor however it works
[19:32] <Kejardon> Seeing how limited this PLM is, it should be easy to expand it a bit, delete the useless ones (in the escape path), and make it much more useful
[19:32] <Drewseph> hmmm
[19:33] <Drewseph> see, I want to make use of the event values not used
[19:36] <Kejardon> k, this should be real easy
[19:36] <Kejardon> First off, delete the useless ones (all of them in the escape path), and change the others to the value you'd expect (10, 11, 12, 13 instead of 12, 14, 16, 18)
[19:38] <Kejardon> the PLM startup code is at 25B1E (no header). 
[19:40] <Drewseph> k
[19:41] <Kejardon> Let's change it to A9 25 DB 99 D7 1C 60 AD 50 0E CD 52 0E 90 07 BD C7 1D 22 FA 81 80 60
[19:42] <Kejardon> That does everything the previous code did and then some, in about 1/8th the space


Bloodsonic: After a while you just nod your head and smile cry inside when you see some of Nintendo's code.
Quote from Deep_Space_Observer:
Due to how tightly things are packed where the room headers are, you're best off copying a room and making it into a whole new room. Find an already existing room with the appropriate amount of states you want, and copy its header, pasting it in free space in the same bank. Basically, the room number in the drop down list is the start of the header data for that room. So if you were using the Landing Site as a base, you'd start copying from 791F8 in your hex editor. I don't really know the exact amounts of data you have to copy for a room with only the standard/room with 2 roomstates/etc. but what I do to figure it out is that I know that from the start of the last level data pointer in that header you need to copy 26 more bytes.

Once you've copied the header and pasted it in the free space below (must not go over 7FFFF though), take a note of the location you pasted it at, go into SMILE's files and add that number into the document called mdb.txt. Then you can open up that room in SMILE and start changing all of its pointers for stuff that you don't want to be shared with other rooms.
what if i copy a boss room? or a room which the lave/acid raises up, would it be the same just like copying normal rooms such as 791F8?
I seem to be having a problem with the landing sites sky. When I enter the room from the left it copies the background of the room I just came from and has it scroll as if it were the sky. I'm not sure how to fix it. The room that I'm entering from is 2x2 screens and has the background of the first inside Crataria room.

I also can't get the adding doors thing to work, I'm not sure what I'm doing wrong so I ended up moving the landing site to a room that already had the amount of doors I needed.

One more question, I changed the landing site into a different room and the sky changed colors, I was originally going to use the cave background but I liked how it looks now. Why did the colors change though?
Embarrasing Fact: Power suit made by lowest bidder
First problem: You need to load the correct tilemap to VRAM, this is originally done by a door DDB check in the BG_data. PJBoy made a patch for this though so the sky always loads correctly in a skyroom and you don't have to worry about it. Might check EP's hack list, I think there's a link to it there.
Thanks. That fixed the problem when coming from the other rooms, but now whenever I load from the ship the screen is filled with green garbage until I move to a different screen for it to disappear.
Edit history:
P.JMan: 2009-02-10 03:39:48 pm
I like Big Butts and I can not lie
Yeah that's been on my tofix list ([url=http://interdpth.arc-nova.org/PJs stuff]see[/url]). The ship uses a separate routine from the door transition one