Jump to content

Zelda OoT: NPC Functionality Project


Three_Pendants
 Share

Recommended Posts

Hello everyone, ever since I was young I have been very interested in the NPC Functionality in OoT, there is a lot we now know like waypoints, text, and variables. When I was working on a mod many years back my chief concern was that I couldn't change up the game's events or even have Anju give another item other than a bottle. Well I have worked out many of those problems in other threads, and those threads will likely be the foundation in which I build this project. 

 

The aim of this project will be to map out an NPC's primary functions (Checks, rupees, items, etc.) so that people can freely change NPC's without having to delve too deeply into ASM and maybe eventually these findings can make their way into an editor, but that I somewhat doubt. In addition will also be jumps to Code or possibly Link's actor where the NPC is concerned (Marked by (Code) in the text)

 

Because this is a compilation project you can expect to see data repeated from my other threads to fully show the primary functions of an actor.

 

For starters we will begin with an NPC that is dear to me because it's due to the way he was set up that I managed to find the item giving sequence and discovered the Treasure Index. We begin with Medigoron, which also makes a nice addition to Strati and my own Sword Breaking project. In fact I may have to rerelease the patches again with the ability to have the desired sword "reforged" by Medigoron.

 

NOTE: When you pay a non-shop NPC (or Business Scrub) the game will deduct Rupees from Link using Negative Hex, Rupee acquisiton/loss is a signed byte. Meaning that Values starting from 7FFF (Decimal 32767) will become a negative -32767. The vast majority of negative price values will have an FFXX value.  For instance FFE6 is -10 Rupees because it is FFFF -0A (well no, that's technically FFE5 but the game seems to think that it is FFE6, maybe my calculator is mess up?) So if you want to change it to say... 50 Rupees you would put in FFCE, presumably (-50+1)

 

Feel free to contribute and add your own knowledge to our growing database.

 

EDIT: June 25th - I basically scoured the Poe Salesman data a while back and completely forgot about my compiled information it until now and added a list of indexes for people to reference.

 

EDIT 2: June 25th - Added Bombchu Salesman (scanty) data.

 

EDIT 3: June 26th - Fixed the Age Check override as per MZXRules suggestion. Added some of Talon's functions, and added a Music Index (from the wiki) and the Event Item Index (The basic list of items, also from the wiki)

 

EDIT 4: June 26th - Found much of the required information for the Cucco-Findin Game.

Data Indexes

 

Play Ocarina Song Index 1

 

 

 

0001 - Freehand Ocarina
0002 - Play Minuet of Forest
0003 - Play Bolero of Fire
0004 - Play Serenade of Water
0005 - Play Requiem of Spirit
0006 - Play Nocturne of Shadow
0007 - Play Prelude of Light
0008 - Play Saria's Song 
0009 - Play Epona's Song
000A - Play Zelda's Lullaby
000B - Play Sun's Song
000C - Play Song of Time
000D - Play Song of Storms
000E - 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?)
000F - Learn Minuet of Forest
0010 - Learn Bolero of Fire
0011 - Learn Serenade of Water
0012 - Learn Requiem of Spirit
0013 - Learn Nocturne of Shadow
0014 - Learn Prelude of Light
0015 - Learn Saria's Song
0016 - Learn Epona's Song
0017 - Learn Zelda's Lullaby
0018 - 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.)
0019 - Learn Song of Time 
001A - Learn Song of Storms
001B - Learn Scarecrow's Song (Which is set to an A when not actually set)
001C - ?It's a blank Ocarina tab that doesn't seem to have a right answer, no matter what is pressed?
001D - Freehand Ocarina, but the music lines show up and it proceeds past eight notes in tones.
001E - Same as above except hitting the eigth note causes the normal error sound.
001F - Any note pressed is considered wrong.
0020 - As above.
0021 - Play Song Spot (All notes pressed are wrong)
0022 - Play Saria's Song - For Events
0023 - Play Epona's Song - For Events
0024 - Play Zelda's Lullaby - For Events
0025 - Play Sun's Song - For Events
0026 - Play Song of Time - For Events
0027 - Play Song of Storms - For Events
0028 - Play Scarecrow's Song (for events?)

 
Quest Item Index (15E704)
 

 00000001 Forest Medallion
 00000002 Fire Medallion
 00000004 Water Medallion
 00000008 Spirit Medallion
 00000010 Shadow Medallion
 00000020 Light Medallion
 00000040 Minuet of Forest
 00000080 Bolero of Fire
 00000100 Serenade of Water
 00000200 Requiem of Spirit
 00000400 Nocturne of Shadow
 00000800 Prelude of Light
 00001000 Zelda's Lullaby
 00002000 Epona's Song
 00004000 Saria's Song
 00008000 Sun's Song
 00010000 Song of Time
 00020000 Song of Storms
 00040000 Kokiri Emerald
 00080000 Goron Ruby
 00100000 Zora's Sapphire
 00200000 Stone of Agony
 00400000 Gerudo Membership Card
 00800000 Skulltula Tokens (appearing on Subscreen)
 01000000 Nothing?
 02000000 Nothing?
 04000000 Nothing?
 08000000 Nothing?
 10000000 One Piece of Heart
 20000000 Two Piece of Heart
 40000000 Four Piece of Heart (Glitched)
 80000000 ??? Piece of Heart (Glitched)

 
