Skip to content

Instantly share code, notes, and snippets.

@minif
Last active June 27, 2024 19:50
Show Gist options
  • Save minif/a95c47af36ea2219c0dc7d8142c419ef to your computer and use it in GitHub Desktop.
Save minif/a95c47af36ea2219c0dc7d8142c419ef to your computer and use it in GitHub Desktop.
Ultimate Angler Save Modification: Rods

Ultimate Angler Save Modification: Rods

This is my findings when trying to modify rods for Ultimate Angler. This is information that I originally discovered back in April but I put it in a private chat, so I have decided to write this as a public gist for anybody to reference.

Save file information

The save file is mgFshX.dat, which is an extdata save file on the sd card (sdmc/Nintendo 3DS/00000000000000000000000000000000/00000000000000000000000000000000/extdata/00000000/00000218/user/mgFsh0.dat). Like with all Streetpass Mii Plaza DLC saves, there are two files: mgFsh0.dat and mgFsh1.dat. They are identical, probably for redundancy (i.e. if one of them corrupts, then the other is fine). I usually edited mgFsh0.dat and deleted mgFsh1.dat to get the results I want.

Some findings in the save file:

  • Money is stored at 0x287C
  • 0x000C is a counter for every time the game is played
  • 0x2A2C is a counter for every time a rod has a skill increased (?)

Rod information

0x02C8 is the index to the currently equipted rod. 0x02CC is a count to how many rods you have. 0x02D0 and onwards is the data of all the rods you have. Each rod is in a format like so:

009F8432 1A000000 1C000000 Combining?-UFO ID-#UPG DONE

1C000000 08000000 08000000 #UPG TOTAL-GAUGE-PULLING

08000000 08000000 FFFFFFFF DURABILITY-RES-???

01000000 21000000 03000000 ???-Big-Catch-LVL3

  • The first value has something to do with combined rods. Fresh rods always have this value set to 00000000 and rods that are combined have this value set to something. In my save file, I mostly noticed values of 00XX8432 or 00XX7A32. I do not know what this actually does.
  • The second value is the rod ID. 00=Basic, 01=Toy, ... 1A=UFO (The order is the same as the order of the "Rod Rarity" sorting type)
  • The third value is a count of how many upgrades to the rod have been done. In the case of the maxed out UFO rod, I have done 28 (1C) upgrades.
  • The fourth value is the number of upgrades I can do to my rod. In the case of the +25 UFO rod, that is 28 times.
  • The fifth through eight values are the stats for the rods, in order of the gauge, pulling, durability, and resilience.
  • The ninth value is always FFFFFFFF (Representation of a null value?)
    • Speculation: Perhaps there was going to be 2 skills per rod?
  • The tenth value is always 01000000
  • The eleventh value is the ID of the skill of the rod, or FFFFFFFF if there is no skill. The 11 Anglers Big-Catch Boost skill ID is 33 (21) and the 6+ Anglers Big-Catch Boost skill ID is 35 (23). This ID is based off of the ones defined in skill_param.txt
  • The twelfth value is the level of the skill of the rod. Even though the rod list is uncapped, in game caps the skill to Lv. 9 (at least visually).

Something else I discovered is that there is an extra rod in the save file (i.e. if you only have one rod, there will be two rods in the data where rods are stored, or 96 bytes until zeros). It is always last in the list. My guess is that there is some off-by-one error that saves the rod data, but it does not matter because the rod count causes it to be ignored.

skill_param.txt

Using GodMode9 I found a skill_param.txt file that has all the skills in the game. A snippet of this file is below:

mgFsh_Skill #parameter 
{
	Skill
	{
		SKILL_ID000
		{
			s32 RARITY =0
			s32 ACTIVE_SKILL_ID=0
			s32 PASSIVE_SKILL_ID=-1
		}
		SKILL_ID001
		{
			s32 RARITY =0
			s32 ACTIVE_SKILL_ID=1
			s32 PASSIVE_SKILL_ID=-1
		}
    ...
		SKILL_ACTIVE000
		{
			s32 TYPE =0
			f32 VALUE =4.5
			f32 VALUE_LV_CORRECTION =0.5
			f32 LAUNCH_TIME =10
			f32 LAUNCH_TIME_LV_CORRECTION =2
			f32 CHARGE_TIME =30
			f32 CHARGE_TIME_LV_CORRECTION =1
		}
    ...
		SKILL_PASSIVE000
		{
			s32 TYPE =3
			f32 VALUE =3
			f32 VALUE_LV_CORRECTION =2
			s32 CONDITION =1
			f32 STAMINA_MIN =0
			f32 STAMINA_MAX =20
			s32 ESA_LV_MIN =0
			s32 ESA_LV_MAX =4
			s32 FISHING_POINT =-1
			s32 FISH_TYPE =-1
			s32 MII_MIN =0
			s32 MII_MAX =10
			s32 ESA_COLOR00 =12
			s32 ESA_COLOR01 =12
			f32 FISH_LENGTH_CM_MIN =0
			f32 FISH_LENGTH_CM_MAX =100000
			s32 FISH_FIGHT_TYPE =-1
		}
    ...
	}
}

SKILL_ID0XX is the ID for the final skill in the game. All skills can have Active (unused) and passive abilities. SKILL_ID000-SKILL_ID005 only have active skills, and SKILL_ID006 onwards only have passive skills. Setting a rod's skill ID to 0-5 visually appears as no skill, but perhaps this needs to be looked in to?

Passive skills have a Type, and a bunch of other parameters. The following Types correspond to the following skills

  • Time Boost: 0
  • Strike Boost: 1
  • Big-Catch Boost: 2
  • Power Boost: 3
  • Gauge Boost: 6

The other parameters that might be important are:

  • FISHING_POINT: If the skill is regional (i.e. Riverside, Lake/Pond, etc). I need to look into what values corrospond to what place. -1 means no region.
  • MII_MIN/MII_MAX: How many anglers are needed. (i.e. 8+ Anglers has MII_MIN set to 7 and MII_MAX set to 10)
@minif
Copy link
Author

minif commented Jun 27, 2024

Result of modifying a rod to have an absurdly high level skill:

257707-8752287-mceclip0
257707-8752305-mceclip0

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment