Post by Fox Infekt on Aug 9, 2008 1:22:57 GMT -5
Tutorial made by Dark Link
Hey all!
This is an exciting day for most I am guessing, because I am finally going to reveal the secret of Porting MM maps to OoT. First off all I would like to thank JSA who pretty much did the first port ever without him I would not know not only the basics, but I would not have gained the knowledge to really do anything. He is a true friend to me and has been there to lend a helping hand in everything that I have ever done! We expanded from there and now I have created an easy and effective way to load them properly! super frog and Cool of course for there help with petty questions that I always asked and TS for making the file pack and trying his first room transplant.
Secondly - just remember where this came from! This is a ZSO exclusive and is being released here first so if anyone copies this for there forum make sure to credit ZSO, Dark_link-77 and John_Smith_Account!
So with all things aside let me explain to you how to port MM maps.
You Will Need:
- Hex Editor ( My favourite choice is XVI32 )
- Nemu 08 (Because Project 64 cannot run these ports until they are patched)
- Majoras Mask Demo Version
- TS_Death_Angel's file pack
- Zelda OoT: Debug Rom
- Hex Calculator ( Can be found with View> Scientific> Hex)
- Zelda Edit ( In case recalculation of offsets are needed )
- A pad of paper or use notepad ( I like using paper because you can quicky jot things)
- Alot of Patients
- More advanced understanding of how to hack in hex
First Step: Finding your files
You need to find the ZSCENE and ZMAP, this can be quiet tricky but thankfully we have a way of going about it.
Below are the list of ZSCENES for Majoras Mask. To find the file for the map it is simple. Open up XVI32 and load up Majoras Mask. Once it is up and running go to FIND and search for whatever zscene pointer you want. Once found, the pointers beside it are the compressed files location.
E.G.
If I wanted to Find the Southern Swamp I would...
1. Load up XVI32.
2. Open Majoras Mask file into it.
3. Search for 01 F1 A0 00 01 F2 A6 30
4. Once it is found you should see this.
1F280:01 F1 A0 00 01 F2 A6 30 01 65 77 30 01 66 44 40
( This bolded is the Map Scenes pointer you just searched for. This is its uncompressed location in the rom. The Underlined is what we need. This is the Files compressed location in the rom.)
5. 01 65 77 30 01 66 44 40 - Take the first address (underlined and delete the zero infront, delete the spaces so it looks like so. 1657730.
6. Search for 1657730 in TS's file pack. Unfortunately due to the inaccuracy of some of the file renaming, some of the zscenes of zmaps are labelled as opposite. No need to worry, it doesn't matter, the contents are what they are supposed to be.
Now those are the steps to getting the Scene, the map is just as easy. Again I will use the Swamp as reference.
1. Open the Zscene you just obtained.
2. Look at the header - and look for value 04 XX 00 00 02 XX XX XX For the southern swamp it looks like so:
04 03 00 00 02 00 01 90
Here is a break down of what all this means:
04 <-- Just states that these are related to the maps
03 <-- States the number of maps in the scene
00 <-- Place holder
00 <-- Place holder
02 <-- Bank 02 (scene)
00 01 90 States the offset of where the map pointers start at. (0x190)
This states that there are 3 Zmaps and they start at offset 190
3. Now go to the offset that is stated and there maps should be there. In southern swamp it looks like this.
01 F2 B0 00 01 F4 62 40 01 F4 70 00 01 F5 96 20 01 F5 A0 00 01 F6 70 A0
These are the Uncomprsesed offsets for each of the maps.
4. Search for the first one in the ROM and do the same that you did with the scene. Take the Pointer beside it delete the 0 infront and search for that in the filepack for it.
This is how you find ZSCENES and there corresponding ZMAPS. It looks difficult but it really isn't.
Majora's Mask ZSCENE list:
Values: aaaa:bbbb:cccc:dddd-
01F1:A000:01F2:A630- Z2_SONCHONOIE (Southern Swamp)
02EA:2000:02EB:1CD0- Z2_GROTTOS* (Grottos)
02E9:4000:02EA:0740- Z2_INTRO2* (Introduction)
01F6:8000:01F7:2BC0- Z2_WITCH_SHOP (Swamp hag!)
01F7:D000:01F8:4880- Z2_LAST_BS (Majora)
0000:0000:0000:0000- Z2_OMOYA (removed map)
0000:0000:0000:0000- Z2_BOWLING (removed map)
0000:0000:0000:0000- Z2_20SICHITAI2 (removed map)
01F8:E000:01F9:A680- Z2_HAKASHITA (Caverns under Graveyard)
01FD:A000:01FE:5810- Z2_AYASHIISHOP (Black Market (010E0001) )
01FD:A000:01FE:5810- Z2_COWLAND* (Ranch Barn (01320000) )
0200:B000:0200:F0A0- KAKUSIANA (Honey and Darling Game)
0201:5000:0201:C4D0- SPOT00 (Mayor's Office)
0204:3000:0206:1380- Z2_IKANA (Ikana Canyon)
0209:D000:020A:ED20- Z2_KAIZOKU (Inner Pirate Fortress)
020C:3000:020D:03D0- Z2_MILK_BAR (Milk Bar)
020D:C000:020E:E630- Z2_INISIE_N (Stone Temple Main Upside Down)
0213:E000:0214:7880- Z2_TAKARAYA (Treasure Chest Game)
0215:0000:0216:2080- Z2_INISIE_R (Stone Temple Main Room)
021A:A000:021C:4FA0- Z2_OKUJOU (On Top of ClockTower)
021C:8000:021D:2E60- Z2_OPENINGDAN (Opening Introduction)
021E:6000:021F:D390- Z2_MITURIN (Woodfall Temple)
0225:6000:0225:DDF0- Z2_13HUBUKINOMITI (Snow Mountain Entrance)
0226:3000:0227:2870- Z2_CASTLE (Ikana Castle Outside)
022B:5000:022B:DE90- Z2_DEKUTES (Deku Mini Game)
022C:3000:022C:61B0- Z2_MITURIN_BS (Owalda, the democratic indian)
022C:9000:022D:26C0- Z2_SYATEKI_MIZU (Town Shooting Gallery)
022D:A000:022F:59D0- Z2_HAKUGIN (Snowhead Temple)
0236:D000:0237:06B0- Z2_ROMANYMAE (Road to Ranches)
0237:5000:0238:9650- Z2_PIRATE (Pirate Fortress)
0241:2000:0242:3CD0- Z2_SYATEKI_MORI (Swamp Archery Range)
0242:B000:0243:4EA0- Z2_SINKAI (Ocean)
0243:D000:0246:03C0- Z2_YOUSEI_IZUMI (Fairy Fountain)
0247:F000:0248:9C60- Z2_KINSTA1 (Swamp SpiderHouse)
024A:F000:024B:EE40- Z2_KINDAN2 (OceanSide SpiderHouse)
024F:5000:024F:D780- Z2_TENMON_DAI (Clocktower Sewers)
0252:A000:0252:DF90- Z2_LAST_DEKU (Moon Dungeon, Deku Part)
0254:1000:0254:E220- Z2_22DEKUCITY (Deku Palace)
0258:3000:0258:A9D0- Z2_KAJIYA (Blacksmith)
0259:9000:025D:1550- Z2_00KEIKOKU (Termina Field)
025F:B000:0260:47B0- Z2_POSTHOUSE (Post Office)
0260:E000:0261:BC40- Z2_LABO (Marine Research)
0262:5000:0262:AC50- Z2_DANPEI2TEST (Dampe's loveshack)
0264:8000:0265:51C0- Z2_16GORON_HOUSE (Goron Village: Inside)
0266:B000:0267:9770- Z2_33ZORACITY (Zora's Domain)
0268:5000:0268:F270- Z2_8ITEMSHOP (Trading Post)
0269:D000:026B:9460- Z2_F01 (Ranch - Main)
026C:8000:026C:AC10- Z2_INISIE_BS (Stone Tower Boss)
026C:C000:026E:ADD0- Z2_30GYOSON (GreatBay Coast Entrance)
0270:9000:0272:1F90- Z2_31MISAKI (GreatBay Coast 2)
0273:A000:0273:C610- Z2_TAKARAKUJI (Lottery House)
0274:0000:0274:C050- Z2_TORIDE (Pirate Fortress Outside)
0275:B000:0276:4150- Z2_FISHERMAN (Fisherman Hut)
0276:E000:0277:A330- Z2_GORONSHOP (Goron Village Shop)
0278:5000:0279:6BC0- Z2_DEKU_KING (Deku Castle Throne Room)
027A:1000:027A:A5C0- Z2_LAST_GORON (Moon Dungeon, Goron Part)
027C:6000:027C:DB50- Z2_24KEMONOMITI (Entrance to Southern Swamp)
027D:5000:027E:0920- Z2_F01_B (Ranch - Dog Racing)
027E:9000:027F:72B0- Z2_F01C (Ranch - Mohawk Kid)
027F:E000:0280:C1D0- Z2_BOTI (Graveyard)
0282:3000:0282:AFB0- Z2_HAKUGIN_BS (Goht, the local crazy bull)
0283:2000:0284:3560- Z2_20SICHITAI (Southern Swamp?)
0288:6000:0289:0FF0- Z2_21MITURINMAE (Woodfall: Poisoned)
028A:1000:028B:5820- Z2_LAST_ZORA (Moon Dungeon - Zora Area)
028C:5000:028C:B700- Z2_11GORONNOSATO2 (Goron Village: Unfrozen)
028E:6000:0290:2740- Z2_SEA (Frozen Cutscene)
0297:7000:0298:F800- Z2_35TAKI (Zora Race Game)
029A:9000:029B:6030- Z2_REDEAD (Ikana's Well)
02A0:D000:02A1:88B0- Z2_BANDROOM (Rooms of the Zora Band)
02A5:B000:02A6:0700- Z2_11GORONNOSATO (Goron Village: Frozen)
02A7:8000:02A8:0790- Z2_GORON_HAKA (Cutscene - Get goron mask)
02A8:9000:02A8:FA10- Z2_SECOM (Sakon's hideout)
02AA:4000:02AB:2650- Z2_10YUKIYAMANOMURA (Mountain Village: Frozen)
02AB:F000:02AC:57C0- Z2_TOUGITES (Spirit House)
02AC:B000:02AD:BB00- Z2_DANPEI (Deku Race track)
02B3:8000:02B4:0090- Z2_IKANAMAE (Entrance to Ikana Canyon)
02B4:6000:02B4:D530- Z2_DOUJOU (The Dojo)
02B5:5000:02B6:E800- Z2_MUSICHOUSE (Inside the Music House)
02B7:C000:02B8:7010- Z2_IKNINSIDE (Ikana Castle)
02B9:3000:02B9:A020- Z2_MAP_SHOP (Swamp Tour GuideHouse)
02BA:1000:02BB:5300- Z2_F40 (Stone Temple)
02BC:2000:02BD:5AF0- Z2_F41 (Stone Temple: Upside down)
02BE:2000:02BE:9060- Z2_10YUKIYAMANOMURA2 (Moutain Village: Unfrozen)
02C0:B000:02C1:0CF0- Z2_14YUKIDAMANOMITI (Mountain Area villageafter: Frozen)
02C1:6000:02C1:D560- Z2_12HAKUGINMAE (Snowhead Temple:Outside)
02C2:6000:02C2:FBB0- Z2_17SETUGEN (Mountain villageFrozen)
02C3:8000:02C4:0AD0- Z2_17SETUGEN2 (Mountain village Unfrozen)
02C4:9000:02C4:E2F0- Z2_SEA_BS (Boss: Gyorg)
02C5:5000:02C6:00E0- Z2_RANDOM (Ikana Cavern behind water fall)
02C8:6000:02C9:5470- Z2_YADOYA (The inn)
02CC:C000:02CD:3220- Z2_KONPEKI_ENT (Great Bay temple intro)
02CD:B000:02CE:2F40- Z2_INSIDETOWER (Twisting Corridor)
02CF:4000:02D0:04E0- Z2_26SARUNOMORI (Woods of Mystery)
02D2:4000:02D3:39D0- Z2_LOST_WOODS (CUTSCENE - IntroHalf2)
02D4:9000:02D5:0310- Z2_LAST_LINK (moon dungeon with dinofols)
02D6:7000:02D7:1FD0- Z2_SOUGEN (tree on moon)
02D7:A000:02D8:6970- Z2_BOMYA (Bombshop)
02D8:F000:02D9:DDB0- Z2_KYOJINNOMA (CUTSCENE - Learning OtO)
02DA:0000:02DA:A490- Z2_KOEPONARACE (Horse Race)
02DB:4000:02DC:3690- Z2_GORONRACE (Goron Race)
02DD:2000:02DF:0770- Z2_TOWN (West Town)
02E0:9000:02E1:EE40- Z2_ICHIBA (East Town)
02E2:A000:02E3:AEE0- Z2_BACKTOWN (North Town)
02E4:6000:02E6:8660- Z2_CLOCKTOWER (South Town)
02E7:D000:02E8:A860- Z2_ALLEY (Laundry Pool)
Second Step: Intergrating the Scene and Map
This is where things can become quite complicated. First of all there are basically two types of maps I guess you could say. Maps that are inside, and Maps there are outside.
Maps there are inside are pretty easy to port, because they have no skybox, no header transplanting and recalculating is required to get them to load up. These maps can pretty much be left as is besides the actors and groups. Outside Maps are tricky because they are going to require header transplanting and some recalculating. For your benefit I am going to tell you how to do both.
Inside maps...
1. Make a new file in your hex editor.
2. Insert your scene file. Record where it ends (the beginning offset and ending) 0 - XXXXXXXX
3. Now beneath this add a couple of lines of 0's. We are doing this to seperate the files from eachother.
4. Insert a map and add 0's after, even if there isn't another map to add. Record where it starts and ends again.
5. Save this file as whatever you want. I like to make all my file names have some osrt of relation to eachother.
Now you have basically created the framework to your new port. Next I am going to explain how to null the actors and groups in both the scene and map.
1. Look at the scene - and look for the value 0E in the header.
0E states the number of actors in the ZSCENE. Scenes only have Doors and Planes as actors.
0E <--
xx
00
00
02
xx
xx
xx
So if 0E 03 00 00 02 00 01 90 states that there are 3 actors that lie at offset 190.
2. Change the value beside 0E to 00 so that No doors are loaded at this time. I will in the tutorial explain how to insert doors, but right now we want to just get it running.
So that concludes nulling actors in the Scene, now you must in the map file.
1. Look at your map file (at the offsets I told you to record earlier) and look for the values of 0B and 01. There format goes as following.
0B <-- Represents group data 01 <-- Represents actor data
xx <-- Represents number of groups xx <-- Number of actors
00 <-- Place holder 00 <-- Place holder
00 <-- Place holder 00 <-- Place holder
03 <-- Bank 03 <-- Bank
xx <-| xx <-|
xx <-| offset where groups lie. xx <-| offset where groups lie.
xx <-| xx <2> Insert and insert your Zscene and Map file that you created.
4. Remember those offsets your recorded earlier for where your files lie. Use the Go To function to go to where they lie. Remember because you added them to the rom you need to add a 40XXXXX to it in order to get the proper offset. So if your file was at 4000 - 5000 in your file it will now be 4004000 - 4005000.
5. Now because you added the file in at offset 4000010 everything will be shifted 10 down. (1 line of hex) So you must add ten to all the offsets your files lie at. So lets say the file was at 4000 - 5000 in our original file, it will become 4004010 - 4005010 in our ROM.
6. Record where both your ZMAP and ZSCENE are at now. These will be your offsets you state them at in the ZSCENE and ROM.
7. Overwrite the old values in the ZSCENE which can be found by their location states by 04 like I said earlier. Overwrite them with your ZMAPs new offsets.
8. Find a ZSCENE pointer from the Debug ROM that you want to overwrite with your ZSCENEs pointer. To go offset BA1430 and you will find it there. Overwrite it with your zscenes new pointer.
9. Save
10. Load up into nemu!
Now you just need to see if it works. If it worked good job you did everything perfectly. If not you, you may be skipped a step or did one improperly, go back and check it out.
This concludes my tutorial on how to ports of maps that are inside, outside maps take some recalculation and I am still writing it up!
ENjoy and remember where you learned it!
Retrieved from "http://wiki.n64projects.com/Porting_Levels"
Hey all!
This is an exciting day for most I am guessing, because I am finally going to reveal the secret of Porting MM maps to OoT. First off all I would like to thank JSA who pretty much did the first port ever without him I would not know not only the basics, but I would not have gained the knowledge to really do anything. He is a true friend to me and has been there to lend a helping hand in everything that I have ever done! We expanded from there and now I have created an easy and effective way to load them properly! super frog and Cool of course for there help with petty questions that I always asked and TS for making the file pack and trying his first room transplant.
Secondly - just remember where this came from! This is a ZSO exclusive and is being released here first so if anyone copies this for there forum make sure to credit ZSO, Dark_link-77 and John_Smith_Account!
So with all things aside let me explain to you how to port MM maps.
You Will Need:
- Hex Editor ( My favourite choice is XVI32 )
- Nemu 08 (Because Project 64 cannot run these ports until they are patched)
- Majoras Mask Demo Version
- TS_Death_Angel's file pack
- Zelda OoT: Debug Rom
- Hex Calculator ( Can be found with View> Scientific> Hex)
- Zelda Edit ( In case recalculation of offsets are needed )
- A pad of paper or use notepad ( I like using paper because you can quicky jot things)
- Alot of Patients
- More advanced understanding of how to hack in hex
First Step: Finding your files
You need to find the ZSCENE and ZMAP, this can be quiet tricky but thankfully we have a way of going about it.
Below are the list of ZSCENES for Majoras Mask. To find the file for the map it is simple. Open up XVI32 and load up Majoras Mask. Once it is up and running go to FIND and search for whatever zscene pointer you want. Once found, the pointers beside it are the compressed files location.
E.G.
If I wanted to Find the Southern Swamp I would...
1. Load up XVI32.
2. Open Majoras Mask file into it.
3. Search for 01 F1 A0 00 01 F2 A6 30
4. Once it is found you should see this.
1F280:01 F1 A0 00 01 F2 A6 30 01 65 77 30 01 66 44 40
( This bolded is the Map Scenes pointer you just searched for. This is its uncompressed location in the rom. The Underlined is what we need. This is the Files compressed location in the rom.)
5. 01 65 77 30 01 66 44 40 - Take the first address (underlined and delete the zero infront, delete the spaces so it looks like so. 1657730.
6. Search for 1657730 in TS's file pack. Unfortunately due to the inaccuracy of some of the file renaming, some of the zscenes of zmaps are labelled as opposite. No need to worry, it doesn't matter, the contents are what they are supposed to be.
Now those are the steps to getting the Scene, the map is just as easy. Again I will use the Swamp as reference.
1. Open the Zscene you just obtained.
2. Look at the header - and look for value 04 XX 00 00 02 XX XX XX For the southern swamp it looks like so:
04 03 00 00 02 00 01 90
Here is a break down of what all this means:
04 <-- Just states that these are related to the maps
03 <-- States the number of maps in the scene
00 <-- Place holder
00 <-- Place holder
02 <-- Bank 02 (scene)
00 01 90 States the offset of where the map pointers start at. (0x190)
This states that there are 3 Zmaps and they start at offset 190
3. Now go to the offset that is stated and there maps should be there. In southern swamp it looks like this.
01 F2 B0 00 01 F4 62 40 01 F4 70 00 01 F5 96 20 01 F5 A0 00 01 F6 70 A0
These are the Uncomprsesed offsets for each of the maps.
4. Search for the first one in the ROM and do the same that you did with the scene. Take the Pointer beside it delete the 0 infront and search for that in the filepack for it.
This is how you find ZSCENES and there corresponding ZMAPS. It looks difficult but it really isn't.
Majora's Mask ZSCENE list:
Values: aaaa:bbbb:cccc:dddd-
01F1:A000:01F2:A630- Z2_SONCHONOIE (Southern Swamp)
02EA:2000:02EB:1CD0- Z2_GROTTOS* (Grottos)
02E9:4000:02EA:0740- Z2_INTRO2* (Introduction)
01F6:8000:01F7:2BC0- Z2_WITCH_SHOP (Swamp hag!)
01F7:D000:01F8:4880- Z2_LAST_BS (Majora)
0000:0000:0000:0000- Z2_OMOYA (removed map)
0000:0000:0000:0000- Z2_BOWLING (removed map)
0000:0000:0000:0000- Z2_20SICHITAI2 (removed map)
01F8:E000:01F9:A680- Z2_HAKASHITA (Caverns under Graveyard)
01FD:A000:01FE:5810- Z2_AYASHIISHOP (Black Market (010E0001) )
01FD:A000:01FE:5810- Z2_COWLAND* (Ranch Barn (01320000) )
0200:B000:0200:F0A0- KAKUSIANA (Honey and Darling Game)
0201:5000:0201:C4D0- SPOT00 (Mayor's Office)
0204:3000:0206:1380- Z2_IKANA (Ikana Canyon)
0209:D000:020A:ED20- Z2_KAIZOKU (Inner Pirate Fortress)
020C:3000:020D:03D0- Z2_MILK_BAR (Milk Bar)
020D:C000:020E:E630- Z2_INISIE_N (Stone Temple Main Upside Down)
0213:E000:0214:7880- Z2_TAKARAYA (Treasure Chest Game)
0215:0000:0216:2080- Z2_INISIE_R (Stone Temple Main Room)
021A:A000:021C:4FA0- Z2_OKUJOU (On Top of ClockTower)
021C:8000:021D:2E60- Z2_OPENINGDAN (Opening Introduction)
021E:6000:021F:D390- Z2_MITURIN (Woodfall Temple)
0225:6000:0225:DDF0- Z2_13HUBUKINOMITI (Snow Mountain Entrance)
0226:3000:0227:2870- Z2_CASTLE (Ikana Castle Outside)
022B:5000:022B:DE90- Z2_DEKUTES (Deku Mini Game)
022C:3000:022C:61B0- Z2_MITURIN_BS (Owalda, the democratic indian)
022C:9000:022D:26C0- Z2_SYATEKI_MIZU (Town Shooting Gallery)
022D:A000:022F:59D0- Z2_HAKUGIN (Snowhead Temple)
0236:D000:0237:06B0- Z2_ROMANYMAE (Road to Ranches)
0237:5000:0238:9650- Z2_PIRATE (Pirate Fortress)
0241:2000:0242:3CD0- Z2_SYATEKI_MORI (Swamp Archery Range)
0242:B000:0243:4EA0- Z2_SINKAI (Ocean)
0243:D000:0246:03C0- Z2_YOUSEI_IZUMI (Fairy Fountain)
0247:F000:0248:9C60- Z2_KINSTA1 (Swamp SpiderHouse)
024A:F000:024B:EE40- Z2_KINDAN2 (OceanSide SpiderHouse)
024F:5000:024F:D780- Z2_TENMON_DAI (Clocktower Sewers)
0252:A000:0252:DF90- Z2_LAST_DEKU (Moon Dungeon, Deku Part)
0254:1000:0254:E220- Z2_22DEKUCITY (Deku Palace)
0258:3000:0258:A9D0- Z2_KAJIYA (Blacksmith)
0259:9000:025D:1550- Z2_00KEIKOKU (Termina Field)
025F:B000:0260:47B0- Z2_POSTHOUSE (Post Office)
0260:E000:0261:BC40- Z2_LABO (Marine Research)
0262:5000:0262:AC50- Z2_DANPEI2TEST (Dampe's loveshack)
0264:8000:0265:51C0- Z2_16GORON_HOUSE (Goron Village: Inside)
0266:B000:0267:9770- Z2_33ZORACITY (Zora's Domain)
0268:5000:0268:F270- Z2_8ITEMSHOP (Trading Post)
0269:D000:026B:9460- Z2_F01 (Ranch - Main)
026C:8000:026C:AC10- Z2_INISIE_BS (Stone Tower Boss)
026C:C000:026E:ADD0- Z2_30GYOSON (GreatBay Coast Entrance)
0270:9000:0272:1F90- Z2_31MISAKI (GreatBay Coast 2)
0273:A000:0273:C610- Z2_TAKARAKUJI (Lottery House)
0274:0000:0274:C050- Z2_TORIDE (Pirate Fortress Outside)
0275:B000:0276:4150- Z2_FISHERMAN (Fisherman Hut)
0276:E000:0277:A330- Z2_GORONSHOP (Goron Village Shop)
0278:5000:0279:6BC0- Z2_DEKU_KING (Deku Castle Throne Room)
027A:1000:027A:A5C0- Z2_LAST_GORON (Moon Dungeon, Goron Part)
027C:6000:027C:DB50- Z2_24KEMONOMITI (Entrance to Southern Swamp)
027D:5000:027E:0920- Z2_F01_B (Ranch - Dog Racing)
027E:9000:027F:72B0- Z2_F01C (Ranch - Mohawk Kid)
027F:E000:0280:C1D0- Z2_BOTI (Graveyard)
0282:3000:0282:AFB0- Z2_HAKUGIN_BS (Goht, the local crazy bull)
0283:2000:0284:3560- Z2_20SICHITAI (Southern Swamp?)
0288:6000:0289:0FF0- Z2_21MITURINMAE (Woodfall: Poisoned)
028A:1000:028B:5820- Z2_LAST_ZORA (Moon Dungeon - Zora Area)
028C:5000:028C:B700- Z2_11GORONNOSATO2 (Goron Village: Unfrozen)
028E:6000:0290:2740- Z2_SEA (Frozen Cutscene)
0297:7000:0298:F800- Z2_35TAKI (Zora Race Game)
029A:9000:029B:6030- Z2_REDEAD (Ikana's Well)
02A0:D000:02A1:88B0- Z2_BANDROOM (Rooms of the Zora Band)
02A5:B000:02A6:0700- Z2_11GORONNOSATO (Goron Village: Frozen)
02A7:8000:02A8:0790- Z2_GORON_HAKA (Cutscene - Get goron mask)
02A8:9000:02A8:FA10- Z2_SECOM (Sakon's hideout)
02AA:4000:02AB:2650- Z2_10YUKIYAMANOMURA (Mountain Village: Frozen)
02AB:F000:02AC:57C0- Z2_TOUGITES (Spirit House)
02AC:B000:02AD:BB00- Z2_DANPEI (Deku Race track)
02B3:8000:02B4:0090- Z2_IKANAMAE (Entrance to Ikana Canyon)
02B4:6000:02B4:D530- Z2_DOUJOU (The Dojo)
02B5:5000:02B6:E800- Z2_MUSICHOUSE (Inside the Music House)
02B7:C000:02B8:7010- Z2_IKNINSIDE (Ikana Castle)
02B9:3000:02B9:A020- Z2_MAP_SHOP (Swamp Tour GuideHouse)
02BA:1000:02BB:5300- Z2_F40 (Stone Temple)
02BC:2000:02BD:5AF0- Z2_F41 (Stone Temple: Upside down)
02BE:2000:02BE:9060- Z2_10YUKIYAMANOMURA2 (Moutain Village: Unfrozen)
02C0:B000:02C1:0CF0- Z2_14YUKIDAMANOMITI (Mountain Area villageafter: Frozen)
02C1:6000:02C1:D560- Z2_12HAKUGINMAE (Snowhead Temple:Outside)
02C2:6000:02C2:FBB0- Z2_17SETUGEN (Mountain villageFrozen)
02C3:8000:02C4:0AD0- Z2_17SETUGEN2 (Mountain village Unfrozen)
02C4:9000:02C4:E2F0- Z2_SEA_BS (Boss: Gyorg)
02C5:5000:02C6:00E0- Z2_RANDOM (Ikana Cavern behind water fall)
02C8:6000:02C9:5470- Z2_YADOYA (The inn)
02CC:C000:02CD:3220- Z2_KONPEKI_ENT (Great Bay temple intro)
02CD:B000:02CE:2F40- Z2_INSIDETOWER (Twisting Corridor)
02CF:4000:02D0:04E0- Z2_26SARUNOMORI (Woods of Mystery)
02D2:4000:02D3:39D0- Z2_LOST_WOODS (CUTSCENE - IntroHalf2)
02D4:9000:02D5:0310- Z2_LAST_LINK (moon dungeon with dinofols)
02D6:7000:02D7:1FD0- Z2_SOUGEN (tree on moon)
02D7:A000:02D8:6970- Z2_BOMYA (Bombshop)
02D8:F000:02D9:DDB0- Z2_KYOJINNOMA (CUTSCENE - Learning OtO)
02DA:0000:02DA:A490- Z2_KOEPONARACE (Horse Race)
02DB:4000:02DC:3690- Z2_GORONRACE (Goron Race)
02DD:2000:02DF:0770- Z2_TOWN (West Town)
02E0:9000:02E1:EE40- Z2_ICHIBA (East Town)
02E2:A000:02E3:AEE0- Z2_BACKTOWN (North Town)
02E4:6000:02E6:8660- Z2_CLOCKTOWER (South Town)
02E7:D000:02E8:A860- Z2_ALLEY (Laundry Pool)
Second Step: Intergrating the Scene and Map
This is where things can become quite complicated. First of all there are basically two types of maps I guess you could say. Maps that are inside, and Maps there are outside.
Maps there are inside are pretty easy to port, because they have no skybox, no header transplanting and recalculating is required to get them to load up. These maps can pretty much be left as is besides the actors and groups. Outside Maps are tricky because they are going to require header transplanting and some recalculating. For your benefit I am going to tell you how to do both.
Inside maps...
1. Make a new file in your hex editor.
2. Insert your scene file. Record where it ends (the beginning offset and ending) 0 - XXXXXXXX
3. Now beneath this add a couple of lines of 0's. We are doing this to seperate the files from eachother.
4. Insert a map and add 0's after, even if there isn't another map to add. Record where it starts and ends again.
5. Save this file as whatever you want. I like to make all my file names have some osrt of relation to eachother.
Now you have basically created the framework to your new port. Next I am going to explain how to null the actors and groups in both the scene and map.
1. Look at the scene - and look for the value 0E in the header.
0E states the number of actors in the ZSCENE. Scenes only have Doors and Planes as actors.
0E <--
xx
00
00
02
xx
xx
xx
So if 0E 03 00 00 02 00 01 90 states that there are 3 actors that lie at offset 190.
2. Change the value beside 0E to 00 so that No doors are loaded at this time. I will in the tutorial explain how to insert doors, but right now we want to just get it running.
So that concludes nulling actors in the Scene, now you must in the map file.
1. Look at your map file (at the offsets I told you to record earlier) and look for the values of 0B and 01. There format goes as following.
0B <-- Represents group data 01 <-- Represents actor data
xx <-- Represents number of groups xx <-- Number of actors
00 <-- Place holder 00 <-- Place holder
00 <-- Place holder 00 <-- Place holder
03 <-- Bank 03 <-- Bank
xx <-| xx <-|
xx <-| offset where groups lie. xx <-| offset where groups lie.
xx <-| xx <2> Insert and insert your Zscene and Map file that you created.
4. Remember those offsets your recorded earlier for where your files lie. Use the Go To function to go to where they lie. Remember because you added them to the rom you need to add a 40XXXXX to it in order to get the proper offset. So if your file was at 4000 - 5000 in your file it will now be 4004000 - 4005000.
5. Now because you added the file in at offset 4000010 everything will be shifted 10 down. (1 line of hex) So you must add ten to all the offsets your files lie at. So lets say the file was at 4000 - 5000 in our original file, it will become 4004010 - 4005010 in our ROM.
6. Record where both your ZMAP and ZSCENE are at now. These will be your offsets you state them at in the ZSCENE and ROM.
7. Overwrite the old values in the ZSCENE which can be found by their location states by 04 like I said earlier. Overwrite them with your ZMAPs new offsets.
8. Find a ZSCENE pointer from the Debug ROM that you want to overwrite with your ZSCENEs pointer. To go offset BA1430 and you will find it there. Overwrite it with your zscenes new pointer.
9. Save
10. Load up into nemu!
Now you just need to see if it works. If it worked good job you did everything perfectly. If not you, you may be skipped a step or did one improperly, go back and check it out.
This concludes my tutorial on how to ports of maps that are inside, outside maps take some recalculation and I am still writing it up!
ENjoy and remember where you learned it!
Retrieved from "http://wiki.n64projects.com/Porting_Levels"