Jump to content

Zelda OoT: How to choose which items (Quest, Equipment or otherwise) you wish to obtain from (MOST) NPC's


Three_Pendants
 Share

Recommended Posts

Thanks for all of this info Pendants. I might just use some of it in my Rebirth project ;)

To think a week ago this was all giberish to me.

 

My pleasure Heavy1930. I excel at this sort of thing, and now I've found a new lure to catch the desired data with! But more on that later, for now I'm posting the text commands relevant to Ocarina Songs.

 

(Ignore the 118 that is the Frame in which the song is played in the Impa Cutscene, did not learn this until my list was halfway compiled)

 
00010118 - Freehand Ocarina
00020118 - Play Minuet of Forest
00030118 - Play Bolero of Fire
00040118 - Play Serenade of Water
00050118 - Play Requiem of Spirit
00060118 - Play Nocturne of Shadow
00070118 - Play Prelude of Light
00080118 - Play Saria's Song 
00090118 - Play Epona's Song
000A0118 - Play Zelda's Lullaby
000B0118 - Play Sun's Song
000C0118 - Play Song of Time
000D0118 - Play Song of Storms
000E0118 - Play ?Scarecrow's Song? (It's shown as two Right-C Buttons that can't actually be pressed, maybe because it is unactivated at the moment?)
 
000F0118 - Learn Minuet of Forest
00100118 - Learn Bolero of Fire
00110118 - Learn Serenade of Water
00120118 - Learn Requiem of Spirit
00130118 - Learn Nocturne of Shadow
00140118 - Learn Prelude of Light
00150118 - Learn Saria's Song
00160118 - Learn Epona's Song
00170118 - Learn Zelda's Lullaby
00180118 - Learn Sun's Song (though if learned outside of its normal area and the area has day and night it will change it from the opposite time.)
00190118 - Learn Song of Time 
001A0118 - Learn Song of Storms
001B0118 - Learn Scarecrow's Song (Which is set to an A when not actually set)
001C0118 - ?It's a blank Ocarina tab that doesn't seem to have a right answer, no matter what is pressed?
001D0118 - Freehand OCarina, but the music lines show up and it proceeds past eight notes in tones.
001E0118 - Same as above except hitting the eigth note causes the normal error sound.
001F0118 - Any note pressed is considered wrong.
00200118 - As above.
00210118 - Play Song Spot
00220118 - As above.
00230118 - As above.

00240118 - As above..

  • Like 1
Link to comment
Share on other sites

And here's the info I promised earlier, all of the locations of the songs in the normal game! I plan on expanding upon this with text pointers to normal NPC's so that people can decide what NPC they want to teach them songs and the like.

 

Special thanks to john_smith_account who simplified the process of looking through raw cutscenes with his Cutscene Tool, which allowed me to locate everything in a faster manner.

 

 

00A9  ovl_Demo_Im Impa
 
ROM: 0xD3EAAC (2405006A) Shadow Medallion (From Sage Impa)
ROM: 0xD4033C (24060060) Zelda's Lullaby (After speaking with Zelda)
 
Cutscene with Impa in Courtyard
0x30DB960 - (000A) - Play Zelda's Lullaby
0x30DB978 - (0017) - Learn Zelda's Lullaby
 
00E7 ovl_En_Ma1 (Child Malon)
 
ROM: 0xE56F4C (24060047) Receiving the Pocket Egg for talking with Malon outside of the Castle Gate.
ROM: 0xE57124 Text: (24050009) Play Epona's Song
ROM: 0xE5719C Text: (24050016) Learn Epona's Song
 
 
0146 ovl_En_Sa Saria
 
ROM: 0xEACB24 (24050062) Saria's Song (Learned at initiation of Sacred Forest Meadow Scene)
 
Cutscene with Saria in Sacred Forest Meadow
 
0x28CFDEC - (0008) - Play Saria's Song
0x28CFE04 - (0015) - Learn Saria's Song
 
Cutscene with Sun's Song in Royal Family Tomb
 
0x34658AC - (000B) Play Sun's Song
0x34658C4 - (0018) Learn Sun's Song
 
Cutscene with Child Zelda in Temple of Time (Obtaining Ocarina of Time)
 
0x2B2ACC4 (000C) Play Song of Time
0x2B2ACDC (0019) Learn Song of Time
 
0153 ovl_En_Fu Windmill Man
 
ROM: 0xDD48AC (24050065) Song of Storms learned from Windmill Man
ROM: 0xDD49F0 Text: (2405000D) Play Song of Storms
ROM: 0xDD4974 Text: (2405001A) Learn Song of Storms
 
 
 
0048 ovl_en_Xc Shiek
 
ROM: 0xEF2874 (2405005A) Minuet of Forest (Meeting Shiek in Sacred Forest Meadow)
 
Cutscene with Shiek in Sacred Forest Meadow 
 
0x28CE82C - (0002) Play Minuet of Forest
0x28CE844 - (000F) Learn Minuet of Forest
 
ROM: 0xEF2A1C (2405005B) Bolero of Fire (Meeting Shiek in Death Mountain Crater)
 
 
Cutscene with Shiek in Death Mountain Crater
 