Treasure Index (Similar, but not exactly the same as the normal Treasure Actor Index!)

 
- 00 Allows you to grab Any actor. Leading to some weird results...
 - 01 Five Bombs (money did not decrement)
 - 02 Five Deku Nuts (money did not decrement)
 - 03 Bombchus  
 - 04 Fairy Bow
 - 05 Fairy Slingshot
 - 06 Boomerang 
 - 07 Deku Stick (can't speak with him again)
 - 08 Hookshot
 - 09 Longshot
 - 0A Lens of Truth
 - 0B Zelda's Letter
 - 0C Ocarina of Time (without Cutscene)
 - 0D Megaton Hammer
 - 0E Cojiro
 - 0F Empty Bottle (not sure which slot)
 - 10 Red Potion (fills up first bottle)
 - 11 Green Potion 
 - 12 Blue Potion
 - 13 Fairy in a Bottle (normal Bottle model)
 - 14 Lon Lon Milk
 - 15 Letter in Bottle
 - 16 Magic Bean
 - 17 Skull Mask
 - 18 Spooky Mask
 - 19 Magic Bean? (Link holds up a Cucco)
 - 1A Keaton Mask
 - 1B Bunny Hood
 - 1C Mask of Truth
 - 1D Pocket Egg
 - 1E Magic Bean (Counts as a Pocket Cucco and has the graphics of a Cucco)
 - 1F Odd Mushroom
 - 20 Odd Potion
 - 21 Poacher's Saw
 - 22 Broken Goron's Sword
 - 23 Prescription 
 - 24 Eyeball Frog
 - 25 Eyedrops
 - 26 Claim Check
 - 27 Kokiri Sword
 - 28 Giant's Knife
 - 29 Deku Shield
 - 2A Hylian Shield 
 - 2B Mirror Shield
 - 2C Goron Tunic
 - 2D Zora Tunic
 - 2E Iron Boots
 - 2F Hover Boots
 - 30 Big Quiver
 - 31 Biggest Quiver
 - 32 (Collectable Item) "Bomb Bag(Holds 20)" Replaces Hookshot spot. Unless you do not have a Bomb Bag, then it is received normally and 20 Bombs are put into your inventory.
 - 33 Big Bomb Bag
 - 34 Biggest Bomb Bag
 - 35 Silver Gauntlets
 - 36 Golden Gauntlets
 - 37 Silver Scale
 - 38 Golden Scale 
 - 39 Stone of Agony
 - 3A Gerudo's Membership Card
 - 3B Says it's OoT but textured like the Fairy Ocarina and counts as the Fairy Ocarina
 - 3C Deku Seeds
 - 3D Heart Container
 - 3E Heart Piece
 - 3F Boss Key
 - 40 Compass 
 - 41 Map
 - 42 Small Key
 - 43 Small Magic Jar
 - 44 Large Magic Jar
 - 45 Adult's Wallet
 - 46 Giant's Wallet
 - 47 Weird Egg 
 - 48 Same as A Heart
 - 49 Five Arrows
 - 4A Ten Arrows
 - 4B Thirty Arrows
 - 4C One Rupee
 - 4D Five Rupee
 - 4E Twenty Rupee
 - 4F Heart Container (again?)
 - 50 Lon Lon Milk
 - 51 Goron Mask
 - 52 Zora Mask
 - 53 Gerudo Mask
 - 54 Goron's Bracelet
 - 55 Fifty Rupee
 - 56 Two-Hundred Rupee
 - 57 Biggoron's Sword (Still seems to be the Giant's Knife?)
 - 58 Fire Arrow
 - 59 Ice Arrow
 - 5A Light arrow
 - 5B Gold Skulltula Token
 - 5C Din's Fire
 - 5D Farore's Wind
 - 5E Nayru's Love
 - 5F Five Deku Sticks
 - 60 Bullet Bag (40)
 
 - 61 Collectable Deku Stick
 - 62 Collectable Deku Stick
 - 63 Collectable DeKu Nut (5)
 - 64 Collectable Deku Nut (10)
 - 65 Collectable Bombs (1)
 - 66 Collectable Bombs (10)
 - 67 Collectable Bombs (20)
 - 68 Collectable Bombs (More than 20)
 - 69 Deku Seeds
 - 6A Bombchu (5)
 - 6B Bombchu (2)
 - 6C Fish in Bottle 
 - 6D Bug in Bottle
 - 6E Blue Fire in Bottle 
 - 6F Poe in Bottle
 - 70 Big Poe in Bottle (Beta?)
 - 71 Door Key
 - 72 One Rupee from Treasure Game
 - 73 Five Rupee from Treasure Game
 - 74 Twenty Rupee from Treasure Game
 - 75 Fifty Rupee from Treasure Game
 - 76 Heart Piece from Treasure Game
 - 77 Deku Stick Upgrade (20)
 - 78 Deku Stick Upgrade (30)
 - 79 Deku Nut Upgrade (30)
 - 7A Deku Nut Upgrade (40)
 - 7B Bullet Bag (50)
 - 7C Collectable One Rupee
 - 7D Collectable One Rupee
 - 7E Nothing?
 - 7F Nothing?

 
