//--------------------------------------
//--- 010 Editor v8.0.0 Binary Template
//
// File: RF4 save files (rf4a.sav, rf4b.sav, rf4c.sav, rf4_sXX.sav)
// Author: HenryEx
// Revision: 2020-10-04
// Purpose: Works for both Rune Factory 4 (3DS) and
// Rune Factory 4 Special (NS)
//--------------------------------------
/* Addresses:
0x00000: CRC32 4b
0x00022: Something about tornados? 0B - no tornado, 05 - Tornado
0x00036: Gender
0x0003C: Lumber 4b
0x00040: Stone 4b
0x00044: Compost 4b
0x00048: Fodder 4b
0x0004C: Money 4b, 8b?
0x00054: Cur HP 4b
0x00058: HP mod 4b
0x0005C: Cur RP 2b
0x0005E: RP mod 2b
0x00060: Str mod
0x00064: Int mod
0x00068: Vit mod
0x0006C: Level (minus 1)
0x00070: Exp
- Birthday -
0x1E8DE: Middle 8 bits spread over 2 bytes, and in
REVERSE BIT ORDER HOLY OMFG WHAT WHY, so:
b0-4: ???
b5-6: Month (0-3)
b7-11: Day (not 0-based)
b12-15: ???
Reverse bits means, for days: day 30 is value 15; Day 2 is value 8,
Day 11 is value 26... this is terrible
- Villager Stats -
(Block size: 0x64 / 100
Starts at dummy, 0xb8?)
Vishnal:
0x0011C: Cur HP 4b
0x00120: HP mod 4b
0x00128: Str mod
0x0012C: Int mod
0x00130: Vit mod
0x00134: Level (minus 1)
0x00138: Exp
0x0013D: flags (80 if been in party -> stats visible)
- Skills & Skill Exp (4b, 4b) -
0x05964: Short Sword
0x0596C: Long Sword
0x05974: Spear
0x0597C: Axe/Hammer
0x05984: Dual Blades
0x0598C: Fist
0x05994: Fire
0x0599C: Water
0x059A4: Earth
0x059AC: Wind
0x059B4: Light
0x059BC: Dark
0x059C4: Love
0x059CC: Farming
0x059D4: Logging
0x059DC: Mining
0x059E4: Fishing
0x059EC: Cooking
0x059F4: Forging
0x059FC: Chemistry
0x05A04: Crafting
0x05A0C: Searching
0x05A14: Walking
0x05A1C: Sleeping
0x05A24: Eating
0x05A2C: Defense
0x05A34: Resist poison
0x05A3C: Resist Seals
0x05A44: Resist Paralysis
0x05A4C: Resist Sleep
0x05A54: Resist Fatigue
0x05A5C: Resist Cold
0x05A64: Resist Knockout
0x05A6C: Bathing
0x05A74: Taming
0x05A7C: Throwing
0x05A84: Leadership
0x05A8C: Bartering
- Item Storages -
# Block size p. Item: 0x1C / 28 (except magic, size 02)
# Start offsets for Inv types:
0x05AA4: Backpack/Equipment (0x7C4 / 1988) [71]
0x06268: Spellpack (magic) (0x3C / 60) [30]
0x062A4: Fridge (0x6C48 / 27720) [990]
0x0CEEC: Storage (0x6C48 / 27720) [990]
0x13B34: Weapon Box (0xD20 / 3360) [120]
0x14854: Wardrobe (0xD20 / 3360) [120]
0x15574: Tool Box (0x1068 / 4200) [150]
0x165DC: Shipping Box (0x20D0 / 8400) [300]
0x186AC: Shop Box (0x1A4 / 420) [15]
0x18850: Bookshelf (magic) (0xB4 / 180) [90]
- Fields & Soil Attributes -
# Start at 0x1AEB4, block size 0x10 / 16
# size?: 0xA20 / 2592
- Animal Flags & FP -
(Block size: 0x24 / 36, Start at: 0x1BDB0)
#Note: 20 slots per Barn, 10 Barns
0x00: Name
0x13: slot no., 1b
0x14: Monster Type? 4b
0x18: FP? 2b?
- Villager Flags & FP -
(Block size: 0x2C / 44, Start at: 0x1DB10)
#Note: 1st & last persons are dummies
FP levels:
140 - Lv4
0x00: FP 4b
0x04-2B: ???
- NPC Equipment -
#Start at: 0x1EB88, block size: 0xFC / 252
- Farm objects -
Table for objects on the farm
76 (?) objects, length 0xC / 12 bytes, per farm; Start 0x18EA4
0x00: crop / object ID - 00 is nothing, 58 tilled earth for example
0x07: 00 dry earth, 20 wet earth
0x08: crop (object) health
0x09-0B: 11bit(?) X/Y coords for object, (0,0) top left
one "grid" square seems to be 32x32
For ref.: middle of top-left square on main farm is 79|176
Top-right 431|176; Bottom-left 79|336; Bottom-right 431|336
0x20694: Prince(ss) Points 4b
0x20698: Tourists 4b
- Requests -
Some flags
0x1E042: 01 - Daily request #1 done?
0x1E043: 80 - Daily request #2 done?, "come back tomorrow"?
- Orders -
0x1E93F: 80 - Backpack +1, 40 - Backpack +2
0x1E94F: 10 - Unlock Sharance maze
- Difficulty -
1 byte for original 3 difficulties, 1 bitflag for additional RF4S difficulty
0x0005: 00 - Normal, 40 - Easy, 80 - Hard
0x1EA3B: 20 - HELL difficulty (RF4S only) if on Hard
- Fishing -
Biggest & smallest size each 2b
Masu trout records: 0x21934 & 0x2197C (0x219B4 & 0x219FC Special)
0x1E8C4: Story flag? 20 - Time frozen w/ Volkanon, 28 - normal?
0x1E8DE: 5bit reverse bit order - # of cooking breads Porco sells (max. 31)
*/
// #include "VarDefs.bt" // shorthand typedefs
// Typedef some custom variables:
//-----------------------------------
// Define enums
typedef enum <ubyte> {
Male,
Female
} GENDER;
typedef enum <uint> {
Spring,
Summer,
Fall,
Winter
} MONTH;
typedef enum <ubyte> {
Normal,
Easy = 64,
Hard = 128
} DIFF;
typedef enum <ubyte> {
DefaultCostume,
Variant1 = 4,
Variant2 = 8
} COST;
typedef enum <short> {
NoChange,
Vishnal,
Clorica,
Volkanon,
Forte,
Kiel,
Bado,
Margaret,
Dylas,
Arthur,
Porcoline,
XiaoPai,
LinFa,
Amber,
Illuminata,
Doug,
Blossom,
Dolce,
Jones,
Nancy,
Leon,
Ventuswill,
Son,
Daughter,
Barrett,
Raven,
MistressTrupin,
TravelerM1,
TravelerM2,
TravelerF1 = 34,
TravelerF2,
Ethelberd = 239,
Pico = 309,
Lest = 9999
} MODEL;
typedef enum <ushort> {
__000,
__001,
__002,
__003,
Farm_004,
Farm_005,
Farm_006,
Farm_007,
Field_008,
Field_009,
Field_010,
Field_011,
Field_012,
Field_013,
Field_014,
Field_015,
Field_016,
Field_017,
Field_018,
Field_019,
Field_020,
Field_021,
Field_022,
Field_023,
Selphia_AirshipWay_024,
Selphia_AirshipWay_025,
Selphia_AirshipWay_026,
Selphia_AirshipWay_027,
Selphia_HousingArea_028,
Selphia_HousingArea_029,
Selphia_HousingArea_030,
Selphia_HousingArea_031,
Selphia_MelodyStreet_032,
Selphia_MelodyStreet_033,
Selphia_MelodyStreet_034,
Selphia_MelodyStreet_035,
Selphia_Observatory_036,
Selphia_Observatory_037,
Selphia_Observatory_038,
Selphia_Observatory_039,
Selphia_DragonLake_040,
Selphia_DragonLake_041,
Selphia_DragonLake_042,
Selphia_DragonLake_043,
SelphiaCastleGate_044,
SelphiaCastleGate_045,
SelphiaCastleGate_046,
SelphiaCastleGate_047,
Selphia_TownSquare_048,
Selphia_TownSquare_049,
Selphia_TownSquare_050,
Selphia_TownSquare_051,
Selphia_052,
Selphia_053,
Selphia_054,
Selphia_055,
Selphia_056,
Selphia_057,
Selphia_058,
Selphia_059,
Castle_DragonRoom_060,
Castle_DragonRoom_061,
Castle_DragonRoom_062,
Castle_DragonRoom_063,
YourRoom_064,
ButlersRoom_065,
YourRoom_066,
YourRoom_067,
YourRoom_068,
YourRoom_069,
TrophyRoom_070,
TrophyRoomB2_071,
YourRoom_072,
TrophyRoomB3_073,
Room_Dummy_074,
Room_Dummy_075,
Room_Dummy_076,
MonsterBarn_077,
MonsterBarn_078,
MonsterBarn_079,
MonsterBarn_080,
MonsterBarn_081,
MonsterBarn_082,
MonsterBarn_083,
MonsterBarn_084,
MonsterBarn_085,
MonsterBarn_086,
MonsterBarn_087,
MonsterBarn_088,
MonsterBarn_089,
MonsterBarn_090,
MonsterBarn_091,
MonsterBarn_092,
MonsterBarn_093,
MonsterBarn_094,
MonsterBarn_095,
MonsterBarn_096,
MonsterBarn_097,
MonsterBarn_098,
MonsterBarn_099,
MonsterBarn_100,
MonsterBarn_101,
MonsterBarn_102,
MonsterBarn_103,
MonsterBarn_104,
MonsterBarn_105,
MonsterBarn_106,
MonsterBarn_107,
MonsterBarn_108,
MonsterBarn_109,
MonsterBarn_110,
MonsterBarn_111,
MonsterBarn_112,
MonsterBarn_113,
MonsterBarn_114,
MonsterBarn_115,
MonsterBarn_116,
MonsterBarn_117,
MonsterBarn_118,
MonsterBarn_119,
MonsterBarn_120,
MonsterBarn_121,
MonsterBarn_122,
MonsterBarn_123,
MonsterBarn_124,
MonsterBarn_125,
MonsterBarn_126,
SincerityGeneralStore_127,
SincerityGeneral2F_128,
Blacksmith_129,
PorcolinesKitchen_130,
PorcolinesKitchen2F_131,
TinyBandageClinic_132,
TinyBandageClinic2F_133,
Carnations_134,
Carnations2F_135,
BellHotelLobby_136,
BellHotelResidence_137,
BellHotelGuestRoom_138,
BellBath_139,
MargaretsHouse_140,
SainteCoquilleManor_141,
SteCoquilleManor2F_142,
FortesHouse_143,
House_144,
House_145,
House_146,
House_147,
__148,
House_149,
House_150,
House_151,
House_152,
House_153,
House_154,
House_155,
House_156,
House_157,
House_158,
Airship_159,
Airship_160,
SelphiaPlain_161,
SelphiaPlain_162,
SelphiaPlain_163,
SelphiaPlain_164,
SelphiaPlain_165,
SelphiaPlain_166,
SelphiaPlain_167,
SelphiaPlainMushRoad_168,
SelphiaPlainMushSpan_169,
SelphiaPlainEast_170,
SelphiaPlainEast_171,
WaterRuins_172,
SelphiaPlain_173,
SelphiaPlainMushRoad_174,
SelphiaPlainMushRoad_175,
SelphiaPlainMushRoad_176,
SelphiaPlainMushRoad_177,
SelphiaPlain_178,
Cliff_179,
SelphiaPlainWest_180,
SelphiaPlainWest_181,
SelphiaPlainWest_182,
SelphiaPlainMushRoad_183,
SelphiaPlainMushRoad_184,
SelphiaPlainWest_185,
SelphiaPlainWest_186,
TwinRocks_187,
SelphiaPlainWest_188,
LeonKarnak_189,
SelphiaPlainWest_190,
CedarTree_191,
SelphiaPlainEast_192,
SelphiaPlainEast_193,
SelphiaPlainEast_194,
SercerezoHill_195,
DailyRoad_196,
SelphiaPlainEast_197,
IdraCave_198,
SercerezoHill_199,
SercerezoHill_200,
SercerezoHill_201,
SercerezoHill_202,
SelphiaPlain_203,
SelphiaPlain_204,
AutumnBridge_205,
AutumnBridge_206,
AutumnRoad_207,
AutumnRoad_208,
AutumnRoad_209,
DeliriumLavaRuins_210,
AutumnRoad_211,
AutumnRoad_212,
AutumnRoad_213,
AutumnRoad_214,
AutumnRoad_215,
AutumnRoad_216,
AutumnRoad_217,
AutumnRiver_218,
AutumnRoad_219,
AutumnRoad_220,
AutumnRoad_221,
AutumnRoad_222,
AutumnRoad_223,
AutumnRoad_224,
AutumnRoad_225,
MayaRoadEntrance_226,
SelphiaPlainEast_227,
CerezoBridge_228,
CerezoBridge_229,
SercerezoHill_230,
CluckCluckNest_231,
SilverArch_232,
SilverArch_233,
SilverLake_234,
WinterSpring_235,
AutumnSpring_236,
SelphiaPlainEast_237,
SummerSpring_238,
SpringSpring_239,
BuriedCave_240,
KeenoLake_241,
SelphiaPlain_242,
SelphiaPlain_243,
SilverLake_244,
SilverLake_245,
SilverLake_246,
SercerezoHill_247,
SercerezoHill_248,
SercerezoLake_249,
SercerezoHill_250,
DemonsDen_251,
SercerezoHill_252,
SercerezoHillBridge_253,
SercerezoHill_254,
SercerezoHill_255,
AutumnBridge_256,
RevivalCave_257,
MayaBridge_258,
SercerezoHill_259,
Cave_260,
SpringField_261,
SummerField_262,
AutumnField_263,
WinterField_264,
SelphiaPlain_265,
SelphiaPlain_266,
SelphiaPlain_267,
SelphiaPlain_268,
SelphiaPlain_269,
SelphiaPlain_270,
YokmirForest_271,
YokmirForestDepths_272,
YokmirForest_273,
YokmirForest_274,
YokmirForest_275,
YokmirForest_276,
YokmirForest_277,
YokmirForest_278,
Forest_Dummy_279,
Forest_Dummy_280,
Forest_Dummy_281,
Forest_Dummy_282,
Forest_Dummy_283,
WaterRuins_284,
WaterRuinsDepths_285,
WaterRuins_286,
WaterRuins_287,
WaterRuins_288,
WaterRuins_289,
WaterRuins_290,
WaterRuins_291,
WaterRuins_292,
WaterRuins_293,
WaterRuins_294,
WaterRuins_295,
WaterRuins_296,
WaterRuins_297,
WaterRuins_298,
WaterRuins_299,
WaterRuins_300,
Temple_Dummy_301,
Temple_Dummy_302,
ObsidianMansion_303,
ObsidianMnsnTheatre_304,
ObsidianMnsnEntrance_305,
ObsidianMansion_306,
ObsidianMansion_307,
ObsidianMansion_308,
ObsidianMansion_309,
ObsidianMansion_310,
ObsidianMansion_311,
ObsidianMansion_312,
ObsidianMansion_313,
ObsidianMansion_314,
ObsidianMansion_315,
ObsidianMansion_316,
ObsidianMansion_317,
ObsidianMansion_318,
ObsidianMansion_319,
ObsidianMansion_320,
ObsidianMansion_321,
Ruin_Dummy_322,
Ruin_Dummy_323,
LeonKarnak_324,
LeonKarnakDepths_325,
LeonKarnak_326,
LeonKarnak_327,
LeonKarnak_328,
LeonKarnak_329,
LeonKarnak_330,
LeonKarnak_331,
LeonKarnak_332,
LeonKarnak_333,
LeonKarnak_334,
LeonKarnak_335,
LeonKarnak_336,
LeonKarnak_337,
LeonKarnak_338,
LeonKarnak_339,
LeonKarnak_340,
LeonKarnak_341,
LeonKarnak_342,
LeonKarnak_343,
LeonKarnak_344,
LeonKarnak_345,
LeonKarnak_346,
FloatingEmpire_347,
FloatingEmpire_348,
FloatingEmpireFront_349,
FloatingEmpire_350,
FloatingEmpire_351,
FloatingEmpireSouth_352,
FloatingEmpireSouth_353,
FloatingEmpireSouth_354,
FloatingEmpireSouth_355,
FloatingEmpireSouth_356,
FloatingEmpireSouth_357,
FloatingEmpireSouth_358,
FloatingEmpireSouth_359,
FloatingEmpireSouth_360,
FloatingEmpireSouth_361,
FloatingEmpireSouth_362,
FloatingEmpireSouth_363,
FloatingEmpireSouth_364,
FloatingEmpireSouth_365,
FloatingEmpireSouth_366,
FloatingEmpireSouth_367,
FloatingEmpireSouth_368,
FloatingEmpireSouth_369,
FloatingEmpireSouth_370,
FloatingEmpireSouth_371,
FloatingEmpireSouth_372,
FloatingEmpireSouth_373,
FloatingEmpireSouth_374,
FloatingEmpireSouth_375,
FloatingEmpireSouth_376,
FloatingEmpireWest_377,
FloatingEmpireWest_378,
FloatingEmpireWest_379,
FloatingEmpireWest_380,
FloatingEmpireWest_381,
FloatingEmpireWest_382,
FloatingEmpireWest_383,
FloatingEmpireWest_384,
FloatingEmpireWest_385,
FloatingEmpireWest_386,
FloatingEmpireWest_387,
FloatingEmpireWest_388,
FloatingEmpireWest_389,
FloatingEmpireWest_390,
FloatingEmpireWest_391,
FloatingEmpireWest_392,
FloatingEmpireWest_393,
FloatingEmpireWest_394,
FloatingEmpireWest_395,
FloatingEmpireWest_396,
FloatingEmpireWest_397,
FloatingEmpireWest_398,
FloatingEmpireWest_399,
FloatingEmpireWest_400,
FloatingEmpireWest_401,
FloatingEmpireWest_402,
FloatingEmpireWest_403,
FloatingEmpireWest_404,
FloatingEmpireWest_405,
FloatingEmpireWest_406,
FloatingEmpireWest_407,
FloatingEmpireWest_408,
FloatingEmpireEast_409,
FloatingEmpireEast_410,
FloatingEmpireEast_411,
FloatingEmpireEast_412,
FloatingEmpireEast_413,
FloatingEmpireEast_414,
FloatingEmpireEast_415,
FloatingEmpireEast_416,
FloatingEmpireEast_417,
FloatingEmpireEast_418,
FloatingEmpireEast_419,
FloatingEmpireEast_420,
FloatingEmpireEast_421,
FloatingEmpireEast_422,
FloatingEmpireEast_423,
FloatingEmpireEast_424,
FloatingEmpireEast_425,
FloatingEmpireEast_426,
FloatingEmpireEast_427,
FloatingEmpireEast_428,
FloatingEmpireEast_429,
FloatingEmpireEast_430,
FloatingEmpireEast_431,
FloatingEmpireEast_432,
FloatingEmpireEast_433,
FloatingEmpireEast_434,
FloatingEmpireEast_435,
FloatingEmpireEast_436,
FloatingEmpireEast_437,
FloatingEmpireEast_438,
FloatingEmpireSouth_439,
FloatingEmpire_440,
FloatingEmpire_441,
WorldofFields_442,
SharanceMaze_443,
SharanceMaze_444,
SharanceMaze_445,
SharanceMaze_446,
SharanceMaze_447,
SharanceMaze_448,
SharanceMaze_449,
SharanceMaze_450,
SharanceMaze_451,
SharanceMaze_452,
SharanceMaze_453,
YokmirCave_454,
YokmirCave_455,
YokmirCave_456,
YokmirCave_457,
YokmirCave_458,
YokmirCave_459,
YokmirCave_460,
YokmirCave_461,
YokmirCave_462,
YokmirCave_463,
YokmirCave_464,
YokmirCave_465,
YokmirCave_466,
YokmirCave_467,
YokmirCave_468,
YokmirCave_469,
YokmirCave_470,
YokmirCave_471,
YokmirCave_472,
YokmirCave_473,
YokmirCave_474,
YokmirCave_475,
YokmirCave_476,
YokmirCave_477,
YokmirCave_478,
YokmirCave_479,
YokmirCave_480,
YokmirCave_481,
YokmirCave_482,
YokmirCave_483,
YokmirCave_484,
YokmirCave_485,
DeliriumLavaRuins_486,
DeliriumLavaRuins_487,
DeliriumLavaRuins_488,
DeliriumLavaRuins_489,
DeliriumLavaRuins_490,
DeliriumLavaRuins_491,
DeliriumLavaRuins_492,
DeliriumLavaRuins_493,
DeliriumLavaRuins_494,
DeliriumLavaRuins_495,
DeliriumLavaRuins_496,
DeliriumLavaRuins_497,
DeliriumLavaRuins_498,
DeliriumLavaRuins_499,
DeliriumLavaRuins_500,
DeliriumLavaRuins_501,
DeliriumLavaRuins_502,
DeliriumLavaRuins_503,
DeliriumLavaRuins_504,
DeliriumLavaRuins_505,
DeliriumLavaRuins_506,
DeliriumLavaRuins_507,
DeliriumLavaRuins_508,
DeliriumLavaRuins_509,
DeliriumLavaRuins_510,
DeliriumLavaRuins_511,
DeliriumLavaRuins_512,
DeliriumLavaRuins_513,
DeliriumLavaRuins_514,
DeliriumLavaRuins_515,
DeliriumLavaRuins_516,
DeliriumLavaRuins_517,
DeliriumLavaRuins_518,
DeliriumLavaRuins_519,
DeliriumLavaRuins_520,
DeliriumLavaRuins_521,
DeliriumLavaRuins_522,
DeliriumLavaRuins_523,
DeliriumLavaRuins_524,
DeliriumLavaRuins_525,
DeliriumLavaRuins_526,
Unknown_527,
Unknown_528,
Unknown_529,
Unknown_530,
Unknown_531,
Unknown_532,
Unknown_533,
Unknown_534,
Unknown_535,
Unknown_536,
Unknown_537,
Unknown_538,
Unknown_539,
Unknown_540,
IdraCave_541,
IdraCave_542,
IdraCave_543,
IdraCave_544,
IdraCave_545,
IdraCave_546,
IdraCave_547,
IdraCave_548,
IdraCave_549,
IdraCave_550,
IdraCave_551,
IdraCaveB1_552,
IdraCaveB1_553,
IdraCaveB1_554,
IdraCaveB1_555,
IdraCaveB1_556,
IdraCaveB1_557,
IdraCaveB1_558,
IdraCaveB1_559,
IdraCaveB1_560,
IdraCaveB1_561,
IdraCaveB1_562,
IdraCaveB1_563,
IdraCaveB1_564,
IdraCaveB1_565,
IdraCaveB1_566,
IdraCaveB1_567,
IdraCaveB1_568,
IdraCaveB1_569,
IdraCaveB1_570,
IdraCaveB1_571,
IdraCaveB2_572,
IdraCaveB2_573,
IdraCaveB2_574,
IdraCaveB2_575,
IdraCaveB2_576,
IdraCaveB2_577,
IdraCaveB2_578,
IdraCaveB2_579,
IdraCaveB2_580,
IdraCaveB2_581,
IdraCaveB2_582,
IdraCaveB2_583,
IdraCaveB2_584,
IdraCaveB2_585,
IdraCaveB2_586,
IdraCaveB2_587,
IdraCaveB2_588,
IdraCaveB2_589,
IdraCaveB2_590,
IdraCaveB2_591,
IdraCaveB2_592,
IdraCaveB2_593,
ImperialResearchCntr_594,
MayaRoad_595,
MayaRoad_596,
MayaRoad_597,
MayaRoad_598,
MayaRoad_599,
MayaRoad_600,
MayaRoad_601,
MayaRoad_602,
MayaRoad_603,
MayaRoad_604,
MayaRoad_605,
MayaRoad_606,
MayaRoad_607,
MayaRoad_608,
MayaRoad_609,
MayaRoad_610,
MayaRoad_611,
MayaRoad_612,
MayaRoad_613,
MayaRoad_614,
MayaRoad_615,
MayaRoad_616,
MayaRoad_617,
MayaRoad_618,
MayaRoad_619,
MayaRoad_620,
MayaRoad_621,
MayaRoad_622,
MayaRoad_623,
MayaRoad_624,
MayaRoad_625,
MayaRoad_626,
MayaRoad_627,
MayaRoad_628,
MayaRoad_629,
MayaRoad_630,
MayaRoad_631,
MayaRoad_632,
MayaRoad_633,
MayaRoad_634,
MayaRoad_635,
MayaRoad_636,
MayaRoad_637,
MayaRoad_638,
MayaRoad_639,
MayaRoad_640,
MayaRoad_641,
MayaRoad_642,
MayaRoad_643,
MayaRoad_644,
MayaRoad_645,
MayaRoad_646,
MayaRoad_647,
MayaRoad_648,
MayaRoad_649,
MayaRoad_650,
MayaRoad_651,
MayaRoad_652,
MayaRoad_653,
MayaRoad_654,
MayaRoad_655,
MayaRoad_656,
MayaRoad_657,
SechsTerritory_658,
SechsTerritory_659,
SechsTerritory_660,
SechsTerritory_661,
SechsTerritory_662,
SechsTerritory_663,
SechsTerritory_664,
SechsTerritory_665,
SechsTerritory_666,
SechsTerritory_667,
SechsTerritory_668,
SechsTerritory_669,
SechsTerritory_670,
SechsTerritory_671,
SechsTerritory_672,
SechsTerritory_673,
SechsTerritory_674,
SechsTerritory_675,
SechsTerritory_676,
SechsTerritory_677,
SechsTerritory_678,
SechsTerritory_679,
SechsTerritory_680,
SechsTerritory_681,
SechsTerritory_682,
SechsTerritory_683,
SechsTerritory_684,
SechsTerritory_685,
SechsTerritory_686,
SechsTerritory_687,
SechsTerritory_688,
SechsTerritory_689,
SechsTerritory_690,
SechsTerritory_691,
SechsTerritory_692,
SechsTerritory_693,
SechsTerritory_694,
SechsTerritory_695,
SechsTerritory_696,
SechsTerritory_697,
SechsTerritory_698,
SechsTerritory_699,
SechsTerritory_700,
SechsTerritory_701,
SechsTerritory_702,
SechsTerritory_703,
SechsTerritory_704,
SechsTerritory_705,
SechsTerritory_706,
SechsTerritory_707,
SechsTerritory_708,
SechsTerritory_709,
SechsTerritory_710,
SechsTerritory_711,
SechsTerritory_712,
SechsTerritory_713,
SechsTerritory_714,
SechsTerritory_715,
SechsTerritory_716,
SechsTerritory_717,
SechsTerritory_718,
SechsTerritory_719,
SechsTerritory_720,
SechsTerritory_721,
SechsTerritory_722,
SechsTerritory_723,
SechsTerritory_724,
SechsTerritory_725,
RunePrana_726,
RunePrana_727,
RunePrana_728,
RunePrana_729,
RunePrana_730,
RunePrana_731,
RunePrana_732,
RunePrana_733,
RunePrana_734,
RunePrana_735,
RunePrana_736,
RunePrana_737,
RunePrana_738,
RunePrana_739,
RunePrana_740,
RunePrana_741,
RunePrana_742,
RunePrana_743,
RunePrana_744,
RunePrana_745,
RunePrana_746,
RunePrana_747,
RunePrana_748,
RunePrana_749,
RunePrana_750,
RunePrana_751,
RunePrana_752,
RunePrana_753,
RunePrana_754,
RunePrana_755,
RunePrana_756,
RunePrana_757,
RunePrana_758,
RunePrana_759,
RunePrana_760,
RunePrana_761,
RunePrana_762,
RunePrana_763,
RunePrana_764,
RunePrana_765,
RunePrana_766,
RunePrana_767,
RunePrana_768,
RunePrana_769,
RunePrana_770,
RunePrana_771,
RunePrana_772,
RunePrana_773,
RunePrana_774,
RunePrana_775,
RunePrana_776,
RunePrana_777,
RunePrana_778,
RunePrana_779,
RunePrana_780,
RunePrana_781,
RunePrana_782,
RunePrana_783,
RunePrana_784,
RunePrana_785,
RunePrana_786,
RunePrana_787,
RunePrana_788,
RunePrana_789,
RunePrana_790,
RunePrana_791,
RunePrana_792,
RunePrana_793,
RunePrana_794,
RunePrana_795,
RunePrana_796,
RunePrana_797,
RunePrana_798,
RunePrana_799,
RunePrana_800,
RunePrana_801,
RunePrana_802,
RunePrana_803,
RunePrana_804,
RunePrana_805,
RunePrana_806,
RunePrana_807,
RunePrana_808,
RunePrana_809,
RunePrana_810,
RunePrana_811,
RunePrana_812,
RunePrana_813,
RunePrana_814,
RunePrana_815,
RunePrana_816,
RunePrana_817,
RunePrana_818,
RunePrana_819,
RunePrana_820,
RunePrana_821,
RunePrana_822,
RunePrana_823,
RunePrana_824,
RunePrana_825,
RunePrana_826,
RunePrana_827,
RunePrana_828,
RunePrana_829,
RunePrana_830,
RunePrana_831,
RunePrana_832,
RunePrana_833,
RunePrana_834,
RunePrana_835,
RunePrana_836,
RunePrana_837,
RunePrana_838,
RunePrana_839,
RunePrana_840,
RunePrana_841,
RunePrana_842,
RunePrana_843,
RunePrana_844,
RunePrana_845,
RunePrana_846,
RunePrana_847,
RunePrana_848,
RunePrana_849,
RunePrana_850,
RunePrana_851,
RunePrana_852,
CluckCluckNest_853,
CluckCluckNest_854,
CluckCluckNest_855,
CluckCluckNest_856,
CluckCluckNest_857,
RevivalCave_858,
RevivalCave_859,
RevivalCave_860,
DemonsDen_861,
DemonsDen_862,
DemonsDen_863,
DemonsDen_864,
DemonsDen_865,
DemonsDen_866,
DemonsDen_867,
DemonsDen_868,
DemonsDen_869,
__870,
__871,
VolkanonBridge_872,
AmoureuxdesSaisons_873
} ROOM;
typedef enum <short> {
Cabbage = 1,
KingCabbage,
PinkTurnip,
ColossalPink,
PinkMelon,
ConquerorMelon,
Onion,
UltraOnion,
Pumpkin,
DoomPumpkin,
Cucumber,
KaiserCucumber,
Corn,
GigantCorn,
Tomato,
TitanTomato,
Eggplant,
EmperorEggplant,
Yam,
LordlyYam,
Potato,
PrincelyPotato,
Carrot,
RoyalCarrot,
GreenPepper,
GreenPepperRex,
Spinach,
SovereignSpinach,
Turnip,
TyrantTurnip,
Radish,
NobleRadish,
Leek,
LegendaryLeek,
BokChoy,
BossBokChoy,
HotHotFruit,
GiantHotHotFruit,
BambooSprout,
GoldenCabbage,
GoldenKingCabbage,
GoldenPumpkin,
GldnDoomPumpkin,
GoldenPotato,
GoldPrincePotato,
GoldenTurnip,
GoldenTyrantTurnip,
MushroomA,
MushroomB,
MushroomC,
MushroomD,
MushroomE,
Mushroom,
MonarchMushroom,
Strawberry,
SultanStrawberry,
Pineapple,
KingPineapple,
Grapes,
Apple,
Orange,
MealyApple,
Toyherb,
UltraToyherb,
MoondropFlower,
UltraMoondropFlower,
PinkCat,
KingPinkCat,
CharmBlue,
GreatCharmBlue,
MedicinalHerb,
AntidoteGrass,
BlackGrass,
OrangeGrass,
RedGrass,
YellowGrass,
BlueGrass,
GreenGrass,
PurpleGrass,
IndigoGrass,
WhiteGrass,
Weeds,
WitheredGrass,
CherryGrass,
KingCherryGrass,
LampGrass,
KaiserLampGrass,
BlueCrystal,
BigBlueCrystal,
EmeryFlower,
GreatEmeryFlower,
Ironleaf,
SuperIronleaf,
FourLeafClover,
Great4LeafClover,
Fireflower,
BigFireflower,
GreenCrystal,
BigGreenCrystal,
NoelGrass,
LargeNoelGrass,
AutumnGrass,
BigAutumnGrass,
PomPomGrass,
KingPomPomGrass,
RedCrystal,
BigRedCrystal,
WhiteCrystal,
BigWhiteCrystal,
AyngondaiaLawn,
TheProtein,
Intelligencer,
VitalGummi,
HeartDrink,
AntidotePotion,
ParaGone,
Roundoff,
ColdMedicine,
Formuade,
LovePotion,
Invinciroid,
Leveliser,
HeavySpice,
SweetPowder,
SourDrop,
MixedHerbs,
RecoveryPotion,
HealingPotion,
MysteryPotion,
MagicalPotion,
ObjectX,
FailedDish,
DisastrousDish,
TroutSashimi,
CharSashimi,
RainbowSashimi,
SalmonSashimi,
CherrySashimi,
TaimenSashimi,
SnapperSashimi,
GlitterSashimi,
LoverSashimi,
GirellaSashimi,
SkipjackSashimi,
YellowtailSashimi,
TunaSashimi,
SardineSashimi,
NeedlefishSashimi,
PikeSashimi,
FlounderSashimi,
TurbotSashimi,
FallSashimi,
SquidSashimi,
SunsquidSashimi,
LampSquidSashimi,
BlowfishSashimi,
LobsterSashimi,
ShrimpSashimi,
FriedVeggies,
FriedRice,
CabbageCakes,
FrenchFries,
Croquettes,
Popcorn,
CornCereal,
MisoEggplant,
FriedEggs,
Omelet,
OmeletRice,
BakedApple,
CurryBread,
FrenchToast,
Donut,
FriedUdon,
Tempura,
Pancakes,
Gyoza,
Risotto,
DryCurry,
SaltedMasuTrout,
SaltedChar,
SaltedRTrout,
SaltedCSalmon,
SaltedChub,
SaltedSalmon,
SaltedTaimen,
GrilledCCarp,
GrilledGibelio,
GrilledSnapper,
GrilledGirella,
GrilledGSnapper,
GrilledLSnapper,
GrilledSkipjack,
GrilledMackerel,
GrilledYellowtail,
SaltedPondSmelt,
TunaTeriyaki,
DriedSardines,
GrilledNeedlefish,
SaltedPike,
GrilledFlounder,
GrilledTurbot,
GrilledFFlounder,
GrilledSquid,
GrilledSunsquid,
GrilledLampSquid,
GrilledBlowfish,
GrilledLobster,
GrilledShrimp,
GrilledSFlounder,
HotMilk,
HotChocolate,
GrapeLiqueur,
BoiledPumpkin,
BoiledSpinach,
BoiledEgg,
GlazedYam,
BoiledGyoza,
StrawberryJam,
AppleJam,
GrapeJam,
Marmalade,
CheeseFondue,
Udon,
CurryUdon,
TempuraUdon,
RicePorridge,
MilkPorridge,
TempuraBowl,
EggBowl,
Stew,
CurryRice,
UltimateCurry,
RoyalCurry,
RelaxTea,
GrilledMiso,
UnionStew,
RockfishStew,
CornontheCob,
BakedOnigiri,
SweetPotato,
Toast,
JamRoll,
ButterRoll,
Pizza,
SeafoodPizza,
Doria,
SeafoodDoria,
Gratin,
SeafoodGratin,
YamoftheAges,
Cookie,
ChocoCookie,
Cake,
ChocolateCake,
Cheesecake,
ApplePie,
PineappleJuice,
TomatoJuice,
GrapeJuice,
OrangeJuice,
AppleJuice,
StrawberryMilk,
FruitJuice,
FruitSmoothie,
VegetableJuice,
VeggieSmoothie,
MixedJuice,
MixedSmoothie,
Ketchup,
Butter,
GoldJuice,
PreludetoLove,
HotJuice,
SteamedBread,
CheeseBread,
MeatDumpling,
ChineseManju,
CurryManju,
SteamedGyoza,
PoundCake,
ChocolateSponge,
Flan,
PumpkinFlan,
Dumplings,
Salad,
Sandwich,
FruitSandwich,
PickledTurnip,
Pickles,
BambooRice,
RaisinBread,
IceCream,
RelaxTeaLeaves,
Onigiri,
Bread,
SalmonOnigiri,
PickleMix,
TurnipHeaven,
Rice,
Chocolate,
Wine,
ElliLeaves,
Milk_S,
Milk_M,
Milk_L,
Egg_S,
Egg_M,
Egg_L,
Mayonnaise,
Cheese,
Yogurt,
Honey,
Flour,
Oil,
CurryPowder,
RiceFlour,
MedicineBread,
MedicineBreadPlus,
CookingBread,
CookingBreadPlus,
WeaponBread,
WeaponBreadPlus,
AccessoryBread,
AccessoryBreadPlus,
FarmingBread,
FarmingBreadPlus,
Broadsword,
SteelSword,
WindSword,
AquaSword,
Defender,
AerialBlade,
BurningSword,
Sakura,
LuckBlade,
PlatinumSword,
Raventine,
Icifier,
SoulEater,
SmashBlade,
DragonSlayer,
Sunspot,
StarSaber,
GaiaSword,
Grantale,
ChaosBlade,
RuneBlade,
SteelSwordPlus,
PlatinumSwordPlus,
Cutlass,
BackScratcher,
Durendal,
Gladius,
GorgeousSword,
Spoon,
RuneLegend,
Snakesword,
Veggieblade,
Invisiblade,
PlantSword,
Claymore,
Zweihaender,
FlameSaber,
CycloneBlade,
DancingDicer,
GreatSword,
HeavenAsunder,
GrandSmasher,
BlueEyedBlade,
PoisonBlade,
SteelSlicer,
Flamberge,
ShineBlade,
EarthShade,
BioSmasher,
Punisher,
SeaCutter,
Volcanon,
SnowCrown,
MoonShadow,
ForceElement,
ZweihaenderPlus,
FlambergePlus,
Katzbalger,
BigKnife,
Katana,
Balmung,
Psycho,
Dekash,
Braveheart,
Belzebuth,
Daicone,
Caliburn,
Orochi,
Spear,
Lance,
NeedleSpear,
Halberd,
WaterSpear,
BloodLance,
WoodStaff,
PoisonSpear,
Corsesca,
SilentGrave,
FlareLance,
HeavyLance,
Iceberg,
Metus,
MonkStaff,
Overbreak,
Brionac,
FeatherLance,
Belvarose,
Bjor,
Gungnir,
LancePlus,
CorsescaPlus,
Trident,
Pitchfork,
DragonsFang,
GaeBolg,
MagicalLance,
SafetyLance,
Legion,
PoisonQueen,
PineClub,
Fivestaff,
BattleHammer,
WarHammer,
GreatHammer,
Schnabel,
GigantHammer,
Mjolnir,
SpikedHammer,
FlameHammer,
IceHammer,
SkyHammer,
GravitonHammer,
BoneHammer,
CrystalHammer,
WarHammerPlus,
GigantHammerPlus,
Hammer,
ToyHammer,
FatalCrush,
StrongStone,
Kongo,
Bat,
IronBat,
SplashStar,
BattleAxe,
PoleAxe,
Alldale,
GreatAxe,
DemonAxe,
CrescentAxe,
Executioner,
HeatAxe,
FrostAxe,
Tomahawk,
RockAxe,
DoubleEdge,
SaintAxe,
PoleAxePlus,
CrescentAxePlus,
Axe,
Lollipop,
BattleScythe,
BasiliskFang,
DevilFinger,
Rod,
Staff,
SilverStaff,
FlareStaff,
IceStaff,
LightningWand,
EarthStaff,
WizardsStaff,
MagesStaff,
RuneStaff,
MagesStaffPlus,
MagicBroom,
Basket,
MagicShot,
HellBranch,
CrimsonStaff,
BubbleStaff,
GaiaRod,
ShootingStarStaff,
CycloneRod,
StormWand,
RubyRod,
EmeraldRod,
SapphireRod,
AmethystRod,
AquamarineRod,
DiamondRod,
FriendlyRod,
LoveLoveRod,
SorcerersWand,
HellCurse,
Algernon,
GoldenTurnipStaff,
SweetPotatoStaff,
ElvishHarp,
Syringe,
ShortDagger,
SteelEdge,
WindEdge,
FrostEdge,
SteelKatana,
SonicDagger,
Salamander,
TwinBlade,
Rampage,
PlatinumEdge,
Efreet,
DeepBlizzard,
DarkInvitation,
ForceDivide,
DragoonClaw,
HeartFire,
DesertWind,
BrokenWall,
OrcusSword,
ChaosEdge,
RuneEdge,
IronEdge,
EmeraldEdge,
ThiefKnife,
DoubleScratch,
PriestSaber,
EarnestEdge,
GorgeousLx,
Acutorimass,
TwinLeeks,
TwinJustice,
LeatherGloves,
BrassKnuckles,
Kote,
BearClaws,
FistsofFire,
FistsofWater,
FistsofWind,
FistsoftheEarth,
FistsofLight,
FistsofDark,
Gloves_A,
CatPunch,
DragonClaws,
AnimalPuppets,
IronleafFists,
GolemPunch,
HandofGod,
Caestus,
BazalKatar,
Fenrir,
CheapHoe,
SturdyHoe,
SeasonedHoe,
ShinyHoe,
BlessedHoe,
CheapWaterpot,
TinWaterpot,
LionWaterpot,
RainbowWaterpot,
JoyWaterpot,
CheapSickle,
IronSickle,
QualitySickle,
SuperSickle,
LegendarySickle,
CheapHammer,
IronHammer,
SilverHammer,
GoldenHammer,
PlatinumHammer,
CheapAxe,
ChoppingAxe,
LumberAxe,
MountainAxe,
MiracleAxe,
CheapPole,
BeginnersPole,
SkilledPole,
FamousPole,
SacredPole,
SmallShield,
IronShield,
RoundShield,
PlatinumShield,
HeavyShield,
KnightShield,
RuneShield,
MagicShield,
PrismShield,
ElementShield,
ChaosShield,
TurtleShield,
BoneShield,
KiteShield,
MagicalShield,
MonkeyPlush,
Umbrella,
MagicPlantShield,
AquamarineRing,
AmethystRing,
EmeraldRing,
SapphireRing,
DiamondRing,
RubyRing,
HappyRing,
CursedRing,
FireRing,
WindRing,
WaterRing,
EarthRing,
SilverRing,
GoldRing,
PlatinumRing,
CriticalRing,
SilentRing,
ParalysisRing,
PoisonRing,
MagicRing,
CheapBracelet,
BronzeBracelet,
SilverBracelet,
GoldBracelet,
PlatinumBracelet,
AquamarineBrooch,
AmethystBrooch,
EmeraldBrooch,
SapphireBrooch,
DiamondBrooch,
RubyBrooch,
SilverPendant,
HeartPendant,
StarPendant,
SunPendant,
FieldPendant,
DewPendant,
EarthPendant,
HolyAmulet,
Charm,
LeatherBelt,
LuckyStrike,
Talisman,
ChampBelt,
Gloves_B,
WorkGloves,
Badge,
PowerGloves,
MagicCharm,
ShieldRing,
Rosary,
CourageBadge,
HerosProof,
ProofofWisdom,
HandKnitScarf,
FluffyScarf,
ArtofAttack,
ArtofDefense,
ArtofMagic,
Earrings,
WitchEarrings,
MagicEarrings,
VentisCharmA,
VentisCharmB,
AnettesNecklace,
ThrowingRing,
StayUpRing,
StrangePendant,
DolphinBrooch,
EngagementRing,
SilverHairpin,
GoldHairpin,
FancyHat,
Headband,
FeatheredHat,
BrandGlasses,
Spectacles,
IntelligentGlasses,
StrawHat,
FireproofHood,
CuteKnitting,
BlackRibbon,
OrangeRibbon,
RedRibbon,
YellowRibbon,
BlueRibbon,
GreenRibbon,
PurpleRibbon,
IndigoRibbon,
WhiteRibbon,
TurnipHeadgear,
PumpkinHeadgear,
SpringHeaddress,
SummerHeaddress,
AutumnHeaddress,
WinterHeaddress,
LolitaHeaddress,
Headdress,
CatEars,
Crown,
FourSeasons,
SilkHat,
FeatherBoots,
HeavyBoots,
LeatherBoots,
KnightBoots,
SnowBoots,
IceSkates,
PiyoSandals,
StepInBoots,
GhostBoots,
IronGeta,
StriderBoots,
SecretShoes,
WetBoots,
SneakingBoots,
FastStepBoots,
WaterShoes,
RocketWing,
SilverBoots,
GoldBoots,
BoneBoots,
FairyBoots,
FreeFarmingShoes,
Shirt,
Vest,
WoolyShirt,
MercenarysCloak,
Mail,
CottonCloth,
ChainMail,
ScaleVest,
Protector,
WindCloak,
SparklingShirt,
PlatinumMail,
LamellarVest,
ElvishCloak,
PowerProtector,
DragonCloak,
RuneVest,
RoyalGarter,
FourDragonsVest,
Brush,
Clippers,
MagnifyingGlass,
TurnipSeeds,
PotatoSeeds,
CucumberSeeds,
StrawberrySeeds,
CabbageSeeds,
MoondropSeeds,
ToyherbSeeds,
TomatoSeeds,
CornSeeds,
OnionSeeds,
PumpkinSeeds,
PineappleSeeds,
PinkCatSeeds,
EggplantSeeds,
CarrotSeeds,
YamSeeds,
SpinachSeeds,
GreenPepperSeeds,
CharmBlueSeeds,
FodderSeeds,
CherryGrassSeeds,
LampGrassSeeds,
BlueCrystalSeeds,
EmeryFlowerSeeds,
IronleafSeeds,
CloverSeeds,
FireflowerSeeds,
GreenCrystalSeeds,
NoelGrassSeeds,
AutumnGrassSeeds,
PomPomGrassSeeds,
RedCrystalSeeds,
WhiteCrystalSeeds,
PinkTurnipSeeds,
RadishSeeds,
LeekSeeds,
BokChoySeeds,
GoldCabbageSeeds,
GoldPumpkinSeeds,
GoldPotatoSeeds,
GoldTurnipSeeds,
GoldMelonSeeds,
HotHotSeeds,
AppleTreeSeeds,
OrangeTreeSeed,
GrapeTreeSeed,
ShiningSeed,
DungeonSeed,
SwordSeed,
ShieldSeed,
WettablePowder,
Greenifier,
GreenifierPlus,
FormulaA,
FormulaB,
FormulaC,
NoRotAlpha,
NoRotBeta,
Giantizer,
Minimizer,
Fodder,
Fur_S,
Fur_M,
Fur_L,
Yarn,
ScrapMetal,
Iron,
Bronze,
Silver,
Gold,
Platinum,
Orichalcum,
Diamond,
Ruby,
Emerald,
Sapphire,
Amethyst,
Aquamarine,
CheapCloth,
QualityCloth,
SilkCloth,
Arrowhead,
WarriorsProof,
Glue,
OldBandage,
Gunpowder,
EarthCrystal,
DevilHorn,
DevilBlood,
MagicPowder,
MagicCrystal,
ShoulderPiece,
GiantsNail,
GiantsGloves,
HammerPiece,
InsectCarapace,
InsectJaw,
SpidersThread,
PrettyThread,
PrettyCarapace,
RigidHorn,
ScorpionTail,
ScorpionPincer,
PantherClaw,
DragonFang,
WolfFang,
QualityFur,
BullsHorn,
BirdsFeather,
WindCrystal,
Fur,
Root,
Spore,
PoisonPowder,
PlantStem,
StrongVine,
FishFossil,
WaterCrystal,
TurtleShell,
FireCrystal,
GhostHood,
Skull,
BrokenHilt,
BrokenBox,
FairyDust,
SmallCrystal,
WoolyFurball,
LightCrystal,
DarkCrystal,
LoveCrystal,
RaccoonLeaf,
DragonBones,
RedLionFur,
BlueLionFur,
BrokenIceWall,
Ammonite,
IcyNose,
ChestHair,
ChimeraTail,
GrimoireScale,
LegendaryScale,
DragonFin,
MovingBranch,
ElectroCrystal,
MelodyBottle,
GolemTablet,
EarthwyrmScale,
FirewyrmScale,
AmbrosiasThorns,
LightningMane,
CursedDoll,
PuppetryStrings,
LeftRockShard,
RightRockShard,
CrystalSkull,
ThroneoftheEmpire,
WindDragonTooth,
RuneSphereShard,
RafflesiaPetal,
MTGUPlate,
CheapPropeller,
QualityPropeller,
RustyScrew,
ShinyScrew,
PalmClaw,
MalmClaw,
BigCrystal,
RuneCrystal,
GreenCore,
RedCore,
YellowCore,
BlueCore,
WaterDragonAsh,
FireDragonAsh,
EarthDragonAsh,
HolySpore,
WhiteStone,
InvisibleStone,
ShadeStone,
DoubleSteel,
TenFoldSteel,
RoundStone,
GlittaAugite,
LightOre,
ScrapMetalPlus,
Stick,
QualityPuffyFur,
YellowDown,
PenguinDown,
IvoryTusk,
UnbrokenIvoryTusk,
TinyGolemStone,
ParalysisPoison,
BlackBirdFeather,
Vine,
InsectHorn,
MysteriousPowder,
WetScale,
Magic,
GoldWolfFang,
BlueGiantsGlove,
ThickStick,
MagicClaw,
GlisteningBlade,
FairyElixir,
GreatHammerShard,
GolemStone,
BlackTortoiseShell,
ThunderbirdFeather,
BigGiantsNail,
YellowFeather,
QualityWornCloth,
PiratesArmor,
BladeShard,
ProofofRank,
TurnipsMiracle,
DragonScale,
GolemSpiritStone,
AncientOrcCloth,
QueensJaw,
PoisonKing,
DangerousScissors,
ChimerasClaw,
TabletofTruth,
BigBirdsComb,
BattleTurnip,
BlackScale,
BlueScale,
GlitterScale,
CrimsonScale,
LoveScale,
DragonicStone,
MasuTrout,
Squid,
Taimen,
Sardine,
Char,
Chub,
GlitterSnapper,
Skipjack,
Turbot,
Gibelio,
Salmon,
Mackerel,
Needlefish,
Pike,
Sunsquid,
Shrimp,
Snapper,
ThrobbySnapper,
RainbowTrout,
Flounder,
Blowfish,
Yellowtail,
CrucianCarp,
Tuna,
Girella,
FallFlounder,
CherrySalmon,
LampSquid,
Lobster,
PondSmelt,
SandFlounder,
Rockfish,
Can,
Boot,
RareCan,
Rock,
Branch,
Lumber,
MaterialStone,
Escape_S,
Fireball_S,
BigFire_S,
Explosion_S,
WaterLaser_S,
ParallelLaser_S,
DeltaLaser_S,
ScrewRock_S,
EarthSpike_S,
AvengerRock_S,
SonicWind_S,
DoubleSonic_S,
PenetrateSonic_S,
LightBarrier_S,
Shine_S,
Prism_S,
DarkBall_S,
DarkSnake_S,
Darkness_S,
Cure_S,
CureAll_S,
MasterCure_S,
Medipoison_S,
Mediparalyze_S,
Mediseal_S,
GreetingSpell_S,
PowerWave_S,
DashSlash_S,
RushAttack_S,
RoundBreak_S,
MindThrust_S,
Gust_S,
Storm_S,
Blitz_S,
TwinAttack_S,
RailStrike_S,
WindSlash_S,
FlashStrike_S,
NaiveBlade_S,
SteelHeart_S,
DeltaStrike_S,
Hurricane_S,
ReaperSlash_S,
Millionstrike_S,
AxelDisaster_S,
StardustUpper_S,
TornadoSwing_S,
GrandImpact_S,
GigaSwing_S,
UpperCut_S,
DoubleKick_S,
StraightPunch_S,
NekoDamashi_S,
RushPunch_S,
Cyclone_S,
RapidMove_S,
BonusConcerto_S,
StrikingMarch_S,
IronWaltz_S,
Minerals,
Liquids,
ClawsandFangs,
SticksandStems,
ClothsandSkins,
Furs,
Strings,
Shards,
PowdersandSpores,
Scales,
ShellsandBones,
Stones,
Turnip_B,
Crystals,
Jewels,
Feathers,
Jam,
Curry,
Squid_B,
BattleTurnip_B,
GoldBattleTurnip,
Bullet,
GoldenBullet,
CherryTurnip,
DisgustingFood
} ITEMID;
typedef enum <short> {
Escape,
Fireball,
BigFire,
Explosion,
WaterLaser,
ParallelLaser,
DeltaLaser,
ScrewRock,
EarthSpike,
AvengerRock,
SonicWind,
DoubleSonic,
PenetrateSonic,
LightBarrier,
Shine,
Prism,
DarkBall,
DarkSnake,
Darkness,
Cure,
CureAll,
MasterCure,
Medipoison,
Mediparalyze,
Mediseal,
GreetingSpell,
PowerWave,
DashSlash,
RushAttack,
RoundBreak,
MindThrust,
Gust,
Storm,
Blitz,
TwinAttack,
RailStrike,
WindSlash,
FlashStrike,
NaiveBlade,
SteelHeart,
DeltaStrike,
Hurricane,
ReaperSlash,
Millionstrike,
AxelDisaster,
StardustUpper,
TornadoSwing,
GrandImpact,
GigaSwing,
UpperCut,
DoubleKick,
StraightPunch,
NekoDamashi,
RushPunch,
Cyclone,
RapidMove,
BonusConcerto,
StrikingMarch,
IronWaltz
} SPELLID;
typedef enum <ubyte> {
Nothing_C,
Stone_C,
Rock_C,
Branch_C,
TreeStump_C,
BrokenStump_C,
PoisonSwamp_C,
EllieLeaves_C,
MedicinalHerb_C,
AntidotalHerb_C,
BlackGrass_C,
OrangeGrass_C,
RedGrass_C,
YellowGrass_C,
BlueGrass_C,
GreenGrass_C,
PurpeGrass_C,
IndigoGrass_C,
WhiteGrass_C,
Weed_C,
WitheredGrass_C,
BambooSprout_C,
ClayStone_C,
RuneFlower_C,
RuneCrystal_C,
AyngondaiaLawn_C,
Mineral_Scrap_C,
Mineral_Iron_C,
MineralC_C,
MineralD_C,
MineralE_C,
MineralF_C,
MineralG_C,
MineralH_C,
MineralI_C,
MineralJ_C,
MineralK_C,
MineralL_C,
Strawberry_C,
Cabbage_C,
PinkTurnip_C,
Onion_C,
Toyherb_C,
MoondropFlower_C,
CherryGrass_C,
LampGrass_C,
EmeryFlower_C,
BlueCrystal_C,
GoldenCabbage_C,
PinkMelon_C,
Pumpkin_C,
Cucumber_C,
Corn_C,
Tomato_C,
Eggplant_C,
Pineapple_C,
PinkCat_C,
Ironleaf_C,
FourLeafClover_C,
Fireflower_C,
GreenCrystal_C,
GoldenPumpkin_C,
Yam_C,
Potato_C,
Carrot_C,
GreenPepper_C,
Spinach_C,
CharmBlue_C,
AutumnGrass_C,
PomPomGrass_C,
RedCrystal_C,
GoldenPotato_C,
Turnip_C,
Radish_C,
Leek_C,
BokChoy_C,
NoelGrass_C,
WhiteCrystal_C,
GoldenTurnip_C,
HotHotFruit_C,
Fodder_C,
AppleTree_C,
OrangeTree_C,
GrapeTree_C,
TwinkleTree_C,
DungeonFlower_C,
SwordFlower_C,
ShieldFlower_C,
TilledEarth_C,
SultanStrawberry_C,
KingCabbage_C,
PinkTurnipB_C,
UltraOnion_C,
UltraToyherb_C,
GreatMoondropFlower_C,
KingCherryGrass_C,
KaiserLampGrass_C,
GreatEmeryFlower_C,
BigBlueCrystal_C,
KingGoldCabbage_C,
ConquerorMelon_C,
DoomPumpkin_C,
KaiserCucumber_C,
GigantCorn_C,
TitanTomato_C,
EmperorEggplant_C,
KingPineapple_C,
KingPinkCat_C,
UltraIronleaf_C,
GiantFourLeafClover_C,
BigFireflower_C,
BigGreenCrystal_C,
GoldenDoomPumpkin_C,
LordlyYam_C,
PrincelyPotato_C,
RoyalCarrot_C,
GreenPepperRex_C,
SovereignSpinach_C,
GreatCharmBlue_C,
GreatAutumnGrass_C,
KingPomPomGrass_C,
BigRedCrystal_C,
GoldenPrincelyPotato_C,
TyrantTurnip_C,
NobleRadish_C,
LegendaryLeek_C,
BossBokChoy_C,
LargeNoelGrass_C,
BigWhiteCrystal_C,
GoldenTyrantTurnip_C,
GiantHotHotFruit_C,
FodderB_C,
LargeAppleTree_C,
LargeOrangeTree_C,
LargeGrapeTree_C,
LargeTwinkleTree_C,
DungeonFlowerB_C,
SwordFlowerB_C,
ShieldFlowerB_C,
} CROPID;
typedef enum <ushort> {
None_000,
Table_292 = 292,
Table_293,
Table_294,
Chair_295,
Chair_296,
PommePommeToy_297,
WoolyToy_298,
ChipsqueekToy_299,
DuckToy_300,
WolfToy_301,
RuneSaur_302,
SpringPottedPlant_303,
SummerPottedPlant_304,
AutumnPottedPlant_305,
WinterPottedPlant_306,
Cactus_307,
CuteStatue_308,
ColumnStatue_309,
Snowman_310,
RainbowArt_311,
Barrel_312,
Brazier_313,
LargeAnchor_314,
FoldingScreen_315,
RollingBall_316,
RollingBall_317,
RollingBall_318,
RollingBall_319,
BouncingBall_320,
BouncingBall_321,
BouncingBall_322,
BouncingBall_323,
VentisCharm_324,
WeaponBox_325,
Dummy_326,
Bed_327,
DoubleBed_328,
Bird_329,
Bird_330,
Bird_331,
Bird_332,
Sign_333,
Sign_334,
Bookshelf_335,
Butterfly_336,
Butterfly_337,
Butterfly_338,
Butterfly_339,
Calendar_340,
Closet_341,
FertilizerBin_342,
CookingTable_343,
Knife_344,
FryingPan_345,
Pot_346,
Oven_347,
Steamer_348,
Mixer_349,
ChemistrySet_350,
Forge_351,
CraftingTable_352,
Statue_353,
Statue_354,
Statue_355,
Statue_356,
Statue_357,
Statue_358,
Statue_359,
Statue_360,
Diary_361,
Dice_362,
Sign_363,
Sign_364,
FarmToolBox_365,
Fridge_366,
Fridge_367,
Device_368,
WingFin_369,
SmallFodderBin_370,
BitingGrass_371,
LumberStoneBox_372,
MusicPlayer_373,
OrderBoard_374,
BigFodderBin_375,
Mailbox_376,
Fence_377,
Fence_378,
SavePoint_379,
ShopBox_380,
Storage_381,
ShippingBox_382,
Telecommunicator_383,
Can_384,
Can_385,
Warp_386,
Well_387,
FurnitureStore_388,
FashionStore_389,
FishMarket_390,
MagicStore_391,
JewelryStore_392,
AbilityStore_393
} OBJID;
//-----------------------------------
// Define aux structures
typedef struct {
} UNKNWN;
// Mini-scruct for bitflag arrays
typedef struct ( int idx ) {
local int idx = idx;
ubyte flag : 1;
} BFLAG <read=ReadBitflag, write=WriteBitflag>;
// Flags on whether an area was discovered (visible on map)
typedef struct {
struct {
ubyte __000 : 1;
ubyte __001 : 1;
ubyte __002 : 1;
ubyte __003 : 1;
} blank;
struct {
ubyte Farm_004 : 1;
ubyte Farm_005 : 1;
ubyte Farm_006 : 1;
ubyte Farm_007 : 1;
ubyte Field_008 : 1;
ubyte Field_009 : 1;
ubyte Field_010 : 1;
ubyte Field_011 : 1;
ubyte Field_012 : 1;
ubyte Field_013 : 1;
ubyte Field_014 : 1;
ubyte Field_015 : 1;
ubyte Field_016 : 1;
ubyte Field_017 : 1;
ubyte Field_018 : 1;
ubyte Field_019 : 1;
ubyte Field_020 : 1;
ubyte Field_021 : 1;
ubyte Field_022 : 1;
ubyte Field_023 : 1;
} farmAndFields;
struct {
ubyte Selphia_AirshipWay_024 : 1;
ubyte Selphia_AirshipWay_025 : 1;
ubyte Selphia_AirshipWay_026 : 1;
ubyte Selphia_AirshipWay_027 : 1;
ubyte Selphia_HousingArea_028 : 1;
ubyte Selphia_HousingArea_029 : 1;
ubyte Selphia_HousingArea_030 : 1;
ubyte Selphia_HousingArea_031 : 1;
ubyte Selphia_MelodyStreet_032 : 1;
ubyte Selphia_MelodyStreet_033 : 1;
ubyte Selphia_MelodyStreet_034 : 1;
ubyte Selphia_MelodyStreet_035 : 1;
ubyte Selphia_Observatory_036 : 1;
ubyte Selphia_Observatory_037 : 1;
ubyte Selphia_Observatory_038 : 1;
ubyte Selphia_Observatory_039 : 1;
ubyte Selphia_DragonLake_040 : 1;
ubyte Selphia_DragonLake_041 : 1;
ubyte Selphia_DragonLake_042 : 1;
ubyte Selphia_DragonLake_043 : 1;
ubyte SelphiaCastleGate_044 : 1;
ubyte SelphiaCastleGate_045 : 1;
ubyte SelphiaCastleGate_046 : 1;
ubyte SelphiaCastleGate_047 : 1;
ubyte Selphia_TownSquare_048 : 1;
ubyte Selphia_TownSquare_049 : 1;
ubyte Selphia_TownSquare_050 : 1;
ubyte Selphia_TownSquare_051 : 1;
ubyte Selphia_052 : 1;
ubyte Selphia_053 : 1;
ubyte Selphia_054 : 1;
ubyte Selphia_055 : 1;
ubyte Selphia_056 : 1;
ubyte Selphia_057 : 1;
ubyte Selphia_058 : 1;
ubyte Selphia_059 : 1;
ubyte Castle_DragonRoom_060 : 1;
ubyte Castle_DragonRoom_061 : 1;
ubyte Castle_DragonRoom_062 : 1;
ubyte Castle_DragonRoom_063 : 1;
ubyte YourRoom_064 : 1;
ubyte ButlersRoom_065 : 1;
ubyte YourRoom_066 : 1;
ubyte YourRoom_067 : 1;
ubyte YourRoom_068 : 1;
ubyte YourRoom_069 : 1;
ubyte TrophyRoom_070 : 1;
ubyte TrophyRoomB2_071 : 1;
ubyte YourRoom_072 : 1;
ubyte TrophyRoomB3_073 : 1;
ubyte Room_Dummy_074 : 1;
ubyte Room_Dummy_075 : 1;
ubyte Room_Dummy_076 : 1;
} selphia;
struct {
ubyte MonsterBarn_077 : 1;
ubyte MonsterBarn_078 : 1;
ubyte MonsterBarn_079 : 1;
ubyte MonsterBarn_080 : 1;
ubyte MonsterBarn_081 : 1;
ubyte MonsterBarn_082 : 1;
ubyte MonsterBarn_083 : 1;
ubyte MonsterBarn_084 : 1;
ubyte MonsterBarn_085 : 1;
ubyte MonsterBarn_086 : 1;
ubyte MonsterBarn_087 : 1;
ubyte MonsterBarn_088 : 1;
ubyte MonsterBarn_089 : 1;
ubyte MonsterBarn_090 : 1;
ubyte MonsterBarn_091 : 1;
ubyte MonsterBarn_092 : 1;
ubyte MonsterBarn_093 : 1;
ubyte MonsterBarn_094 : 1;
ubyte MonsterBarn_095 : 1;
ubyte MonsterBarn_096 : 1;
ubyte MonsterBarn_097 : 1;
ubyte MonsterBarn_098 : 1;
ubyte MonsterBarn_099 : 1;
ubyte MonsterBarn_100 : 1;
ubyte MonsterBarn_101 : 1;
ubyte MonsterBarn_102 : 1;
ubyte MonsterBarn_103 : 1;
ubyte MonsterBarn_104 : 1;
ubyte MonsterBarn_105 : 1;
ubyte MonsterBarn_106 : 1;
ubyte MonsterBarn_107 : 1;
ubyte MonsterBarn_108 : 1;
ubyte MonsterBarn_109 : 1;
ubyte MonsterBarn_110 : 1;
ubyte MonsterBarn_111 : 1;
ubyte MonsterBarn_112 : 1;
ubyte MonsterBarn_113 : 1;
ubyte MonsterBarn_114 : 1;
ubyte MonsterBarn_115 : 1;
ubyte MonsterBarn_116 : 1;
ubyte MonsterBarn_117 : 1;
ubyte MonsterBarn_118 : 1;
ubyte MonsterBarn_119 : 1;
ubyte MonsterBarn_120 : 1;
ubyte MonsterBarn_121 : 1;
ubyte MonsterBarn_122 : 1;
ubyte MonsterBarn_123 : 1;
ubyte MonsterBarn_124 : 1;
ubyte MonsterBarn_125 : 1;
ubyte MonsterBarn_126 : 1;
} monsterBarns;
struct {
ubyte SincerityGeneralStore_127 : 1;
ubyte SincerityGeneral2F_128 : 1;
ubyte Blacksmith_129 : 1;
ubyte PorcolinesKitchen_130 : 1;
ubyte PorcolinesKitchen2F_131 : 1;
ubyte TinyBandageClinic_132 : 1;
ubyte TinyBandageClinic2F_133 : 1;
ubyte Carnations_134 : 1;
ubyte Carnations2F_135 : 1;
ubyte BellHotelLobby_136 : 1;
ubyte BellHotelResidence_137 : 1;
ubyte BellHotelGuestRoom_138 : 1;
ubyte BellBath_139 : 1;
ubyte MargaretsHouse_140 : 1;
ubyte SainteCoquilleManor_141 : 1;
ubyte SteCoquilleManor2F_142 : 1;
ubyte FortesHouse_143 : 1;
ubyte House_144 : 1;
ubyte House_145 : 1;
ubyte House_146 : 1;
ubyte House_147 : 1;
ubyte __148 : 1;
ubyte House_149 : 1;
ubyte House_150 : 1;
ubyte House_151 : 1;
ubyte House_152 : 1;
ubyte House_153 : 1;
ubyte House_154 : 1;
ubyte House_155 : 1;
ubyte House_156 : 1;
ubyte House_157 : 1;
ubyte House_158 : 1;
ubyte Airship_159 : 1;
ubyte Airship_160 : 1;
} selphiaHouses;
struct {
ubyte SelphiaPlain_161 : 1;
ubyte SelphiaPlain_162 : 1;
ubyte SelphiaPlain_163 : 1;
ubyte SelphiaPlain_164 : 1;
ubyte SelphiaPlain_165 : 1;
ubyte SelphiaPlain_166 : 1;
ubyte SelphiaPlain_167 : 1;
ubyte SelphiaPlainMushRoad_168 : 1;
ubyte SelphiaPlainMushSpan_169 : 1;
ubyte SelphiaPlainEast_170 : 1;
ubyte SelphiaPlainEast_171 : 1;
ubyte WaterRuins_172 : 1;
ubyte SelphiaPlain_173 : 1;
ubyte SelphiaPlainMushRoad_174 : 1;
ubyte SelphiaPlainMushRoad_175 : 1;
ubyte SelphiaPlainMushRoad_176 : 1;
ubyte SelphiaPlainMushRoad_177 : 1;
ubyte SelphiaPlain_178 : 1;
ubyte Cliff_179 : 1;
ubyte SelphiaPlainWest_180 : 1;
ubyte SelphiaPlainWest_181 : 1;
ubyte SelphiaPlainWest_182 : 1;
ubyte SelphiaPlainMushRoad_183 : 1;
ubyte SelphiaPlainMushRoad_184 : 1;
ubyte SelphiaPlainWest_185 : 1;
ubyte SelphiaPlainWest_186 : 1;
ubyte TwinRocks_187 : 1;
ubyte SelphiaPlainWest_188 : 1;
ubyte LeonKarnak_189 : 1;
ubyte SelphiaPlainWest_190 : 1;
ubyte CedarTree_191 : 1;
ubyte SelphiaPlainEast_192 : 1;
ubyte SelphiaPlainEast_193 : 1;
ubyte SelphiaPlainEast_194 : 1;
ubyte SercerezoHill_195 : 1;
ubyte DailyRoad_196 : 1;
ubyte SelphiaPlainEast_197 : 1;
ubyte IdraCave_198 : 1;
ubyte SercerezoHill_199 : 1;
ubyte SercerezoHill_200 : 1;
ubyte SercerezoHill_201 : 1;
ubyte SercerezoHill_202 : 1;
ubyte SelphiaPlain_203 : 1;
ubyte SelphiaPlain_204 : 1;
ubyte AutumnBridge_205 : 1;
ubyte AutumnBridge_206 : 1;
ubyte AutumnRoad_207 : 1;
ubyte AutumnRoad_208 : 1;
ubyte AutumnRoad_209 : 1;
ubyte DeliriumLavaRuins_210 : 1;
ubyte AutumnRoad_211 : 1;
ubyte AutumnRoad_212 : 1;
ubyte AutumnRoad_213 : 1;
ubyte AutumnRoad_214 : 1;
ubyte AutumnRoad_215 : 1;
ubyte AutumnRoad_216 : 1;
ubyte AutumnRoad_217 : 1;
ubyte AutumnRiver_218 : 1;
ubyte AutumnRoad_219 : 1;
ubyte AutumnRoad_220 : 1;
ubyte AutumnRoad_221 : 1;
ubyte AutumnRoad_222 : 1;
ubyte AutumnRoad_223 : 1;
ubyte AutumnRoad_224 : 1;
ubyte AutumnRoad_225 : 1;
ubyte MayaRoadEntrance_226 : 1;
ubyte SelphiaPlainEast_227 : 1;
ubyte CerezoBridge_228 : 1;
ubyte CerezoBridge_229 : 1;
ubyte SercerezoHill_230 : 1;
ubyte CluckCluckNest_231 : 1;
ubyte SilverArch_232 : 1;
ubyte SilverArch_233 : 1;
ubyte SilverLake_234 : 1;
ubyte WinterSpring_235 : 1;
ubyte AutumnSpring_236 : 1;
ubyte SelphiaPlainEast_237 : 1;
ubyte SummerSpring_238 : 1;
ubyte SpringSpring_239 : 1;
ubyte BuriedCave_240 : 1;
ubyte KeenoLake_241 : 1;
ubyte SelphiaPlain_242 : 1;
ubyte SelphiaPlain_243 : 1;
ubyte SilverLake_244 : 1;
ubyte SilverLake_245 : 1;
ubyte SilverLake_246 : 1;
ubyte SercerezoHill_247 : 1;
ubyte SercerezoHill_248 : 1;
ubyte SercerezoLake_249 : 1;
ubyte SercerezoHill_250 : 1;
ubyte DemonsDen_251 : 1;
ubyte SercerezoHill_252 : 1;
ubyte SercerezoHillBridge_253 : 1;
ubyte SercerezoHill_254 : 1;
ubyte SercerezoHill_255 : 1;
ubyte AutumnBridge_256 : 1;
ubyte RevivalCave_257 : 1;
ubyte MayaBridge_258 : 1;
ubyte SercerezoHill_259 : 1;
ubyte Cave_260 : 1;
ubyte SpringField_261 : 1;
ubyte SummerField_262 : 1;
ubyte AutumnField_263 : 1;
ubyte WinterField_264 : 1;
ubyte SelphiaPlain_265 : 1;
ubyte SelphiaPlain_266 : 1;
ubyte SelphiaPlain_267 : 1;
ubyte SelphiaPlain_268 : 1;
ubyte SelphiaPlain_269 : 1;
ubyte SelphiaPlain_270 : 1;
ubyte YokmirForest_271 : 1;
ubyte YokmirForestDepths_272 : 1;
ubyte YokmirForest_273 : 1;
ubyte YokmirForest_274 : 1;
ubyte YokmirForest_275 : 1;
ubyte YokmirForest_276 : 1;
ubyte YokmirForest_277 : 1;
ubyte YokmirForest_278 : 1;
ubyte Forest_Dummy_279 : 1;
ubyte Forest_Dummy_280 : 1;
ubyte Forest_Dummy_281 : 1;
ubyte Forest_Dummy_282 : 1;
ubyte Forest_Dummy_283 : 1;
} overworld;
struct {
ubyte WaterRuins_284 : 1;
ubyte WaterRuinsDepths_285 : 1;
ubyte WaterRuins_286 : 1;
ubyte WaterRuins_287 : 1;
ubyte WaterRuins_288 : 1;
ubyte WaterRuins_289 : 1;
ubyte WaterRuins_290 : 1;
ubyte WaterRuins_291 : 1;
ubyte WaterRuins_292 : 1;
ubyte WaterRuins_293 : 1;
ubyte WaterRuins_294 : 1;
ubyte WaterRuins_295 : 1;
ubyte WaterRuins_296 : 1;
ubyte WaterRuins_297 : 1;
ubyte WaterRuins_298 : 1;
ubyte WaterRuins_299 : 1;
ubyte WaterRuins_300 : 1;
} waterRuins;
ubyte Temple_Dummy_301 : 1;
ubyte Temple_Dummy_302 : 1;
struct {
ubyte ObsidianMansion_303 : 1;
ubyte ObsidianMnsnTheatre_304 : 1;
ubyte ObsidianMnsnEntrance_305 : 1;
ubyte ObsidianMansion_306 : 1;
ubyte ObsidianMansion_307 : 1;
ubyte ObsidianMansion_308 : 1;
ubyte ObsidianMansion_309 : 1;
ubyte ObsidianMansion_310 : 1;
ubyte ObsidianMansion_311 : 1;
ubyte ObsidianMansion_312 : 1;
ubyte ObsidianMansion_313 : 1;
ubyte ObsidianMansion_314 : 1;
ubyte ObsidianMansion_315 : 1;
ubyte ObsidianMansion_316 : 1;
ubyte ObsidianMansion_317 : 1;
ubyte ObsidianMansion_318 : 1;
ubyte ObsidianMansion_319 : 1;
ubyte ObsidianMansion_320 : 1;
ubyte ObsidianMansion_321 : 1;
} obsidianMansion;
ubyte Ruin_Dummy_322 : 1;
ubyte Ruin_Dummy_323 : 1;
struct {
ubyte LeonKarnak_324 : 1;
ubyte LeonKarnakDepths_325 : 1;
ubyte LeonKarnak_326 : 1;
ubyte LeonKarnak_327 : 1;
ubyte LeonKarnak_328 : 1;
ubyte LeonKarnak_329 : 1;
ubyte LeonKarnak_330 : 1;
ubyte LeonKarnak_331 : 1;
ubyte LeonKarnak_332 : 1;
ubyte LeonKarnak_333 : 1;
ubyte LeonKarnak_334 : 1;
ubyte LeonKarnak_335 : 1;
ubyte LeonKarnak_336 : 1;
ubyte LeonKarnak_337 : 1;
ubyte LeonKarnak_338 : 1;
ubyte LeonKarnak_339 : 1;
ubyte LeonKarnak_340 : 1;
ubyte LeonKarnak_341 : 1;
ubyte LeonKarnak_342 : 1;
ubyte LeonKarnak_343 : 1;
ubyte LeonKarnak_344 : 1;
ubyte LeonKarnak_345 : 1;
ubyte LeonKarnak_346 : 1;
} leonKarnak;
struct {
ubyte FloatingEmpire_347 : 1;
ubyte FloatingEmpire_348 : 1;
ubyte FloatingEmpireFront_349 : 1;
ubyte FloatingEmpire_350 : 1;
ubyte FloatingEmpire_351 : 1;
ubyte FloatingEmpireSouth_352 : 1;
ubyte FloatingEmpireSouth_353 : 1;
ubyte FloatingEmpireSouth_354 : 1;
ubyte FloatingEmpireSouth_355 : 1;
ubyte FloatingEmpireSouth_356 : 1;
ubyte FloatingEmpireSouth_357 : 1;
ubyte FloatingEmpireSouth_358 : 1;
ubyte FloatingEmpireSouth_359 : 1;
ubyte FloatingEmpireSouth_360 : 1;
ubyte FloatingEmpireSouth_361 : 1;
ubyte FloatingEmpireSouth_362 : 1;
ubyte FloatingEmpireSouth_363 : 1;
ubyte FloatingEmpireSouth_364 : 1;
ubyte FloatingEmpireSouth_365 : 1;
ubyte FloatingEmpireSouth_366 : 1;
ubyte FloatingEmpireSouth_367 : 1;
ubyte FloatingEmpireSouth_368 : 1;
ubyte FloatingEmpireSouth_369 : 1;
ubyte FloatingEmpireSouth_370 : 1;
ubyte FloatingEmpireSouth_371 : 1;
ubyte FloatingEmpireSouth_372 : 1;
ubyte FloatingEmpireSouth_373 : 1;
ubyte FloatingEmpireSouth_374 : 1;
ubyte FloatingEmpireSouth_375 : 1;
ubyte FloatingEmpireSouth_376 : 1;
ubyte FloatingEmpireWest_377 : 1;
ubyte FloatingEmpireWest_378 : 1;
ubyte FloatingEmpireWest_379 : 1;
ubyte FloatingEmpireWest_380 : 1;
ubyte FloatingEmpireWest_381 : 1;
ubyte FloatingEmpireWest_382 : 1;
ubyte FloatingEmpireWest_383 : 1;
ubyte FloatingEmpireWest_384 : 1;
ubyte FloatingEmpireWest_385 : 1;
ubyte FloatingEmpireWest_386 : 1;
ubyte FloatingEmpireWest_387 : 1;
ubyte FloatingEmpireWest_388 : 1;
ubyte FloatingEmpireWest_389 : 1;
ubyte FloatingEmpireWest_390 : 1;
ubyte FloatingEmpireWest_391 : 1;
ubyte FloatingEmpireWest_392 : 1;
ubyte FloatingEmpireWest_393 : 1;
ubyte FloatingEmpireWest_394 : 1;
ubyte FloatingEmpireWest_395 : 1;
ubyte FloatingEmpireWest_396 : 1;
ubyte FloatingEmpireWest_397 : 1;
ubyte FloatingEmpireWest_398 : 1;
ubyte FloatingEmpireWest_399 : 1;
ubyte FloatingEmpireWest_400 : 1;
ubyte FloatingEmpireWest_401 : 1;
ubyte FloatingEmpireWest_402 : 1;
ubyte FloatingEmpireWest_403 : 1;
ubyte FloatingEmpireWest_404 : 1;
ubyte FloatingEmpireWest_405 : 1;
ubyte FloatingEmpireWest_406 : 1;
ubyte FloatingEmpireWest_407 : 1;
ubyte FloatingEmpireWest_408 : 1;
ubyte FloatingEmpireEast_409 : 1;
ubyte FloatingEmpireEast_410 : 1;
ubyte FloatingEmpireEast_411 : 1;
ubyte FloatingEmpireEast_412 : 1;
ubyte FloatingEmpireEast_413 : 1;
ubyte FloatingEmpireEast_414 : 1;
ubyte FloatingEmpireEast_415 : 1;
ubyte FloatingEmpireEast_416 : 1;
ubyte FloatingEmpireEast_417 : 1;
ubyte FloatingEmpireEast_418 : 1;
ubyte FloatingEmpireEast_419 : 1;
ubyte FloatingEmpireEast_420 : 1;
ubyte FloatingEmpireEast_421 : 1;
ubyte FloatingEmpireEast_422 : 1;
ubyte FloatingEmpireEast_423 : 1;
ubyte FloatingEmpireEast_424 : 1;
ubyte FloatingEmpireEast_425 : 1;
ubyte FloatingEmpireEast_426 : 1;
ubyte FloatingEmpireEast_427 : 1;
ubyte FloatingEmpireEast_428 : 1;
ubyte FloatingEmpireEast_429 : 1;
ubyte FloatingEmpireEast_430 : 1;
ubyte FloatingEmpireEast_431 : 1;
ubyte FloatingEmpireEast_432 : 1;
ubyte FloatingEmpireEast_433 : 1;
ubyte FloatingEmpireEast_434 : 1;
ubyte FloatingEmpireEast_435 : 1;
ubyte FloatingEmpireEast_436 : 1;
ubyte FloatingEmpireEast_437 : 1;
ubyte FloatingEmpireEast_438 : 1;
ubyte FloatingEmpireSouth_439 : 1;
ubyte FloatingEmpire_440 : 1;
ubyte FloatingEmpire_441 : 1;
} floatingEmpire;
ubyte WorldofFields_442 : 1;
struct {
ubyte SharanceMaze_443 : 1;
ubyte SharanceMaze_444 : 1;
ubyte SharanceMaze_445 : 1;
ubyte SharanceMaze_446 : 1;
ubyte SharanceMaze_447 : 1;
ubyte SharanceMaze_448 : 1;
ubyte SharanceMaze_449 : 1;
ubyte SharanceMaze_450 : 1;
ubyte SharanceMaze_451 : 1;
ubyte SharanceMaze_452 : 1;
ubyte SharanceMaze_453 : 1;
} sharance;
struct {
ubyte YokmirCave_454 : 1;
ubyte YokmirCave_455 : 1;
ubyte YokmirCave_456 : 1;
ubyte YokmirCave_457 : 1;
ubyte YokmirCave_458 : 1;
ubyte YokmirCave_459 : 1;
ubyte YokmirCave_460 : 1;
ubyte YokmirCave_461 : 1;
ubyte YokmirCave_462 : 1;
ubyte YokmirCave_463 : 1;
ubyte YokmirCave_464 : 1;
ubyte YokmirCave_465 : 1;
ubyte YokmirCave_466 : 1;
ubyte YokmirCave_467 : 1;
ubyte YokmirCave_468 : 1;
ubyte YokmirCave_469 : 1;
ubyte YokmirCave_470 : 1;
ubyte YokmirCave_471 : 1;
ubyte YokmirCave_472 : 1;
ubyte YokmirCave_473 : 1;
ubyte YokmirCave_474 : 1;
ubyte YokmirCave_475 : 1;
ubyte YokmirCave_476 : 1;
ubyte YokmirCave_477 : 1;
ubyte YokmirCave_478 : 1;
ubyte YokmirCave_479 : 1;
ubyte YokmirCave_480 : 1;
ubyte YokmirCave_481 : 1;
ubyte YokmirCave_482 : 1;
ubyte YokmirCave_483 : 1;
ubyte YokmirCave_484 : 1;
ubyte YokmirCave_485 : 1;
} yokmir;
struct {
ubyte DeliriumLavaRuins_486 : 1;
ubyte DeliriumLavaRuins_487 : 1;
ubyte DeliriumLavaRuins_488 : 1;
ubyte DeliriumLavaRuins_489 : 1;
ubyte DeliriumLavaRuins_490 : 1;
ubyte DeliriumLavaRuins_491 : 1;
ubyte DeliriumLavaRuins_492 : 1;
ubyte DeliriumLavaRuins_493 : 1;
ubyte DeliriumLavaRuins_494 : 1;
ubyte DeliriumLavaRuins_495 : 1;
ubyte DeliriumLavaRuins_496 : 1;
ubyte DeliriumLavaRuins_497 : 1;
ubyte DeliriumLavaRuins_498 : 1;
ubyte DeliriumLavaRuins_499 : 1;
ubyte DeliriumLavaRuins_500 : 1;
ubyte DeliriumLavaRuins_501 : 1;
ubyte DeliriumLavaRuins_502 : 1;
ubyte DeliriumLavaRuins_503 : 1;
ubyte DeliriumLavaRuins_504 : 1;
ubyte DeliriumLavaRuins_505 : 1;
ubyte DeliriumLavaRuins_506 : 1;
ubyte DeliriumLavaRuins_507 : 1;
ubyte DeliriumLavaRuins_508 : 1;
ubyte DeliriumLavaRuins_509 : 1;
ubyte DeliriumLavaRuins_510 : 1;
ubyte DeliriumLavaRuins_511 : 1;
ubyte DeliriumLavaRuins_512 : 1;
ubyte DeliriumLavaRuins_513 : 1;
ubyte DeliriumLavaRuins_514 : 1;
ubyte DeliriumLavaRuins_515 : 1;
ubyte DeliriumLavaRuins_516 : 1;
ubyte DeliriumLavaRuins_517 : 1;
ubyte DeliriumLavaRuins_518 : 1;
ubyte DeliriumLavaRuins_519 : 1;
ubyte DeliriumLavaRuins_520 : 1;
ubyte DeliriumLavaRuins_521 : 1;
ubyte DeliriumLavaRuins_522 : 1;
ubyte DeliriumLavaRuins_523 : 1;
ubyte DeliriumLavaRuins_524 : 1;
ubyte DeliriumLavaRuins_525 : 1;
ubyte DeliriumLavaRuins_526 : 1;
} deliriumLavaRuins;
struct {
ubyte Unknown_527 : 1;
ubyte Unknown_528 : 1;
ubyte Unknown_529 : 1;
ubyte Unknown_530 : 1;
ubyte Unknown_531 : 1;
ubyte Unknown_532 : 1;
ubyte Unknown_533 : 1;
ubyte Unknown_534 : 1;
ubyte Unknown_535 : 1;
ubyte Unknown_536 : 1;
ubyte Unknown_537 : 1;
ubyte Unknown_538 : 1;
ubyte Unknown_539 : 1;
ubyte Unknown_540 : 1;
} unknownPlace;
struct {
ubyte IdraCave_541 : 1;
ubyte IdraCave_542 : 1;
ubyte IdraCave_543 : 1;
ubyte IdraCave_544 : 1;
ubyte IdraCave_545 : 1;
ubyte IdraCave_546 : 1;
ubyte IdraCave_547 : 1;
ubyte IdraCave_548 : 1;
ubyte IdraCave_549 : 1;
ubyte IdraCave_550 : 1;
ubyte IdraCave_551 : 1;
ubyte IdraCaveB1_552 : 1;
ubyte IdraCaveB1_553 : 1;
ubyte IdraCaveB1_554 : 1;
ubyte IdraCaveB1_555 : 1;
ubyte IdraCaveB1_556 : 1;
ubyte IdraCaveB1_557 : 1;
ubyte IdraCaveB1_558 : 1;
ubyte IdraCaveB1_559 : 1;
ubyte IdraCaveB1_560 : 1;
ubyte IdraCaveB1_561 : 1;
ubyte IdraCaveB1_562 : 1;
ubyte IdraCaveB1_563 : 1;
ubyte IdraCaveB1_564 : 1;
ubyte IdraCaveB1_565 : 1;
ubyte IdraCaveB1_566 : 1;
ubyte IdraCaveB1_567 : 1;
ubyte IdraCaveB1_568 : 1;
ubyte IdraCaveB1_569 : 1;
ubyte IdraCaveB1_570 : 1;
ubyte IdraCaveB1_571 : 1;
ubyte IdraCaveB2_572 : 1;
ubyte IdraCaveB2_573 : 1;
ubyte IdraCaveB2_574 : 1;
ubyte IdraCaveB2_575 : 1;
ubyte IdraCaveB2_576 : 1;
ubyte IdraCaveB2_577 : 1;
ubyte IdraCaveB2_578 : 1;
ubyte IdraCaveB2_579 : 1;
ubyte IdraCaveB2_580 : 1;
ubyte IdraCaveB2_581 : 1;
ubyte IdraCaveB2_582 : 1;
ubyte IdraCaveB2_583 : 1;
ubyte IdraCaveB2_584 : 1;
ubyte IdraCaveB2_585 : 1;
ubyte IdraCaveB2_586 : 1;
ubyte IdraCaveB2_587 : 1;
ubyte IdraCaveB2_588 : 1;
ubyte IdraCaveB2_589 : 1;
ubyte IdraCaveB2_590 : 1;
ubyte IdraCaveB2_591 : 1;
ubyte IdraCaveB2_592 : 1;
ubyte IdraCaveB2_593 : 1;
} idraCave;
ubyte ImperialResearchCntr_594 : 1;
struct {
ubyte MayaRoad_595 : 1;
ubyte MayaRoad_596 : 1;
ubyte MayaRoad_597 : 1;
ubyte MayaRoad_598 : 1;
ubyte MayaRoad_599 : 1;
ubyte MayaRoad_600 : 1;
ubyte MayaRoad_601 : 1;
ubyte MayaRoad_602 : 1;
ubyte MayaRoad_603 : 1;
ubyte MayaRoad_604 : 1;
ubyte MayaRoad_605 : 1;
ubyte MayaRoad_606 : 1;
ubyte MayaRoad_607 : 1;
ubyte MayaRoad_608 : 1;
ubyte MayaRoad_609 : 1;
ubyte MayaRoad_610 : 1;
ubyte MayaRoad_611 : 1;
ubyte MayaRoad_612 : 1;
ubyte MayaRoad_613 : 1;
ubyte MayaRoad_614 : 1;
ubyte MayaRoad_615 : 1;
ubyte MayaRoad_616 : 1;
ubyte MayaRoad_617 : 1;
ubyte MayaRoad_618 : 1;
ubyte MayaRoad_619 : 1;
ubyte MayaRoad_620 : 1;
ubyte MayaRoad_621 : 1;
ubyte MayaRoad_622 : 1;
ubyte MayaRoad_623 : 1;
ubyte MayaRoad_624 : 1;
ubyte MayaRoad_625 : 1;
ubyte MayaRoad_626 : 1;
ubyte MayaRoad_627 : 1;
ubyte MayaRoad_628 : 1;
ubyte MayaRoad_629 : 1;
ubyte MayaRoad_630 : 1;
ubyte MayaRoad_631 : 1;
ubyte MayaRoad_632 : 1;
ubyte MayaRoad_633 : 1;
ubyte MayaRoad_634 : 1;
ubyte MayaRoad_635 : 1;
ubyte MayaRoad_636 : 1;
ubyte MayaRoad_637 : 1;
ubyte MayaRoad_638 : 1;
ubyte MayaRoad_639 : 1;
ubyte MayaRoad_640 : 1;
ubyte MayaRoad_641 : 1;
ubyte MayaRoad_642 : 1;
ubyte MayaRoad_643 : 1;
ubyte MayaRoad_644 : 1;
ubyte MayaRoad_645 : 1;
ubyte MayaRoad_646 : 1;
ubyte MayaRoad_647 : 1;
ubyte MayaRoad_648 : 1;
ubyte MayaRoad_649 : 1;
ubyte MayaRoad_650 : 1;
ubyte MayaRoad_651 : 1;
ubyte MayaRoad_652 : 1;
ubyte MayaRoad_653 : 1;
ubyte MayaRoad_654 : 1;
ubyte MayaRoad_655 : 1;
ubyte MayaRoad_656 : 1;
ubyte MayaRoad_657 : 1;
} mayaRoad;
struct {
ubyte SechsTerritory_658 : 1;
ubyte SechsTerritory_659 : 1;
ubyte SechsTerritory_660 : 1;
ubyte SechsTerritory_661 : 1;
ubyte SechsTerritory_662 : 1;
ubyte SechsTerritory_663 : 1;
ubyte SechsTerritory_664 : 1;
ubyte SechsTerritory_665 : 1;
ubyte SechsTerritory_666 : 1;
ubyte SechsTerritory_667 : 1;
ubyte SechsTerritory_668 : 1;
ubyte SechsTerritory_669 : 1;
ubyte SechsTerritory_670 : 1;
ubyte SechsTerritory_671 : 1;
ubyte SechsTerritory_672 : 1;
ubyte SechsTerritory_673 : 1;
ubyte SechsTerritory_674 : 1;
ubyte SechsTerritory_675 : 1;
ubyte SechsTerritory_676 : 1;
ubyte SechsTerritory_677 : 1;
ubyte SechsTerritory_678 : 1;
ubyte SechsTerritory_679 : 1;
ubyte SechsTerritory_680 : 1;
ubyte SechsTerritory_681 : 1;
ubyte SechsTerritory_682 : 1;
ubyte SechsTerritory_683 : 1;
ubyte SechsTerritory_684 : 1;
ubyte SechsTerritory_685 : 1;
ubyte SechsTerritory_686 : 1;
ubyte SechsTerritory_687 : 1;
ubyte SechsTerritory_688 : 1;
ubyte SechsTerritory_689 : 1;
ubyte SechsTerritory_690 : 1;
ubyte SechsTerritory_691 : 1;
ubyte SechsTerritory_692 : 1;
ubyte SechsTerritory_693 : 1;
ubyte SechsTerritory_694 : 1;
ubyte SechsTerritory_695 : 1;
ubyte SechsTerritory_696 : 1;
ubyte SechsTerritory_697 : 1;
ubyte SechsTerritory_698 : 1;
ubyte SechsTerritory_699 : 1;
ubyte SechsTerritory_700 : 1;
ubyte SechsTerritory_701 : 1;
ubyte SechsTerritory_702 : 1;
ubyte SechsTerritory_703 : 1;
ubyte SechsTerritory_704 : 1;
ubyte SechsTerritory_705 : 1;
ubyte SechsTerritory_706 : 1;
ubyte SechsTerritory_707 : 1;
ubyte SechsTerritory_708 : 1;
ubyte SechsTerritory_709 : 1;
ubyte SechsTerritory_710 : 1;
ubyte SechsTerritory_711 : 1;
ubyte SechsTerritory_712 : 1;
ubyte SechsTerritory_713 : 1;
ubyte SechsTerritory_714 : 1;
ubyte SechsTerritory_715 : 1;
ubyte SechsTerritory_716 : 1;
ubyte SechsTerritory_717 : 1;
ubyte SechsTerritory_718 : 1;
ubyte SechsTerritory_719 : 1;
ubyte SechsTerritory_720 : 1;
ubyte SechsTerritory_721 : 1;
ubyte SechsTerritory_722 : 1;
ubyte SechsTerritory_723 : 1;
ubyte SechsTerritory_724 : 1;
ubyte SechsTerritory_725 : 1;
} sechsTerritory;
struct {
ubyte RunePrana_726 : 1;
ubyte RunePrana_727 : 1;
ubyte RunePrana_728 : 1;
ubyte RunePrana_729 : 1;
ubyte RunePrana_730 : 1;
ubyte RunePrana_731 : 1;
ubyte RunePrana_732 : 1;
ubyte RunePrana_733 : 1;
ubyte RunePrana_734 : 1;
ubyte RunePrana_735 : 1;
ubyte RunePrana_736 : 1;
ubyte RunePrana_737 : 1;
ubyte RunePrana_738 : 1;
ubyte RunePrana_739 : 1;
ubyte RunePrana_740 : 1;
ubyte RunePrana_741 : 1;
ubyte RunePrana_742 : 1;
ubyte RunePrana_743 : 1;
ubyte RunePrana_744 : 1;
ubyte RunePrana_745 : 1;
ubyte RunePrana_746 : 1;
ubyte RunePrana_747 : 1;
ubyte RunePrana_748 : 1;
ubyte RunePrana_749 : 1;
ubyte RunePrana_750 : 1;
ubyte RunePrana_751 : 1;
ubyte RunePrana_752 : 1;
ubyte RunePrana_753 : 1;
ubyte RunePrana_754 : 1;
ubyte RunePrana_755 : 1;
ubyte RunePrana_756 : 1;
ubyte RunePrana_757 : 1;
ubyte RunePrana_758 : 1;
ubyte RunePrana_759 : 1;
ubyte RunePrana_760 : 1;
ubyte RunePrana_761 : 1;
ubyte RunePrana_762 : 1;
ubyte RunePrana_763 : 1;
ubyte RunePrana_764 : 1;
ubyte RunePrana_765 : 1;
ubyte RunePrana_766 : 1;
ubyte RunePrana_767 : 1;
ubyte RunePrana_768 : 1;
ubyte RunePrana_769 : 1;
ubyte RunePrana_770 : 1;
ubyte RunePrana_771 : 1;
ubyte RunePrana_772 : 1;
ubyte RunePrana_773 : 1;
ubyte RunePrana_774 : 1;
ubyte RunePrana_775 : 1;
ubyte RunePrana_776 : 1;
ubyte RunePrana_777 : 1;
ubyte RunePrana_778 : 1;
ubyte RunePrana_779 : 1;
ubyte RunePrana_780 : 1;
ubyte RunePrana_781 : 1;
ubyte RunePrana_782 : 1;
ubyte RunePrana_783 : 1;
ubyte RunePrana_784 : 1;
ubyte RunePrana_785 : 1;
ubyte RunePrana_786 : 1;
ubyte RunePrana_787 : 1;
ubyte RunePrana_788 : 1;
ubyte RunePrana_789 : 1;
ubyte RunePrana_790 : 1;
ubyte RunePrana_791 : 1;
ubyte RunePrana_792 : 1;
ubyte RunePrana_793 : 1;
ubyte RunePrana_794 : 1;
ubyte RunePrana_795 : 1;
ubyte RunePrana_796 : 1;
ubyte RunePrana_797 : 1;
ubyte RunePrana_798 : 1;
ubyte RunePrana_799 : 1;
ubyte RunePrana_800 : 1;
ubyte RunePrana_801 : 1;
ubyte RunePrana_802 : 1;
ubyte RunePrana_803 : 1;
ubyte RunePrana_804 : 1;
ubyte RunePrana_805 : 1;
ubyte RunePrana_806 : 1;
ubyte RunePrana_807 : 1;
ubyte RunePrana_808 : 1;
ubyte RunePrana_809 : 1;
ubyte RunePrana_810 : 1;
ubyte RunePrana_811 : 1;
ubyte RunePrana_812 : 1;
ubyte RunePrana_813 : 1;
ubyte RunePrana_814 : 1;
ubyte RunePrana_815 : 1;
ubyte RunePrana_816 : 1;
ubyte RunePrana_817 : 1;
ubyte RunePrana_818 : 1;
ubyte RunePrana_819 : 1;
ubyte RunePrana_820 : 1;
ubyte RunePrana_821 : 1;
ubyte RunePrana_822 : 1;
ubyte RunePrana_823 : 1;
ubyte RunePrana_824 : 1;
ubyte RunePrana_825 : 1;
ubyte RunePrana_826 : 1;
ubyte RunePrana_827 : 1;
ubyte RunePrana_828 : 1;
ubyte RunePrana_829 : 1;
ubyte RunePrana_830 : 1;
ubyte RunePrana_831 : 1;
ubyte RunePrana_832 : 1;
ubyte RunePrana_833 : 1;
ubyte RunePrana_834 : 1;
ubyte RunePrana_835 : 1;
ubyte RunePrana_836 : 1;
ubyte RunePrana_837 : 1;
ubyte RunePrana_838 : 1;
ubyte RunePrana_839 : 1;
ubyte RunePrana_840 : 1;
ubyte RunePrana_841 : 1;
ubyte RunePrana_842 : 1;
ubyte RunePrana_843 : 1;
ubyte RunePrana_844 : 1;
ubyte RunePrana_845 : 1;
ubyte RunePrana_846 : 1;
ubyte RunePrana_847 : 1;
ubyte RunePrana_848 : 1;
ubyte RunePrana_849 : 1;
ubyte RunePrana_850 : 1;
ubyte RunePrana_851 : 1;
ubyte RunePrana_852 : 1;
} runePrana;
struct {
ubyte CluckCluckNest_853 : 1;
ubyte CluckCluckNest_854 : 1;
ubyte CluckCluckNest_855 : 1;
ubyte CluckCluckNest_856 : 1;
ubyte CluckCluckNest_857 : 1;
} cluckCluckNest;
struct {
ubyte RevivalCave_858 : 1;
ubyte RevivalCave_859 : 1;
ubyte RevivalCave_860 : 1;
} revivalCave;
struct {
ubyte DemonsDen_861 : 1;
ubyte DemonsDen_862 : 1;
ubyte DemonsDen_863 : 1;
ubyte DemonsDen_864 : 1;
ubyte DemonsDen_865 : 1;
ubyte DemonsDen_866 : 1;
ubyte DemonsDen_867 : 1;
ubyte DemonsDen_868 : 1;
ubyte DemonsDen_869 : 1;
} demonsDen;
ubyte __870 : 1;
ubyte __871 : 1;
} MAPB <size=109>;
// Unlocked recipes bitfield
typedef struct {
ubyte : 7; // probably part of a different flagset - fix later
struct {
ubyte Yarn : 1;
ubyte Cheap_Bracelet : 1;
ubyte Bronze_Bracelet : 1;
ubyte Silver_Bracelet : 1;
ubyte Gold_Bracelet : 1;
ubyte Platinum_Bracelet : 1;
ubyte Silver_Ring : 1;
ubyte Gold_Ring : 1;
ubyte Platinum_Ring : 1;
ubyte Shield_Ring : 1;
ubyte Critical_Ring : 1;
ubyte Silent_Ring : 1;
ubyte Paralysis_Ring : 1;
ubyte Poison_Ring : 1;
ubyte Magic_Ring : 1;
ubyte Throwing_Ring : 1;
ubyte Stay_up_Ring : 1;
ubyte Aquamarine_Ring : 1;
ubyte Amethyst_Ring : 1;
ubyte Emerald_Ring : 1;
ubyte Sapphire_Ring : 1;
ubyte Ruby_Ring : 1;
ubyte Cursed_Ring : 1;
ubyte Diamond_Ring : 1;
ubyte Aquamarine_Brooch : 1;
ubyte Amethyst_Brooch : 1;
ubyte Emerald_Brooch : 1;
ubyte Sapphire_Brooch : 1;
ubyte Ruby_Brooch : 1;
ubyte Diamond_Brooch : 1;
ubyte Dolphin_Brooch : 1;
ubyte Fire_Ring : 1;
ubyte Wind_Ring : 1;
ubyte Water_Ring : 1;
ubyte Earth_Ring : 1;
ubyte Happy_Ring : 1;
ubyte Silver_Pendant : 1;
ubyte Star_Pendant : 1;
ubyte Sun_Pendant : 1;
ubyte Field_Pendant : 1;
ubyte Dew_Pendant : 1;
ubyte Earth_Pendant : 1;
ubyte Heart_Pendant : 1;
ubyte Strange_Pendant : 1;
ubyte Anettes_Necklace : 1;
ubyte Work_Gloves : 1;
ubyte Gloves : 1;
ubyte Power_Gloves : 1;
ubyte Earrings : 1;
ubyte Witch_Earrings : 1;
ubyte Magic_Earrings : 1;
ubyte Charm : 1;
ubyte Holy_Amulet : 1;
ubyte Rosary : 1;
ubyte Talisman : 1;
ubyte Magic_Charm : 1;
ubyte Leather_Belt : 1;
ubyte Lucky_Strike : 1;
ubyte Champ_Belt : 1;
ubyte Hand_Knit_Scarf : 1;
ubyte Fluffy_Scarf : 1;
ubyte Heros_Proof : 1;
ubyte Proof_of_Wisdom : 1;
ubyte Art_of_Attack : 1;
ubyte Art_of_Defense : 1;
ubyte Art_of_Magic : 1;
ubyte Badge : 1;
ubyte Courage_Badge : 1;
ubyte Ventis_Charm_A : 1;
ubyte Ventis_Charm_B : 1;
} craft_Accessories;
struct {
ubyte Shirt : 1;
ubyte Vest : 1;
ubyte Cotton_Cloth : 1;
ubyte Mail : 1;
ubyte Chain_Mail : 1;
ubyte Scale_Vest : 1;
ubyte Sparkling_Shirt : 1;
ubyte Wind_Cloak : 1;
ubyte Protector : 1;
ubyte Platinum_Mail : 1;
ubyte Lamellar_Vest : 1;
ubyte Mercenarys_Cloak : 1;
ubyte Wooly_Shirt : 1;
ubyte Elvish_Cloak : 1;
ubyte Dragon_Cloak : 1;
ubyte Power_Protector : 1;
ubyte Rune_Vest : 1;
ubyte Royal_Garter : 1;
ubyte Four_Dragons_Vest : 1;
} craft_Armor;
struct {
ubyte Trout_Sashimi : 1;
ubyte Char_Sashimi : 1;
ubyte Rainbow_Sashimi : 1;
ubyte Salmon_Sashimi : 1;
ubyte Cherry_Sashimi : 1;
ubyte Taimen_Sashimi : 1;
ubyte Snapper_Sashimi : 1;
ubyte Glitter_Sashimi : 1;
ubyte Lover_Sashimi : 1;
ubyte Girella_Sashimi : 1;
ubyte Skipjack_Sashimi : 1;
ubyte Yellowtail_Sashimi : 1;
ubyte Tuna_Sashimi : 1;
ubyte Sardine_Sashimi : 1;
ubyte Needlefish_Sashimi : 1;
ubyte Pike_Sashimi : 1;
ubyte Flounder_Sashimi : 1;
ubyte Turbot_Sashimi : 1;
ubyte Fall_Sashimi : 1;
ubyte Squid_Sashimi : 1;
ubyte Sunsquid_Sashimi : 1;
ubyte Lamp_Squid_Sashimi : 1;
ubyte Blowfish_Sashimi : 1;
ubyte Lobster_Sashimi : 1;
ubyte Shrimp_Sashimi : 1;
} cooking_Knife;
struct {
ubyte Fried_Veggies : 1;
ubyte Fried_Rice : 1;
ubyte Cabbage_Cakes : 1;
ubyte French_Fries : 1;
ubyte Croquettes : 1;
ubyte Popcorn : 1;
ubyte Corn_Cereal : 1;
ubyte Miso_Eggplant : 1;
ubyte Fried_Eggs : 1;
ubyte Omelet : 1;
ubyte Omelet_Rice : 1;
ubyte Baked_Apple : 1;
ubyte Curry_Bread : 1;
ubyte French_Toast : 1;
ubyte Donut : 1;
ubyte Fried_Udon : 1;
ubyte Tempura : 1;
ubyte Pancakes : 1;
ubyte Gyoza : 1;
ubyte Risotto : 1;
ubyte Dry_Curry : 1;
ubyte Salted_Masu_Trout : 1;
ubyte Salted_Char : 1;
ubyte Salted_R_Trout : 1;
ubyte Salted_C_Salmon : 1;
ubyte Salted_Chub : 1;
ubyte Salted_Salmon : 1;
ubyte Salted_Taimen : 1;
ubyte Grilled_C_Carp : 1;
ubyte Grilled_Gibelio : 1;
ubyte Grilled_Snapper : 1;
ubyte Grilled_Girella : 1;
ubyte Grilled_G_Snapper : 1;
ubyte Grilled_L_Snapper : 1;
ubyte Grilled_Skipjack : 1;
ubyte Grilled_Mackerel : 1;
ubyte Grilled_Yellowtail : 1;
ubyte Salted_Pond_Smelt : 1;
ubyte Tuna_Teriyaki : 1;
ubyte Dried_Sardines : 1;
ubyte Grilled_Needlefish : 1;
ubyte Salted_Pike : 1;
ubyte Grilled_Flounder : 1;
ubyte Grilled_Turbot : 1;
ubyte Grilled_F_Flounder : 1;
ubyte Grilled_Squid : 1;
ubyte Grilled_Sunsquid : 1;
ubyte Grilled_Lamp_Squid : 1;
ubyte Grilled_Blowfish : 1;
ubyte Grilled_Lobster : 1;
ubyte Grilled_Shrimp : 1;
ubyte Grilled_S_Flounder : 1;
} cooking_FryingPan;
struct {
ubyte Hot_Milk : 1;
ubyte Hot_Chocolate : 1;
ubyte Grape_Liqueur : 1;
ubyte Boiled_Pumpkin : 1;
ubyte Boiled_Spinach : 1;
ubyte Boiled_Egg : 1;
ubyte Glazed_Yam : 1;
ubyte Boiled_Gyoza : 1;
ubyte Strawberry_Jam : 1;
ubyte Apple_Jam : 1;
ubyte Grape_Jam : 1;
ubyte Marmalade : 1;
ubyte Cheese_Fondue : 1;
ubyte Udon : 1;
ubyte Curry_Udon : 1;
ubyte Tempura_Udon : 1;
ubyte Rice_Porridge : 1;
ubyte Milk_Porridge : 1;
ubyte Tempura_Bowl : 1;
ubyte Egg_Bowl : 1;
ubyte Stew : 1;
ubyte Curry_Rice : 1;
ubyte Ultimate_Curry : 1;
ubyte Royal_Curry : 1;
ubyte Relax_Tea : 1;
ubyte Grilled_Miso : 1;
ubyte Union_Stew : 1;
ubyte Rockfish_Stew : 1;
ubyte Yogurt : 1;
} cooking_Pot;
struct {
ubyte Corn_on_the_Cob : 1;
ubyte Baked_Onigiri : 1;
ubyte Sweet_Potato : 1;
ubyte Toast : 1;
ubyte Jam_Roll : 1;
ubyte Butter_Roll : 1;
ubyte Pizza : 1;
ubyte Seafood_Pizza : 1;
ubyte Doria : 1;
ubyte Seafood_Doria : 1;
ubyte Gratin : 1;
ubyte Seafood_Gratin : 1;
ubyte Yam_of_the_Ages : 1;
ubyte Cookie : 1;
ubyte Choco_Cookie : 1;
ubyte Cake : 1;
ubyte Chocolate_Cake : 1;
ubyte Cheesecake : 1;
ubyte Apple_Pie : 1;
} cooking_Oven;
struct {
ubyte Pineapple_Juice : 1;
ubyte Tomato_Juice : 1;
ubyte Grape_Juice : 1;
ubyte Orange_Juice : 1;
ubyte Apple_Juice : 1;
ubyte Strawberry_Milk : 1;
ubyte Fruit_Juice : 1;
ubyte Fruit_Smoothie : 1;
ubyte Vegetable_Juice : 1;
ubyte Veggie_Smoothie : 1;
ubyte Mixed_Juice : 1;
ubyte Mixed_Smoothie : 1;
ubyte Ketchup : 1;
ubyte Butter : 1;
ubyte Gold_Juice : 1;
ubyte Prelude_to_Love : 1;
ubyte Hot_Juice : 1;
} cooking_Mixer;
struct {
ubyte Steamed_Bread : 1;
ubyte Cheese_Bread : 1;
ubyte Meat_Dumpling : 1;
ubyte Chinese_Manju : 1;
ubyte Curry_Manju : 1;
ubyte Steamed_Gyoza : 1;
ubyte Pound_Cake : 1;
ubyte Chocolate_Sponge : 1;
ubyte Flan : 1;
ubyte Pumpkin_Flan : 1;
ubyte Dumplings : 1;
} cooking_Steamer;
struct {
ubyte Salad : 1;
ubyte Sandwich : 1;
ubyte Fruit_Sandwich : 1;
ubyte Pickled_Turnip : 1;
ubyte Pickles : 1;
ubyte Bamboo_Rice : 1;
ubyte Raisin_Bread : 1;
ubyte Ice_Cream : 1;
ubyte Relax_Tea_Leaves : 1;
ubyte Onigiri : 1;
ubyte Bread : 1;
ubyte Salmon_Onigiri : 1;
ubyte Pickle_Mix : 1;
ubyte Turnip_Heaven : 1;
ubyte Cheese : 1;
ubyte Mayonnaise : 1;
} cooking_HandmadeAndOthers;
struct {
ubyte The_Protein : 1;
ubyte Intelligencer : 1;
ubyte Vital_Gummi : 1;
ubyte Heart_Drink : 1;
ubyte Antidote_Potion : 1;
ubyte Para_Gone : 1;
ubyte Roundoff : 1;
ubyte Cold_Medicine : 1;
ubyte Formuade : 1;
ubyte Love_Potion : 1;
ubyte Invinciroid : 1;
ubyte Leveliser : 1;
ubyte Heavy_Spice : 1;
ubyte Sweet_Powder : 1;
ubyte Sour_Drop : 1;
ubyte Mixed_Herbs : 1;
ubyte Recovery_Potion : 1;
ubyte Healing_Potion : 1;
ubyte Mystery_Potion : 1;
ubyte Magical_Potion : 1;
} chem_Medicine;
struct {
ubyte Cheap_Hoe : 1;
ubyte Sturdy_Hoe : 1;
ubyte Seasoned_Hoe : 1;
ubyte Shiny_Hoe : 1;
ubyte Blessed_Hoe : 1;
ubyte Cheap_Waterpot : 1;
ubyte Tin_Waterpot : 1;
ubyte Lion_Waterpot : 1;
ubyte Rainbow_Waterpot : 1;
ubyte Joy_Waterpot : 1;
ubyte Cheap_Sickle : 1;
ubyte Iron_Sickle : 1;
ubyte Quality_Sickle : 1;
ubyte Super_Sickle : 1;
ubyte Legendary_Sickle : 1;
ubyte Cheap_Hammer : 1;
ubyte Iron_Hammer : 1;
ubyte Silver_Hammer : 1;
ubyte Golden_Hammer : 1;
ubyte Platinum_Hammer : 1;
ubyte Cheap_Axe : 1;
ubyte Chopping_Axe : 1;
ubyte Lumber_Axe : 1;
ubyte Mountain_Axe : 1;
ubyte Miracle_Axe : 1;
ubyte Cheap_Pole : 1;
ubyte Beginners_Pole : 1;
ubyte Skilled_Pole : 1;
ubyte Famous_Pole : 1;
ubyte Sacred_Pole : 1;
} forge_FarmTools;
struct {
ubyte Headband : 1;
ubyte Blue_Ribbon : 1;
ubyte Green_Ribbon : 1;
ubyte Purple_Ribbon : 1;
ubyte Summer_Headdress : 1;
ubyte Spectacles : 1;
ubyte Straw_Hat : 1;
ubyte Fancy_Hat : 1;
ubyte Brand_Glasses : 1;
ubyte Cute_Knitting : 1;
ubyte Intelligent_Glasses : 1;
ubyte Fireproof_Hood : 1;
ubyte Black_Ribbon : 1;
ubyte Lolita_Headdress : 1;
ubyte Headdress : 1;
ubyte Yellow_Ribbon : 1;
ubyte Autumn_Headdress : 1;
ubyte Cat_Ears : 1;
ubyte Silver_Hairpin : 1;
ubyte Red_Ribbon : 1;
ubyte Spring_Headdress : 1;
ubyte Orange_Ribbon : 1;
ubyte Winter_Headdress : 1;
ubyte White_Ribbon : 1;
ubyte Four_Seasons : 1;
ubyte Feathered_Hat : 1;
ubyte Gold_Hairpin : 1;
ubyte Indigo_Ribbon : 1;
ubyte Crown : 1;
ubyte Turnip_Headgear : 1;
ubyte Pumpkin_Headgear : 1;
ubyte Silk_Hat : 1;
} craft_Headgear;
ubyte : 1; // dummy_341
ubyte Engagement_Ring : 1;
struct {
ubyte Wettable_Powder : 1;
ubyte Greenifier : 1;
ubyte GreenifierPlus : 1;
ubyte FormulaA : 1;
ubyte FormulaB : 1;
ubyte FormulaC : 1;
ubyte NoRotAlpha : 1;
ubyte NoRotBeta : 1;
ubyte Giantizer : 1;
ubyte Minimizer : 1;
} chem_FarmChemicals;
struct {
ubyte Small_Shield : 1;
ubyte Umbrella : 1;
ubyte Iron_Shield : 1;
ubyte Monkey_Plush : 1;
ubyte Round_Shield : 1;
ubyte Turtle_Shield : 1;
ubyte Chaos_Shield : 1;
ubyte Bone_Shield : 1;
ubyte Magic_Shield : 1;
ubyte Heavy_Shield : 1;
ubyte Platinum_Shield : 1;
ubyte Kite_Shield : 1;
ubyte Knight_Shield : 1;
ubyte Element_Shield : 1;
ubyte Magical_Shield : 1;
ubyte Prism_Shield : 1;
ubyte Rune_Shield : 1;
} craft_Shields;
struct {
ubyte Feather_Boots : 1;
ubyte Heavy_Boots : 1;
ubyte Leather_Boots : 1;
ubyte Iron_Geta : 1;
ubyte Snow_Boots : 1;
ubyte Ice_Skates : 1;
ubyte Piyo_Sandals : 1;
ubyte Step_In_Boots : 1;
ubyte Ghost_Boots : 1;
ubyte Knight_Boots : 1;
ubyte Strider_Boots : 1;
ubyte Secret_Shoes : 1;
ubyte Wet_Boots : 1;
ubyte Sneaking_Boots : 1;
ubyte Fast_Step_Boots : 1;
ubyte Water_Shoes : 1;
ubyte Rocket_Wing : 1;
ubyte Silver_Boots : 1;
ubyte Gold_Boots : 1;
ubyte Bone_Boots : 1;
ubyte Fairy_Boots : 1;
ubyte Free_Farming_Shoes : 1;
} craft_Shoes;
struct {
ubyte Broadsword : 1;
ubyte Steel_Sword : 1;
ubyte Steel_Sword_Plus : 1;
ubyte Cutlass : 1;
ubyte Aqua_Sword : 1;
ubyte Invisiblade : 1;
ubyte Defender : 1;
ubyte Burning_Sword : 1;
ubyte Gorgeous_Sword : 1;
ubyte Gaia_Sword : 1;
ubyte Snakesword : 1;
ubyte Luck_Blade : 1;
ubyte Platinum_Sword : 1;
ubyte Wind_Sword : 1;
ubyte Chaos_Blade : 1;
ubyte Sakura : 1;
ubyte Sunspot : 1;
ubyte Durendal : 1;
ubyte Aerial_Blade : 1;
ubyte Grantale : 1;
ubyte Smash_Blade : 1;
ubyte Icifier : 1;
ubyte Soul_Eater : 1;
ubyte Raventine : 1;
ubyte Star_Saber : 1;
ubyte Platinum_Sword_Plus : 1;
ubyte Dragon_Slayer : 1;
ubyte Rune_Blade : 1;
ubyte Gladius : 1;
ubyte Rune_Legend : 1;
ubyte Back_Scratcher : 1;
ubyte Spoon : 1;
ubyte Veggieblade : 1;
} forge_ShortSwords;
struct {
ubyte Claymore : 1;
ubyte Zweihaender : 1;
ubyte Zweihaender_Plus : 1;
ubyte Great_Sword : 1;
ubyte Sea_Cutter : 1;
ubyte Cyclone_Blade : 1;
ubyte Poison_Blade : 1;
ubyte Katzbalger : 1;
ubyte Earth_Shade : 1;
ubyte Big_Knife : 1;
ubyte Katana : 1;
ubyte Flame_Saber : 1;
ubyte Bio_Smasher : 1;
ubyte Snow_Crown : 1;
ubyte Dancing_Dicer : 1;
ubyte Flamberge : 1;
ubyte Flamberge_Plus : 1;
ubyte Volcanon : 1;
ubyte Psycho : 1;
ubyte Shine_Blade : 1;
ubyte Grand_Smasher : 1;
ubyte Belzebuth : 1;
ubyte Orochi : 1;
ubyte Punisher : 1;
ubyte Steel_Slicer : 1;
ubyte Moon_Shadow : 1;
ubyte Blue_Eyed_Blade : 1;
ubyte Balmung : 1;
ubyte Braveheart : 1;
ubyte Force_Element : 1;
ubyte Heaven_Asunder : 1;
ubyte Caliburn : 1;
ubyte Dekash : 1;
ubyte Daicone : 1;
} forge_LongSwords;
struct {
ubyte Spear : 1;
ubyte Wood_Staff : 1;
ubyte Lance : 1;
ubyte Lance_Plus : 1;
ubyte Needle_Spear : 1;
ubyte Trident : 1;
ubyte Water_Spear : 1;
ubyte Halberd : 1;
ubyte Corsesca : 1;
ubyte Corsesca_Plus : 1;
ubyte Poison_Spear : 1;
ubyte Fivestaff : 1;
ubyte Heavy_Lance : 1;
ubyte Feather_Lance : 1;
ubyte Iceberg : 1;
ubyte Blood_Lance : 1;
ubyte Magical_Lance : 1;
ubyte Flare_Lance : 1;
ubyte Brionac : 1;
ubyte Poison_Queen : 1;
ubyte Monk_Staff : 1;
ubyte Metus : 1;
ubyte Silent_Grave : 1;
ubyte Overbreak : 1;
ubyte Bjor : 1;
ubyte Belvarose : 1;
ubyte Gae_Bolg : 1;
ubyte Gungnir : 1;
ubyte Dragons_Fang : 1;
ubyte Legion : 1;
ubyte Pitchfork : 1;
ubyte Safety_Lance : 1;
ubyte Pine_Club : 1;
ubyte : 1; // dummy_492
ubyte : 1; // dummy_493
ubyte : 1; // dummy_494
ubyte : 1; // dummy_495
ubyte : 1; // dummy_496
} forge_Spears;
struct {
ubyte Battle_Hammer : 1;
ubyte Battle_Axe : 1;
ubyte Bat : 1;
ubyte War_Hammer : 1;
ubyte Battle_Scythe : 1;
ubyte War_Hammer_Plus : 1;
ubyte Pole_Axe : 1;
ubyte Iron_Bat : 1;
ubyte Pole_Axe_Plus : 1;
ubyte Great_Hammer : 1;
ubyte Great_Axe : 1;
ubyte Ice_Hammer : 1;
ubyte Tomahawk : 1;
ubyte Basilisk_Fang : 1;
ubyte Bone_Hammer : 1;
ubyte Rock_Axe : 1;
ubyte Strong_Stone : 1;
ubyte Demon_Axe : 1;
ubyte Flame_Hammer : 1;
ubyte Gigant_Hammer : 1;
ubyte Sky_Hammer : 1;
ubyte Frost_Axe : 1;
ubyte Crescent_Axe : 1;
ubyte Crescent_Axe_Plus : 1;
ubyte Graviton_Hammer : 1;
ubyte Spiked_Hammer : 1;
ubyte Heat_Axe : 1;
ubyte Crystal_Hammer : 1;
ubyte Schnabel : 1;
ubyte Double_Edge : 1;
ubyte Alldale : 1;
ubyte Gigant_Hammer_Plus : 1;
ubyte Devil_Finger : 1;
ubyte Kongo : 1;
ubyte Executioner : 1;
ubyte Mjolnir : 1;
ubyte Fatal_Crush : 1;
ubyte Saint_Axe : 1;
ubyte Splash_Star : 1;
ubyte Hammer : 1;
ubyte Toy_Hammer : 1;
ubyte Axe : 1;
ubyte Lollipop : 1;
ubyte : 1; // dummy_540
ubyte : 1; // dummy_541
ubyte : 1; // dummy_542
ubyte : 1; // dummy_543
ubyte : 1; // dummy_544
ubyte : 1; // dummy_545
ubyte : 1; // dummy_546
ubyte : 1; // dummy_547
ubyte : 1; // dummy_548
ubyte : 1; // dummy_549
ubyte : 1; // dummy_550
ubyte : 1; // dummy_551
ubyte : 1; // dummy_552
ubyte : 1; // dummy_553
ubyte : 1; // dummy_554
ubyte : 1; // dummy_555
ubyte : 1; // dummy_556
ubyte : 1; // dummy_557
ubyte : 1; // dummy_558
ubyte : 1; // dummy_559
} forge_AxesHammers;
struct {
ubyte Rod : 1;
ubyte Amethyst_Rod : 1;
ubyte Aquamarine_Rod : 1;
ubyte Friendly_Rod : 1;
ubyte Love_Love_Rod : 1;
ubyte Staff : 1;
ubyte Emerald_Rod : 1;
ubyte Silver_Staff : 1;
ubyte Flare_Staff : 1;
ubyte Ruby_Rod : 1;
ubyte Sapphire_Rod : 1;
ubyte Earth_Staff : 1;
ubyte Lightning_Wand : 1;
ubyte Ice_Staff : 1;
ubyte Diamond_Rod : 1;
ubyte Wizards_Staff : 1;
ubyte Mages_Staff : 1;
ubyte Shooting_Star_Staff : 1;
ubyte Hell_Branch : 1;
ubyte Crimson_Staff : 1;
ubyte Bubble_Staff : 1;
ubyte Gaia_Rod : 1;
ubyte Cyclone_Rod : 1;
ubyte Storm_Wand : 1;
ubyte Rune_Staff : 1;
ubyte Mages_Staff_Plus : 1;
ubyte Magic_Broom : 1;
ubyte Magic_Shot : 1;
ubyte Hell_Curse : 1;
ubyte Algernon : 1;
ubyte Sorcerers_Wand : 1;
ubyte Basket : 1;
ubyte Golden_Turnip_Staff : 1;
ubyte Sweet_Potato_Staff : 1;
ubyte Elvish_Harp : 1;
ubyte Syringe : 1;
} forge_Staves;
struct {
ubyte Short_Dagger : 1;
ubyte Steel_Edge : 1;
ubyte Frost_Edge : 1;
ubyte Twin_Leeks : 1;
ubyte Iron_Edge : 1;
ubyte Thief_Knife : 1;
ubyte Wind_Edge : 1;
ubyte Gorgeous_Lx : 1;
ubyte Steel_Katana : 1;
ubyte Twin_Blade : 1;
ubyte Rampage : 1;
ubyte Salamander : 1;
ubyte Platinum_Edge : 1;
ubyte Sonic_Dagger : 1;
ubyte Chaos_Edge : 1;
ubyte Desert_Wind : 1;
ubyte Broken_Wall : 1;
ubyte Force_Divide : 1;
ubyte Heart_Fire : 1;
ubyte Orcus_Sword : 1;
ubyte Deep_Blizzard : 1;
ubyte Dark_Invitation : 1;
ubyte Priest_Saber : 1;
ubyte Efreet : 1;
ubyte Dragoon_Claw : 1;
ubyte Emerald_Edge : 1;
ubyte Rune_Edge : 1;
ubyte Earnest_Edge : 1;
ubyte Twin_Justice : 1;
ubyte Double_Scratch : 1;
ubyte Acutorimass : 1;
} forge_DualBlades;
struct {
ubyte Leather_Gloves : 1;
ubyte Brass_Knuckles : 1;
ubyte Kote : 1;
ubyte Gloves : 1;
ubyte Bear_Claws : 1;
ubyte Fists_of_the_Earth : 1;
ubyte Fists_of_Fire : 1;
ubyte Fists_of_Water : 1;
ubyte Dragon_Claws : 1;
ubyte Fists_of_Dark : 1;
ubyte Fists_of_Wind : 1;
ubyte Fists_of_Light : 1;
ubyte Cat_Punch : 1;
ubyte Animal_Puppets : 1;
ubyte Ironleaf_Fists : 1;
ubyte Caestus : 1;
ubyte Golem_Punch : 1;
ubyte Hand_of_God : 1;
ubyte Bazal_Katar : 1;
ubyte Fenrir : 1;
} forge_Fists;
} RECIP <size=188>;
typedef struct {
ubyte : 5;
ubyte season : 2 <read=ReadBMonth, write=WriteBMonth, comment="Spring = 0, Winter = 3">;
ubyte day : 5 <read=ReadBDay, write=WriteBDay>;
ubyte : 4;
} BDAY <read=GetBDay>;
typedef struct {
long level;
long exp;
} SKILL <read=ReadSkillVal>;
typedef struct {
SPELLID spellID : 10; // 10 bits spell ID
ubyte isActive : 1; // 1 bit spell exists?
ubyte level : 5 <comment="Level - 1 (0-9)">;
} SPELL <read=ReadSpell, size=2>;
typedef struct {
ITEMID itemID : 11;
ubyte amount : 5 <comment="Item stack size (for spells: level)">;
short isCrafted;
if( (isCrafted > 0) || ( (itemID >= 985) && (itemID < 1020) ) ) { // crafted or fish
ubyte iLevel;
ubyte UnknownA;
if (isCrafted > 0) {
ubyte iQuality;
ushort UnknownB;
ushort : 2;
ushort iRarity : 8;
ubyte UnknownC;
ITEMID inheritedItem;
}
else {
ushort UnknownB;
ushort fishSize <comment="in mm">;
}
}
else {
ubyte iLevels[9] <comment="Descending order, Level - 1 (0-9)">;
}
} ITEM <read=ReadItem, size=28, optimize=false>;
// An object on a farm
typedef struct {
CROPID crop;
ubyte UnknownA : 2 <hidden=true>;
ushort cropLevel : 12 <read=ReadCropLvl, write=WriteCropLvl, comment="Always rounded down">;
ushort sizeBonus : 10 <read=ReadCropSize, write=WriteCropSize,comment="Range -2 to 2">;
uint growthProgress : 17 <read=ReadCropGrowth, write=WriteCropGrowth, comment="Max. 511; measured in days assuming normal growth">;
ushort additionalCrops : 12 <read=ReadCropNum, write=WriteCropNum, comment="Range -7 to 7">;
ubyte isWatered : 1;
ubyte UnknownB : 2 <hidden=true>;
ubyte health;
ushort coordX : 11 <comment="'Square' length is 32">;
ushort coordY : 10 <comment="'Square' length is 32">;
ubyte levelChanged : 1 <comment="CropLv changed by soil? (turns number blue)">;
ubyte UnknownC : 1 <hidden=true>;
ubyte playerMade : 1 <comment="(Not sure) Player created this?">;
} CROP <size=12, name=ReadCropName, read=ReadCropValue, comment=ReadCropComment>;
// An interactable object (storage boxes etc.)
typedef struct {
ROOM room : 15;
ushort UnknownA :1 ;
OBJID object <comment="unsure">;
ushort coordX <comment="'Square' length is 32">;
ushort coordY <comment="'Square' length is 32">;
} OBJ <size=8, name=ReadObjName, read=ReadObjValue>;
typedef struct {
local int i;
for( i = 0; i < 15; i ++ )
ITEM item;
} EQPAGE <optimize=true>;
typedef struct {
local int i;
for( i = 0; i < 15; i ++ )
SPELL spell;
} SPLPAGE <optimize=true>;
typedef struct {
ITEM carried;
ITEM weapon;
ITEM shield;
ITEM accessory;
ITEM head;
ITEM boots;
struct {
ITEM spell_X1;
ITEM spell_Y1;
ITEM spell_X2;
ITEM spell_Y2;
} spells;
ITEM armor;
} EQUIPINV <size=308>;
typedef struct {
local int i;
for( i = 0; i < 4; i ++ )
EQPAGE page;
} BACKPACK <size=1680, optimize=true>;
typedef struct {
local int i;
for( i = 0; i < 2; i ++ )
SPLPAGE page;
} SPELLINV <size=60, optimize=true>;
typedef struct {
local int i;
for( i = 0; i < 66; i ++ )
EQPAGE page;
} STORAGE <size=27720, optimize=true>;
typedef struct {
local int i;
for( i = 0; i < 66; i ++ )
EQPAGE page;
} FRIDGE <size=27720, optimize=true>;
typedef struct {
local int i;
for( i = 0; i < 6; i ++ )
SPLPAGE page;
} LIBRARY <size=180, optimize=true>;
typedef struct {
local int i;
for( i = 0; i < 20; i ++ )
EQPAGE page;
} SHIPBOX <size=8400, optimize=true>;
typedef struct {
local int i;
for( i = 0; i < 1; i ++ )
EQPAGE page;
} SHOPBOX <size=420, optimize=true>;
typedef struct {
local int i;
for( i = 0; i < 8; i ++ )
EQPAGE page;
} WPNBOX <size=3360, optimize=true>;
typedef struct {
local int i;
for( i = 0; i < 10; i ++ )
EQPAGE page;
} TOOLBOX <size=4200, optimize=true>;
typedef struct {
local int i;
for( i = 0; i < 8; i ++ )
EQPAGE page;
} WARDROBE <size=3360, optimize=true>;
typedef struct {
ITEM weapon;
ITEM shield;
ITEM accessory;
ITEM armor;
ITEM head;
ITEM boots;
ITEM UnkA;
ITEM UnkB;
ITEM UnkC;
} NPCINV <size=252>;
typedef struct {
long curHP;
long modHP;
ushort curRP;
ushort modRP;
short modStr;
ushort UnknownStr;
short modInt;
ushort UnknownInt;
short modVit;
ushort UnknownVit;
ushort level;
ushort UnknownB;
long exp;
ushort UnknownC;
COST costume;
} CHARSTAT <size=100>;
typedef struct {
local int i;
for( i = 0; i < 20; i ++ )
CHARSTAT monster <name=ReadMonNameB>;
} BARNSTAT <optimize=true>;
typedef struct ( ubyte bytelen, ubyte hasSign, float factor ){
local ubyte bytelen = bytelen;
local ubyte hasSign = hasSign;
local float factor = factor;
ulong value : bytelen;
} FSTAT;
typedef struct {
ushort tmpSpeed : 11 <read=GetTmpSpeed, write=SetTmpSpeed, comment="Range 0 to 8">;
ushort tmpNumber : 11 <read=GetTmpNumber, write=SetTmpNumber, comment="Range -4 to 4">;
ushort tmpQuality : 10 <read=GetTmpQuality, write=SetTmpQuality, comment="Range -2 to 2">;
ushort tmpSize : 10 <read=GetTmpSize, write=SetTmpSize, comment="Range -2 to 2">;
ushort defense : 6 <comment="Range 0 to 63">;
ubyte HPc <comment="Range 0 to 255">;
ubyte UnknownA : 8;
ubyte UnknownB : 4;
ubyte numberA : 4 <read=GetNumber, write=SetNumber, comment="Range 1 to 16.99">;
ubyte qualityA : 4 <read=GetQuality, write=SetQuality, comment="Range 1 to 16.99">;
ubyte sizeA : 4 <read=GetSize, write=SetSize, comment="Range 1 to 16.99">;
ubyte overallB <read=GetOverall, write=SetOverall, comment="Range 1 to 16.99">;
ubyte speedB <read=GetSpeed, write=SetSpeed, comment="Range 1 to 16.99">;
ubyte numberB <read=GetNumber, write=SetNumber, comment="Range 1 to 16.99">;
ubyte qualityB <read=GetQuality, write=SetQuality, comment="Range 1 to 16.99">;
ubyte sizeB <read=GetSize, write=SetSize, comment="Range 1 to 16.99">;
ubyte overallA : 4 <read=GetOverall, write=SetOverall, comment="Range 1 to 16.99">;
ubyte speedA : 4 <read=GetSpeed, write=SetSpeed, comment="Range 1 to 16.99">;
} SOIL <size=16, read=ReadSoil, comment=CommentSoil>;
typedef struct ( byte amnt ){
local int j;
for( j = 0; j < amnt; j ++ )
SOIL soilpatch;
} FROW;
typedef struct ( byte cols, byte rows )
{
local int i;
for( i = 0; i < rows; i ++ )
FROW fieldRow ( cols );
if( (cols * rows) < 18 ) {
i = cols * rows;
struct {
for( i; i < 18; i ++ )
SOIL soilpatch;
} dummyPatches <hidden=true>;
}
} FARM;
typedef struct {
long FP;
uint Flags[2];
ushort ID <comment="maybe?">;
struct {
ROOM location;
ushort coordX;
ushort coordY;
} pos;
} VILSTAT <size=44, comment=ReadVillagerLocation>;
typedef struct {
char name[19];
ubyte slotID;
uint type;
ushort FP;
} MONSTAT <name=ReadMonName, size=36>;
// Highest level shipped for flowers/crops
typedef struct {
ubyte Unknown[19];
ubyte Strawberry_lv;
ubyte Cabbage_lv;
ubyte PinkTurnip_lv;
ubyte Onion_lv;
ubyte Toyherb_lv;
ubyte MoondropFlower_lv;
ubyte CherryGrass_lv;
ubyte LampGrass_lv;
ubyte EmeryFlower_lv;
ubyte BlueCrystal_lv;
ubyte GoldenCabbage_lv;
ubyte PinkMelon_lv;
ubyte Pumpkin_lv;
ubyte Cucumber_lv;
ubyte Corn_lv;
ubyte Tomato_lv;
ubyte Eggplant_lv;
ubyte Pineapple_lv;
ubyte PinkCat_lv;
ubyte Ironleaf_lv;
ubyte FourLeafClover_lv;
ubyte Fireflower_lv;
ubyte GreenCrystal_lv;
ubyte GoldenPumpkin_lv;
ubyte Yam_lv;
ubyte Potato_lv;
ubyte Carrot_lv;
ubyte GreenPepper_lv;
ubyte Spinach_lv;
ubyte CharmBlue_lv;
ubyte AutumnGrass_lv;
ubyte PomPomGrass_lv;
ubyte RedCrystal_lv;
ubyte GoldenPotato_lv;
ubyte Turnip_lv;
ubyte Radish_lv;
ubyte Leek_lv;
ubyte BokChoy_lv;
ubyte NoelGrass_lv;
ubyte WhiteCrystal_lv;
ubyte GoldenTurnip_lv;
ubyte HotHotFruit_lv;
ubyte Fodder_lv;
ubyte AppleTree_lv;
ubyte OrangeTree_lv;
ubyte GrapeTree_lv;
ubyte TwinkleTree_lv;
ubyte DungeonFlower_lv;
ubyte SwordFlower_lv;
ubyte ShieldFlower_lv;
} SHIPL;
// Money earned via items shipped
typedef struct {
local int i;
for( i = 0; i < 1106; i ++ )
ulong item : 30 <name=ReadShippedName>;
} SHIPT;
// FSize for shipped fish
typedef struct {
int MasuTrout;
int Squid;
int Taimen;
int Sardine;
int Char;
int Chub;
int GlitterSnapper;
int Skipjack;
int Turbot;
int Gibelio;
int Salmon;
int Mackerel;
int Needlefish;
int Pike;
int Sunsquid;
int Shrimp;
int Snapper;
int ThrobbySnapper;
int RainbowTrout;
int Flounder;
int Blowfish;
int Yellowtail;
int CrucianCarp;
int Tuna;
int Girella;
int FallFlounder;
int CherrySalmon;
int LampSquid;
int Lobster;
int PondSmelt;
int SandFlounder;
int Rockfish;
} SHIPF <size=132>;
// Flags whether an item was shipped or not
typedef struct {
local int i;
for( i = 0; i < 1108; i ++ )
BFLAG item(i) <name=ReadItemBitName>;
} SHIPB <size=139>;
// Flags whether an item was picked up / in player possession?
typedef struct {
local int i;
for( i = 0; i < 1108; i ++ )
BFLAG item(i) <name=ReadItemBitName>;
} PICKB <size=139>;
//-----------------------------------
// Define main structures
typedef struct {
uint CRC32<format=hex>;
ubyte UnknownA[1];
DIFF difficulty <comment="RF4S: Extra HELL flag @ 0x1EA3B">;
ubyte UnknownB[6];
uint clock_Minutes;
uint clock_Hours;
uint day;
MONTH month;
uint UnknownC[4];
struct {
ROOM room <read=ReadRoom>;
ushort CoordX <comment="counts from left of screen">;
ushort CoordY <comment="counts from top of screen">;
} playerLocation ;
ubyte UnknownD[4];
GENDER gender;
ubyte wateringCanCharges <comment="max. = 20?">;
uint UnknownE;
struct {
uint lumber;
uint stone;
uint compost;
uint fodder;
} materials;
uint money;
uint UnknownF;
} HEADER <size=84>;
typedef struct {
CHARSTAT player;
CHARSTAT villager[27];
BARNSTAT monsterbarn[10];
} BTLSTATS;
typedef struct {
struct {
SKILL shortSword;
SKILL longSword;
SKILL spear;
SKILL axeHammer;
SKILL dualBlades;
SKILL fists;
} Weapons;
struct {
SKILL fire;
SKILL water;
SKILL earth;
SKILL wind;
SKILL light;
SKILL dark;
SKILL love;
} Magic;
struct {
SKILL farming;
SKILL logging;
SKILL mining;
SKILL fishing;
} Farming;
struct {
SKILL cooking;
SKILL forging;
SKILL chemistry;
SKILL crafting;
} Crafting;
struct {
SKILL searching;
SKILL walking;
SKILL sleeping;
SKILL eating;
} Adventure;
struct {
SKILL defense;
SKILL resPoison;
SKILL resSeal;
SKILL resParalysis;
SKILL resSleep;
SKILL resFatigue;
SKILL resCold;
SKILL resKnockout;
} Defense;
struct {
SKILL bathing;
SKILL taming;
SKILL throwing;
SKILL leadership;
SKILL bartering;
} Other;
SKILL Unknown[2] <hidden=true>;
} SKILLS;
typedef struct {
EQUIPINV equipment;
BACKPACK backpack;
SPELLINV spellpack;
FRIDGE fridge;
STORAGE storage;
WPNBOX weaponbox;
WARDROBE wardrobe;
TOOLBOX toolbox;
SHIPBOX shippingbox;
SHOPBOX shopbox;
LIBRARY bookshelf;
} ITEMS;
typedef struct {
local int i;
for( i = 0; i < 76; i ++ )
CROP fieldObject;
} FOBJ;
typedef struct {
local int i;
for( i = 0; i < 67; i ++ )
OBJ object;
} WOBJ <size=536>;
typedef struct {
struct {
FOBJ mainFarm <comment="X 79-431 | Y 176-336 (field squares)">;
FOBJ secondFarm <comment="">;
FOBJ thirdFarm <comment="">;
FOBJ fourthFarm <comment="">;
FOBJ fifthFarm <comment="">;
FOBJ springFarm <comment="">;
FOBJ summerFarm <comment="">;
FOBJ autumnFarm <comment="">;
FOBJ winterFarm <comment="">;
} farmObjects;
struct {
FARM mainFarm ( 6,3 ) <comment="First and central plot.">;
FARM secondFarm ( 6,3 ) <comment="Bottom-left plot.">;
FARM thirdFarm ( 6,3 ) <comment="Bottom-right plot.">;
FARM fourthFarm ( 6,3 ) <comment="">;
FARM fifthFarm ( 6,3 ) <comment="">;
FARM springFarm ( 2,4 ) <comment="">;
FARM summerFarm ( 2,2 ) <comment="">;
FARM autumnFarm ( 3,3 ) <comment="Farm is 2x3 - 3rd (rightmost) column in each row is dummied out.">;
FARM winterFarm ( 4,3 ) <comment="">;
} fields <comment="Fields start top-left, count going right and down.">;
} FARMS <size=10800>;
typedef struct {
local int i;
struct {
for( i = 0; i < 20; i ++ )
MONSTAT monster;
} monsterbarn[10] <size=720, optimize=false>;
UNKNWN Unknown <size=368, hidden=true>;
struct {
VILSTAT Vishnal;
VILSTAT Clorica;
VILSTAT Volkanon;
VILSTAT Forte;
VILSTAT Kiel;
VILSTAT Bado;
VILSTAT Margaret;
VILSTAT Dylas;
VILSTAT Arthur;
VILSTAT Porcoline;
VILSTAT XiaoPai;
VILSTAT LinFa;
VILSTAT Amber;
VILSTAT Illuminata;
VILSTAT Doug;
VILSTAT Blossom;
VILSTAT Dolce;
VILSTAT Jones;
VILSTAT Nancy;
VILSTAT Leon;
VILSTAT Ventuswill;
VILSTAT Son;
VILSTAT Daughter;
} villagers;
} OSTATS;
typedef struct {
NPCINV DummyA;
NPCINV Vishnal;
NPCINV Clorica;
NPCINV Volkanon;
NPCINV Forte;
NPCINV Kiel;
NPCINV Bado;
NPCINV Margaret;
NPCINV Dylas;
NPCINV Arthur;
NPCINV Porcoline;
NPCINV XiaoPai;
NPCINV LinFa;
NPCINV Amber;
NPCINV Illuminata;
NPCINV Doug;
NPCINV Blossom;
NPCINV Dolce;
NPCINV Jones;
NPCINV Nancy;
NPCINV Leon;
NPCINV Ventuswill;
NPCINV Son;
NPCINV Daughter;
NPCINV Barrett;
NPCINV Raven;
NPCINV DummyB;
} NPCEQ;
typedef struct {
ulong princessPoints <comment="Max 99999">;
ulong tourists;
ubyte Unknown <hidden=true>;
ubyte monstersSlainToday <comment="First 10 monsters give PP">;
ubyte UnknownA[4] <hidden=true>;
ubyte : 5;
ubyte bDisableTownEvents : 1;
ubyte : 2;
ubyte : 3;
ubyte bDisableExpGain : 1;
ubyte bDisableSkillGain : 1;
ubyte bSeeMonsterLevels : 1;
ubyte bSeeMonsterHP : 1;
ulong UnknownB[3] <hidden=true>;
ubyte monsterLevelIncrease <comment="# of times the monster level was increased">;
ubyte UnknownC[7] <hidden=true>;
struct {
ulong : 1;
ulong bFestBeanToss :1;
ulong : 1;
ulong bFestDeFluff : 1;
ulong bFestTurnip : 1;
ulong bFestTurnipFlurry : 1;
ulong bFestQuizContest : 1;
ulong : 1;
ulong bFestFishingFrenzy : 1;
ulong : 1;
ulong bFestSquidCatch : 1;
ulong : 1;
ulong bFestSpringHarvest : 1;
ulong : 2;
ulong bFestWinterHarvest : 1;
ulong bFestCooking : 1;
ulong : 7;
ulong : 1;
ulong bFestChristmas : 1;
ulong : 6;
} festivalFlags;
ubyte UnknownD[4] <hidden=true>;
ulong festivalsOrdered <hidden=true, comment="Ordered once, not currently ordered">;
MODEL appearanceChange;
} MISC;
//--------------------------------------------
// Custom functions
// Read out pseudo-float soil values
string ReadFieldStat( uint fval, ubyte bitlength, float factor, ubyte hasSign, ubyte round ) {
local string s;
local double value, div;
local uint temp = fval;
local ubyte bLen = bitlength;
local ubyte neg;
//Printf( "Raw value: %d, Hex: 0x%04X \nValue's bit length: %d, Factor: %f (0x%08X) \n", temp, temp, bLen, factor, factor);
if (factor) {
temp <<= (32 - bLen);
if (hasSign) {
if ( temp & 0x80000000 )
neg = 1;
//else Printf( "Value is positive! \n");
temp <<= 1;
bLen -= 1;
if( neg )
//Printf( "Value is negative! Before: 0x%08X, after: 0x%08X \n", temp, ~temp + 1 );
temp = ~temp;
}
temp >>= (32 - bLen);
//Printf( "Value shifted RIGHT to the end by %d ( 16 - bitLength %d )! Now: %u, Hex: 0x%04X \n", ( 16 - bLen ), bLen, temp, temp);
// Get maximum bit value and divide by factor ( max. variable value)
// Get max bit value +1 if variable doesn't reach max value
div = 1 << bLen;
if( round )
div -= 1;
if( neg )
div /= -factor;
else
div /= factor;
// divide integer by value to get pseudo-"float"
// Printf("temp: %d, div: %lf, result: %lf \n", temp, div, value / div );
value = temp / div;
//Printf( "Divided value by %d , now: %.18f, \n", temp, value);
SPrintf( s, "%f", value );
}
else s = "No float!";
// Put the var value into a buffer string via SPrintf
//SPrintf( s, "Val: %d (0x%04X)", temp, temp );
return s;
}
// Write back pseudo-float soil values
string WriteFieldStat( double fval, ubyte bitlength, float factor, ubyte hasSign, ubyte round ) {
local string s;
local uint mask = -1;
local uint temp;
local ubyte bLen = bitlength;
if (hasSign)
bLen -= 1;
// Shift FFFF mask left / right by # of unused bits (effectively, 16 - [number of bits in original value])
// to get the bit length of our value in active bits
mask <<= ( 32 - bLen );
//Printf( "Shift mask LEFT by %d ( 32 - bitLength %d ), now: %u, Hex: 0x%08X \n", (32 - bLen), bLen, mask, mask);
mask >>= ( 32 - bLen );
//Printf( "Shift mask RIGHT by %d ( 32 - bitLength %d ), now: %u, Hex: 0x%08X \n", (32 - bLen), bLen, mask, mask);
if( round )
SPrintf( s, "%.lf", Abs( fval ) / factor * mask ); // round value by putting into a string at 0 precision
else
SPrintf( s, "%.lf", Abs( fval ) / factor * (mask + 1) ); // round value by putting into a string at 0 precision
SScanf( s, "%u", temp); // read value back out as integer
if ( temp > mask)
temp = mask; // limit to maximum value
//Printf( "Temp value: %u (0x%08X) \n", temp, temp);
if ( hasSign && ( fval < 0 )) {
//Printf( "Value is signed and input %lf is negative! \n", fval );
temp <<= ( 32 - (bLen+1) );
temp = ~ temp;
temp >>= ( 32 - (bLen+1) );
//Printf( "Value now: %u (0x%04X) \n", temp, temp );
}
SPrintf( s, "%u", temp);
return s;
}
// Read & write values on a bitflag struct, so you don't have to
// open it to modify / check
string ReadBitflag( BFLAG &flag ) {
local string s;
SPrintf( s, "%d", flag.flag );
return s;
}
void WriteBitflag( BFLAG &flag, string s ) {
local ubyte input;
SScanf( s, "%d", input );
if( input )
flag.flag = 1;
else
flag.flag = 0;
}
// Display soil health, defense and overall quality at a quick glance
string ReadSoil( SOIL &soil ) {
local string s;
local float val;
SScanf( GetOverall( soil.overallA ), "%f", val);
// Put the var value into a buffer string via SPrintf
SPrintf( s, "%dHP %d Def %.2f Ovrl", soil.HPc, soil.defense, val );
return s;
}
// Display unknown soil values as comment for quick comparison
string CommentSoil( SOIL &soil ) {
local string s;
SPrintf( s, "%u | %u", soil.UnknownA, soil.UnknownB );
return s;
}
// Display skill level and exp
string ReadSkillVal( SKILL &skl ) {
local string s;
// Put the var value into a buffer string via SPrintf
SPrintf( s, "%d ( %d )", skl.level, skl.exp );
return s;
}
// Display spell name
string ReadSpell( SPELL &spl ) {
local string s = "";
if( spl.isActive != 0 )
s = EnumToString( spl.spellID );
return s;
}
// Display item name
string ReadItem( ITEM &item ) {
local string s = "";
s = EnumToString( item.itemID );
return s;
}
// Display location
string ReadRoom( ROOM &room ) {
local string s = "";
s = EnumToString( room );
if( s == "" )
SPrintf(s, "%d", room);
else
s = StrDel( s, Strlen( s ) - 4, 4 ); // Remove the _XXX from name
return s;
}
// Display villager location on otherStats
string ReadVillagerLocation( VILSTAT &vil ) {
local string s = "";
s = EnumToString( vil.pos.location );
if( s == "" )
SPrintf(s, "%d", room);
else
s = StrDel( s, Strlen( s ) - 4, 4 ); // Remove the _XXX from name
SPrintf( s, "%s (%d,%d)", s, vil.pos.coordX, vil.pos.coordY );
return s;
}
// Display field object's name
string ReadCropName( CROP &object ) {
local string s = "";
local float lvl;
s = EnumToString( object.crop );
if( s == "" )
SPrintf(s, "%d", object.crop);
else
s = StrDel( s, Strlen( s ) - 2, 2 ); // Remove the _C from name
if( object.crop > 37 ) {
SScanf( ReadCropLvl( object.cropLevel ), "%f", lvl);
SPrintf( s, "%s LV%.f", s, Floor( lvl ) );
}
return s;
}
// Display field object's coords
string ReadCropValue( CROP &object ) {
local string s = "";
local float grw;
if( object.crop > 0 )
SPrintf( s, "[%d|%d] %dHP", object.coordX, object.coordY, object.health );
if( object.growthProgress > 0 ) {
SScanf( ReadCropGrowth( object.growthProgress ), "%f", grw);
SPrintf( s, "%s %.1fD", s, grw);
}
return s;
}
// Display field object's unknown values for quick comparison
string ReadCropComment( CROP &object ) {
local string s = "";
if( object.crop > 0 ) {
SPrintf( s, "%X | %X | %X", object.UnknownA, object.UnknownB, object.UnknownC );
if( object.levelChanged )
s += " [Lv]";
if( object.playerMade )
s += " [P]";
}
return s;
}
// Display world object's name
string ReadObjName( OBJ &object ) {
local string s = "";
s = EnumToString( object.object );
if( s == "" )
SPrintf(s, "%d", object.object);
else
s = StrDel( s, Strlen( s ) - 4, 4 ); // Remove the _XX from name
return s;
}
// Display world object's coords
string ReadObjValue( OBJ &object ) {
local string s = "";
s = EnumToString( object.room );
if( s == "" )
SPrintf(s, "%d", object.room);
else
s = StrDel( s, Strlen( s ) - 4, 4 ); // Remove the _XXX from name
SPrintf( s, "%s (%d,%d) | %d", s, object.coordX, object.coordY, object.UnknownA );
return s;
}
// Lmao holy shit this is a terrible way to find the array index of a value
// Convert float to string to integer why do i have to do this
// But it works for now, i hope
string ReadShippedName( ulong &item ) {
local string s;
local double val;
local ITEMID i;
val = ( startof(item) - startof( parentof(item).item[0] ) );
val = val * 8 / 30;
SPrintf( s, "%.lf", val ); // why can't i just round nearest instead...
SScanf( s, "%d", i);
return EnumToString( i );
}
// Fetch monster name from otherstats for display in battlestats
// Lmao this jank-ass array index gathering again, kill me
// And i need TWO OF THEM this time
string ReadMonNameB( CHARSTAT &monster ) {
local string s;
local int idx1, idx2;
idx1 = ( startof(monster) - startof( parentof(monster).monster[0] ) );
idx2 = (idx1 % 2000) / 100;
idx1 /= 0x7D0;
if( exists( otherStats.monsterbarn[idx1].monster[idx2] ) )
// SPrintf(s, "%d", otherStats.monsterbarn[idx1].monster[idx2].FP);
s += otherStats.monsterbarn[idx1].monster[idx2].name;
else
s = "monster";
if( s != "" )
return s;
else
return "(none)";
}
// Lets try something else to read bitflag item names
string ReadItemBitName( BFLAG &flag ) {
local ITEMID i = flag.idx;
return EnumToString( i );
}
// Read and display monster names in otherstats
string ReadMonName( MONSTAT &stats ) {
local string s;
s += stats.name;
if( s != "" )
return s;
else
return "(none)";
}
// Reverse bit order in a byte
ubyte ReverseBits( ubyte bits ) {
bits = (bits & 0xF0) >> 4 | (bits & 0x0F) << 4;
bits = (bits & 0xCC) >> 2 | (bits & 0x33) << 2;
bits = (bits & 0xAA) >> 1 | (bits & 0x55) << 1;
return bits;
}
// Read & write reverse bit-order birthday, which is a PITA
string ReadBDay( ubyte &val )
{
local string s;
local ubyte bits = ReverseBits( val ) >> 3;
SPrintf( s, "%d", bits );
return s;
}
void WriteBDay( ubyte &val, string s ) {
local ubyte bits;
SScanf( s, "%d", bits );
val = ReverseBits( bits ) >> 3;
}
// Read & write reverse bit-order birth month, still a PITA
string ReadBMonth( ubyte &val )
{
local string s;
local ubyte bits = ReverseBits( val ) >> 6;
SPrintf( s, "%d", bits );
return s;
}
void WriteBMonth( ubyte &val, string s ) {
local ubyte bits;
SScanf( s, "%d", bits );
val = ReverseBits( bits ) >> 6;
}
// Get a nice display string for BDay
string GetBDay( BDAY &bday ) {
local string s;
local ubyte day = ReverseBits( bday.day ) >> 3;
local ubyte season = ReverseBits( bday.season ) >> 6;
local MONTH month = season;
SPrintf( s, "%d. %s", day, EnumToString(month) );
return s;
}
// Display & modify crop level
string ReadCropLvl( ushort &lvl ) {
local string s;
local float f1;
SScanf( ReadFieldStat( lvl, 12, 16, 0, 0 ) , "%f", f1 );
SPrintf(s, "%f", f1 + 1 );
return s;
}
void WriteCropLvl( ushort &lvl, string s ) {
local double value;
SScanf( s, "%lf", value );
value = Max( Abs(value) - 1, 0 ); // minimum 0
SScanf( WriteFieldStat( value, 12, 16, 0, 0 ), "%u", lvl );
}
// Display & modify crop size bonus
string ReadCropSize( ushort &size ) {
return ReadFieldStat( size, 10, 2, 1, 0 );
}
void WriteCropSize( ushort &size, string s ) {
local double value;
SScanf( s, "%lf", value );
SScanf( WriteFieldStat( value, 10, 2, 1, 0 ), "%u", size );
}
// Display & modify crop growth
string ReadCropGrowth( uint &grw ) {
return ReadFieldStat( grw, 17, 512, 0, 0 );
}
void WriteCropGrowth( uint &grw, string s ) {
local double value;
SScanf( s, "%lf", value );
SScanf( WriteFieldStat( value, 17, 512, 0, 0 ), "%u", grw );
}
// Display & modify additional crop yield
string ReadCropNum( ushort &num ) {
return ReadFieldStat( num, 12, 8, 1, 0 );
}
void WriteCropNum( ushort &num, string s ) {
local double value;
SScanf( s, "%lf", value );
SScanf( WriteFieldStat( value, 12, 8, 1, 0 ), "%u", num );
}
// All the silly helper functions for soil values
string GetTmpSpeed( uint16 &fval ) {
return ReadFieldStat( fval, 11, 8, 0, 1 );
}
void SetTmpSpeed( uint16 &fval, string s ) {
local double value;
SScanf( s, "%lf", value );
SScanf( WriteFieldStat( value, 11, 8, 0, 1 ), "%u", fval );
}
string GetTmpNumber( uint16 &fval ) {
return ReadFieldStat( fval, 11, 4, 1, 1 );
}
void SetTmpNumber( uint16 &fval, string s ) {
local double value;
SScanf( s, "%lf", value );
SScanf( WriteFieldStat( value, 11, 4, 1, 1 ), "%u", fval );
}
string GetTmpQuality( uint16 &fval ) {
return ReadFieldStat( fval, 10, 2, 1, 1 );
}
void SetTmpQuality( uint16 &fval, string s ) {
local double value;
SScanf( s, "%lf", value );
SScanf( WriteFieldStat( value, 10, 2, 1, 1 ), "%u", fval );
}
string GetTmpSize( uint16 &fval ) {
return ReadFieldStat( fval, 10, 2, 1, 1 );
}
void SetTmpSize( uint16 &fval, string s ) {
local double value;
SScanf( s, "%lf", value );
SScanf( WriteFieldStat( value, 10, 2, 1, 1 ), "%u", fval );
}
string GetOverall( ubyte &fval ) {
local string s;
local float f1;
local uint value = parentof(fval).overallA;
value = (value << 8) + parentof(fval).overallB;
SScanf( ReadFieldStat( value, 12, 16, 0, 0 ) , "%f", f1 );
SPrintf(s, "%f", f1 + 1 );
return s;
}
void SetOverall( ubyte &fval, string s ) {
local float f1, f2;
local double value;
SScanf( s, "%lf", value );
value = Abs( value );
//Printf( "Received input string %s, read out value: %lf \n", s, value);
f1 = Max( Floor(value) - 1, 0 ); // minimum 0
f2 = Max( value - f1 - 1, 0 ); // minimum 0
//Printf( "Split values into: ValA %f, ValB %f \n", f1, f2);
SScanf( WriteFieldStat( f1, 4, 15, 0, 0 ) , "%u", parentof(fval).overallA );
SScanf( WriteFieldStat( f2, 8, 1, 0, 0 ) , "%u", parentof(fval).overallB );
}
string GetSpeed( ubyte &fval ) {
local string s;
local float f1;
local uint value = parentof(fval).speedA;
value = (value << 8) + parentof(fval).speedB;
SScanf( ReadFieldStat( value, 12, 16, 0, 0 ) , "%f", f1 );
SPrintf(s, "%f", f1 + 1 );
return s;
}
void SetSpeed( ubyte &fval, string s ) {
local float f1, f2;
local double value;
SScanf( s, "%lf", value );
value = Abs( value );
f1 = Max( Floor(value) - 1, 0 ); // minimum 0
f2 = Max( value - f1 - 1, 0 ); // minimum 0
SScanf( WriteFieldStat( f1, 4, 15, 0, 0 ) , "%u", parentof(fval).speedA );
SScanf( WriteFieldStat( f2, 8, 1, 0, 0 ) , "%u", parentof(fval).speedB );
}
string GetSize( ubyte &fval ) {
local string s;
local float f1;
local uint value = parentof(fval).sizeA;
value = (value << 8) + parentof(fval).sizeB;
SScanf( ReadFieldStat( value, 12, 16, 0, 0 ) , "%f", f1 );
SPrintf(s, "%f", f1 + 1 );
return s;
}
void SetSize( ubyte &fval, string s ) {
local float f1, f2;
local double value;
SScanf( s, "%lf", value );
value = Abs( value );
f1 = Max( Floor(value) - 1, 0 ); // minimum 0
f2 = Max( value - f1 - 1, 0 ); // minimum 0
SScanf( WriteFieldStat( f1, 4, 15, 0, 0 ) , "%u", parentof(fval).sizeA );
SScanf( WriteFieldStat( f2, 8, 1, 0, 0 ) , "%u", parentof(fval).sizeB );
}
string GetQuality( ubyte &fval ) {
local string s;
local float f1;
local uint value = parentof(fval).qualityA;
value = (value << 8) + parentof(fval).qualityB;
SScanf( ReadFieldStat( value, 12, 16, 0, 0 ) , "%f", f1 );
SPrintf(s, "%f", f1 + 1 );
return s;
}
void SetQuality( ubyte &fval, string s ) {
local float f1, f2;
local double value;
SScanf( s, "%lf", value );
value = Abs( value );
f1 = Max( Floor(value) - 1, 0 ); // minimum 0
f2 = Max( value - f1 - 1, 0 ); // minimum 0
SScanf( WriteFieldStat( f1, 4, 15, 0, 0 ) , "%u", parentof(fval).qualityA );
SScanf( WriteFieldStat( f2, 8, 1, 0, 0 ) , "%u", parentof(fval).qualityB );
}
string GetNumber( ubyte &fval ) {
local string s;
local float f1;
local uint value = parentof(fval).numberA;
value = (value << 8) + parentof(fval).numberB;
SScanf( ReadFieldStat( value, 12, 16, 0, 0 ) , "%f", f1 );
SPrintf(s, "%f", f1 + 1 );
return s;
}
void SetNumber( ubyte &fval, string s ) {
local float f1, f2;
local double value;
SScanf( s, "%lf", value );
value = Abs( value );
f1 = Max( Floor(value) - 1, 0 ); // minimum 0
f2 = Max( value - f1 - 1, 0 ); // minimum 0
SScanf( WriteFieldStat( f1, 4, 15, 0, 0 ) , "%u", parentof(fval).numberA );
SScanf( WriteFieldStat( f2, 8, 1, 0, 0 ) , "%u", parentof(fval).numberB );
}
//-----------------------------------
// Define file itself
BitfieldDisablePadding();
HEADER header;
BTLSTATS battleStats;
SKILLS skills <comment="Level ( Exp )">;
ITEMS items;
MAPB mapBits;
UNKNWN UnknownStruct <size=1331, comment="Visited rooms / locations?">;
FARMS farms;
UNKNWN UnknownStruct2 <size=1024, comment="Overworld items? location(?) + CropID in pairs">;
UNKNWN UnknownStruct3 <size=220, comment="Some kind of flag field?">;
OSTATS otherStats;
UNKNWN UnknownStruct4 <size=1576>;
if ( FileSize() > 0x22400 ) // RF4S
struct { char name[25]; } names_Unknown[10];
else // RF4
struct { char name[25]; } names_Unknown[5];
SHIPL maxLevelsShipped <size=80, comment="Highest level shipped for seeds/produce">;
if ( FileSize() == 0x22400 ) // RF4
ubyte UnknownPadding <hidden=true>;
WOBJ worldObjects <comment="Unknown amount">;
UNKNWN UnknownStruct6 <size=650, comment="Hellstruct with reverse bit order values">;
RECIP unlockedRecipes;
NPCEQ npcInventories;
uint seedRNG <comment="Seed for random things like harvest report">;
UNKNWN UnknownStruct7 <size=116>;
if ( FileSize() > 0x22400 ) // RF4S
MISC misc <size=80>;
else // RF4
MISC misc <size=76>;
SHIPT shippedTotal <comment="Total money earned per item shipped">;
SHIPF shippedFishSize;
PICKB hasOwnedItem <comment="Check ItemID; whether player has picked up / owned an item">;
UNKNWN UnknownStruct8 <size=525>;
uint Unknowns[2] <hidden=true>;
SHIPB shippedFlags <comment="Whether played has ever shipped this item">;
// Extremely jank birthday, but at least it's editable
if ( FileSize() > 0x22400 ) // RF4S
FSeek(0x1E8DE);
else // RF4
FSeek(0x1E862);
BDAY playerBirthday;
Comments