Talk:Harvest Moon: Friends of Mineral Town
Some memory addresses for US version to play with
I'm currently reverse engineering HM FOMT (US release) in search of unused data. Here are some interesting memory patches that I have found so far. Use your emulator's "memory viewer" to edit those addresses.
Walk through walls
0x080AC110 --- change 0x0120 to 0x0020
Change background music
0x0801DB38 (town theme) --- change 0x0D20 to 0x__20 where __ spcifies the song hex number.
0x0801DB12 (spring farm theme) change 0x0120 to 0x__20
0x0801DB16 (summer farm theme) change 0x0220 to 0x__20
0x0801DB1A (autumn farm theme) change 0x0320 to 0x__20
0x0801DB1E (winter farm theme) change 0x0420 to 0x__20
0x0801D9D0 (rain noise) change 0x0A20 to 0x__20
0x0801D9DE (storm / blizzard noise) change 0x0B20 to 0x__20
0x0801DB22 (sea noise on beach) change 0x0C20 to 0x__20
0x0801DB3C (night noises) change 0x0E20 to 0x__20
Some interesting song numbers that seem to be unused / used in very rare cutscenes:
Higher song numbers are used for SFX. Use this code to find unused songs / sfx.
Force NPC portrait in dialogue
0x08050ADC change 0x0D1C to 0x__25 where __ is the hex number of NPC portrait, then talk to any NPC
Use this code to find unused NPC portraits.
Force map number to load
The game uses two numbers for normal gameplay map handling: "location" and "map entry".
"Location" numbers are used by scripts / warps to identify locations (so for example, winter and summer farm have the same location number, while different levels in mine have different location numbers).
"Map entry" are indexes in RAM table that point to raw map data to load (so winter and summer farm are two separate maps and two different mine levels point to the same map data).
When stepping on warp to next map, next "location" number is saved in: 0x020027fc. You can overwrite this value with the following code breaker code: 820027fc ABCD where ABCD is hex number of location you want to load, then step into any warp.
When loading any map, the game looks up which "map entry" to load based on "location number". The function to perform this is located at: 0x803A8A4 The map id for player's small farm house is located at: 0x0803AA82. Use memory viewer to patch 0x2920 into 0x__20 to load a specified "map entry". Also, this works for "regular" maps that can be accessed during normal gameplay. There are other "maps" that cannot be normally accessed with this method (title screen, minigames). I'm looking into a way to access those maps.
Variants of specific maps (for example town square during festivals, your farm with expandend chicken coop / barn, etc) load the same base map data and later patch in additional buildings / decorations. The function that determines which map patch to load is located at 0x80A6660 and the function that performs actual patches is located at 0x80A5BD8. This does not cover tileset changes (different flowers in town for each season, cherry blossoms).
Map pointer table starts at: 0x8105EDC and is accessed by function at 0x80A4698.
Set player animation
Overwrite address 0x802d34e with: XX 26 36 02 YY 36 BF 00 BF 00 and then press A while standing anywhere on the map
This sets player animation to 0xXXYY. Increment animation number by 4, and then try pressing A and rotating your character in each direction. You can use this code to find unused sprites and animations
Execute any script
When standing inside your farmhouse (without any upgrades), use memory viewer to access address: 0x0201F0F0, it should be: 01 00 B2 02 This address is collision/script information for tile with your calendar. 0x020B is the script id of the calendar. Simply change the value anything you like and use the calendar. (for example, 0x06A0 triggers wedding cutscene with harvest goddess)
Note: 0x0201EE40 is the start of collision/script information for currently loaded map - it gets overwritten every time you change map or trigger a specific event. To permanently edit the map, get the map data pointer located at: 0x08105EDC + 0x18 *map_id and edit the map data there
Script 0x080E --- debug (?) menu which allows player to edit affection points of villagers + plays an unused tutorial on switching tools
Dump of game scripts
This archive contains complete text data of ingame events and scripts. Some of them might be unused or inaccessible during normal gameplay.