0x2A6B814 - (0003) Play Bolero of Fire
0x2A6B82C - (0010) Learn Bolero of Fire
 
ROM: 0xEF2B78 (2405005C) Serenade of Water (Meeting Shiek in the Ice Cavern)
 
Cutscene with Shiek in the Ice Cavern
 
0x25CD9D4 - (0004) Play Serenade of Water
0x25CD9EC - (0011) Learn Serenade of Water
 
Cutscene with Shiek in the Desert Colossus
 
0x29AA5A0 - (0005) Play Requiem of Spirit
0x29AA5B8 - (0012) Learn Requiem of Spirit
 
Nocturne of Shadow
 
0xADCFAC - (2405005E) (From Burning awakening in Kakariko) 
 
Cutscene with Shiek in Kakariko 
 
0x281F034 - (0006) Play Nocturne of Shadow
0x281F04C - (0013) Learn Nocturne of Shadow
 
 
Cutscene with Shiek in the Temple of Time after defeating Phantom Ganon
 
0x2B2C37C - (0007) Play Prelude of Light
0x2B2C394 - (0014) Learn Prelude of Light
 
And there you have it. Make sure to change Every Instance of a song to change it! They are include side-by-side for easy modification. 
 
That is every item in the game down, from fairy magics to the Prelude of Light, but in reality our journey is just beginning. What can we do with this knowledge now that we have it? 
 
Expect in the coming weeks for a more full record of NPC text identifiers as that may be the key to getting any NPC into giving items.
 
 
Link to comment
Share on other sites

So...while working with exits, I've made a few notes on them that I decided to post up. Not very big, but might help someone.

 

I've only really looked at Object Set 2 (Adult Link) in ZLE2 to change the Lost Woods exit to go straight into Kokiri Forest.

 

Replace 04DE with 020D in object set 2 from Hyrule Field to Kokiri Forest.

Replace 05E0 with 0185 in object set 2 from kokiri forest to hyrule field.

 

From Hyrule Field
0033 market
00DB kakariko
00EA zora river
04DE lost woods
0286 kokiri forest
020d kokiri forest
0185 Hyrule field

Standing inside kokiri forest
00EE kokiri forest
00EE kokiri forest
05E0 lost woods
011E lost woods
0272 Link's house
00C1 kokiri shop
00C9 know it all
009C house of twins
0433 mido's house
0437 saria's house

Inside lost woods bridge area
0286 lost woods
00FC sacred forest meadow
011E lost woods
01AD lost woods
01B1 lost woods
04C6 lost woods
04E2 goron city
01DD zora river
0185 Hyrule field
020d kokiri forest

Link to comment
Share on other sites

giadrosich, check out https://www.the-gcn.com/topic/2374-mzxrules-notes-on-ocarina-of-time/?p=37460

 

There's a complete table of all the entrances within the game, in the FW table. Also they're not exits.

 

Entrances are considered only as points of entry into a map from an exit. If you take a look at the wiki list: http://wiki.spinout182.com/w/Debug_ROM:_Exit_List it'll show you the exits to use, and the entrances show where you'll come out in the map (sort of, it's not extremely detailed).

 

The only reason I've put up the little notes up there was mainly documentation for myself while I was working with it. As you can see, the wiki list is not very good on telling where exactly you're standing or what exit brings you where.

 

For example:

04DE Child: Day   : Entrance 08 : 005B Lost Woods

This doesn't tell you where this is actually at (at least to me, others might have no problem knowing exactly where this is). Now, through looking at the exits in the game itself while I'm playing it, I can determine that 04DE is the exit when you're standing in Hyrule Field, so it's the entrance to the lost woods, or the area to the bridge. There are a lot of other Lost Woods exits, but I specifically wanted to know about the one leading to the bridge from Hyrule Field. Now, unless another list has details like that, it won't be very useful to me (also, I'm working with debug instead of 1.0).

Link to comment
Share on other sites

For example:

04DE Child: Day   : Entrance 08 : 005B Lost Woods