Event Items Index

0000 - Deku Stick0001 - Deku Nut0002 - Bomb0003 - Regular Arrow0004 - Fire Arrow (Upgrade)0005 - Din's Fire0006 - Slingshot0007 - Fairy Ocarina0008 - Ocarina of Time0009 - Bombchu000A - Hookshot000B - Longshot000C - Ice Arrow000D - Nayru's Love000E - Boomerang000F - Lens of Truth0010 - Magic Beans0011 - Megaton Hammer0012 - Light Arrow0013 - Nayru's Love0014 - Empty Bottle0015 - Red Potion0016 - Green Potion0017 - Blue Potion0018 - Fairy0019 - Fish001A - Milk001B - Letter in a Bottle001C - Blue Fire001D - Bug001E - Big Poe001F - Lon-Lon Milk (Half)0020 - Poe0021 - Weird Egg0022 - Chicken0023 - Zelda's Letter0024 - Keaton Mask0025 - Skull Mask0026 - Spoky Mask0027 - Bunny Hood0028 - Goron Mask0029 - Zora Mask002A - Gerudo Mask002B - Mask of Truth002C - Sold Out Sign002D - Pocket Egg002E - Pocket Cucco002F - Cojiro0030 - Old Mushroom0031 - Odd Potion0032 - Poachers Saw0033 - Goron's Sword (Broken)0034 - Prescription0035 - Eyeball Frog0036 - Eye Drops0037 - Claim Check0038 - Fire Arrow (Powered Up)0039 - Ice Arrow (Powered Up)003A - Light Arrow (Powered Up)003B - Kokiri Sword003C - Master Sword003D - Giant's Knife003E - Kokiri Shield003F - Hylian Shield0040 - Mirror Shield0041 - Kokiri Tunic0042 - Goron Tunic0043 - Zora Tunic0044 - Kokiri Boots0045 - Iron Boots0046 - Hover Boots0047 - Bullet Bag (Holds 30)0048 - Bullet Bag (Holds 40)0049 - Bullet Bag (Holds 50)004A - Quiver (Holds 30)004B - Quiver (Holds 40)004C - Quiver (Holds 50)004D - Bomb Bag (Holds 20)004E - Bomb Bag (Holds 30)004F - Bomb Bag (Holds 40)0050 - Goron's Bracelet0051 - Silver Gauntlets0052 - Golden Gauntlets0053 - Silver Scale0054 - Golden Scale0055 - Giant's Knife (Broken)0056 - Bomb Bag? (Japanese Name)0057 - Bomb Bag 2? (Japanese Name)0058 - Sling Shot Bullets? (Japanese Name)0059 - Fishing Rod (Japanese Name)005A - Minuet of Forest005B - Bolero of Fire005C - Serenade of Water005D - Requiem of Spirit005E - Nocturne of Shadow005F - Prelude of Light0060 - Zelda's Lullaby0061 - Epona's Song0062 - Saria's Song0063 - Sun's Song0064 - Song of Time0065 - Song of Storms0066 - Forest Medallion0067 - Fire Medallion0068 - Water Medallion0069 - Spirit Medallion006A - Shadow Medallion006B - Light Medallion006C - Kokiri's Emerald006D - Goron's Ruby006E - Zora's Sapphire006F - Stone of Agony0070 - Gerudo's Card0071 - Gold Skulltula0072 - Piece of Heart0073 - ??? (Japanese Name)0074 - Big Key0075 - Compass0076 - Dungeon Map
--
00FF - Nothing

 
Action Parameters Index (RAM Addresses to their side)
 

