#!/usr/bin/env python3 import struct, os, sys, argparse from libyaz0 import decompress # TODO automatically find dmadata FILE_TABLE_OFFSET = 0x1A500 # 0x1C110 for JP1.0, 0x1C050 for JP1.1, 0x24F60 for debug SCENE_NAMES = { 1137:'Z2_20SICHITAI2', 1138:'Z2_20SICHITAI2_room_00', 1139:'Z2_20SICHITAI2_room_01', 1140:'Z2_20SICHITAI2_room_02', 1141:'Z2_WITCH_SHOP', 1142:'Z2_WITCH_SHOP_room_00', 1143:'Z2_LAST_BS', 1144:'Z2_LAST_BS_room_00', 1145:'Z2_HAKASHITA', 1146:'Z2_HAKASHITA_room_00', 1147:'Z2_HAKASHITA_room_01', 1148:'Z2_HAKASHITA_room_02', 1149:'Z2_HAKASHITA_room_03', 1150:'Z2_HAKASHITA_room_04', 1151:'Z2_AYASHIISHOP', 1152:'Z2_AYASHIISHOP_room_00', 1153:'Z2_AYASHIISHOP_room_01', 1154:'Z2_OMOYA', 1155:'Z2_OMOYA_room_00', 1156:'Z2_OMOYA_room_01', 1157:'Z2_OMOYA_room_02', 1158:'Z2_BOWLING', 1159:'Z2_BOWLING_room_00', 1160:'Z2_SONCHONOIE', 1161:'Z2_SONCHONOIE_room_00', 1162:'Z2_SONCHONOIE_room_01', 1163:'Z2_SONCHONOIE_room_02', 1164:'Z2_SONCHONOIE_room_03', 1165:'Z2_IKANA', 1166:'Z2_IKANA_room_00', 1167:'Z2_IKANA_room_01', 1168:'Z2_IKANA_room_02', 1169:'Z2_IKANA_room_03', 1170:'Z2_IKANA_room_04', 1171:'Z2_KAIZOKU', 1172:'Z2_KAIZOKU_room_00', 1173:'Z2_MILK_BAR', 1174:'Z2_MILK_BAR_room_00', 1175:'Z2_INISIE_N', 1176:'Z2_INISIE_N_room_00', 1177:'Z2_INISIE_N_room_01', 1178:'Z2_INISIE_N_room_02', 1179:'Z2_INISIE_N_room_03', 1180:'Z2_INISIE_N_room_04', 1181:'Z2_INISIE_N_room_05', 1182:'Z2_INISIE_N_room_06', 1183:'Z2_INISIE_N_room_07', 1184:'Z2_INISIE_N_room_08', 1185:'Z2_INISIE_N_room_09', 1186:'Z2_INISIE_N_room_10', 1187:'Z2_INISIE_N_room_11', 1188:'Z2_TAKARAYA', 1189:'Z2_TAKARAYA_room_00', 1190:'Z2_INISIE_R', 1191:'Z2_INISIE_R_room_00', 1192:'Z2_INISIE_R_room_01', 1193:'Z2_INISIE_R_room_02', 1194:'Z2_INISIE_R_room_03', 1195:'Z2_INISIE_R_room_04', 1196:'Z2_INISIE_R_room_05', 1197:'Z2_INISIE_R_room_06', 1198:'Z2_INISIE_R_room_07', 1199:'Z2_INISIE_R_room_08', 1200:'Z2_INISIE_R_room_09', 1201:'Z2_INISIE_R_room_10', 1202:'Z2_INISIE_R_room_11', 1203:'Z2_OKUJOU', 1204:'Z2_OKUJOU_room_00', 1205:'Z2_OPENINGDAN', 1206:'Z2_OPENINGDAN_room_00', 1207:'Z2_OPENINGDAN_room_01', 1208:'Z2_MITURIN', 1209:'Z2_MITURIN_room_00', 1210:'Z2_MITURIN_room_01', 1211:'Z2_MITURIN_room_02', 1212:'Z2_MITURIN_room_03', 1213:'Z2_MITURIN_room_04', 1214:'Z2_MITURIN_room_05', 1215:'Z2_MITURIN_room_06', 1216:'Z2_MITURIN_room_07', 1217:'Z2_MITURIN_room_08', 1218:'Z2_MITURIN_room_09', 1219:'Z2_MITURIN_room_10', 1220:'Z2_MITURIN_room_11', 1221:'Z2_MITURIN_room_12', 1222:'Z2_13HUBUKINOMITI', 1223:'Z2_13HUBUKINOMITI_room_00', 1224:'Z2_CASTLE', 1225:'Z2_CASTLE_room_00', 1226:'Z2_CASTLE_room_01', 1227:'Z2_CASTLE_room_02', 1228:'Z2_CASTLE_room_03', 1229:'Z2_CASTLE_room_04', 1230:'Z2_CASTLE_room_05', 1231:'Z2_CASTLE_room_06', 1232:'Z2_CASTLE_room_07', 1233:'Z2_CASTLE_room_08', 1234:'Z2_CASTLE_room_09', 1235:'Z2_DEKUTES', 1236:'Z2_DEKUTES_room_00', 1237:'Z2_MITURIN_BS', 1238:'Z2_MITURIN_BS_room_00', 1239:'Z2_SYATEKI_MIZU', 1240:'Z2_SYATEKI_MIZU_room_00', 1241:'Z2_HAKUGIN', 1242:'Z2_HAKUGIN_room_00', 1243:'Z2_HAKUGIN_room_01', 1244:'Z2_HAKUGIN_room_02', 1245:'Z2_HAKUGIN_room_03', 1246:'Z2_HAKUGIN_room_04', 1247:'Z2_HAKUGIN_room_05', 1248:'Z2_HAKUGIN_room_06', 1249:'Z2_HAKUGIN_room_07', 1250:'Z2_HAKUGIN_room_08', 1251:'Z2_HAKUGIN_room_09', 1252:'Z2_HAKUGIN_room_10', 1253:'Z2_HAKUGIN_room_11', 1254:'Z2_HAKUGIN_room_12', 1255:'Z2_HAKUGIN_room_13', 1256:'Z2_ROMANYMAE', 1257:'Z2_ROMANYMAE_room_00', 1258:'Z2_PIRATE', 1259:'Z2_PIRATE_room_00', 1260:'Z2_PIRATE_room_01', 1261:'Z2_PIRATE_room_02', 1262:'Z2_PIRATE_room_03', 1263:'Z2_PIRATE_room_04', 1264:'Z2_PIRATE_room_05', 1265:'Z2_PIRATE_room_06', 1266:'Z2_PIRATE_room_07', 1267:'Z2_PIRATE_room_08', 1268:'Z2_PIRATE_room_09', 1269:'Z2_PIRATE_room_10', 1270:'Z2_PIRATE_room_11', 1271:'Z2_PIRATE_room_12', 1272:'Z2_PIRATE_room_13', 1273:'Z2_PIRATE_room_14', 1274:'Z2_SYATEKI_MORI', 1275:'Z2_SYATEKI_MORI_room_00', 1276:'Z2_SINKAI', 1277:'Z2_SINKAI_room_00', 1278:'Z2_YOUSEI_IZUMI', 1279:'Z2_YOUSEI_IZUMI_room_00', 1280:'Z2_YOUSEI_IZUMI_room_01', 1281:'Z2_YOUSEI_IZUMI_room_02', 1282:'Z2_YOUSEI_IZUMI_room_03', 1283:'Z2_YOUSEI_IZUMI_room_04', 1284:'Z2_KINSTA1', 1285:'Z2_KINSTA1_room_00', 1286:'Z2_KINSTA1_room_01', 1287:'Z2_KINSTA1_room_02', 1288:'Z2_KINSTA1_room_03', 1289:'Z2_KINSTA1_room_04', 1290:'Z2_KINSTA1_room_05', 1291:'Z2_KINDAN2', 1292:'Z2_KINDAN2_room_00', 1293:'Z2_KINDAN2_room_01', 1294:'Z2_KINDAN2_room_02', 1295:'Z2_KINDAN2_room_03', 1296:'Z2_KINDAN2_room_04', 1297:'Z2_KINDAN2_room_05', 1298:'Z2_TENMON_DAI', 1299:'Z2_TENMON_DAI_room_00', 1300:'Z2_TENMON_DAI_room_01', 1301:'Z2_LAST_DEKU', 1302:'Z2_LAST_DEKU_room_00', 1303:'Z2_LAST_DEKU_room_01', 1304:'Z2_22DEKUCITY', 1305:'Z2_22DEKUCITY_room_00', 1306:'Z2_22DEKUCITY_room_01', 1307:'Z2_22DEKUCITY_room_02', 1308:'Z2_KAJIYA', 1309:'Z2_KAJIYA_room_00', 1310:'Z2_00KEIKOKU', 1311:'Z2_00KEIKOKU_room_00', 1312:'Z2_POSTHOUSE', 1313:'Z2_POSTHOUSE_room_00', 1314:'Z2_LABO', 1315:'Z2_LABO_room_00', 1316:'Z2_DANPEI2TEST', 1317:'Z2_DANPEI2TEST_room_00', 1318:'Z2_DANPEI2TEST_room_01', 1319:'Z2_16GORON_HOUSE', 1320:'Z2_16GORON_HOUSE_room_00', 1321:'Z2_16GORON_HOUSE_room_01', 1322:'Z2_33ZORACITY', 1323:'Z2_33ZORACITY_room_00', 1324:'Z2_8ITEMSHOP', 1325:'Z2_8ITEMSHOP_room_00', 1326:'Z2_F01', 1327:'Z2_F01_room_00', 1328:'Z2_INISIE_BS', 1329:'Z2_INISIE_BS_room_00', 1330:'Z2_30GYOSON', 1331:'Z2_30GYOSON_room_00', 1332:'Z2_31MISAKI', 1333:'Z2_31MISAKI_room_00', 1334:'Z2_TAKARAKUJI', 1335:'Z2_TAKARAKUJI_room_00', 1336:'Z2_TORIDE', 1337:'Z2_TORIDE_room_00', 1338:'Z2_FISHERMAN', 1339:'Z2_FISHERMAN_room_00', 1340:'Z2_GORONSHOP', 1341:'Z2_GORONSHOP_room_00', 1342:'Z2_DEKU_KING', 1343:'Z2_DEKU_KING_room_00', 1344:'Z2_LAST_GORON', 1345:'Z2_LAST_GORON_room_00', 1346:'Z2_LAST_GORON_room_01', 1347:'Z2_24KEMONOMITI', 1348:'Z2_24KEMONOMITI_room_00', 1349:'Z2_F01_B', 1350:'Z2_F01_B_room_00', 1351:'Z2_F01C', 1352:'Z2_F01C_room_00', 1353:'Z2_BOTI', 1354:'Z2_BOTI_room_00', 1355:'Z2_BOTI_room_01', 1356:'Z2_HAKUGIN_BS', 1357:'Z2_HAKUGIN_BS_room_00', 1358:'Z2_20SICHITAI', 1359:'Z2_20SICHITAI_room_00', 1360:'Z2_20SICHITAI_room_01', 1361:'Z2_20SICHITAI_room_02', 1362:'Z2_21MITURINMAE', 1363:'Z2_21MITURINMAE_room_00', 1364:'Z2_LAST_ZORA', 1365:'Z2_LAST_ZORA_room_00', 1366:'Z2_11GORONNOSATO2', 1367:'Z2_11GORONNOSATO2_room_00', 1368:'Z2_11GORONNOSATO2_room_01', 1369:'Z2_SEA', 1370:'Z2_SEA_room_00', 1371:'Z2_SEA_room_01', 1372:'Z2_SEA_room_02', 1373:'Z2_SEA_room_03', 1374:'Z2_SEA_room_04', 1375:'Z2_SEA_room_05', 1376:'Z2_SEA_room_06', 1377:'Z2_SEA_room_07', 1378:'Z2_SEA_room_08', 1379:'Z2_SEA_room_09', 1380:'Z2_SEA_room_10', 1381:'Z2_SEA_room_11', 1382:'Z2_SEA_room_12', 1383:'Z2_SEA_room_13', 1384:'Z2_SEA_room_14', 1385:'Z2_SEA_room_15', 1386:'Z2_35TAKI', 1387:'Z2_35TAKI_room_00', 1388:'Z2_REDEAD', 1389:'Z2_REDEAD_room_00', 1390:'Z2_REDEAD_room_01', 1391:'Z2_REDEAD_room_02', 1392:'Z2_REDEAD_room_03', 1393:'Z2_REDEAD_room_04', 1394:'Z2_REDEAD_room_05', 1395:'Z2_REDEAD_room_06', 1396:'Z2_REDEAD_room_07', 1397:'Z2_REDEAD_room_08', 1398:'Z2_REDEAD_room_09', 1399:'Z2_REDEAD_room_10', 1400:'Z2_REDEAD_room_11', 1401:'Z2_REDEAD_room_12', 1402:'Z2_REDEAD_room_13', 1403:'Z2_BANDROOM', 1404:'Z2_BANDROOM_room_00', 1405:'Z2_BANDROOM_room_01', 1406:'Z2_BANDROOM_room_02', 1407:'Z2_BANDROOM_room_03', 1408:'Z2_BANDROOM_room_04', 1409:'Z2_11GORONNOSATO', 1410:'Z2_11GORONNOSATO_room_00', 1411:'Z2_11GORONNOSATO_room_01', 1412:'Z2_GORON_HAKA', 1413:'Z2_GORON_HAKA_room_00', 1414:'Z2_SECOM', 1415:'Z2_SECOM_room_00', 1416:'Z2_SECOM_room_01', 1417:'Z2_10YUKIYAMANOMURA', 1418:'Z2_10YUKIYAMANOMURA_room_00', 1419:'Z2_TOUGITES', 1420:'Z2_TOUGITES_room_00', 1421:'Z2_DANPEI', 1422:'Z2_DANPEI_room_00', 1423:'Z2_DANPEI_room_01', 1424:'Z2_DANPEI_room_02', 1425:'Z2_DANPEI_room_03', 1426:'Z2_DANPEI_room_04', 1427:'Z2_DANPEI_room_05', 1428:'Z2_DANPEI_room_06', 1429:'Z2_DANPEI_room_07', 1430:'Z2_DANPEI_room_08', 1431:'Z2_IKANAMAE', 1432:'Z2_IKANAMAE_room_00', 1433:'Z2_DOUJOU', 1434:'Z2_DOUJOU_room_00', 1435:'Z2_MUSICHOUSE', 1436:'Z2_MUSICHOUSE_room_00', 1437:'Z2_IKNINSIDE', 1438:'Z2_IKNINSIDE_room_00', 1439:'Z2_IKNINSIDE_room_01', 1440:'Z2_MAP_SHOP', 1441:'Z2_MAP_SHOP_room_00', 1442:'Z2_F40', 1443:'Z2_F40_room_00', 1444:'Z2_F41', 1445:'Z2_F41_room_00', 1446:'Z2_10YUKIYAMANOMURA2', 1447:'Z2_10YUKIYAMANOMURA2_room_00', 1448:'Z2_10YUKIYAMANOMURA2_room_01', 1449:'Z2_14YUKIDAMANOMITI', 1450:'Z2_14YUKIDAMANOMITI_room_00', 1451:'Z2_12HAKUGINMAE', 1452:'Z2_12HAKUGINMAE_room_00', 1453:'Z2_17SETUGEN', 1454:'Z2_17SETUGEN_room_00', 1455:'Z2_17SETUGEN2', 1456:'Z2_17SETUGEN2_room_00', 1457:'Z2_SEA_BS', 1458:'Z2_SEA_BS_room_00', 1459:'Z2_RANDOM', 1460:'Z2_RANDOM_room_00', 1461:'Z2_RANDOM_room_01', 1462:'Z2_RANDOM_room_02', 1463:'Z2_RANDOM_room_03', 1464:'Z2_RANDOM_room_04', 1465:'Z2_RANDOM_room_05', 1466:'Z2_YADOYA', 1467:'Z2_YADOYA_room_00', 1468:'Z2_YADOYA_room_01', 1469:'Z2_YADOYA_room_02', 1470:'Z2_YADOYA_room_03', 1471:'Z2_YADOYA_room_04', 1472:'Z2_KONPEKI_ENT', 1473:'Z2_KONPEKI_ENT_room_00', 1474:'Z2_INSIDETOWER', 1475:'Z2_INSIDETOWER_room_00', 1476:'Z2_INSIDETOWER_room_01', 1477:'Z2_26SARUNOMORI', 1478:'Z2_26SARUNOMORI_room_00', 1479:'Z2_26SARUNOMORI_room_01', 1480:'Z2_26SARUNOMORI_room_02', 1481:'Z2_26SARUNOMORI_room_03', 1482:'Z2_26SARUNOMORI_room_04', 1483:'Z2_26SARUNOMORI_room_05', 1484:'Z2_26SARUNOMORI_room_06', 1485:'Z2_26SARUNOMORI_room_07', 1486:'Z2_26SARUNOMORI_room_08', 1487:'Z2_LOST_WOODS', 1488:'Z2_LOST_WOODS_room_00', 1489:'Z2_LOST_WOODS_room_01', 1490:'Z2_LOST_WOODS_room_02', 1491:'Z2_LAST_LINK', 1492:'Z2_LAST_LINK_room_00', 1493:'Z2_LAST_LINK_room_01', 1494:'Z2_LAST_LINK_room_02', 1495:'Z2_LAST_LINK_room_03', 1496:'Z2_LAST_LINK_room_04', 1497:'Z2_LAST_LINK_room_05', 1498:'Z2_LAST_LINK_room_06', 1499:'Z2_LAST_LINK_room_07', 1500:'Z2_SOUGEN', 1501:'Z2_SOUGEN_room_00', 1502:'Z2_BOMYA', 1503:'Z2_BOMYA_room_00', 1504:'Z2_KYOJINNOMA', 1505:'Z2_KYOJINNOMA_room_00', 1506:'Z2_KOEPONARACE', 1507:'Z2_KOEPONARACE_room_00', 1508:'Z2_GORONRACE', 1509:'Z2_GORONRACE_room_00', 1510:'Z2_TOWN', 1511:'Z2_TOWN_room_00', 1512:'Z2_ICHIBA', 1513:'Z2_ICHIBA_room_00', 1514:'Z2_BACKTOWN', 1515:'Z2_BACKTOWN_room_00', 1516:'Z2_CLOCKTOWER', 1517:'Z2_CLOCKTOWER_room_00', 1518:'Z2_ALLEY', 1519:'Z2_ALLEY_room_00', 1520:'SPOT00', 1521:'SPOT00_room_00', 1522:'KAKUSIANA', 1523:'KAKUSIANA_room_00', 1524:'KAKUSIANA_room_01', 1525:'KAKUSIANA_room_02', 1526:'KAKUSIANA_room_03', 1527:'KAKUSIANA_room_04', 1528:'KAKUSIANA_room_05', 1529:'KAKUSIANA_room_06', 1530:'KAKUSIANA_room_07', 1531:'KAKUSIANA_room_08', 1532:'KAKUSIANA_room_09', 1533:'KAKUSIANA_room_10', 1534:'KAKUSIANA_room_11', 1535:'KAKUSIANA_room_12', 1536:'KAKUSIANA_room_13', 1537:'KAKUSIANA_room_14', } OBJECT_NAMES = { 649:'gameplay_keep', 650:'gameplay_field_keep', 651:'gameplay_dangeon_keep', 652:'gameplay_object_exchange_static', # 652 not set, gameplay_object_exchange_static? 653:'object_link_boy', 654:'object_link_child', 655:'object_link_goron', 656:'object_link_zora', 657:'object_link_nuts', 658:'object_mask_ki_tan', 659:'object_mask_rabit', 660:'object_mask_skj', 661:'object_mask_truth', 662:'object_mask_gibudo', 663:'object_mask_json', 664:'object_mask_kerfay', 665:'object_mask_bigelf', 666:'object_mask_kyojin', 667:'object_mask_romerny', 668:'object_mask_posthat', 669:'object_mask_zacho', 670:'object_mask_stone', 671:'object_mask_bree', 672:'object_mask_gero', 673:'object_mask_yofukasi', 674:'object_mask_meoto', 675:'object_mask_dancer', 676:'object_mask_bakuretu', 677:'object_mask_bu_san', 678:'object_mask_goron', 679:'object_mask_zora', 680:'object_mask_nuts', 681:'object_mask_boy', 682:'object_box', 683:'object_okuta', 684:'object_wallmaster', 685:'object_dy_obj', 686:'object_firefly', 687:'object_dodongo', 688:'object_niw', 689:'object_tite', 690:'object_ph', 691:'object_dinofos', 692:'object_zl1', 693:'object_bubble', 694:'object_test3', 695:'object_famos', 696:'object_st', 697:'object_thiefbird', 698:'object_bombf', 699:'object_am', 700:'object_dekubaba', 701:'object_warp1', 702:'object_b_heart', 703:'object_dekunuts', 704:'object_bb', 705:'object_death', 706:'object_hata', 707:'object_wood02', 708:'object_trap', 709:'object_vm', 710:'object_efc_star_field', 711:'object_rd', 712:'object_yukimura_obj', # skip object_heavy_object (in JP) 713:'object_horse_link_child', 714:'object_syokudai', 715:'object_efc_tw', 716:'object_gi_key', 717:'object_mir_ray', 718:'object_ctower_rot', 719:'object_bdoor', 720:'object_sb', 721:'object_gi_melody', 722:'object_gi_heart', 723:'object_gi_compass', 724:'object_gi_bosskey', 725:'object_gi_nuts', 726:'object_gi_hearts', 727:'object_gi_arrowcase', 728:'object_gi_bombpouch', 729:'object_in', 730:'object_os_anime', 731:'object_gi_bottle', 732:'object_gi_stick', 733:'object_gi_map', 734:'object_oF1d_map', 735:'object_ru2', 736:'object_gi_magicpot', 737:'object_gi_bomb_1', 738:'object_ma2', 739:'object_gi_purse', 740:'object_rr', 741:'object_gi_arrow', 742:'object_gi_bomb_2', 743:'object_gi_shield_2', 744:'object_gi_hookshot', 745:'object_gi_ocarina', 746:'object_gi_milk', 747:'object_ma1', 748:'object_ny', 749:'object_fr', 750:'object_gi_bow', 751:'object_gi_glasses', 752:'object_gi_liquid', 753:'object_ani', 754:'object_gi_shield_3', 755:'object_gi_bean', 756:'object_gi_fish', 757:'object_gi_longsword', 758:'object_zo', 759:'object_umajump', 760:'object_mastergolon', 761:'object_masterzoora', 762:'object_aob', 763:'object_ik', 764:'object_ahg', 765:'object_cne', 766:'object_bji', 767:'object_bba', 768:'object_an1', 769:'object_boj', 770:'object_fz', 771:'object_bob', 772:'object_ge1', 773:'object_yabusame_point', 774:'object_d_hsblock', 775:'object_d_lift', 776:'object_mamenoki', 777:'object_goroiwa', 778:'object_toryo', 779:'object_daiku', 780:'object_nwc', 781:'object_gm', 782:'object_ms', 783:'object_hs', 784:'object_lightswitch', 785:'object_kusa', 786:'object_tsubo', 787:'object_kanban', 788:'object_owl', 789:'object_mk', 790:'object_fu', 791:'object_gi_ki_tan_mask', 792:'object_gi_mask18', 793:'object_gi_rabit_mask', 794:'object_gi_truth_mask', 795:'object_stream', 796:'object_mm', 797:'object_js', 798:'object_cs', 799:'object_gi_soldout', 800:'object_mag', 801:'object_gi_golonmask', 802:'object_gi_zoramask', 803:'object_ka', 804:'object_zg', 805:'object_gi_m_arrow', 806:'object_ds2', 807:'object_fish', 808:'object_gi_sutaru', 809:'object_ssh', 810:'object_bigslime', 811:'object_bg', 812:'object_bombiwa', 813:'object_hintnuts', 814:'object_rs', 815:'object_gla', 816:'object_geldb', 817:'object_dog', 818:'object_kibako2', 819:'object_dns', 820:'object_dnk', 821:'object_gi_insect', 822:'object_gi_ghost', 823:'object_gi_soul', 824:'object_f40_obj', 825:'object_gi_rupy', 826:'object_po_composer', 827:'object_mu', 828:'object_wf', 829:'object_skb', 830:'object_gs', 831:'object_ps', 832:'object_omoya_obj', 833:'object_crow', 834:'object_cow', 835:'object_gi_sword_1', 836:'object_zl4', 837:'object_grasshopper', 838:'object_boyo', 839:'object_fwall', 840:'object_jso', 841:'object_knight', 842:'object_icicle', 843:'object_spdweb', 844:'object_boss01', 845:'object_boss02', 846:'object_boss03', 847:'object_boss04', 848:'object_boss05', 849:'object_boss07', 850:'object_raf', 851:'object_funen', 852:'object_raillift', 853:'object_numa_obj', 854:'object_flowerpot', 855:'object_spinyroll', 856:'object_ice_block', 857:'object_keikoku_demo', 858:'object_slime', 859:'object_pr', 860:'object_f52_obj', 861:'object_f53_obj', 862:'object_kibako', 863:'object_sek', 864:'object_gmo', 865:'object_bat', 866:'object_sekihil', 867:'object_sekihig', 868:'object_sekihin', 869:'object_sekihiz', 870:'object_wiz', 871:'object_ladder', 872:'object_mkk', 873:'object_keikoku_obj', 874:'object_sichitai_obj', 875:'object_dekucity_ana_obj', 876:'object_rat', 877:'object_water_effect', 878:'object_dblue_object', 879:'object_bal', 880:'object_warp_uzu', 881:'object_driftice', 882:'object_fall', 883:'object_hanareyama_obj', 884:'object_crace_object', 885:'object_dnq', 886:'object_obj_tokeidai', 887:'object_eg', 888:'object_tru', 889:'object_trt', 890:'object_hakugin_obj', 891:'object_horse_game_check', 892:'object_stk', 893:'object_mnk', 894:'object_gi_bottle_red', 895:'object_tokei_tobira', 896:'object_az', 897:'object_twig', 898:'object_dekucity_obj', 899:'object_po_fusen', 900:'object_racetsubo', 901:'object_ha', 902:'object_bigokuta', 903:'object_open_obj', 904:'object_fu_kaiten', 905:'object_fu_mato', 906:'object_mtoride', 907:'object_osn', 908:'object_tokei_step', 909:'object_lotus', 910:'object_tl', 911:'object_dkjail_obj', 912:'object_visiblock', 913:'object_tsn', 914:'object_ds2n', 915:'object_fsn', 916:'object_shn', 917:'object_bigicicle', 918:'object_gi_bottle_15', 919:'object_tk', 920:'object_market_obj', 921:'object_gi_reserve00', 922:'object_gi_reserve01', 923:'object_lightblock', 924:'object_takaraya_objects', 925:'object_wdhand', 926:'object_sdn', 927:'object_snowwd', 928:'object_giant', 929:'object_comb', 930:'object_hana', 931:'object_boss_hakugin', 932:'object_meganeana_obj', 933:'object_gi_nutsmask', 934:'object_stk2', 935:'object_spot11_obj', 936:'object_danpei_object', 937:'object_dhouse', 938:'object_hakaisi', 939:'object_po', 940:'object_snowman', 941:'object_po_sisters', 942:'object_pp', 943:'object_goronswitch', 944:'object_delf', 945:'object_botihasira', 946:'object_gi_bigbomb', 947:'object_pst', 948:'object_bsmask', 949:'object_spidertent', 950:'object_zoraegg', 951:'object_kbt', 952:'object_gg', 953:'object_maruta', 954:'object_ghaka', 955:'object_oyu', 956:'object_dnp', 957:'object_dai', 958:'object_kgy', 959:'object_fb', 960:'object_taisou', 961:'object_gk', 962:'object_haka_obj', 963:'object_dnt', 964:'object_yukiyama', 965:'object_icefloe', 966:'object_gi_gold_dust', 967:'object_gi_bottle_16', 968:'object_gi_bottle_22', 969:'object_bee', 970:'object_ot', 971:'object_utubo', 972:'object_dora', 973:'object_gi_loach', 974:'object_gi_seahorse', 975:'object_bigpo', 976:'object_hariko', 977:'object_dno', 978:'object_sinkai_kabe', 979:'object_kin2_obj', 980:'object_ishi', 981:'object_hakugin_demo', 982:'object_jg', 983:'object_gi_sword_2', 984:'object_gi_sword_3', 985:'object_gi_sword_4', 986:'object_um', 987:'object_rb', 988:'object_mbar_obj', 989:'object_ikana_obj', 990:'object_kz', 991:'object_tokei_turret', 992:'object_zog', 993:'object_rotlift', 994:'object_posthouse_obj', 995:'object_gi_mask09', 996:'object_gi_mask14', 997:'object_gi_mask15', 998:'object_inibs_object', 999:'object_tree', 1000:'object_kaizoku_obj', 1001:'object_gi_reserve_b_00', 1002:'object_gi_reserve_c_00', 1003:'object_zob', 1004:'object_milkbar', 1005:'object_dmask', 1006:'object_gi_reserve_c_01', 1007:'object_zod', 1008:'object_kumo30', 1009:'object_obj_yasi', 1010:'object_tanron1', 1011:'object_tanron2', 1012:'object_tanron3', 1013:'object_gi_magicmushroom', 1014:'object_obj_chan', 1015:'object_gi_mask10', 1016:'object_zos', 1017:'object_an2', 1018:'object_an3', 1019:'object_f40_switch', 1020:'object_lodmoon', 1021:'object_tro', 1022:'object_gi_mask12', 1023:'object_gi_mask23', 1024:'object_gi_bottle_21', 1025:'object_gi_camera', 1026:'object_kamejima', 1027:'object_nb', 1028:'object_harfgibud', 1029:'object_zov', 1030:'object_ah', 1031:'object_hgdoor', 1032:'object_dor01', 1033:'object_dor02', 1034:'object_dor03', 1035:'object_dor04', 1036:'object_last_obj', 1037:'object_redead_obj', 1038:'object_ikninside_obj', 1039:'object_iknv_obj', 1040:'object_pamera', 1041:'object_hsstump', 1042:'object_zm', 1043:'object_al', 1044:'object_tab', 1045:'object_secom_obj', 1046:'object_dt', 1047:'object_gi_mask03', 1048:'object_cha', 1049:'object_obj_dinner', 1050:'object_gi_reserve_b_01', 1051:'object_lastday', 1052:'object_bai', 1053:'object_ikn_demo', 1054:'object_gi_fieldmap', 1055:'object_big_fwall', 1056:'object_hunsui', 1057:'object_uch', 1058:'object_tanron4', 1059:'object_tanron5', 1060:'object_in2', 1061:'object_yb', 1062:'object_rz', 1063:'object_bjt', 1064:'object_taru', 1065:'object_moonston', 1066:'object_gi_schedule', 1067:'object_gi_stonemask', 1068:'object_zoraband', 1069:'object_kepn_koya', 1070:'object_obj_usiyane', 1071:'object_gi_mask05', 1072:'object_gi_mask11', 1073:'object_gi_mask20', 1074:'object_nnh', 1075:'object_kzsaku', 1076:'object_obj_milk_bin', 1077:'object_random_obj', 1078:'object_kujiya', 1079:'object_kitan', 1080:'object_gi_mask06', 1081:'object_gi_mask16', 1082:'object_astr_obj', 1083:'object_bsb', 1084:'object_fall2', 1085:'object_sth', 1086:'object_gi_mssa', 1087:'object_smtower', 1088:'object_gi_mask21', 1089:'object_yado_obj', 1090:'object_syoten', 1091:'object_moonend', 1092:'object_ob', 1093:'object_gi_bottle_04', 1094:'object_and', 1095:'object_obj_danpeilift', 1096:'object_drs', 1097:'object_msmo', 1098:'object_an4', 1099:'object_wdor01', 1100:'object_wdor02', 1101:'object_wdor03', 1102:'object_wdor04', 1103:'object_wdor05', 1104:'object_stk3', 1105:'object_kinsta1_obj', 1106:'object_kinsta2_obj', 1107:'object_bh', 1108:'object_gi_mask17', 1109:'object_gi_mask22', 1110:'object_lbfshot', 1111:'object_fusen', 1112:'object_ending_obj', 1113:'object_gi_mask13', } TEXTURE_NAMES = { 6:'kanji', 8:'icon_item_static', 9:'icon_item_24_static', 10:'icon_item_field_static', 11:'icon_item_dungeon_static', 12:'icon_item_gameover_static', 13:'icon_item_jpn_static', 14:'icon_item_vtx_static', 15:'map_i_static', 16:'map_grand_static', 17:'item_name_static', 18:'map_name_static', 19:'icon_item_static_test', 20:'icon_item_24_static_test', 21:'schedule_dma_static', 22:'schedule_dma_static_test', 23:'schedule_static', 24:'story_static', 25:'do_action_static', 26:'message_static', 27:'message_texture_static', 28:'nes_font_static', 29:'message_data_static', 30:'staff_message_data_static', 1114:'scene_texture_01', # Map Textures - Building Interiors I 1115:'scene_texture_02', # Map Textures - Building Interiors II 1116:'scene_texture_03', # Map Textures - Lost Woods 1117:'scene_texture_04', # Map Textures - Mountains 1118:'scene_texture_05', # Map Textures - Ocean 1119:'scene_texture_06', # Map Textures - Swamp 1120:'scene_texture_07', 1121:'scene_texture_08', # Map Textures - Field 1123:'title_static', 1126:'parameter_static', 1127:'week_static', 1128:'daytelop_static', 1129:'ger_daytelop_static', 1130:'fra_daytelop_static', 1131:'spa_daytelop_static', 1132:'d2_fine_static', 1133:'d2_cloud_static', 1134:'d2_fine_pal_static', 1538:'bump_texture_static', } OVERLAY_NAMES = { 32:'ovl_title', 33:'ovl_select', 34:'ovl_opening', 35:'ovl_file_choose', 36:'ovl_daytelop', 37:'ovl_kaleido_scope', 38:'ovl_Player_Actor', 39:'ovl_En_Test', 40:'ovl_En_GirlA', 41:'ovl_En_Part', 42:'ovl_En_Light', 43:'ovl_En_Door', 44:'ovl_En_Box', 45:'ovl_En_Pametfrog', 46:'ovl_En_Okuta', 47:'ovl_En_Bom', 48:'ovl_En_Wallmas', 49:'ovl_En_Dodongo', 50:'ovl_En_Firefly', 51:'ovl_En_Horse', 52:'ovl_En_Arrow', 53:'ovl_En_Elf', 54:'ovl_En_Niw', 55:'ovl_En_Tite', 56:'ovl_En_Peehat', 57:'ovl_En_Holl', 58:'ovl_En_Dinofos', 59:'ovl_En_Hata', 60:'ovl_En_Zl1', 61:'ovl_En_Viewer', 62:'ovl_En_Bubble', 63:'ovl_Door_Shutter', 64:'ovl_En_Boom', 65:'ovl_En_Torch2', 66:'ovl_En_Minifrog', 67:'ovl_En_St', 68:'ovl_Obj_Wturn', 69:'ovl_En_River_Sound', 70:'ovl_En_Ossan', 71:'ovl_En_Famos', 72:'ovl_En_Bombf', 73:'ovl_En_Am', 74:'ovl_En_Dekubaba', 75:'ovl_En_M_Fire1', 76:'ovl_En_M_Thunder', 77:'ovl_Bg_Breakwall', 78:'ovl_Door_Warp1', 79:'ovl_Obj_Syokudai', 80:'ovl_Item_B_Heart', 81:'ovl_En_Dekunuts', 82:'ovl_En_Bbfall', 83:'ovl_Arms_Hook', 84:'ovl_En_Bb', 85:'ovl_Bg_Keikoku_Spr', 86:'ovl_En_Wood02', 87:'ovl_En_Death', 88:'ovl_En_Minideath', 89:'ovl_En_Vm', 90:'ovl_Demo_Effect', 91:'ovl_Demo_Kankyo', 92:'ovl_En_Floormas', 93:'ovl_En_Rd', 94:'ovl_Bg_F40_Flift', 95:'ovl_Obj_Mure', 96:'ovl_En_Sw', 97:'ovl_Object_Kankyo', 98:'ovl_En_Horse_Link_Child', 99:'ovl_Door_Ana', 100:'ovl_En_Encount1', 101:'ovl_Demo_Tre_Lgt', 102:'ovl_En_Encount2', 103:'ovl_En_Fire_Rock', 104:'ovl_Bg_Ctower_Rot', 105:'ovl_Mir_Ray', 106:'ovl_En_Sb', 107:'ovl_En_Bigslime', 108:'ovl_En_Karebaba', 109:'ovl_En_In', 110:'ovl_En_Bom_Chu', 111:'ovl_En_Horse_Game_Check', 112:'ovl_En_Rr', 113:'ovl_En_Fr', 114:'ovl_En_Fishing', 115:'ovl_Obj_Oshihiki', 116:'ovl_Eff_Dust', 117:'ovl_Bg_Umajump', 118:'ovl_En_Insect', 119:'ovl_En_Butte', 120:'ovl_En_Fish', 121:'ovl_Item_Etcetera', 122:'ovl_Arrow_Fire', 123:'ovl_Arrow_Ice', 124:'ovl_Arrow_Light', 125:'ovl_Obj_Kibako', 126:'ovl_Obj_Tsubo', 127:'ovl_En_Ik', 128:'ovl_Demo_Shd', 129:'ovl_En_Dns', 130:'ovl_Elf_Msg', 131:'ovl_En_Honotrap', 132:'ovl_En_Tubo_Trap', 133:'ovl_Obj_Ice_Poly', 134:'ovl_En_Fz', 135:'ovl_En_Kusa', 136:'ovl_Obj_Bean', 137:'ovl_Obj_Bombiwa', 138:'ovl_Obj_Switch', 139:'ovl_Obj_Lift', 140:'ovl_Obj_Hsblock', 141:'ovl_En_Okarina_Tag', 142:'ovl_En_Goroiwa', 143:'ovl_En_Daiku', 144:'ovl_En_Nwc', 145:'ovl_Item_Inbox', 146:'ovl_En_Ge1', 147:'ovl_Obj_Blockstop', 148:'ovl_En_Sda', 149:'ovl_En_Clear_Tag', 150:'ovl_En_Gm', 151:'ovl_En_Ms', 152:'ovl_En_Hs', 153:'ovl_Bg_Ingate', 154:'ovl_En_Kanban', 155:'ovl_En_Attack_Niw', 156:'ovl_En_Mk', 157:'ovl_En_Owl', 158:'ovl_En_Ishi', 159:'ovl_Obj_Hana', 160:'ovl_Obj_Lightswitch', 161:'ovl_Obj_Mure2', 162:'ovl_En_Fu', 163:'ovl_En_Stream', 164:'ovl_En_Mm', 165:'ovl_En_Weather_Tag', 166:'ovl_En_Ani', 167:'ovl_En_Js', 168:'ovl_En_Okarina_Effect', 169:'ovl_En_Mag', 170:'ovl_Elf_Msg2', 171:'ovl_Bg_F40_Swlift', 172:'ovl_En_Kakasi', 173:'ovl_Obj_Makeoshihiki', 174:'ovl_Oceff_Spot', 175:'ovl_En_Torch', 176:'ovl_Shot_Sun', 177:'ovl_Obj_Roomtimer', 178:'ovl_En_Ssh', 179:'ovl_Oceff_Wipe', 180:'ovl_Effect_Ss_Dust', 181:'ovl_Effect_Ss_Kirakira', 182:'ovl_Effect_Ss_Bomb2', 183:'ovl_Effect_Ss_Blast', 184:'ovl_Effect_Ss_G_Spk', 185:'ovl_Effect_Ss_D_Fire', 186:'ovl_Effect_Ss_Bubble', 187:'ovl_Effect_Ss_G_Ripple', 188:'ovl_Effect_Ss_G_Splash', 189:'ovl_Effect_Ss_G_Fire', 190:'ovl_Effect_Ss_Lightning', 191:'ovl_Effect_Ss_Dt_Bubble', 192:'ovl_Effect_Ss_Hahen', 193:'ovl_Effect_Ss_Stick', 194:'ovl_Effect_Ss_Sibuki', 195:'ovl_Effect_Ss_Stone1', 196:'ovl_Effect_Ss_Hitmark', 197:'ovl_Effect_Ss_Fhg_Flash', 198:'ovl_Effect_Ss_K_Fire', 199:'ovl_Effect_Ss_Solder_Srch_Ball', 200:'ovl_Effect_Ss_Kakera', 201:'ovl_Effect_Ss_Ice_Piece', 202:'ovl_Effect_Ss_En_Ice', 203:'ovl_Effect_Ss_Fire_Tail', 204:'ovl_Effect_Ss_En_Fire', 205:'ovl_Effect_Ss_Extra', 206:'ovl_Effect_Ss_Dead_Db', 207:'ovl_Effect_Ss_Dead_Dd', 208:'ovl_Effect_Ss_Dead_Ds', 209:'ovl_Oceff_Storm', 210:'ovl_Obj_Demo', 211:'ovl_En_Minislime', 212:'ovl_En_Nutsball', 213:'ovl_Oceff_Wipe2', 214:'ovl_Oceff_Wipe3', 215:'ovl_En_Dg', 216:'ovl_En_Si', 217:'ovl_Obj_Comb', 218:'ovl_Obj_Kibako2', 219:'ovl_En_Hs2', 220:'ovl_Obj_Mure3', 221:'ovl_En_Tg', 222:'ovl_En_Wf', 223:'ovl_En_Skb', 224:'ovl_En_Gs', 225:'ovl_Obj_Sound', 226:'ovl_En_Crow', 227:'ovl_En_Cow', 228:'ovl_Oceff_Wipe4', 229:'ovl_En_Zo', 230:'ovl_Effect_Ss_Ice_Smoke', 231:'ovl_Obj_Makekinsuta', 232:'ovl_En_Ge3', 233:'ovl_Obj_Hamishi', 234:'ovl_En_Zl4', 235:'ovl_En_Mm2', 236:'ovl_Door_Spiral', 237:'ovl_Obj_Pzlblock', 238:'ovl_Obj_Toge', 239:'ovl_Obj_Armos', 240:'ovl_Obj_Boyo', 241:'ovl_En_Grasshopper', 242:'ovl_Obj_Grass', 243:'ovl_Obj_Grass_Carry', 244:'ovl_Obj_Grass_Unit', 245:'ovl_Bg_Fire_Wall', 246:'ovl_En_Bu', 247:'ovl_En_Encount3', 248:'ovl_En_Jso', 249:'ovl_Obj_Chikuwa', 250:'ovl_En_Knight', 251:'ovl_En_Warp_tag', 252:'ovl_En_Aob_01', 253:'ovl_En_Boj_01', 254:'ovl_En_Boj_02', 255:'ovl_En_Boj_03', 256:'ovl_En_Encount4', 257:'ovl_En_Bom_Bowl_Man', 258:'ovl_En_Syateki_Man', 259:'ovl_Bg_Icicle', 260:'ovl_En_Syateki_Crow', 261:'ovl_En_Boj_04', 262:'ovl_En_Cne_01', 263:'ovl_En_Bba_01', 264:'ovl_En_Bji_01', 265:'ovl_Bg_Spdweb', 266:'ovl_En_Mt_tag', 267:'ovl_Boss_01', 268:'ovl_Boss_02', 269:'ovl_Boss_03', 270:'ovl_Boss_04', 271:'ovl_Boss_05', 272:'ovl_Boss_06', 273:'ovl_Boss_07', 274:'ovl_Bg_Dy_Yoseizo', 275:'ovl_En_Boj_05', 276:'ovl_En_Sob1', 277:'ovl_En_Go', 278:'ovl_En_Raf', 279:'ovl_Obj_Funen', 280:'ovl_Obj_Raillift', 281:'ovl_Bg_Numa_Hana', 282:'ovl_Obj_Flowerpot', 283:'ovl_Obj_Spinyroll', 284:'ovl_Dm_Hina', 285:'ovl_En_Syateki_Wf', 286:'ovl_Obj_Skateblock', 287:'ovl_Effect_En_Ice_Block', 288:'ovl_Obj_Iceblock', 289:'ovl_En_Bigpamet', 290:'ovl_Bg_Dblue_Movebg', 291:'ovl_En_Syateki_Dekunuts', 292:'ovl_Elf_Msg3', 293:'ovl_En_Fg', 294:'ovl_Dm_Ravine', 295:'ovl_Dm_Sa', 296:'ovl_En_Slime', 297:'ovl_En_Pr', 298:'ovl_Obj_Toudai', 299:'ovl_Obj_Entotu', 300:'ovl_Obj_Bell', 301:'ovl_En_Syateki_Okuta', 302:'ovl_Obj_Shutter', 303:'ovl_Dm_Zl', 304:'ovl_En_Ru', 305:'ovl_En_Elfgrp', 306:'ovl_Dm_Tsg', 307:'ovl_En_Baguo', 308:'ovl_Obj_Vspinyroll', 309:'ovl_Obj_Smork', 310:'ovl_En_Test2', 311:'ovl_En_Test3', 312:'ovl_En_Test4', 313:'ovl_En_Bat', 314:'ovl_En_Sekihi', 315:'ovl_En_Wiz', 316:'ovl_En_Wiz_Brock', 317:'ovl_En_Wiz_Fire', 318:'ovl_Eff_Change', 319:'ovl_Dm_Statue', 320:'ovl_Obj_Fireshield', 321:'ovl_Bg_Ladder', 322:'ovl_En_Mkk', 323:'ovl_Demo_Getitem', 324:'ovl_En_Dnb', 325:'ovl_En_Dnh', 326:'ovl_En_Dnk', 327:'ovl_En_Dnq', 328:'ovl_Bg_Keikoku_Saku', 329:'ovl_Obj_Hugebombiwa', 330:'ovl_En_Firefly2', 331:'ovl_En_Rat', 332:'ovl_En_Water_Effect', 333:'ovl_En_Kusa2', 334:'ovl_Bg_Spout_Fire', 335:'ovl_En_Dy_Extra', 336:'ovl_En_Bal', 337:'ovl_En_Ginko_Man', 338:'ovl_En_Warp_Uzu', 339:'ovl_Obj_Driftice', 340:'ovl_En_Look_Nuts', 341:'ovl_En_Mushi2', 342:'ovl_En_Fall', 343:'ovl_En_Mm3', 344:'ovl_Bg_Crace_Movebg', 345:'ovl_En_Dno', 346:'ovl_En_Pr2', 347:'ovl_En_Prz', 348:'ovl_En_Jso2', 349:'ovl_Obj_Etcetera', 350:'ovl_En_Egol', 351:'ovl_Obj_Mine', 352:'ovl_Obj_Purify', 353:'ovl_En_Tru', 354:'ovl_En_Trt', 355:'ovl_En_Test5', 356:'ovl_En_Test6', 357:'ovl_En_Az', 358:'ovl_En_Estone', 359:'ovl_Bg_Hakugin_Post', 360:'ovl_Dm_Opstage', 361:'ovl_Dm_Stk', 362:'ovl_Dm_Char00', 363:'ovl_Dm_Char01', 364:'ovl_Dm_Char02', 365:'ovl_Dm_Char03', 366:'ovl_Dm_Char04', 367:'ovl_Dm_Char05', 368:'ovl_Dm_Char06', 369:'ovl_Dm_Char07', 370:'ovl_Dm_Char08', 371:'ovl_Dm_Char09', 372:'ovl_Obj_Tokeidai', 373:'ovl_En_Mnk', 374:'ovl_En_Egblock', 375:'ovl_En_Guard_Nuts', 376:'ovl_Bg_Hakugin_Bombwall', 377:'ovl_Obj_Tokei_Tobira', 378:'ovl_Bg_Hakugin_Elvpole', 379:'ovl_En_Ma4', 380:'ovl_En_Twig', 381:'ovl_En_Po_Fusen', 382:'ovl_En_Door_Etc', 383:'ovl_En_Bigokuta', 384:'ovl_Bg_Icefloe', 385:'ovl_fbdemo_triforce', 386:'ovl_fbdemo_wipe1', 387:'ovl_fbdemo_wipe3', 388:'ovl_fbdemo_wipe4', 389:'ovl_fbdemo_wipe5', 390:'ovl_Effect_Ss_Sbn', 391:'ovl_Obj_Ocarinalift', 392:'ovl_En_Time_Tag', 393:'ovl_Bg_Open_Shutter', 394:'ovl_Bg_Open_Spot', 395:'ovl_Bg_Fu_Kaiten', 396:'ovl_Obj_Aqua', 397:'ovl_En_Elforg', 398:'ovl_En_Elfbub', 399:'ovl_En_Fu_Mato', 400:'ovl_En_Fu_Kago', 401:'ovl_En_Osn', 402:'ovl_Bg_Ctower_Gear', 403:'ovl_En_Trt2', 404:'ovl_Obj_Tokei_Step', 405:'ovl_Bg_Lotus', 406:'ovl_En_Kame', 407:'ovl_Obj_Takaraya_Wall', 408:'ovl_Bg_Fu_Mizu', 409:'ovl_En_Sellnuts', 410:'ovl_Bg_Dkjail_Ivy', 411:'ovl_Obj_Visiblock', 412:'ovl_En_Takaraya', 413:'ovl_En_Tsn', 414:'ovl_En_Ds2n', 415:'ovl_En_Fsn', 416:'ovl_En_Shn', 417:'ovl_En_Stop_heishi', 418:'ovl_Obj_Bigicicle', 419:'ovl_En_Lift_Nuts', 420:'ovl_En_Tk', 421:'ovl_Bg_Market_Step', 422:'ovl_Obj_Lupygamelift', 423:'ovl_En_Test7', 424:'ovl_Obj_Lightblock', 425:'ovl_Mir_Ray2', 426:'ovl_En_Wdhand', 427:'ovl_En_Gamelupy', 428:'ovl_Bg_Danpei_Movebg', 429:'ovl_En_Snowwd', 430:'ovl_En_Pm', 431:'ovl_En_Gakufu', 432:'ovl_Elf_Msg4', 433:'ovl_Elf_Msg5', 434:'ovl_En_Col_Man', 435:'ovl_En_Talk_Gibud', 436:'ovl_En_Giant', 437:'ovl_Obj_Snowball', 438:'ovl_Boss_Hakugin', 439:'ovl_En_Gb2', 440:'ovl_En_Onpuman', 441:'ovl_Bg_Tobira01', 442:'ovl_En_Tag_Obj', 443:'ovl_Obj_Dhouse', 444:'ovl_Obj_Hakaisi', 445:'ovl_Bg_Hakugin_Switch', 446:'ovl_En_Snowman', 447:'ovl_TG_Sw', 448:'ovl_En_Po_Sisters', 449:'ovl_En_Pp', 450:'ovl_En_Hakurock', 451:'ovl_En_Hanabi', 452:'ovl_Obj_Dowsing', 453:'ovl_Obj_Wind', 454:'ovl_En_Racedog', 455:'ovl_En_Kendo_Js', 456:'ovl_Bg_Botihasira', 457:'ovl_En_Fish2', 458:'ovl_En_Pst', 459:'ovl_En_Poh', 460:'ovl_Obj_Spidertent', 461:'ovl_En_Zoraegg', 462:'ovl_En_Kbt', 463:'ovl_En_Gg', 464:'ovl_En_Maruta', 465:'ovl_Obj_Snowball2', 466:'ovl_En_Gg2', 467:'ovl_Obj_Ghaka', 468:'ovl_En_Dnp', 469:'ovl_En_Dai', 470:'ovl_Bg_Goron_Oyu', 471:'ovl_En_Kgy', 472:'ovl_En_Invadepoh', 473:'ovl_En_Gk', 474:'ovl_En_An', 475:'ovl_En_Bee', 476:'ovl_En_Ot', 477:'ovl_En_Dragon', 478:'ovl_Obj_Dora', 479:'ovl_En_Bigpo', 480:'ovl_Obj_Kendo_Kanban', 481:'ovl_Obj_Hariko', 482:'ovl_En_Sth', 483:'ovl_Bg_Sinkai_Kabe', 484:'ovl_Bg_Haka_Curtain', 485:'ovl_Bg_Kin2_Bombwall', 486:'ovl_Bg_Kin2_Fence', 487:'ovl_Bg_Kin2_Picture', 488:'ovl_Bg_Kin2_Shelf', 489:'ovl_En_Rail_Skb', 490:'ovl_En_Jg', 491:'ovl_En_Tru_Mt', 492:'ovl_Obj_Um', 493:'ovl_En_Neo_Reeba', 494:'ovl_Bg_Mbar_Chair', 495:'ovl_Bg_Ikana_Block', 496:'ovl_Bg_Ikana_Mirror', 497:'ovl_Bg_Ikana_Rotaryroom', 498:'ovl_Bg_Dblue_Balance', 499:'ovl_Bg_Dblue_Waterfall', 500:'ovl_En_Kaizoku', 501:'ovl_En_Ge2', 502:'ovl_En_Ma_Yts', 503:'ovl_En_Ma_Yto', 504:'ovl_Obj_Tokei_Turret', 505:'ovl_Bg_Dblue_Elevator', 506:'ovl_Obj_Warpstone', 507:'ovl_En_Zog', 508:'ovl_Obj_Rotlift', 509:'ovl_Obj_Jg_Gakki', 510:'ovl_Bg_Inibs_Movebg', 511:'ovl_En_Zot', 512:'ovl_Obj_Tree', 513:'ovl_Obj_Y2lift', 514:'ovl_Obj_Y2shutter', 515:'ovl_Obj_Boat', 516:'ovl_Obj_Taru', 517:'ovl_Obj_Hunsui', 518:'ovl_En_Jc_Mato', 519:'ovl_Mir_Ray3', 520:'ovl_En_Zob', 521:'ovl_Elf_Msg6', 522:'ovl_Obj_Nozoki', 523:'ovl_En_Toto', 524:'ovl_En_Railgibud', 525:'ovl_En_Baba', 526:'ovl_En_Suttari', 527:'ovl_En_Zod', 528:'ovl_En_Kujiya', 529:'ovl_En_Geg', 530:'ovl_Obj_Kinoko', 531:'ovl_Obj_Yasi', 532:'ovl_En_Tanron1', 533:'ovl_En_Tanron2', 534:'ovl_En_Tanron3', 535:'ovl_Obj_Chan', 536:'ovl_En_Zos', 537:'ovl_En_S_Goro', 538:'ovl_En_Nb', 539:'ovl_En_Ja', 540:'ovl_Bg_F40_Block', 541:'ovl_Bg_F40_Switch', 542:'ovl_En_Po_Composer', 543:'ovl_En_Guruguru', 544:'ovl_Oceff_Wipe5', 545:'ovl_En_Stone_heishi', 546:'ovl_Oceff_Wipe6', 547:'ovl_En_Scopenuts', 548:'ovl_En_Scopecrow', 549:'ovl_Oceff_Wipe7', 550:'ovl_Eff_Kamejima_Wave', 551:'ovl_En_Hg', 552:'ovl_En_Hgo', 553:'ovl_En_Zov', 554:'ovl_En_Ah', 555:'ovl_Obj_Hgdoor', 556:'ovl_Bg_Ikana_Bombwall', 557:'ovl_Bg_Ikana_Ray', 558:'ovl_Bg_Ikana_Shutter', 559:'ovl_Bg_Haka_Bombwall', 560:'ovl_Bg_Haka_Tomb', 561:'ovl_En_Sc_Ruppe', 562:'ovl_Bg_Iknv_Doukutu', 563:'ovl_Bg_Iknv_Obj', 564:'ovl_En_Pamera', 565:'ovl_Obj_HsStump', 566:'ovl_En_Hidden_Nuts', 567:'ovl_En_Zow', 568:'ovl_En_Talk', 569:'ovl_En_Al', 570:'ovl_En_Tab', 571:'ovl_En_Nimotsu', 572:'ovl_En_Hit_Tag', 573:'ovl_En_Ruppecrow', 574:'ovl_En_Tanron4', 575:'ovl_En_Tanron5', 576:'ovl_En_Tanron6', 577:'ovl_En_Daiku2', 578:'ovl_En_Muto', 579:'ovl_En_Baisen', 580:'ovl_En_Heishi', 581:'ovl_En_Demo_heishi', 582:'ovl_En_Dt', 583:'ovl_En_Cha', 584:'ovl_Obj_Dinner', 585:'ovl_Eff_Lastday', 586:'ovl_Bg_Ikana_Dharma', 587:'ovl_En_Akindonuts', 588:'ovl_Eff_Stk', 589:'ovl_En_Ig', 590:'ovl_En_Rg', 591:'ovl_En_Osk', 592:'ovl_En_Sth2', 593:'ovl_En_Yb', 594:'ovl_En_Rz', 595:'ovl_En_Scopecoin', 596:'ovl_En_Bjt', 597:'ovl_En_Bomjima', 598:'ovl_En_Bomjimb', 599:'ovl_En_Bombers', 600:'ovl_En_Bombers2', 601:'ovl_En_Bombal', 602:'ovl_Obj_Moon_Stone', 603:'ovl_Obj_Mu_Pict', 604:'ovl_Bg_Ikninside', 605:'ovl_Eff_Zoraband', 606:'ovl_Obj_Kepn_Koya', 607:'ovl_Obj_Usiyane', 608:'ovl_En_Nnh', 609:'ovl_Obj_Kzsaku', 610:'ovl_Obj_Milk_Bin', 611:'ovl_En_Kitan', 612:'ovl_Bg_Astr_Bombwall', 613:'ovl_Bg_Iknin_Susceil', 614:'ovl_En_Bsb', 615:'ovl_En_Recepgirl', 616:'ovl_En_Thiefbird', 617:'ovl_En_Jgame_Tsn', 618:'ovl_Obj_Jgame_Light', 619:'ovl_Obj_Yado', 620:'ovl_Demo_Syoten', 621:'ovl_Demo_Moonend', 622:'ovl_Bg_Lbfshot', 623:'ovl_Bg_Last_Bwall', 624:'ovl_En_And', 625:'ovl_En_Invadepoh_Demo', 626:'ovl_Obj_Danpeilift', 627:'ovl_En_Fall2', 628:'ovl_Dm_Al', 629:'ovl_Dm_An', 630:'ovl_Dm_Ah', 631:'ovl_Dm_Nb', 632:'ovl_En_Drs', 633:'ovl_En_Ending_Hero', 634:'ovl_Dm_Bal', 635:'ovl_En_Paper', 636:'ovl_En_Hint_Skb', 637:'ovl_Dm_Tag', 638:'ovl_En_Bh', 639:'ovl_En_Ending_Hero2', 640:'ovl_En_Ending_Hero3', 641:'ovl_En_Ending_Hero4', 642:'ovl_En_Ending_Hero5', 643:'ovl_En_Ending_Hero6', 644:'ovl_Dm_Gm', 645:'ovl_Obj_Swprize', 646:'ovl_En_Invisible_Ruppe', 647:'ovl_Obj_Ending', 648:'ovl_En_Rsn', } AUDIO_NAMES = { 3:'Audiobank', 4:'Audioseq', 5:'Audiotable', } MISC_NAMES = { 7:'link_animetion', 1122:'nintendo_rogo_static', 1124:'memerrmsg', 1125:'locerrmsg', 1135:'elf_message_field', 1136:'elf_message_ydan', } ASM_NAMES = { 0:'makerom', 1:'boot', 2:'dmadata', 31:'code', } def GetFileName(index): tbls = [ SCENE_NAMES, OBJECT_NAMES, TEXTURE_NAMES, AUDIO_NAMES, MISC_NAMES, OVERLAY_NAMES, ASM_NAMES ] paths = [ "baserom/assets/scenes", "baserom/assets/objects", "baserom/assets/textures", "baserom/assets/audio", "baserom/assets/misc", "baserom/overlays", "baserom" ] for i in range(0, len(tbls)): tbl = tbls[i] if index in tbl: return [ tbl[index], paths[i] ] return [ "ERROR", "baserom" ] def read_uint32_be(offset): return struct.unpack('>I', romData[offset:offset+4])[0] def write_output_file(name, offset, size): try: with open(name, 'wb') as f: f.write(romData[offset:offset+size]) except IOError: print('failed to write file ' + name) if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('input', help='input file') args = parser.parse_args() # read baserom data try: with open(args.input, 'rb') as f: romData = f.read() except IOError: print('failed to read file ' + args.input) sys.exit(1) paths = [ "baserom", "baserom/assets", "baserom/assets/scenes", "baserom/assets/objects", "baserom/assets/textures", "baserom/assets/audio", "baserom/assets/misc", "baserom/overlays" ] for path in paths: try: os.mkdir(path) except: pass dmadata_size = read_uint32_be(FILE_TABLE_OFFSET + 16 * 2 + 4) - read_uint32_be(FILE_TABLE_OFFSET + 16 * 2 + 0) file_count = dmadata_size // 0x10 # extract files for i in range(0, file_count): entryOffset = FILE_TABLE_OFFSET + 16 * i virtStart = read_uint32_be(entryOffset + 0) virtEnd = read_uint32_be(entryOffset + 4) physStart = read_uint32_be(entryOffset + 8) physEnd = read_uint32_be(entryOffset + 12) filenameResult = GetFileName(i) filename = filenameResult[0] outPath = filenameResult[1] if physEnd == 0: # uncompressed compressed = False size = virtEnd - virtStart else: # compressed compressed = True size = physEnd - physStart if physStart == 0xFFFFFFFF: # file is in table but not on cart? continue if virtStart == 0 and virtEnd == 0: # there are several entries at the end like this... continue print('extracting ' + filename + ' (0x%08X, 0x%08X, 0x%08X)' % (virtStart, virtEnd, size)) if compressed: print('decompressing (' + str(i) + ') ' + filename + ", to " + outPath) decompressed_data = decompress(romData[physStart:physStart+size]) writefile = open(outPath + "/" + filename, 'wb') writefile.write(decompressed_data) writefile.close() else: write_output_file(outPath + '/' + filename, physStart, size)