This doesn't tell you where this is actually at.... unless another list has details like that, it won't be very useful to me (also, I'm working with debug instead of 1.0).

If you had actually clicked the link and followed my instructions, you would have seen that there already exists such a list in my tables, though it may be a little confusing to read as I've removed redundant indexes (ex. 0000 - 0003 are logically equivalent, so the lowest index (0000) is the only one listed as this value would be the one passed by exits).

 

Also, I'm very confident that the tables are identical across versions as V1.0's entrance table has the same number of records, there are still references the scenes which are no longer in the rom, and lastly because Master Quest is merely a dungeon mod.

 

Entrances are considered only as points of entry into a map from an exit. If you take a look at the wiki list: http://wiki.spinout182.com/w/Debug_ROM:_Exit_List it'll show you the exits to use, and the entrances show where you'll come out in the map (sort of, it's not extremely detailed).

There is no logic in your reasoning behind calling the index value an exit (aside from "tradition"), because you aren't thinking about what the data actually represents.

 

To elaborate, I want to start by defining what I believe to be accurate definitions for entrances and exits with respect to the game world:

 

An entrance is an entrance point into a scene.

An exit is point within a scene that allows you to leave the scene into the same or another scene.

 

Now, the index value is a reference to a single record in our so called "Exit List". And if you look, you'll see that each record defines a Scene number, and a Position number, which in turn defines what scene file to load, and the position number translates into coordinates within that scene (a.k.a an entrance).

 

Clearly there is no proper relationship between an index value for that table, and an exit, so they shouldn't be called exit indexes.

Link to comment
Share on other sites

Well, I did follow the link and I did click on the ocarinabot, but all it seemed to give me was a list of actors in a spreadsheet....not sure how to use that program really, and I didn't see a readme.

 

*shrug* To me, one is always exiting a scene, so it makes sense logically to call them exits rather than confuse newbies the difference between "exits" and "entrances". It's easier to tell them "you're always exiting something."

 

EDIT: I will try the program again though to see if I've missed something, so thanks for telling me about it.

 

EDIT again: Really, the exit/entrance thing to me is like the object/group thing people do.

Link to comment
Share on other sites

With the help of john_smith_account the other day we happened upon some old documentation which lead us to the Action Parameters... in 1.0, so copying over some hex to find it in Debug Rom was done and there we had it. At first I had wanted it just to clear up some curiosity on the beta arrows, but the more I thought about it these may be the key for NPC's reacting in certain ways to items. With this helpful page... http://wiki.spinout182.com/w/Link_Action_Parameters I used that as a stepping stone and the address we found at 3F403C in RAM 

 

The first parts are obvious and are clearly just the order of the items in the menu for the most part, but after that things get rather interesting, culminating in a copy of the elemental arrows (which may have been the beta arrows spot originally) and sword values that when switched will actively change that blade into another action parameter. 

 

 

Action Parameters Mapping
 
0xC22D3C - 06 = Deku Stick
0xC22D3D - 1B = Deku Nuts
0xC22D3E - 12 = Bombs
0xC22D3F - 08 = Bow
0xC22D40 - 09 = Fire Arrow
0xC22D41 - 1A = Din's Fire
0xC22D42 - 0F = Slingshot
0xC22D43 - 1C = Fairy Ocarina
0xC22D44 - 1D = Ocarina of Time
0xC22D45 - 13 = Bombchu
0xC22D46 - 10 = Hookshot
0xC22D47 - 11 = Longshot
0xC22D48 - 0A = Ice Arrow
0xC22D49 - 18 = Farore's Wind
0xC22D4A - 14 = Boomerang
0xC22D4B - 42 = Lens of Truth
0xC22D4C - 2E = Magic Beans
0xC22D4D - 07 = Megaton Hammer
0xC22D4E - 0B = Light Arrow
0xC22D4F - 19 = Nayru's Love
 
0xC22D50 - 1E = Swing Empty Bottle
0xC22D51 - 25 = Drink Red Potion
0xC22D52 - 27 = Drink Green Potion
0xC22D53 - 36 = Drink Blue Potion
0xC22D54 - 2A = Letting Fairy out of Bottle
0xC22D55 - 1F = Empty Bottle containing Fish
0xC22D56 - 28 = Drinks Empty Bottle? (Lon Lon Milk Maybe?)
0xC22D57 - 24 = Ruto's Letter in Bottle
0xC22D58 - 20 = Empties Bottle containing Blue Fire
0xC22D59 - 21 = Empties Bottle containing Bugs
0xC22D5A - 23 = Shows bottle containing Big Poe
0xC22D5B - 29 = Drinks Empty Bottle? (Lon Lon Milk Maybe?)
0xC22D5C - 22 = Drinks Poe
 
0xC22D5D - 2C = Shows Egg
0xC22D5E - 2D = Shows Cucco
0xC22D5F - 2B = Shows Zelda's Letter
0xC22D60 - 3A = Put Keaton Mask On
0xC22D61 - 3B = Put Skull Mask On
0xC22D62 - 3C = Put Spooky Mask On
0xC22D63 - 3D = Put Bunny Hood On
0xC22D64 - 3E = Put Goron Mask On
0xC22D65 - 3F = Put Zora Mask on
0xC22D66 - 40 = Put Gerudo Mask On
0xC22D67 - 41 = Put Mask of Truth On
 
0xC22D68 - 03 = Swings Sword (Likely used for "Sold Out"
0xC22D69 - 2F = Shows Egg (Likely Adult version)
0xC22D6A - 30 = Shows Pocket Cucco
0xC22D6B - 31 = Shows Cojiro
0xC22D6C - 32 = Shows Mushroom
0xC22D6D - 33 = Shows Odd Potion
0xC22D6E - 34 = Shows Poacher's Saw
0xC22D6F - 35 = Shows Broken Goron's Sword
0xC22D70 - 36 = Shows Prescription
0xC22D71 - 37 = Shows Eyeball Frog
0xC22D72 - 38 = Shows Eyedrops
0xC22D73 - 39 = Shows Claim Check
 
0xC22D74 - 09 = Fire Arrow
0xC22D75 - 0A = Ice Arrow
0xC22D76 - 0B = Light Arrows
 
0xC22D77 - 04 = Swings Sword (Kokiri Sword) 
0xC22D78 - 03 = Swings Sword (Master Sword)
0xC22D79 - 05 = Pulls out Two-Handed Sword
 
Admittedly finding use for these are a bit trickier, but maybe someone will have a use for them? For instance you can replace Farore's Wind and Nayru's Love functionality for any of the unused arrows (Values 0C,0D,0E)
Link to comment
Share on other sites

Well, I did follow the link and I did click on the ocarinabot, but all it seemed to give me was a list of actors in a spreadsheet....not sure how to use that program really, and I didn't see a readme.

It's not a program, it's an excel file that requires either Microsoft Excel or Open Office to view. You need to click the tabs on the bottom to switch between sheets. I didn't think I would need to add a readme on how to use a spreadsheet program.

*shrug* To me, one is always exiting a scene, so it makes sense logically to call them exits rather than confuse newbies the difference between "exits" and "entrances". It's easier to tell them "you're always exiting something."EDIT again: Really, the exit/entrance thing to me is like the object/group thing people do.

Object vs Group is a completely different thing because you're trading one generic term (group) for an even more generic term (object). An entrance CLEARLY has a functional difference than an exit, and thus should be properly expressed. You are not really helping by not taking the extra effort in explaining the difference.
Link to comment
Share on other sites

The difference is that exits have entrances defined within them which is how you get to another map, hence the "Entrance" byte  in the exit tables. Every Exit Must Have An Entrance and Vice-Versa. You exit from one map into another, conversely you can argue that you Enter one map from another. There is no right or wrong answer in this and to continue to push your point seems like trying to push intellectual superiority over something as simple as a term.

 

This is sophistry, let people say what they will. Trying to shove this down people's throats will do nothing but end in disdain.

Link to comment
Share on other sites

Three_Pendants, on 20 May 2013 - 18:19, said:

The difference is that exits have entrances defined within them which is how you get to another map

Incorrect. Exits (whether it's a collision polygon, actor, code.asm) do not define an entrance, they merely contain a single index value.

 

It is the so called "Exit List" table which defines the entrances. Without it, the index value has no meaning. The table is what gives meaning to the index value in the first place, and thus to understand and describe what the index value is representing, you must understand what the table is representing because the index value is merely a key into that data.

 

And this the heart of my problem. You (and many others) are not understanding that it is the data that the index is representing that defines it, not how the index is being used.

 

What data does the table hold? A scene, a position.

 

Given that data alone, can you always determine what entrance you will be starting from? Yes, provided that the same scene header is used.

 

Given that data alone, can you always determine what exit you used to reference the data? No, because even if you had only one exit take you to a particular entrance, the data within the table is not enough to uniquely define what exit you came from (ex. only one "exit" can take you to the title screen entrance (0x00D4), but 0x00D4 has the same Scene/Position pair as 0x00CD, which is an entrance you're placed at after another cutscene).

 

And that is why it's incorrect to say that http://wiki.spinout182.com/w/Debug_ROM:_Exit_List is a table of exits.

 

And it's not because I want to show off some intellectual superiority, it's because when I first started looking through to Spinout's wiki, the Exit List made it harder for me to understand how the game worked, and harder to explain the things I was observing with the Wrong Warp glitch.

Link to comment
Share on other sites

It is a given that a table would hold a scene and position used by moving from one place to another. You are not wrong to call it an Entrance, but others are not wrong to call it an Exit. It can be argued that these values can only be accessed from exiting an area. You are always leaving one place and going to another and the opposite is true, you can always say that you are exiting and leaving. That there is an entrance variable within the exit table which determines position would mean to me at least that they would be considered entrance as that is how they appear.

 

In the example you give above it is just as easy to say it is a "Cutscene Exit", that is how JSA has defined the term for nearly half a decade now. It is a cutscene that is accessed by leaving an area with those coordinates and special instructions to carry out a cutscene.

 

Again, you are not wrong to label these things as entrances, but others are not wrong to call them exits. In the end it all comes down to preference. if calling them entrances helps you better comprehend it, that's great! Continue to use that term in your documentation as it helps you better understand it. If people see your point of view on it they will begin to call it that without any further prodding.

 

There is the other point of view of an exit that is equally viable though. 

Link to comment
Share on other sites

It is a given that a table would hold a scene and position used by moving from one place to another. You are not wrong to call it an Entrance, but others are not wrong to call it an Exit.

Except they are wrong, for the reasons above.

It can be argued that these values can only be accessed from exiting an area.

And it would be a nonsensical argument. The contents of this message can only be accessed via web browser, but you wouldn't call it a Google Chrome message (or your browser of choice) would you?Again, it doesn't matter how you access the values, what matters is the information that is actually being stored.

In the example you give above it is just as easy to say it is a "Cutscene Exit", that is how JSA has defined the term for nearly half a decade now. It is a cutscene that is accessed by leaving an area with those coordinates and special instructions to carry out a cutscene.

But it's cleaner to say that the 00CD + FFF3 pair defines the exit, and the 00D4 record defines the entrance, because the 00CD + FFF3 pair is what is pushed by the exit, while the 00D4 record that is pulled is used to facilitate spawning within a scene, as again the 00D4 record has nothing to do with the cutscene or the exit directly.
Link to comment
Share on other sites

If it works for you, that's cool; keep it that way. If you really do feel that it is correct then perhaps you can get people to quit using "exit" as the term to define it and use "entrance" instead (like the change from "group" to "object"). In the, end people have been using that term for so long that it may be difficult to replace at this point.However, for now...

You exit from one map into another, conversely you can argue that you Enter one map from another. There is no right or wrong answer in this and to continue to push your point seems like trying to push intellectual superiority over something as simple as a term.This is sophistry, let people say what they will. Trying to shove this down people's throats will do nothing but end in disdain.

  • Like 1
Link to comment
Share on other sites

Slept on it, think I can figure out a way to explain it easier to you since you guys are still not understanding the difference.

 

Say you were able to add new records to the table. How many new exits do you add to the game if you add 1, 2, 20 records? How many exits do you lose if you delete 1, 2, 20, all 0x614 records?

The correct answer is 0, because the table DOES NOT DEFINE AN EXIT. Regardless of whatever you do to the table the exits will still exist in code, in the scene data, in actors. If you delete a record that an exit was referring to it would cause a garbage result, but the exit IS STILL THERE AND IS FUNCTIONAL.

 

Conversely, if you define a new exit through code or by editing a scene scene, without modifying the table, you do not define a new entrance in which to spawn into a scene. You cannot spawn anywhere else that is not already defined by the table (unless you do something stupid and read past the table). If you delete an exit without modifying the table, you do not delete an entrance. You may get to a point where you can no longer access all the entrances, but they will still exist.

 

The table is not a list of exits, therefore an index value to the table is not an exit indexer.

Link to comment
Share on other sites

  • 1 month later...

 I have some good news for those who want to add that extra bit of challenge to their game. In looking for how swords are considered Two-Handed (no luck on that yet) I came across the amount of hits the Giant's Knife has left... it was right next to Rupees the Entire Time. 

 

There is a caveat though as you can imagine, the game doesn't write any data to that spot when the game begins and only writes it when the Giant's Knife is purchased. To get around that for File 1 go to 0xBA176E and if it is not already 0008 (or whatever number of hits you want the desired sword to last for) change it to 0008. In File2/3 go to 0xBA16B2 and change the 0000 that is there to any amount you like and that will be the breaking point of your chosen sword.

 

Now when the Giant's Knife breaks several things happen. One the icon becomes 55,

 

0xAFBBE0 -  240E0055 -  Broken Giant's Knife, you think you might be able to set it to FF to have the sword break and be done with it, right? If only... The game does not allow the value of FF to be on the B Button and reverts it to 00 which is a Deku Stick. This likely has something to do with their Easy Swordless Link fix. To get around that set the value at...

 

0xAFAAF4 - 240D00FF to 240D0000, this will nullify the auto-reversion of FF to 00.

 

Secondly the Equipment Value will change, now this is a dynamic number as the game is quite flexible with what equipment you currently have, but only uses one half-byte to express this so the ordering is a bit... strange. 

 

0xAFBBAE - 24090008 - This is a difficult matter to get a grasp on, it appears to be adding what appears to be an 8 but the value changes in many different places to reach a set value. I'm afraid I can't figure this part out, but hopefully someone else can. Once that is figured out the sword can be erased without worry.

 

 

And to change what weapon uses the Giant's Knife countdown bytes you would change...

 

0xC11A2C - 24010005 (Giant's Knife) 

 

You can change this to 0004 (Kokiri Sword) or 0003 (Master Sword) to have those weapons correspond to the countdown.

 

Now while it's not perfect, it is a start to getting these matters more fully explored.

Link to comment
Share on other sites

I have a guess on what that 8 may represent.

 

If you access the debug mode on the start menu by pressing L, go to "equip" and change the first digit, that will change the swords you have.

Each C button changes one of the bits for that digit. 

 

C< changes 0001, turning the Kokiri Sword on/off;

Cv changes 0010, for the Master Sword;

C> changes 0100, for the Giant's Knife;

C^ changes 1000, for the Broken Giant's Knife - being the 8 value being added.

 

Note: If you leave only the 8 bit on, the equipment screen will show the broken sword, but won't let you put the cursor over it. To have the broken giant's knife usable you need both the 4 and 8 bits activated.

Link to comment
Share on other sites

An interesting theory Strati, unfortunately the game does very little to back it up in any meaningful manner 4+8 would equal C after all, that is true but the correlation... I believe it means I am missing a 4 or a C somewhere that should likely be nulled or changed to make this work properly.

 

In any case do I have some exciting news today!

 

Last night I discovered an (as of my knowledge) unknown Debug Message to appear on screen which seems like it would be useful to me, if only I could get it to actually show up without half-berserking the game.

 

Posted Image

 

 

I managed to get these to show up in their appropriate places in RAM but not on screen.

 

EDIT: Looks like I was mistaken, Seems that XDaniel saw this a while back and located it without any issue. It was at 210BA5, just set a 01 there. Haha, I feel like an idiot for missing that. 

 

But now for the exciting Modding News! I've found the MP Cost for the three spells (and the MP Cost for the three deleted spells as well!) They were in such a strange location, they were located alongside the magic animmations.

 

0xC23230 - 0C18180C - Deleted Spell 1 is 30 (0C)/Deleted Spell 2 is 31 (18)/ Deleted Spell 3 is 32 (18)/Farore's Wind MP Cost is 33 (0C)
0xC23234 - 180C0000 - Nayru's Love MP Cost is 34 (18) / Din's Fire MP Cost is 35 (0C)
 
Remember that all spells are actually double of what their MP Cost is claimed. 0C = Dec. 12 = 06 in-game standards. 18 = Dec. 12 = 24 in game standards. The player starts with 48 MP, rather than the 24 the game seems to try and says it does.
 
To come along with this news is something any modder will be happy to have...
 
The Timer to Nayru's Love to make it a Not-So Broken Spell!
 
 
ROM 0xF3613C - 286104B0 - Nayru's Love Timer 
ROM 0xF36150 - 286104B0 - Nayru's Love Timer
 
Change 04B0 to what you will and that will become the new timer for Nayru's Love. Now it can be modified, rather than thrown out of hacks all together for being absolutely broken!
 
Next is some researching into healing items like Fairies and Potions with some usable results.
 
0xC1DE40 - 240F0140 - Amount of HP for a Bottled Fairy to Heal (0140 = 200 in Decimal, 20 Hearts, can be changed to anything desired)
 
0xC1DA14 - 24080140 - Amount of HP healed from Red Potion/Blue Potion.
 
0xC1DA48 - 240B0050 - Amount of HP healed from Milk/Half-Milk.
 
It is clear from this that they intended Fairies to heal a different amount one point in production, otherwise they would not have separated them in this manner. I still need to find the Poe's healing (and hurting) values since they don't follow the usual avenues, but that would be the only healing item left, leaving only Hearts, Great Fairies and the Ganondorf Heal, I believe.
 
Next update I will hopefully have the MP Cost of the Arrows and the Spin Attack down as well.
 
 
EDIT: While I don't have the MP Cost of Fairies, I can say for certain that Bottled Fairies and Reviving Fairies have two different healing values.
 
0xC12A74 - 240A0140 - Reviving Fairies Healing Amount (0xC12A74 in ROM)
 
But more importantly I have taken apart the routine for how the game searches and selects the Revival Item. 
 
If you're going to use this, make sure to Change All of It. Problems can arise, or it simply won't work if you change one portion but not another.
 
0x86C8C - 24040018 - Item Required for Link to Revive when killed. (0018 Bottled Fairy) (ROM: 0xAFDE2C) 
0x86C9C - 90EF0074 - Looks for Address 15E6E6 (Starts from the address of 15E672, items begin at 15E6D4 which is 0062. It repeats this process four times to search one word (4 bytes)) (ROM:0xAFDE3C)
0x86CC0 - 24190014 - The Item the C-Button will Become (0014 Empty Bottle) (ROM:0xAFDE60)
0x86D20 - 24090014 - The Item the Inventory Slot will Become (0014 Empty Bottle) (ROM:0xAFDEC0)
0x86D2C - A0E90074 - (As above with 0x86C9C except for what it will become) (ROM: 0xAFDECC)
 
0x86D3C - 28410004 - The amount of times it will repeat looking at a byte sequence. Change this to 19, if you plan on changing the location of the Revival Item) (ROM:0xAFDEDC)
 
 
Sorry about the odd formatting. Since all of these need to be changed at the same time, I needed to have their RAM addresses immediately handy for testing.
 
Now the purpose of this is to have a different revival item, that is not the Fairy.  Say for instance you wanted to turn "Magical Beans" into... "Crazy Tracy's Medicine".
 
You would change 24040018 into 24040010. From Bottled Fairy to Magical Beans
You would change 90EF0074 to 90EF0062 so that it will start from the beginning of the Item List. 
Presumably the Item would erase, at 24190014 change that to 241900FF to erase it if on a C-Button.
Do the same with 24090014.
With A0E90074 change that to 0062 so that the replacement routine can start at the beginning of the inventory as well.
Change 28410004 to 28410019 so that the game will scan the entirety of the inventory instead of just four bytes.
 
And there you have it!
 
This kind of modification works great with mods that don't involve Navi or a fairy guide, (since that spawn also depends on whether the reviving fairy will appear) For those that do... well I'll see if I can't find something.
 
  • Like 2
Link to comment
Share on other sites

An interesting theory Strati, unfortunately the game does very little to back it up in any meaningful manner 4+8 would equal C after all, that is true but the correlation... I believe it means I am missing a 4 or a C somewhere that should likely be nulled or changed to make this work properly.

 

 

Here's what I could take from the code (starting at 800849EC on RAM - for me at least):

LUI 	A1, 0x8012		ADDIU 	A1, A1, 0x7120		A1=80127120			//Multiples Table?LUI 	V1, 0x8016		LUI 	V0, 0x8012		LBU 	V0, 0x71F0 (V0)		v0= ub *(801271F0) = 00		//Defines Type of Equipment (Boots, Tunic, Shield or Sword)LW 	T7, 0x0008 (A1)		t7= *(80127120 + 8) = 4ADDIU 	V1, V1, 0xE660		v1= 8015E660			//Variables OffsetLHU 	T6, 0x009C (V1)		t6= uh*(8015E660 + 9C) = 7777	//Current Equipment ( 7 = 0111 = -B.G.Kn + G.Kn + M.Sw + K.Sw)ADDIU 	T1, R0, 0x0008		t1= 8SLLV 	T8, T7, V0		t8= 4 << 0 = 4		        //Would Shift to the correct Equipment Type's Half-byteLW 	T4, 0x000C (A1)		t4= *(80127120 + C) = 8SLLV 	T2, T1, V0		t2= 8 << 0 = 8OR 	T0, T6, T8		t0= 7777 OR 0004 = 7777	        // 0111 OR 0100 = 0111 : Confirms the Giant's Knife bit is TrueXOR 	T3, T0, T2		t3= 7777 XOR 0008 = 777F	// 0111 XOR 1000 = 1111 : Switches the BrokenGK bit's value ANDI 	T5, T3, 0xFFFF		t5= 777F AND FFFF = 777F 	//(t5 = t3)ADDIU 	SP, SP, 0xFFE8		SP =- 24SH 	T0, 0x009C (V1)		h*(8015E660 + 9C) = 7777	//Stores Old Equipment StatusAND 	T7, T4, T5		t7 = 0008 AND 777F = 0008	//1000 AND 1111 = 1000: Verifies a new difference?SW 	RA, 0x0014 (SP)		[w5] = RABEQ 	T7, R0, 0x80084A4C	if t7 = 0 goto L1		//if equipment didn't change?SH 	T3, 0x009C (V1)		{h*(8015E660 + 9C) = 777F}	//Writes New EquipmentADDIU 	T6, R0, 0x0055		t6= 55			        //55 = Broken Sword IconBEQ 	R0, R0, 0x80084A54	goto L2SB 	T6, 0x0068 (V1)		{ b*(8015E660 + 68) = 55}	//Currently equipped Item on B = Broken G.Knife-----L1ADDIU 	T8, R0, 0x003D		t8 = 3D                         //3D = GK IconSB 	T8, 0x0068 (V1)		{ b*(8015E660 + 68) = 3D}	//Currently equipped Item on B = Giant's Knife-----L2JAL 	0x80084A6C		goto L3OR 	A1, R0, R0		{ A1 = 0 }LW 	RA, 0x0014 (SP)		RA = [w5]ADDIU 	SP, SP, 0x0018		SP =+ 18JR 	RA			goto RA-----L3
I'll do better and complete this with the solution for changing the Giant's Knife, wait for it.

 

 

EDIT:

 

All right, coming from Three_Pendants' instructions, here's what you do to erase the Giant's Knife once broken:

 

0xAFAAF4 - 240D00FF to 240D0000, this will nullify the auto-reversion of FF to 00.

From 0xAFBBB4 to 0xAFBBE0, Paste Write:

 

10000004 01D84026 00000000 00000000

00000000 27BDFFE8 A46E009C 01C87826

AFBF0014 11E00004 A468009C 240E00FF

  • Like 1
Link to comment
Share on other sites

We have improved the code to have any sword to be breakable and erase it from the inventory once it happens. Three will be making and posting patches for each sword, while I got the job of explaining the asm changes.

 

First of all, the change in 0xAFAAF4 from FF to 00 was causing the HUD to malfunction, changing the opacity of some buttons and sometimes making them not usable at all.

Later, Three found out changing it to FE instead made things work normally.

 

Then again...

And to change what weapon uses the Giant's Knife countdown bytes you would change...

 

0xC11A2C - 24010005 (Giant's Knife)

 

You can change this to 0004 (Kokiri Sword) or 0003 (Master Sword) to have those weapons correspond to the countdown.

The other ASM changes are in the same code I posted above. Here's the modified code using the Giant's Knife as example:

 

800849EC: LUI 	A1, 0x8012		A1=8012----800849F0: ADDIU A1, A1, 0x7120		A1=80127120			//Multiples Table?800849F4: LUI 	V1, 0x8016		v1=8016----800849F8: LUI 	V0, 0x8012		v0=8012----800849FC: LBU 	V0, 0x71F0 (V0)		v0= ub *(801271F0) = 00		//Defines Type of Equipment80084A00: LW 	T7, 0x0008 (A1)		t7= *(80127120 + 8) = 4		// 0008 for the GK, 0004 = MS and 0000 for the KS80084A04: ADDIU V1, V1, 0xE660		v1= 8015E660		        //Variables Offset80084A08: LHU 	T6, 0x009C (V1)		t6= uh*(8015E660 + 9C) = 7777	//Current Equipment80084A0C: ADDIU T1, R0, 0x000B		t1= B			//This value will serve 2 purposes80084A10: SLLV 	T8, T7, V0		t8= 4 << 0 = 4		//Would Shift to the correct Equipment Type's Half-byte80084A14: SH	t1, 0x0036 (V1)		h*(8015E660 + 36) = B	//Remaining Sword Hits = 0xB. This value doesn't matter, as long                                                                //as it differs from 0. This prevents the GK showing as broken                                                                //and will be reset once you buy a new sword.80084A18: LUI	t5, 0x8022		80084A1C: ADDIU t5, t5, 0x29B9		t5= 802229B9		//This code redirects the cursor to L in the start menu80084A20: SB	t1, 0(t5)		b*(802229B9 + 0) = B	//to avoid the deleted sword to be re-equipped80084A24: XOR 	T0, T6, T8		t0= 7777 XOR 0004 = 7773	//Removes the chosen sword from the equipment half-byte  80084A28: ADDIU SP, SP, 0xFFE8		SP =- 2480084A2C: SH 	t6, 0x009C (V1)		h*(8015E660 + 9C) = 7777	//Stores Old Equipment Status		80084A30: AND 	T7, t6, T0		t7 = 7777 XOR 7773 = 0004	//Checks a difference in the equipment80084A34: SW 	RA, 0x0014 (SP)		[w5] = RA80084A38: BEQ 	T7, R0, 0x80084A4C	if t7 = 0 goto L1		//if equipment didn't change?80084A3C: SH 	T0, 0x009C (V1)		{h*(8015E660 + 9C) = 7773}	//Writes New Equipment80084A40: ADDIU T6, R0, 0x0055		t6= FF			        //FF = Empty Icon80084A44: BEQ 	R0, R0, 0x80084A54	goto L280084A48: SB 	T6, 0x0068 (V1)		{ b*(8015E660 + 68) = 55}	//Currently equipped Item on B = NoneL180084A4C: ADDIU T8, R0, 0x003D		t8 = 3D80084A50: SB 	T8, 0x0068 (V1)		{ b*(8015E660 + 68) = 3D}	//Currently equipped Item on B = Giant's Knife[...]
For the ROM, paste write this, beginning at 0xAFBBAC:

 

2409000B 004FC004 A4690036 3C0D8022

25AD29B9 A1A90000 01D84026 27BDFFE8

A46E009C 01C87826 AFBF0014 11E00004

A468009C 240E00FF

  • Like 3
Link to comment
Share on other sites

As Strati has posted above it took us roughly two days but we've nearly perfected sword breaking. Reacquiring the Broken Sword is not our concern though and there are a variety of hacks and information to make it work the way you particularly want it.

 

It is included in the .ppf's already but one thing that Strati did not mention is the Secondary Sword check, Yes Nintendo really fixed Swordless Link by forcing a game-breaking Deku Stick into Adult Link's hands anytime the item info reads FF when you press pause, I guess if the first check failed? I have no idea. That was at "0x84C44 - 240400FF - Secondary pointer which automatically makes the value on B if it reads FF to become 00 when pause is pressed.) (ROM: 0xAFBDE4)"

 

And now the three patches. There will be a patch for each sword, and from there you can use the available notes to use that as you will.

 

http://depositfiles.com/files/c65wy8i6o - Kokiri Sword Break Patch

http://depositfiles.com/files/h87zgnr3t - Master Sword Break Patch

http://depositfiles.com/files/j0d4ym015 - Giant's Knife Break Patch.

 

We may have a few more interesting projects in the works so keep an eye out!

 

EDIT: How careless of me to say that reacquiring the sword is not our concern! I should have known OoT would throw a curve ball. For more information about what to change and make your new breakable sword seem legitimate please go to this thread...

 

https://www.the-gcn.com/topic/2494-zelda-oot-npc-functionality-project/?do=findComment&comment=39633

Edited by Three_Pendants
  • Like 1
Link to comment
Share on other sites

Sme more miscellaneous information.

 

0x8DAB8 ROM: 0xB04C58 - 950E0070 - The location (using 15E660 as a base) the game searches for to find the Goron Tunic. (Originally points to 15E6D0)
0x8DAC8 ROM: 0xB04C68 - 24010002 - The check to see if the tunic Link is wearing is the Goron Tunic for hot areas.
 
0x8DB14 ROM: 0xB04CB4 - 95180070 - The location (using 15E660 as a base) the game searches for to find the Zora Tunic (Originally points to 15E6D0)
0x8DB24 ROM: 0xB04C54 - 24010003 - The check to see if the tunic Link is wearing is the Zora Tunic for underwater.
 
0x8E9D4 - ROM: 0xB05B74 - 8C42E664 - Age check location for the functionality of the Hylian Shield.(Must be altered from a breakpoint) When the check is changed or removed, Young Link will wield the Hylian Shield like a normal shield, but the game has no graphic to show for this so graphical entry points would need modified to have that work perfectly.
Link to comment
Share on other sites

 Share

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.