3F403C - 06 = Deku Stick
3F403D - 1B = Deku Nuts
3F403E - 12 = Bombs
3F403F - 08 = Bow
3F4040 - 09 = Fire Arrow
3F4041 - 1A = Din's Fire
3F4042 - 0F = Slingshot
3F4043 - 1C = Fairy Ocarina
3F4044 - 1D = Ocarina of Time
3F4045 - 13 = Bombchu
3F4046 - 10 = Hookshot
3F4047 - 11 = Longshot
3F4048 - 0A = Ice Arrow
3F4049 - 18 = Farore's Wind
3F404A - 14 = Boomerang
3F404B - 42 = Lens of Truth
3F404C - 2E = Magic Beans 
3F404D - 07 = Megaton Hammer
3F404E - 0B = Light Arrow
3F404F - 19 = Nayru's Love
 
3F4050 - 1E = Swing Empty Bottle
3F4051 - 25 = Drink Red Potion
3F4052 - 27 = Drink Green Potion
3F4053 - 36 = Drink Blue Potion
3F4054 - 2A = Letting Fairy out of Bottle
3F4055 - 1F = Empty Bottle containing Fish
3F4056 - 28 = Lon Lon Milk
3F4057 - 24 = Ruto's Letter in Bottle
3F4058 - 20 = Empties Bottle containing Blue Fire
3F4059 - 21 = Empties Bottle containing Bugs
3F405A - 23 = Shows bottle containing Big Poe
3F405B - 29 = Half Lon-Lon Milk 
3F405C - 22 = Drinks Poe
 
3F405D - 2C = Shows Egg 
3F405E - 2D = Shows Cucco  
3F405F - 2B = Shows Zelda's Letter 
3F4060 - 3A = Put Keaton Mask On
3F4061 - 3B = Put Skull Mask On
3F4062 - 3C = Put Spooky Mask On
3F4063 - 3D = Put Bunny Hood On
3F4064 - 3E = Put Goron Mask On
3F4065 - 3F = Put Zora Mask on
3F4066 - 40 = Put Gerudo Mask On
3F4067 - 41 = Put Mask of Truth On
 
3F4068 - 03 = Swings Sword (Used for "Sold Out"
3F4069 - 2F = Shows Egg (Likely Adult version) 
3F406A - 30 = Shows Pocket Cucco  
3F406B - 31 = Shows Cojiro 
3F406C - 32 = Shows Mushroom
3F406D - 33 = Shows Odd Potion
3F406E - 34 = Shows Poacher's Saw
3F406F - 35 = Shows Broken Goron's Sword
3F4070 - 36 = Shows Prescription
3F4071 - 37 = Shows Eyeball Frog
3F4072 - 38 = Shows Eyedrops
3F4073 - 39 = Shows Claim Check
 
3F4074 - 09 = Fire Arrow
3F4075 - 0A = Ice Arrow
3F4076 - 0B = Light Arrows
 
3F4077 - 04 = Swings Sword (Kokiri Sword) 
3F4078 - 03 = Swings Sword (Master Sword)
3F4079 - 05 = Pulls out Two-Handed Sword

 
Ocarina Song Checks

00 - Minuet of Forest
01 - Bolero of Fire
02 - Serenade of Water
03 - Requiem of Spirit
04 - Nocturne of Shadow
05 - Prelude of Light
06 - Saria's Song
07 - Epona's Song
08 - Zelda's Lullaby
09 - Sun's Song
0A - Song of Time
0B - Song of Storms
0C - Scarecrow's Song?

 
Mask and Trade Item Index
 

0001 Zelda's Letter 
0002 Weird Egg
0003 Cucco 
0004 Magic Beans
0005 Pocket Egg
0006 Pocket Cucco
0007 Cojiro
0008 Odd Mushroom
0009 Medicine
000A Poacher's Saw
000B Broken Goron's Knife
000C Prescription
000D Eyeball Frog
000E Eyedrops
000F Claim Check
---------------
0018 Fish
0019 Blue Fire
001A Bugs
001B Poe
001C Big Poe
001D Ruto's Letter
 
Mask Index
 
00 - No Mask
01 - Keaton Mask
02 - Skull Mask
03 - Spooky Mask
04 - Bunny Hood
05 - Goron Mask
06 - Zora Mask
07 - Gerudo Mask
08 - Mask of Truth

 

 

 

 

Music Values

 

 

00 Nothing01 Nothing02 Overworld Hyrule Field03 Overworld Hyrule Field04 Overworld Hyrule Field05 Overworld Hyrule Field06 Overworld Hyrule Field07 Overworld Hyrule Field08 Overworld Hyrule Field09 Overworld Hyrule Field0A Overworld Hyrule Field0B Overworld Hyrule Field0C Overworld Hyrule Field0D Overworld Hyrule Field0E Overworld Hyrule Field0F Overworld Hyrule Field10 Overworld Hyrule Field11 Overworld Hyrule Field12 Overworld Hyrule Field13 Overworld Hyrule Field14 Overworld Hyrule Field15 Overworld Hyrule Field16 Overworld Hyrule Field17 Overworld Hyrule Field18 Dungeon Dodongo's Cavern19 Kakariko Village (Strings) Kakariko Village1A An Enemy Is Near Near any enemy1B The Boss Gohma's Lair1C Deku Tree / Underground Deku Tree1D Market Hyrule Market1E Introduction Introduction Cutscene1F Inside My Home Link's House20 Link Falls Death Sequence21 The Boss Is Defeated When a boss is defeated22 I Have Found It! Opening a chest containing an item23 Ganondorf After pulling the Master Sword24 Power Up Obtaining a Heart Container25 Minuet of Forest Minuet of Forest26 Jabu-Jabu's Belly Jabu-Jabu's Belly27 Kakariko Village (Guitar) Kakariko Village28 Fairy Fountain File Select Screen29 Zelda's Courtyard Castle Courtyard2A Fire Temple Fire Temple2B Opening the Chest While opening a chest2C Forest Temple Forest Temple2D Sneaking Through the Castle Hyrule Castle2E Ganon's Organ Ganon's Castle, spiral staircase2F Lon Lon Ranch Lon Lon Ranch30 Goron City Goron City31 Hyrule Field Hyrule Field32 Got the Stone When receiving the Deku Emerald33 Bolero of Fire Bolero of Fire34 Minuet of Forest Minuet of Forest35 Serenade of Water Serenade of Water36 Requiem of Spirit Requiem of Spirit37 Nocturne of Shadow Nocturne of Shadow38 The Mini-Boss In Lizalfos room in Dodongo's Cavern39 Congratulations! When receiving a Piece of Heart3A Temple of Time Temple of Time3B Got Epona! Hyrule Field3C Kokiri Forest Kokiri Forest3D Learned a Song Lon Lon Ranch3E Lost Woods Lost Woods3F Spirit Temple Spirit Temple40 The Race Is On! Gerudo Archery Contest41 Across the Finish Line Lon Lon Ranch42 Ingo Loses Lon Lon Ranch43 Gain a Medallion Temple of Light44 Saria's Song Ocarina45 Epona's Song Ocarina46 Zelda's Lullaby Ocarina47 Sun Song Ocarina48 Song of Time Ocarina49 Song of Storms Ocarina4A Navi's Flying Around Kokiri Forest4B Deku Tree's Words Deku Tree's Grove4C Inside the Windmill Windmill4D Flight of the Goddesses Creation Cutscene4E Games 'n' Fun Bombchu Alley4F Sheik's Harp Temple of Time50 Zora Domain Zora Domain51 And It's... First Meeting With Ruto52 Zelda in the Sky Ending Sequence (Clouds)53 Time Travel Temple of Time54 Ganondorf! After Link grabs the sword for the first time55 Shop 'Til You Drop Kokiri Shop56 Temple of Light Temple of Light57 Fairy Fountain File Select Screen58 Ice Cavern Ice Cavern59 The Door of Time Temple of Time5A The Owl Speaks Hyrule Field5B Shadow Temple Shadow Temple5C Water Temple Water Temple5D The Goddesses Depart The Balance and the Triforce5E The Sages Unite Ending Sequence5F Gerudo Valley Gerudo Valley60 The Hag's Shop Kakariko Village61 Kotake and Koume Spirit Temple62 The Castle is Falling! Ganon's Castle63 Ganon's Castle Ganon's Castle64 Ganon Attacks Ganon's Castle65 Ganon's Transformation Showdown66 Zelda Plays Her Song Ending Sequence (Clouds)67 The End Ending Sequence68 The End Ending Sequence69 The End Ending Sequence6A The End Ending Sequence6B Ganondorf Attacks Ganon's Castle6C Gotta Catch 'Em All Lon Lon ranch6D+ Nothing

 

 

 
 

 

 

---------------------------------------------------------------------------------------------------------
013D ovl_En_Gm (Medigoron) 
 
ROM: 0xAFC941 - 2401003D - (Code) When you collect Item 003D (Giant's Knife) the game goes through a short list to see if anything else should be added anywhere. In 3D's case a 0008 is written to 15E696, acting as the durability of the Giant's Knife. You may change this accordingly if you know the item byte you want to attach the durability byte to. (Note! Master Sword has no default Treasure Index byte and would need to be added if you plan on having that give you durability.)
 
ROM: 0xDF43B0 - 8C6E0004 - Age Check, it takes the values of 15E660 defined by closeby values and checks if Link is either Child or Adult. By changing this to 00D2 you can have Child Link buy the Goron's Knife.
 
ROM: 0xDF43E0 - 8C8F0008 - Checks a value in 127120 section (in this case 127128) to see if you currently have the Giant's Knife in your inventory. You may change it to the other swords by referring to 0004 for Master Sword and 0000 for Kokiri Sword. (0002 and 0001 respectively in the 127120 section. If you do the game will not allow you to buy it again.
 
ROM: 0xDF43EC - 8C99000C - Checks a value in 127120 section (in this case 12712C) to see if you have the Broken Giant's Knife. You may change it to other swords by referring to 0008 for Giant's Knife, 0004 for Master, and 0000 for Kokiri Sword. If you do the game will give a slightly different message when you go to buy it again.
 
ROM: 0xDF4A5C - 29C100C8 - The check to assure you have a least 200 Rupees.
ROM: 0xDF4B24 - 24060028 - Buying Giant's Knife for 200 Rupees
 
ROM: 0xDF4B78 - 2404FF38 - Selling Price of Giant's Knife from Medigoron (Negative Hex!)
------------------------------------------------------------------------------------------------------------------------------------
 
Next is an actor that gave me a lot of trouble, I tried to start looking for trade sequences with him and was only met with frustration until I found the answers in another actor, this NPC isn't complete yet as I have to look for how he syncs with the gates that he patrols and how time of day effects his speech.
 
-------------------------------------------------------------------------------------------------------------------------------------------
00B3 ovl_En_Heishi2 Hyrulean Gate Guard
 
ROM: 0xE0A0B0 - 2B01000A - The check to assure you have at least 10 Rupees (to avoid paying more than you have)
ROM: 0xE0A0C0 - 2404FFE6 - The amount of Rupees to bribe the Hyrule Castle Gate Guard. (10 Rupees)
 
ROM: 0xE0A728 -  (24010001) - Responding to Zelda's Letter
ROM: 0xE0A7D4 - (24070001) - Showing him Zelda's Letter
 
 
ROM:  0xE0A5C0 - (24010001) - Check for Keaton Mask
ROM:  0xE0AD40 - (2405002C) - Sold Out Sign (From selling him Keaton Mask)
ROM:  0xE0AE20 - (2404000F) - 15 Rupees given for Mask
 
-----------------------------------------------------------------------------------------------------------------------------------------------------
Poe Salesman is one of my favorite NPC's and he had a lot to offer in terms of data.
 
---------------------------------------------------------------------------------------------------------------------------------------------------------
01B8 ovl_En_Gb (Poe Salesman)
 
ROM:0xDE6760 (2406000F) Receive Bottle for finding 10 Big Poes
ROM:0xDE67CC - As above?
 
ROM:0xDE660C - (2404000A) Amount of Rupees he will buy normal Poe for.
ROM:0xDE66A4 - (24040032) Amount of Rupees he will buy Big Poe for.
 
ROM:0xDE65F8 - (24060014) What Item (Refer to Event Items!) will be given when you sell him a Poe (Will Replace Bottle with Poe in it) 
ROM:0xDE6694 - (24060014) What Item (Refer to Event Items!) Will be given when you sell him a Big Poe (Will Replace Bottle with Big Poe in it)
 
ROM:0xDE66B4 - (240103E8) The point amount Required (Default 1000) to receive a Bottle from him.
ROM:0xDE66BC - (24190064) The point amount (Default 100) that a Big Poe is worth.

 

ROM: 0xDE6484 - (2407001B) - His reaction to Poe
ROM: 0xDE6514 - (2407001B) - Showing Poe
 
ROM: 0xDE6490 - (2407001C) - Reaction to Big Poe 
ROM: 0xC0A138 - (24010023) - (Link) Showing Big Poe - Refer to Action Parameter List 
---------------------------------------------------------------------------------------------------------------------------------------
There are some NPC's with really neat designs that just don't do that much. The Carpet Salesman is one of these unfortunate fellows. No age checks, no conditionals, just a straight 200 Rupee Bombchu Salesman. Makes him easy to map, I guess.
-----------------------------------------------------------------------------------------------------------------------------------------------
016A ovl_En_Js (Carpet Salesmen)
 
 
ROM: 0xE3FD78 - (24060003) Receive Bombchus
ROM: 0xE3FE00 - (29C100C8) Rupee Check to assure you have 200 Rupees in order to buy the Bombchus.
ROM: 0xE3FE28 - (2404FF38) Price of Bombchus (200 Rupees)

-----------------------------------------------------------------------------------------------------------------------------------------------

 

Talon is a behemoth of an actor, being involved in not one, not two, but three quest related functions, having a mini-game, selling an item, giving an item, several age checks, several event flags, forced exits, he is basically the culmination of a do-everything NPC. The age checks are not covered here, but the mini-game is slightly covered as are the prices.

--------------------------------------------------------------------------------------------------------------------------------------------------------

0084 ovl_En_Ta (Talon) 
 
ROM: 0xECBD9C - (24060050) - Buy Lon Lon Milk for 30 Rupees
ROM: 0xECBE5C - (24060014) - Receive Lon-Lon Milk Bottle
 
ROM: 0xECBFA4 - (24060050) - Receive Lon Lon Milk (Super Cucco Game)
ROM: 0xECC34C - (24060050) - As above?
 
ROM: 0xECAC78 - (29C1001E) - The Check to see if you have 30 Rupees to buy Milk.
ROM: 0xECBF88 - (2404FFE2) - The Price of Lon Lon Milk (30 Rupees)
 
ROM: 0xECBFC0 - (2B01000A) - The Check to see if you have 10 Rupees to play the game.
ROM: 0xECBFF8 - (2404FFF6) - The Price to play Cucco-findin' Game (Only Subsequent Plays after first win!) (10 Rupees)
ROM: 0xECBA0C - (2404006C) - Music Played during mini-game. (6C=Gotta Catch 'em All!)
ROM: 0xECBA04 - (2404001E) - Time given to play the mini-game (1E=30 Second)
ROM: 0xECAF60 - (24010019) - Actor Number that needs to be *presumably* picked up in order to count as a "Super Cucco".
ROM: 0xECB178 - (24A50004) - Worth of a Super Cucco 
ROM: 0xECB170 - (2402000C) - The Total Amount needed to win the mini-game. (4*3 in Hex is 0C)
 
 
ROM: 0xECA4F4 - (24010003) - Talon's Reaction to Cucco
ROM: 0xECA570 - (24070003) - Showing Cucco to him before awakening (Child)
 
ROM: 0xECA614 - (24010006) - Talon's Reaction to Pocket Cucco
ROM: 0xECA690 - (24070006) - Showing Pocket Cucco to him before awakening
 
(Spawned Actors)
ROM: 0xEC9E54 2418000D (Variable of...)
ROM: 0xEC9E7C 24060019 (Super Cucco)
   
ROM: 0xEC9EBC 2419000D (Variable of...)
ROM: 0xEC9EE3 24060019 (Super Cucco)
 
ROM: 0xEC9F20 2408000D (Variable of...)
ROM: 0xEC9F44 24060019 (Super Cucco)
 
(Exits)
ROM: 0xECB2EC - 240E05E4 - Exit Location after mini-game is done (win or lose).
 
There is still a lot more to find with him, including what makes the Super Cucco's special, is it variable? Can this "special" functionality of the Super Cuccos be attached to another actor? What makes the limit of Cuccos 3? 
 
EDIT: It would seem I was slightly off. Surprisingly it deals nothing with variable, but only the spawned actors through Talon himself and there is a reference to the Cucco Actor within his actor to refer to what actor needs to be "picked up" presumably in order for him to award the 4 of 12 (This would be C) points to win the game.
 
Furthermore there is the oddity of when you lose the game, he offers to let you play again for 5 Rupees, but I can't find a -5 Rupee (FFFB) anywhere in his file, which is bizarre. At first I thought it may have been some kind of instruction that divided the normal amount of the game by 2, but I changed the price of the normal game and was still met with the same thing. In addition is the first time you play the game it is 10 Rupees, which don't appear to be defined by his file (with the lack of another FFF6 to point the way) 
 
However I think that is enough from Talon for now, down the line I'll go back and look for those mystery Rupee charges and his event checks, age checks.
 
Edited by Three_Pendants
  • Like 5
Link to comment
Share on other sites

Addition/subtraction in computers is designed in such a way that only addition is required (ex. 10 - 10 =  000A + FFF6 = 1 0000, where the 1 is dropped/recorded via overflow flag). You are not subtracting 000A from FFFF, you are subtracting it from 1 0000. If you're using Windows, you can make the calculation easier by going into the Programmer mode in Calculator and setting the value size on the bottom left. From there you can simply do 0000 - 000A to get FFF6, or similar.

Link to comment
Share on other sites

To expand upon what mzx said, this can also be seen in lui/ori or lui/addiu pairs. Assembly deals with signed immediates so anything above 0x7FFF has 0xFFFF preceeding it. For example...

ori a0, $zero, 0x7FFF
^ Register a0 would now be equal to 0x7FFF.

 

Say we go above 0x7FFF...

ori a0, $zero, 0x8000
^ Register a0 would now be equal to 0xFFFF8000.

 

Going back to what I was saying about lui/ori and lui/addiu pairs...

lui a0, 0x8016addiu a0, a0, 0x7FFF
^ Register a0 would now be equal to 0x80167FFF. The above was an example of an lui/addiu pair.

 

You can also use a lui/ori pair to get the same exact result as long as the lower 0x16 bits do not go above 0x7FFF.

lui a0,0x8016ori a0,a0,0x7FFF
^ Register a0 would now be equal to 0x80167FFF.

 

Say we go above 0x7FFF for the lower 16-bits of an address. For example, 0x8000...

lui a0, 0x8016addiu a0, a0, 0x8000
^ Register a0 would now be equal to 0x80158000. Why? Well that's because 0x80160000 + 0xFFFF8000 = 0x1801580000. However, anything after 32 bits overflows (the one becomes omitted).

 

We cannot do a lui/ori pair when the value goes over 0x7FFF...

lui a0, 0x8016ori a0, a0, 0x8000
^ Register a0 would now be equal to 0xFFFF8000. 0x80160000 | 0xFFFF8000 = 0xFFFF8000.

 

Say we wanted to put the value of 0x80178000 into register a0, this is what we would do...

lui a0, 0x8018addiu a0, a0, 0x8000
^ Register a0 would now be equal to 0x80178000. We are using the overflow to our advantage since it basically works as subtraction by taking away 0x00010000 from the current value (whenever you're adding a value over 0x7FFF).
0x80180000 - 0x00010000 = 0x801700000x80170000 + 0x00008000 = 0x80178000
Sorry for the super in-depth explanation (especially if you already know about the whole signed/unsigned business) :P

 

EDIT: Apparently I am the one in need of researching signed/unsigned data. Read DeathBasket's post a little ways below.

Link to comment
Share on other sites

Now that makes perfect sense, I understood the basics of how signed/unsigned bytes work but the detailed explanation from the both of you made it much clearer their functionality as well. For instance I did not know that these values eventually reset themselves from FFFF to 0000 and beyond or that it was actually subtracting from 0000 rather than FFFF that may make finding some things a little easier.

 

In addition Talon's functions (at least some of them) have been recorded and added to the above.

Link to comment
Share on other sites

 

Say we go above 0x7FFF...

ori a0, $zero, 0x8000

^ Register a0 would now be equal to 0xFFFF8000.

 

Nope, the immediate value when using the ori instruction is always unsigned. In this case, a0 = 0x00008000.

 

 

 

We cannot do a lui/ori pair when the value goes over 0x7FFF...

lui a0, 0x8016ori a0, a0, 0x8000

^ Register a0 would now be equal to 0xFFFF8000. 0x80160000 | 0xFFFF8000 = 0xFFFF8000.

 

Follows on from your earlier error. Here a0 = 0x80168000.

Link to comment
Share on other sites

  • 2 weeks later...

Well over the past couple of days I've been struggling with Anju's actor and particularly the Cucco mini-game while I've found all of the information that is important (except boundaries of distance to count as a successful capture of a Cucco, those sorts of things are absolutely foreign to me.) in regards to the mini-game, I have not been able to get past one specifically large problem...

 

While there is not too much information and the sequence is Very easy to understand...

 

The data starts at ROM: 0xE71410 - 50365070 - Anju's Default Child Line. 

 

Every time you catch a Cucco a value goes up by 1 to cause another value to go up by 2 and the game jumps to the next two bytes, which are at E71412 - Which is predictably Anju's second line about still needing 6 more Cuccos. Now one would think you could easily just change any given text to 503B and pick up the item that way. Unfortunately the game does not work that way, the game will give the message, but when Anju tries to give you the item the game softlocks in her message because somehow the code regarding the item giving is not present. Now there is a very strange work around, if you set the message to 503C (which is ordinarily her message of throwing a Cucco out of the pen after they're all in the pen) you will receive her item and only once and you can set this message anywhere within the bytes regarding her speech (which are all put next to one another), the game will mark the Event Flag (I believe) and you will not receive another bottle.

 

Though the problem with this approach is that her animation is still panicky and her line doesn't change. There is something specific I have not noticed that must make her change her animation when all seven Cuccos are in the pen and until I have that information it doesn't feel right to post her information sheet. Granted with what I explained above you can change it to that "second" message and still receive a Bottle.

  • Like 1
Link to comment
Share on other sites

 Share

×
×
  • Create New...

Important Information

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