diff --git a/.gitignore b/.gitignore index 311e8a0..60438cd 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,6 @@ *.dol *.bat *.db +*.dat .idea logs -event diff --git a/dump_quest.py b/dump_quest.py new file mode 100644 index 0000000..4d3f4cd --- /dev/null +++ b/dump_quest.py @@ -0,0 +1,9569 @@ +#! /usr/bin/env python +# -*- coding: utf-8 -*- +# SPDX-FileCopyrightText: Copyright (C) 2021-2025 MH3SP Server Project +# SPDX-License-Identifier: AGPL-3.0-or-later +"""Quest dumper. + +ARENA INFO (under "strategies" are equipment lists) +https://w.atwiki.jp/mh3wii/pages/62.html#id_3bd26e57 + +Arena Quest ID List: +EA60 +EA61 +EA62 +EA63 +EA64 +EA65 +EA66 +EA67 +EA68 +EA69 +EA6A +EA6B + +bird and brute bowgun: +rathling gun + barrel, poison stinger frame, light bowgun stock + +sea power bowgun: +rathling gun barrel, rathling gun + frame, rathling gun + stock + +land lords bowgun: +jho barrel, diablos frame, barioth stock + +two flames bowgun: +lagiacrus barrel, lagiacrus frame, barioth stock + +https://web.archive.org/web/20111012085906/ +http://divinewh.im/q/c/Grudge_Match:_Royal_Ludroth + +https://web.archive.org/web/20111012085901/ +http://divinewh.im/q/c/Grudge_Match:_Rathian + +https://web.archive.org/web/20111012090656/ +http://divinewh.im/q/c/Grudge_Match:_Uragaan + +https://web.archive.org/web/20111012090915/ +http://divinewh.im/q/c/Grudge_Match:_Bird_and_Brute +""" + +from mh.quest_utils import ItemsType, Monster, LocationType,\ + QuestRankType, QuestRestrictionType, ResourcesType,\ + StartingPositionType, WaveType +from mh.equipment_utils import Chestpiece, Gauntlets, Faulds,\ + Leggings, Helmet, EquipmentClasses, Greatsword,\ + SnS, Hammer, Longsword, Switchaxe, Lance,\ + BowgunFrame, BowgunStock, BowgunBarrel + + +""" +EVENT QUEST 1: Jump Four Jaggi +Quest description/rewards/etc from https://www.youtube.com/watch?v=qyQt2Xmpt0g +Quest requirements altered to make it possible to win. +""" +QUEST_EVENT_JUMP_FOUR_JAGGI = { + 'small_monsters': [ + [ + # Area 0 + ], + [ + # Area 1 + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': 1, + 'pos_x': 2039.26,'pos_y': 12.70,'pos_z': 210.05, + 'rot_x': 0,'rot_y': 17,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': 1, + 'pos_x': 857.89,'pos_y': -41.97,'pos_z': 814.06, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': 1, + 'pos_x': 97.58,'pos_y': -75.54,'pos_z': 135.22, + 'rot_x': 0,'rot_y': -45,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': 1, + 'pos_x': -393.52,'pos_y': -163.94,'pos_z': -667.01, + 'rot_x': 0,'rot_y': -199,'rot_z': 0, + }, + ], + [ + # Area 2 + { + 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 2,'quantity': 1, + 'pos_x': -853.86,'pos_y': 19.45,'pos_z': 1381.66, + 'rot_x': 0,'rot_y': -113,'rot_z': 0, + }, + { + 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 2,'quantity': 2, + 'pos_x': -553.59,'pos_y': -2.57,'pos_z': -369.71, + 'rot_x': 0,'rot_y': 193,'rot_z': 0, + }, + { + 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 2,'quantity': 3, + 'pos_x': -1698.75,'pos_y': 5.74,'pos_z': -530.30, + 'rot_x': 0,'rot_y': 398,'rot_z': 0, + }, + ], + [ + # Area 3 + { + 'type': Monster.melynx,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 3,'quantity': -1, + 'pos_x': 873.28,'pos_y': 85.07,'pos_z': -610.86, + 'rot_x': 0,'rot_y': -153,'rot_z': 0, + }, + { + 'type': Monster.melynx,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 3,'quantity': -1, + 'pos_x': 1247.84,'pos_y': 106.65,'pos_z': 25.11, + 'rot_x': 0,'rot_y': -358,'rot_z': 0, + }, + { + 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 3,'quantity': 2, + 'pos_x': 177.92,'pos_y': 450.70,'pos_z': -32.21, + 'rot_x': 0,'rot_y': -238,'rot_z': 0, + }, + { + 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 3,'quantity': 2, + 'pos_x': -78.66,'pos_y': 330.70,'pos_z': 362.86, + 'rot_x': 0,'rot_y': -79,'rot_z': 0, + }, + ], + [ + # Area 4 + { + 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': 3, + 'pos_x': 606.18,'pos_y': -12.89,'pos_z': 4145.11, + 'rot_x': 0,'rot_y': 324,'rot_z': 0, + }, + { + 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': 1, + 'pos_x': 524.37,'pos_y': -18.65,'pos_z': 2292.05, + 'rot_x': 0,'rot_y': 199,'rot_z': 0, + }, + { + 'type': Monster.rhenoplos,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': -1, + 'pos_x': -460.08,'pos_y': -71.51,'pos_z': 3044.50, + 'rot_x': 0,'rot_y': -460,'rot_z': 0, + }, + ], + [ + # Area 5 + { + 'type': Monster.jaggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': 1, + 'pos_x': 300.40,'pos_y': 4.00,'pos_z': -211.14, + 'rot_x': 0,'rot_y': 0,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': -1, + 'pos_x': 458.16,'pos_y': 1.49,'pos_z': -918.94, + 'rot_x': 0,'rot_y': 51,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': 4, + 'pos_x': 1813.83,'pos_y': 3.06,'pos_z': 925.68, + 'rot_x': 0,'rot_y': 494,'rot_z': 0, + }, + { + 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': -1, + 'pos_x': -504.37,'pos_y': 3.05,'pos_z': -757.30, + 'rot_x': 0,'rot_y': 676,'rot_z': 0, + }, + { + 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': 2, + 'pos_x': 1118.48,'pos_y': 4.00,'pos_z': -420.89, + 'rot_x': 0,'rot_y': 364,'rot_z': 0, + }, + { + 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': -1, + 'pos_x': 2658.84,'pos_y': 3.24,'pos_z': 222.99, + 'rot_x': 0,'rot_y': 756,'rot_z': 0, + }, + ], + [ + # Area 6 (Area 8 in Sandy Plains) + { + 'type': Monster.rhenoplos,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 6,'quantity': -1, + 'pos_x': 1612.71,'pos_y': -30.27,'pos_z': 695.30, + 'rot_x': 0,'rot_y': 517,'rot_z': 0, + }, + { + 'type': Monster.rhenoplos,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 6,'quantity': -1, + 'pos_x': -2050.04,'pos_y': -31.90,'pos_z': -266.33, + 'rot_x': 0,'rot_y': 28,'rot_z': 0, + }, + { + 'type': Monster.altaroth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 6,'quantity': 5, + 'pos_x': -344.14,'pos_y': -13.00,'pos_z': -26.14, + 'rot_x': 0,'rot_y': 443,'rot_z': 0, + }, + { + 'type': Monster.altaroth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 6,'quantity': 4, + 'pos_x': -161.74,'pos_y': 4.80,'pos_z': -416.52, + 'rot_x': 0,'rot_y': 472,'rot_z': 0, + }, + { + 'type': Monster.altaroth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 6,'quantity': 2, + 'pos_x': -481.05,'pos_y': 15.34,'pos_z': -643.19, + 'rot_x': 0,'rot_y': 568,'rot_z': 0, + }, + { + 'type': Monster.altaroth,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 6,'quantity': -1, + 'pos_x': -692.26,'pos_y': -11.02,'pos_z': -235.13, + 'rot_x': 0,'rot_y': 608,'rot_z': 0, + }, + { + 'type': Monster.altaroth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 6,'quantity': 3, + 'pos_x': -417.82,'pos_y': -1.44,'pos_z': -343.46, + 'rot_x': 0,'rot_y': 147,'rot_z': 0, + }, + ], + [ + # Area 7 (Area 9 in Sandy Plains) + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 7,'quantity': 3, + 'pos_x': 4294.59,'pos_y': -75.65,'pos_z': -2925.29, + 'rot_x': 0,'rot_y': -130,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 7,'quantity': 2, + 'pos_x': 3995.30,'pos_y': -45.09,'pos_z': -2049.22, + 'rot_x': 0,'rot_y': -85,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 7,'quantity': 2, + 'pos_x': 4187.00,'pos_y': -17.07,'pos_z': -1574.97, + 'rot_x': 0,'rot_y': -17,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 7,'quantity': 1, + 'pos_x': 3781.64,'pos_y': -66.86,'pos_z': -2570.78, + 'rot_x': 0,'rot_y': -130,'rot_z': 0, + }, + ], + [ + # Area 8 (Area 10 in Sandy Plains) + { + 'type': Monster.delex,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 7, + 'pos_x': 293.99,'pos_y': -170.31,'pos_z': 4049.95, + 'rot_x': 0,'rot_y': 819,'rot_z': 0, + }, + { + 'type': Monster.delex,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 5, + 'pos_x': 124.95,'pos_y': -186.54,'pos_z': 3440.16, + 'rot_x': 0,'rot_y': 819,'rot_z': 0, + }, + { + 'type': Monster.delex,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 3, + 'pos_x': -425.01,'pos_y': -179.30,'pos_z': 4509.84, + 'rot_x': 0,'rot_y': 819,'rot_z': 0, + }, + { + 'type': Monster.delex,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 2, + 'pos_x': -714.48,'pos_y': -183.78,'pos_z': 4108.50, + 'rot_x': 0,'rot_y': 819,'rot_z': 0, + }, + { + 'type': Monster.delex,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 1, + 'pos_x': -1021.27,'pos_y': -215.48,'pos_z': 3726.09, + 'rot_x': 0,'rot_y': 819,'rot_z': 0, + }, + { + 'type': Monster.melynx,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': -1, + 'pos_x': -1974.57,'pos_y': -209.48,'pos_z': -316.05, + 'rot_x': 0,'rot_y': -56,'rot_z': 0, + }, + { + 'type': Monster.melynx,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': -1, + 'pos_x': -1825.11,'pos_y': -210.91,'pos_z': -382.90, + 'rot_x': 0,'rot_y': 130,'rot_z': 0, + }, + ], + [ + # Area 9 (Area 7 in Sandy Plains) + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': 2, + 'pos_x': 3383.92,'pos_y': 2.65,'pos_z': 592.49, + 'rot_x': 0,'rot_y': -193,'rot_z': 0, + }, + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': 1, + 'pos_x': 2653.55,'pos_y': -22.59,'pos_z': 987.24, + 'rot_x': 0,'rot_y': -73,'rot_z': 0, + }, + { + 'type': Monster.melynx,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': -1, + 'pos_x': 2838.69,'pos_y': -28.00,'pos_z': 445.91, + 'rot_x': 0,'rot_y': -142,'rot_z': 0, + }, + { + 'type': Monster.melynx,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': -1, + 'pos_x': 2109.53,'pos_y': -26.57,'pos_z': 575.43, + 'rot_x': 0,'rot_y': -460,'rot_z': 0, + }, + { + 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 9,'quantity': -1, + 'pos_x': -1713.72,'pos_y': 1262.50,'pos_z': 2199.24, + 'rot_x': 273,'rot_y': -45,'rot_z': 0, + }, + { + 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 9,'quantity': 6, + 'pos_x': -1174.44,'pos_y': 1319.50,'pos_z': 1682.19, + 'rot_x': 0,'rot_y': -39,'rot_z': 0, + }, + ], + [ + # Area 10 + ], + [ + # Area 11 (Area 6 in Sandy Plains) + { + 'type': Monster.giggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 11,'quantity': 2, + 'pos_x': 2195.89,'pos_y': 73.70,'pos_z': -720.92, + 'rot_x': 0,'rot_y': 39,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 1,'unk2': 0xFF, + 'variant': 6,'room': 11,'quantity': 1, + 'pos_x': -535.73,'pos_y': 1212.59,'pos_z': 896.44, + 'rot_x': 0,'rot_y': 169,'rot_z': 0, + }, + { + 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 11,'quantity': 2, + 'pos_x': -434.00,'pos_y': 198.96,'pos_z': 289.52, + 'rot_x': 0,'rot_y': -267,'rot_z': 0, + }, + { + 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 11,'quantity': 2, + 'pos_x': -802.69,'pos_y': 198.96,'pos_z': 66.62, + 'rot_x': 0,'rot_y': -216,'rot_z': 0, + }, + { + 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 11,'quantity': 2, + 'pos_x': -645.14,'pos_y': 288.96,'pos_z': -371.21, + 'rot_x': 0,'rot_y': -227,'rot_z': 0, + }, + { + 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 11,'quantity': 1, + 'pos_x': -473.33,'pos_y': 168.96,'pos_z': -166.43, + 'rot_x': 0,'rot_y': -210,'rot_z': 0, + }, + ], + ], + 'quest_info': { + 'quest_id': 61001, + 'name': "Jump Four Jaggi", + 'client': "Guild Subcontractor", + 'description': "Hunt 4 Great Jaggi", + 'details': + "I'm gonna get so fired for\n" + "this... The Great Jaggi some\n" + "hunter brought in just\n" + "escaped. Mind going after\n" + "them? You better hurry,\n" + "though. Bet they've got some\n" + "incredible materials, too.", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 1, 0, 0, 0, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 1, 0, 0, 0, 1, 1) + ), + 'penalty_per_cart': 1400, + 'quest_fee': 400, + 'time_limit': 50, + 'main_monster_1': Monster.bnahabra2, + 'main_monster_2': Monster.melynx, + 'location': LocationType.QUEST_LOCATION_SANDY_PLAINS, + 'quest_rank': QuestRankType.star_1, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_NONE, + 'resources': ResourcesType.low_rank, + 'supply_set_number': 19, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 0x0017, + 'summon': 0x64050219, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.great_jaggi, + 'starting_area': 0x00, + 'boss_id': 0xFF, + 'spawn_count': 0x04, + 'level': 0x17, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x01, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x01 + }, + 'monster_2': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000001, + 'objective_type': Monster.great_jaggi, + 'objective_num': 0x04, + 'zenny_reward': 4000, + 'hrp_reward': 440, + 'rewards_row_1': [ + (ItemsType.great_jagi_claw, 1, 3), + (ItemsType.great_jagi_hide, 1, 12), + (ItemsType.jagi_scale, 1, 10), + (ItemsType.screamer, 1, 20), + (ItemsType.kings_frill, 1, 12), + (ItemsType.bone_husk_s, 8, 18), + (ItemsType.great_jagi_head, 1, 25) + ], + 'rewards_row_2': [ + (ItemsType.mystery_charm, 1, 1), + (ItemsType.aquaglow_jewel, 1, 1), + (ItemsType.shining_charm, 1, 1), + (ItemsType.armor_sphere, 1, 1), + (ItemsType.armor_sphere_plus, 1, 1) + ], + }, + 'subquest_1': { + 'description': "Hunt 2 Great Jaggi", + 'type': 0x00000001, + 'objective_type': Monster.great_jaggi, + 'objective_num': 0x02, + 'zenny_reward': 4000, + 'hrp_reward': 440, + 'rewards_row_1': [ + (ItemsType.great_jagi_claw, 1, 1), + (ItemsType.great_jagi_hide, 1, 1), + (ItemsType.jagi_scale, 1, 1), + (ItemsType.screamer, 1, 1), + (ItemsType.kings_frill, 1, 1), + (ItemsType.bone_husk_s, 8, 1), + (ItemsType.great_jagi_head, 1, 1) + ], + }, + 'subquest_2': { + 'description': "None", + 'type': 0, + 'objective_type': Monster.none, + 'objective_num': 0, + 'zenny_reward': 0, + 'hrp_reward': 0, + 'rewards_row_1': [], + } + }, + 'unknown': { + # (2 for large mon quest, 3 for small/delivery, 5 for jhen/ala) + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + } +} + + +""" +EVENT QUEST 2: Mercy Mission +(INCOMPLETE) Invading monster is "faked" by hardcoding a Royal Ludroth +from the start. +""" +QUEST_EVENT_MERCY_MISSION = { + 'quest_info': { + 'quest_id': 61002, + 'name': "Mercy Mission", + 'client': "MH3SP Dev Team", + 'description': "Deliver 10 Monster Guts", + 'details': + "Wanted:\n" + "The description for this\n" + "quest! If you can find\n" + "it, please let us know!\n" + "Thanks!", + 'success_message': + "Complete the Main Quest\n" + "and both Subquests.", + 'flags': ( + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 1, 1, 0, 0, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (0, 1, 0, 0, 0, 0, 0, 0) + ), + 'penalty_per_cart': 600, + 'quest_fee': 150, + 'time_limit': 15, + 'main_monster_1': Monster.ludroth, + 'main_monster_2': Monster.epioth, + 'location': LocationType.QUEST_LOCATION_D_ISLAND, + 'quest_rank': QuestRankType.star_1, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_NONE, + 'resources': ResourcesType.low_rank, + 'supply_set_number': 35, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 0x0017, + 'summon': 0x64030303, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + 'smallmonster_data_file': 'sm_mercymission.dat', + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.royal_ludroth, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x01, + 'level': 0x17, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x01, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x03 + }, + 'monster_2': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000002, + 'objective_type': ItemsType.monster_guts, + 'objective_num': 0x0A, + 'zenny_reward': 1500, + 'hrp_reward': 70, + 'rewards_row_1': [ + (ItemsType.mystery_charm, 1, 8), + (ItemsType.black_pearl, 1, 20), + (ItemsType.honey, 2, 20), + (ItemsType.armor_sphere, 1, 18), + (ItemsType.small_goldenfish, 1, 8), + (ItemsType.machalite_ore, 8, 14), + (ItemsType.steel_eg, 1, 12) + ], + 'rewards_row_2': [ + (ItemsType.mystery_charm, 1, 35), + (ItemsType.aquaglow_jewel, 1, 5), + (ItemsType.shining_charm, 1, 15), + (ItemsType.armor_sphere, 1, 20), + (ItemsType.armor_sphere_plus, 1, 25) + ], + }, + 'subquest_1': { + 'description': "Deliver 12 Red Coral Stones", + 'type': 0x00000002, + 'objective_type': ItemsType.red_coral_stone, + 'objective_num': 0x0C, + 'zenny_reward': 1200, + 'hrp_reward': 55, + 'rewards_row_1': [ + (ItemsType.mystery_charm, 1, 8), + (ItemsType.black_pearl, 1, 20), + (ItemsType.honey, 2, 20), + (ItemsType.armor_sphere, 1, 18), + (ItemsType.small_goldenfish, 1, 8), + (ItemsType.machalite_ore, 1, 14), + (ItemsType.steel_eg, 1, 12) + ], + }, + 'subquest_2': { + 'description': "Deliver 3 Goldenfish", + 'type': 0x00000002, + 'objective_type': ItemsType.goldenfish, + 'objective_num': 0x03, + 'zenny_reward': 2000, + 'hrp_reward': 70, + 'rewards_row_1': [ + (ItemsType.mystery_charm, 1, 35), + (ItemsType.aquaglow_jewel, 1, 5), + (ItemsType.shining_charm, 1, 15), + (ItemsType.armor_sphere, 1, 20), + (ItemsType.armor_sphere_plus, 1, 25) + ], + }, + }, + 'unknown': { + # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala + 'unk_12': 0x00000003, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + } +} + + +""" +EVENT QUEST 3: Animal Attractions +Quest description from https://www.youtube.com/watch?v=uvMYbmIl08E&t=12s + Thanks to Goabie +""" +QUEST_EVENT_ANIMAL_ATTRACTIONS = { + 'small_monsters': [ + [ + # Area 0 + ], + [ + # Area 1 + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': 1, + 'pos_x': 2039.26,'pos_y': 12.70,'pos_z': 210.05, + 'rot_x': 0,'rot_y': 17,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': 1, + 'pos_x': 857.89,'pos_y': -41.97,'pos_z': 814.06, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': 1, + 'pos_x': 97.58,'pos_y': -75.54,'pos_z': 135.22, + 'rot_x': 0,'rot_y': -45,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': 1, + 'pos_x': -393.52,'pos_y': -163.94,'pos_z': -667.01, + 'rot_x': 0,'rot_y': -199,'rot_z': 0, + }, + ], + [ + # Area 2 + { + 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 2,'quantity': 1, + 'pos_x': -853.86,'pos_y': 19.45,'pos_z': 1381.66, + 'rot_x': 0,'rot_y': -113,'rot_z': 0, + }, + { + 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 2,'quantity': 2, + 'pos_x': -553.59,'pos_y': -2.57,'pos_z': -369.71, + 'rot_x': 0,'rot_y': 193,'rot_z': 0, + }, + { + 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 2,'quantity': 3, + 'pos_x': -1698.75,'pos_y': 5.74,'pos_z': -530.30, + 'rot_x': 0,'rot_y': 398,'rot_z': 0, + }, + ], + [ + # Area 3 + { + 'type': Monster.melynx,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 3,'quantity': -1, + 'pos_x': 873.28,'pos_y': 85.07,'pos_z': -610.86, + 'rot_x': 0,'rot_y': -153,'rot_z': 0, + }, + { + 'type': Monster.melynx,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 3,'quantity': -1, + 'pos_x': 1247.84,'pos_y': 106.65,'pos_z': 25.11, + 'rot_x': 0,'rot_y': -358,'rot_z': 0, + }, + { + 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 3,'quantity': 2, + 'pos_x': 177.92,'pos_y': 450.70,'pos_z': -32.21, + 'rot_x': 0,'rot_y': -238,'rot_z': 0, + }, + { + 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 3,'quantity': 2, + 'pos_x': -78.66,'pos_y': 330.70,'pos_z': 362.86, + 'rot_x': 0,'rot_y': -79,'rot_z': 0, + }, + ], + [ + # Area 4 + { + 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': 3, + 'pos_x': 606.18,'pos_y': -12.89,'pos_z': 4145.11, + 'rot_x': 0,'rot_y': 324,'rot_z': 0, + }, + { + 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': 1, + 'pos_x': 524.37,'pos_y': -18.65,'pos_z': 2292.05, + 'rot_x': 0,'rot_y': 199,'rot_z': 0, + }, + { + 'type': Monster.rhenoplos,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': -1, + 'pos_x': -460.08,'pos_y': -71.51,'pos_z': 3044.50, + 'rot_x': 0,'rot_y': -460,'rot_z': 0, + }, + ], + [ + # Area 5 + { + 'type': Monster.jaggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': 1, + 'pos_x': 300.40,'pos_y': 4.00,'pos_z': -211.14, + 'rot_x': 0,'rot_y': 0,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': -1, + 'pos_x': 458.16,'pos_y': 1.49,'pos_z': -918.94, + 'rot_x': 0,'rot_y': 51,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': 4, + 'pos_x': 1813.83,'pos_y': 3.06,'pos_z': 925.68, + 'rot_x': 0,'rot_y': 494,'rot_z': 0, + }, + { + 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': -1, + 'pos_x': -504.37,'pos_y': 3.05,'pos_z': -757.30, + 'rot_x': 0,'rot_y': 676,'rot_z': 0, + }, + { + 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': 2, + 'pos_x': 1118.48,'pos_y': 4.00,'pos_z': -420.89, + 'rot_x': 0,'rot_y': 364,'rot_z': 0, + }, + { + 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': -1, + 'pos_x': 2658.84,'pos_y': 3.24,'pos_z': 222.99, + 'rot_x': 0,'rot_y': 756,'rot_z': 0, + }, + ], + [ + # Area 6 (Area 8 in Sandy Plains) + { + 'type': Monster.rhenoplos,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 6,'quantity': -1, + 'pos_x': 1612.71,'pos_y': -30.27,'pos_z': 695.30, + 'rot_x': 0,'rot_y': 517,'rot_z': 0, + }, + { + 'type': Monster.rhenoplos,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 6,'quantity': -1, + 'pos_x': -2050.04,'pos_y': -31.90,'pos_z': -266.33, + 'rot_x': 0,'rot_y': 28,'rot_z': 0, + }, + { + 'type': Monster.altaroth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 6,'quantity': 5, + 'pos_x': -344.14,'pos_y': -13.00,'pos_z': -26.14, + 'rot_x': 0,'rot_y': 443,'rot_z': 0, + }, + { + 'type': Monster.altaroth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 6,'quantity': 4, + 'pos_x': -161.74,'pos_y': 4.80,'pos_z': -416.52, + 'rot_x': 0,'rot_y': 472,'rot_z': 0, + }, + { + 'type': Monster.altaroth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 6,'quantity': 2, + 'pos_x': -481.05,'pos_y': 15.34,'pos_z': -643.19, + 'rot_x': 0,'rot_y': 568,'rot_z': 0, + }, + { + 'type': Monster.altaroth,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 6,'quantity': -1, + 'pos_x': -692.26,'pos_y': -11.02,'pos_z': -235.13, + 'rot_x': 0,'rot_y': 608,'rot_z': 0, + }, + { + 'type': Monster.altaroth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 6,'quantity': 3, + 'pos_x': -417.82,'pos_y': -1.44,'pos_z': -343.46, + 'rot_x': 0,'rot_y': 147,'rot_z': 0, + }, + ], + [ + # Area 7 (Area 9 in Sandy Plains) + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 7,'quantity': 3, + 'pos_x': 4294.59,'pos_y': -75.65,'pos_z': -2925.29, + 'rot_x': 0,'rot_y': -130,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 7,'quantity': 2, + 'pos_x': 3995.30,'pos_y': -45.09,'pos_z': -2049.22, + 'rot_x': 0,'rot_y': -85,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 7,'quantity': 2, + 'pos_x': 4187.00,'pos_y': -17.07,'pos_z': -1574.97, + 'rot_x': 0,'rot_y': -17,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 7,'quantity': 1, + 'pos_x': 3781.64,'pos_y': -66.86,'pos_z': -2570.78, + 'rot_x': 0,'rot_y': -130,'rot_z': 0, + }, + ], + [ + # Area 8 (Area 10 in Sandy Plains) + { + 'type': Monster.delex,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 7, + 'pos_x': 293.99,'pos_y': -170.31,'pos_z': 4049.95, + 'rot_x': 0,'rot_y': 819,'rot_z': 0, + }, + { + 'type': Monster.delex,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 5, + 'pos_x': 124.95,'pos_y': -186.54,'pos_z': 3440.16, + 'rot_x': 0,'rot_y': 819,'rot_z': 0, + }, + { + 'type': Monster.delex,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 3, + 'pos_x': -425.01,'pos_y': -179.30,'pos_z': 4509.84, + 'rot_x': 0,'rot_y': 819,'rot_z': 0, + }, + { + 'type': Monster.delex,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 2, + 'pos_x': -714.48,'pos_y': -183.78,'pos_z': 4108.50, + 'rot_x': 0,'rot_y': 819,'rot_z': 0, + }, + { + 'type': Monster.delex,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 1, + 'pos_x': -1021.27,'pos_y': -215.48,'pos_z': 3726.09, + 'rot_x': 0,'rot_y': 819,'rot_z': 0, + }, + { + 'type': Monster.melynx,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': -1, + 'pos_x': -1974.57,'pos_y': -209.48,'pos_z': -316.05, + 'rot_x': 0,'rot_y': -56,'rot_z': 0, + }, + { + 'type': Monster.melynx,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': -1, + 'pos_x': -1825.11,'pos_y': -210.91,'pos_z': -382.90, + 'rot_x': 0,'rot_y': 130,'rot_z': 0, + }, + ], + [ + # Area 9 (Area 7 in Sandy Plains) + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': 2, + 'pos_x': 3383.92,'pos_y': 2.65,'pos_z': 592.49, + 'rot_x': 0,'rot_y': -193,'rot_z': 0, + }, + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': 1, + 'pos_x': 2653.55,'pos_y': -22.59,'pos_z': 987.24, + 'rot_x': 0,'rot_y': -73,'rot_z': 0, + }, + { + 'type': Monster.melynx,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': -1, + 'pos_x': 2838.69,'pos_y': -28.00,'pos_z': 445.91, + 'rot_x': 0,'rot_y': -142,'rot_z': 0, + }, + { + 'type': Monster.melynx,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': -1, + 'pos_x': 2109.53,'pos_y': -26.57,'pos_z': 575.43, + 'rot_x': 0,'rot_y': -460,'rot_z': 0, + }, + { + 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 9,'quantity': -1, + 'pos_x': -1713.72,'pos_y': 1262.50,'pos_z': 2199.24, + 'rot_x': 273,'rot_y': -45,'rot_z': 0, + }, + { + 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 9,'quantity': 6, + 'pos_x': -1174.44,'pos_y': 1319.50,'pos_z': 1682.19, + 'rot_x': 0,'rot_y': -39,'rot_z': 0, + }, + ], + [ + # Area 10 + ], + [ + # Area 11 (Area 6 in Sandy Plains) + { + 'type': Monster.giggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 11,'quantity': 2, + 'pos_x': 2195.89,'pos_y': 73.70,'pos_z': -720.92, + 'rot_x': 0,'rot_y': 39,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 1,'unk2': 0xFF, + 'variant': 6,'room': 11,'quantity': 1, + 'pos_x': -535.73,'pos_y': 1212.59,'pos_z': 896.44, + 'rot_x': 0,'rot_y': 169,'rot_z': 0, + }, + { + 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 11,'quantity': 2, + 'pos_x': -434.00,'pos_y': 198.96,'pos_z': 289.52, + 'rot_x': 0,'rot_y': -267,'rot_z': 0, + }, + { + 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 11,'quantity': 2, + 'pos_x': -802.69,'pos_y': 198.96,'pos_z': 66.62, + 'rot_x': 0,'rot_y': -216,'rot_z': 0, + }, + { + 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 11,'quantity': 2, + 'pos_x': -645.14,'pos_y': 288.96,'pos_z': -371.21, + 'rot_x': 0,'rot_y': -227,'rot_z': 0, + }, + { + 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 11,'quantity': 1, + 'pos_x': -473.33,'pos_y': 168.96,'pos_z': -166.43, + 'rot_x': 0,'rot_y': -210,'rot_z': 0, + }, + ], + ], + 'quest_info': { + 'quest_id': 61003, + 'name': "Animal Attractions", + 'client': "Passionate Hunter", + 'description': "Capture 2 Barroth", + 'details': + "You'll need more than big\n" + "muscles and bigger weapons to\n" + "capture two of the fiercest\n" + "monsters around -- you'll need\n" + "finesse! If you live for the\n" + "art and craft of the hunt,\n" + "show me what you got!", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 0, 0, 0, 0, 0, 0, 0), # (0, 0, 0, 0, 0, 0, 0, 0), + (1, 1, 0, 0, 0, 0, 0, 0), # (1, 1, 0, 0, 0, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), # (0, 0, 0, 0, 0, 0, 0, 0), + (0, 0, 1, 0, 0, 0, 1, 1) # (1, 0, 1, 0, 0, 0, 1, 1) + ), + 'penalty_per_cart': 5200, + 'quest_fee': 1000, + 'time_limit': 50, + 'main_monster_1': Monster.bnahabra2, + 'main_monster_2': Monster.altaroth, + 'location': LocationType.QUEST_LOCATION_SANDY_PLAINS, + 'quest_rank': QuestRankType.star_2, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_9_INITJOIN, + 'resources': ResourcesType.low_rank, + 'supply_set_number': 14, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 0x0019, + 'summon': 0x00000000, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.barroth, + 'starting_area': 0x00, + 'boss_id': 0x01, + 'spawn_count': 0x01, + 'level': 0x19, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x01, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x01 + }, + 'monster_2': { + 'type': Monster.barroth, + 'starting_area': 0x01, + 'boss_id': 0x01, + 'spawn_count': 0x01, + 'level': 0x19, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x01, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x01 + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000081, + 'objective_type': Monster.barroth, + 'objective_num': 0x02, + 'zenny_reward': 14400, + 'hrp_reward': 1250, + 'rewards_row_1': [ + (ItemsType.barroth_ridge, 1, 2), + (ItemsType.barroth_shell, 1, 24), + (ItemsType.barroth_claw, 1, 18), + (ItemsType.monster_bone_l, 1, 8), + (ItemsType.monster_bone_m, 1, 8), + (ItemsType.barroth_scalp, 1, 12), + (ItemsType.hellhunter_tag, 1, 28) + ], + 'rewards_row_2': [ + (ItemsType.barroth_ridge, 1, 2), + (ItemsType.barroth_shell, 1, 24), + (ItemsType.barroth_claw, 1, 18), + (ItemsType.monster_bone_l, 1, 8), + (ItemsType.monster_bone_m, 1, 8), + (ItemsType.barroth_scalp, 1, 12), + (ItemsType.hellhunter_tag, 1, 28) + ], + }, + 'subquest_1': { + 'description': "None", + 'type': 0x00000000, + 'objective_type': Monster.none, + 'objective_num': 0, + 'zenny_reward': 0, + 'hrp_reward': 0, + 'rewards_row_1': [], + }, + 'subquest_2': { + 'description': "None", + 'type': 0, + 'objective_type': Monster.none, + 'objective_num': 0, + 'zenny_reward': 0, + 'hrp_reward': 0, + 'rewards_row_1': [], + } + }, + 'unknown': { + # (2 for large mon quest, 3 for small/delivery, 5 for jhen/ala) + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + } +} + + +""" +EVENT QUEST 4: Shut Up and Fish! +Quest description from +""" +QUEST_EVENT_SHUT_UP_AND_FISH = { + 'quest_info': { + 'quest_id': 61004, + 'name': "Shut Up and Fish!", + 'client': "MH3SP Dev Team", + 'description': "Hunt a Gobul", + 'details': + "Wanted:\n" + "The description for this\n" + "quest! If you can find\n" + "it, please let us know!\n" + "Thanks!", + 'success_message': + "Complete the Main Quest\n" + "and both Subquests.", + 'flags': ( + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 1, 1, 0, 0, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 1, 0, 0, 0, 0, 0) + ), + 'penalty_per_cart': 1900, + 'quest_fee': 550, + 'time_limit': 25, + 'main_monster_1': Monster.ludroth, + 'main_monster_2': Monster.kelbi, + 'location': LocationType.QUEST_LOCATION_FLOODED_FOR, + 'quest_rank': QuestRankType.star_2, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_9_INITJOIN, + 'resources': ResourcesType.low_rank, + 'supply_set_number': 35, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 0x0019, + 'summon': 0x00000000, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + 'smallmonster_data_file': 'sm_ff_free_for_all.dat', + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.gobul, + 'starting_area': 0x00, # 4 -> area 1 # 3 -> area 1 # 2 -> basecamp? # 1 -> area 3 # 0 -> area 4 + 'boss_id': 0x00, + 'spawn_count': 0x01, + 'level': 0x19, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x01, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x01 + }, + 'monster_2': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000001, + 'objective_type': Monster.gobul, + 'objective_num': 0x01, + 'zenny_reward': 5600, + 'hrp_reward': 820, + 'rewards_row_1': [ + (ItemsType.black_pearl, 3, 15), + (ItemsType.jumbo_pearl, 1, 5), + (ItemsType.glutton_tuna, 2, 10), + (ItemsType.popfish, 3, 20), + (ItemsType.burst_arowana, 2, 7), + (ItemsType.bomb_arowana, 2, 10), + (ItemsType.scatterfish, 2, 13), + (ItemsType.small_goldenfish, 1, 20) + ], + 'rewards_row_2': [ + (ItemsType.mystery_charm, 1, 35), + (ItemsType.aquaglow_jewel, 1, 5), + (ItemsType.shining_charm, 1, 15), + (ItemsType.armor_sphere, 1, 20), + (ItemsType.armor_sphere_plus, 1, 25) + ], + }, + 'subquest_1': { + 'description': "Deliver 4 Goldenfish", + 'type': 0x00000002, + 'objective_type': ItemsType.goldenfish, + 'objective_num': 0x04, + 'zenny_reward': 2400, + 'hrp_reward': 70, + 'rewards_row_1': [ + (ItemsType.mystery_charm, 1, 35), + (ItemsType.aquaglow_jewel, 1, 5), + (ItemsType.shining_charm, 1, 15), + (ItemsType.armor_sphere, 1, 20), + (ItemsType.armor_sphere_plus, 1, 25) + ], + }, + 'subquest_2': { + 'description': "Fish out Gobul once", + 'type': 0x00001000, + 'objective_type': Monster.gobul, + 'objective_num': 0x02, + 'zenny_reward': 1200, + 'hrp_reward': 60, + 'rewards_row_1': [ + (ItemsType.black_pearl, 3, 15), + (ItemsType.jumbo_pearl, 1, 5), + (ItemsType.glutton_tuna, 2, 10), + (ItemsType.popfish, 3, 20), + (ItemsType.burst_arowana, 2, 7), + (ItemsType.bomb_arowana, 2, 10), + (ItemsType.scatterfish, 2, 13), + (ItemsType.small_goldenfish, 1, 20) + ], + } + }, + 'unknown': { + # (2 for large mon quest, 3 for small/delivery, 5 for jhen/ala) + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + } +} + + +""" +EVENT QUEST 5: The Motley Mission +Quest description from https://www.youtube.com/watch?v=VOqSv-XAvlU +""" +QUEST_EVENT_MOTLEY_MISSION = { + 'small_monsters': [ + [ + # Area 0 + ], + [ + # Area 1 + { + 'type': Monster.fly_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 3,'room': 1,'quantity': -1, + 'pos_x': -0.5,'pos_y': -5038.5,'pos_z': -3042.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + ], + ], + 'quest_info': { + 'quest_id': 61005, + 'name': "The Motley Mission", + 'client': "Deserted Island Sailor", + 'description': + "Hunt 2 Royal Ludroth\n" + "", + 'details': + "Wanna hear the Hunting Fleet's\n" + "latest shanty? No? Too bad:\n" + "\"Bow, port, starboard, stern,\n" + "fishin' stinks at every turn.\n" + "Our motley crew has one wish:\n" + "hey, monsters, QUIT SCARIN'\n" + "DA FISH!\" Catchy, aye?", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 1, 0, 0, 0, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 1, 0, 0, 0, 1, 1) + ), + 'penalty_per_cart': 3000, + 'quest_fee': 800, + 'time_limit': 50, + 'main_monster_1': Monster.none, + 'main_monster_2': Monster.none, + 'location': LocationType.QUEST_LOCATION_WATER_ARENA_2, + 'quest_rank': QuestRankType.star_2, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_9_INITJOIN, + 'resources': ResourcesType.low_rank, + 'supply_set_number': 48, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 0x001D, + 'summon': 0x00000000, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.royal_ludroth, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x01, + 'level': 0x27, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x03 + }, + 'monster_2': { + 'type': Monster.royal_ludroth, + 'starting_area': 0x00, + 'boss_id': 0x01, + 'spawn_count': 0x01, + 'level': 0x27, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x03 + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000001, + 'objective_type': Monster.royal_ludroth, + 'objective_num': 0x02, + 'zenny_reward': 8000, + 'hrp_reward': 960, + 'rewards_row_1': [ + (ItemsType.black_pearl, 1, 20), + (ItemsType.jumbo_pearl, 1, 8), + (ItemsType.quality_sponge, 1, 14), + (ItemsType.r_ludroth_claw, 1, 24), + (ItemsType.r_ludroth_scale, 1, 17), + (ItemsType.spongy_hide, 8, 10), + (ItemsType.r_ludroth_crest, 1, 7) + ], + 'rewards_row_2': [ + (ItemsType.black_pearl, 1, 20), + (ItemsType.jumbo_pearl, 1, 8), + (ItemsType.quality_sponge, 1, 14), + (ItemsType.r_ludroth_claw, 1, 24), + (ItemsType.r_ludroth_scale, 1, 17), + (ItemsType.spongy_hide, 8, 10), + (ItemsType.r_ludroth_crest, 1, 7) + ], + }, + 'subquest_1': { + 'description': "None", + 'type': 0x00000000, + 'objective_type': Monster.none, + 'objective_num': 0x00, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + 'subquest_2': { + 'description': "None", + 'type': 0, + 'objective_type': Monster.none, + 'objective_num': 0, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + }, + 'unknown': { + # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + } +} + + +""" +EVENT QUEST 6: Cold Call +Quest description from https://youtu.be/Z4CeGozzpmM?feature=shared&t=16 +""" +QUEST_EVENT_COLD_CALL = { + 'small_monsters': [ + [ + # Area 0 + ], + [ + # Area 1 + { + 'type': Monster.popo,'unk1': 0,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': -1, + 'pos_x': -559.73,'pos_y': 20.32,'pos_z': -979.26, + 'rot_x': 0,'rot_y': 352,'rot_z': 0, + }, + { + 'type': Monster.popo,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 1,'quantity': -1, + 'pos_x': 207.09,'pos_y': 5.00,'pos_z': -616.77, + 'rot_x': 0,'rot_y': 238,'rot_z': 0, + }, + ], + [ + # Area 2 + { + 'type': Monster.giggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 2,'quantity': -1, + 'pos_x': 1189.65,'pos_y': 10.65,'pos_z': -1620.63, + 'rot_x': 0,'rot_y': 28,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 2,'quantity': -1, + 'pos_x': 760.17,'pos_y': 27.35,'pos_z': -1651.16, + 'rot_x': 0,'rot_y': -22,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 2,'quantity': -1, + 'pos_x': 724.92,'pos_y': 2.63,'pos_z': -1902.14, + 'rot_x': 0,'rot_y': -79,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 2,'quantity': -1, + 'pos_x': -1433.39,'pos_y': 13.81,'pos_z': 1144.14, + 'rot_x': 0,'rot_y': 426,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 2,'quantity': -1, + 'pos_x': -1297.70,'pos_y': 12.96,'pos_z': 918.99, + 'rot_x': 0,'rot_y': 477,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 2,'quantity': -1, + 'pos_x': -1437.67,'pos_y': 27.98,'pos_z': 806.39, + 'rot_x': 0,'rot_y': 534,'rot_z': 0, + }, + + { + 'type': Monster.popo,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 2,'quantity': -1, + 'pos_x': 1137.17,'pos_y': 5.05,'pos_z': 768.87, + 'rot_x': 0,'rot_y': -28,'rot_z': 0, + }, + { + 'type': Monster.popo,'unk1': 0,'unk2': 0xFF, + 'variant': 1,'room': 2,'quantity': -1, + 'pos_x': 14.17,'pos_y': 46.50,'pos_z': 1833.63, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type': Monster.popo,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 2,'quantity': -1, + 'pos_x': 556.11,'pos_y': 18.99,'pos_z': 1106.89, + 'rot_x': 0,'rot_y': 728,'rot_z': 0, + }, + { + 'type': Monster.bnahabra1,'unk1': 3,'unk2': 0xFF, + 'variant': 1,'room': 2,'quantity': -1, + 'pos_x': -1739.64,'pos_y': 34.73,'pos_z': 1109.13, + 'rot_x': 0,'rot_y': -102,'rot_z': 0, + }, + { + 'type': Monster.bnahabra1,'unk1': 3,'unk2': 0xFF, + 'variant': 1,'room': 2,'quantity': -1, + 'pos_x': 969.57,'pos_y': 0.50,'pos_z': -1964.12, + 'rot_x': 0,'rot_y': -102,'rot_z': 0, + }, + ], + [ + # Area 3 + { + 'type': Monster.baggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 3,'quantity': 3, + 'pos_x': 3146.44,'pos_y': 40.98,'pos_z': 314.53, + 'rot_x': 0,'rot_y': -56,'rot_z': 0, + }, + { + 'type': Monster.baggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 3,'quantity': 2, + 'pos_x': 3471.39,'pos_y': 7.00,'pos_z': -709.74, + 'rot_x': 0,'rot_y': -136,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 3,'quantity': -1, + 'pos_x': 3589.04,'pos_y': 5.00,'pos_z': -3259.04, + 'rot_x': 0,'rot_y': -11,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 3,'quantity': -1, + 'pos_x': 3306.99,'pos_y': 5.00,'pos_z': -3166.77, + 'rot_x': 0,'rot_y': -34,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 3,'quantity': -1, + 'pos_x': 3546.64,'pos_y': 15.73,'pos_z': -3692.10, + 'rot_x': 0,'rot_y': -113,'rot_z': 0, + }, + { + 'type': Monster.bnahabra1,'unk1': 3,'unk2': 0xFF, + 'variant': 1,'room': 3,'quantity': -1, + 'pos_x': 3742.35,'pos_y': 29.38,'pos_z': -3606.37, + 'rot_x': 0,'rot_y': -39,'rot_z': 0, + }, + ], + [ + # Area 4 + { + 'type': Monster.giggi,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 4,'quantity': 2, + 'pos_x': 76.48,'pos_y': 18.62,'pos_z': 20.74, + 'rot_x': 0,'rot_y': 298,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 4,'quantity': 3, + 'pos_x': 643.46,'pos_y': 0.00,'pos_z': -353.74, + 'rot_x': 0,'rot_y': 25696,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 4,'quantity': 7, + 'pos_x': 345.94,'pos_y': 3.39,'pos_z': 236.08, + 'rot_x': 0,'rot_y': -59,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 4,'quantity': 4, + 'pos_x': 1276.36,'pos_y': 10.24,'pos_z': -299.36, + 'rot_x': 0,'rot_y': -19,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': -1, + 'pos_x': 3776.99,'pos_y': 0.61,'pos_z': -701.98, + 'rot_x': 0,'rot_y': 46555,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': -1, + 'pos_x': 3282.63,'pos_y': 0.00,'pos_z': 479.04, + 'rot_x': 0,'rot_y': 0,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': -1, + 'pos_x': 2717.68,'pos_y': 0.60,'pos_z': -124.31, + 'rot_x': 0,'rot_y': -91,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 4,'quantity': 4, + 'pos_x': -629.64,'pos_y': 1496.43,'pos_z': -347.36, + 'rot_x': 0,'rot_y': 5,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 4,'quantity': 4, + 'pos_x': -380.25,'pos_y': 1428.15,'pos_z': -1054.46, + 'rot_x': 0,'rot_y': -45,'rot_z': 0, + }, + { + 'type': Monster.bnahabra1,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': 1, + 'pos_x': 4169.78,'pos_y': 7.24,'pos_z': -2848.38, + 'rot_x': 0,'rot_y': 182,'rot_z': 0, + }, + { + 'type': Monster.bnahabra1,'unk1': 3,'unk2': 0xFF, + 'variant': 1,'room': 4,'quantity': -1, + 'pos_x': 1700.26,'pos_y': 0.00,'pos_z': 438.18, + 'rot_x': 0,'rot_y': 147,'rot_z': 0, + }, + { + 'type': Monster.bnahabra1,'unk1': 3,'unk2': 0xFF, + 'variant': 1,'room': 4,'quantity': -1, + 'pos_x': -2452.98,'pos_y': 44.18,'pos_z': -579.15, + 'rot_x': 0,'rot_y': 51,'rot_z': 0, + }, + { + 'type': Monster.bnahabra1,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': 1, + 'pos_x': 103.34,'pos_y': 41.02,'pos_z': -1208.04, + 'rot_x': 0,'rot_y': 244,'rot_z': 0, + }, + ], + [ + # Area 5 + { + 'type': Monster.baggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': -1, + 'pos_x': -11.26,'pos_y': -15.36,'pos_z': 157.88, + 'rot_x': 0,'rot_y': 238,'rot_z': 0, + }, + { + 'type': Monster.baggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': -1, + 'pos_x': -1291.40,'pos_y': 4.00,'pos_z': 509.01, + 'rot_x': 0,'rot_y': 0,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': -1, + 'pos_x': -855.80,'pos_y': 0.48,'pos_z': -1393.44, + 'rot_x': 0,'rot_y': 159,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': -1, + 'pos_x': -525.73,'pos_y': -4.16,'pos_z': -1264.10, + 'rot_x': 0,'rot_y': -182,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': -1, + 'pos_x': -574.99,'pos_y': -4.64,'pos_z': -1717.30, + 'rot_x': 0,'rot_y': 159,'rot_z': 0, + }, + { + 'type': Monster.bnahabra1,'unk1': 3,'unk2': 0xFF, + 'variant': 1,'room': 5,'quantity': -1, + 'pos_x': 865.61,'pos_y': -4.30,'pos_z': -267.32, + 'rot_x': 0,'rot_y': 0,'rot_z': 0, + }, + { + 'type': Monster.bnahabra1,'unk1': 3,'unk2': 0xFF, + 'variant': 1,'room': 5,'quantity': -1, + 'pos_x': -1246.40,'pos_y': 6.31,'pos_z': -1119.90, + 'rot_x': 0,'rot_y': 0,'rot_z': 0, + }, + ], + [ + # Area 6 + { + 'type': Monster.baggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 6,'quantity': 2, + 'pos_x': -1266.86,'pos_y': 17.79,'pos_z': 1426.87, + 'rot_x': 0,'rot_y': 26038,'rot_z': 0, + }, + { + 'type': Monster.baggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 6,'quantity': 4, + 'pos_x': -1838.98,'pos_y': -0.78,'pos_z': -1385.65, + 'rot_x': 0,'rot_y': 39,'rot_z': 0, + }, + { + 'type': Monster.baggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 6,'quantity': 1, + 'pos_x': -1219.15,'pos_y': -2.77,'pos_z': -1722.55, + 'rot_x': 0,'rot_y': 0,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 6,'quantity': -1, + 'pos_x': 1068.11,'pos_y': -9.24,'pos_z': -712.22, + 'rot_x': 0,'rot_y': -73,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 6,'quantity': -1, + 'pos_x': 784.49,'pos_y': -8.94,'pos_z': 187.09, + 'rot_x': 0,'rot_y': -73,'rot_z': 0, + }, + { + 'type': Monster.bnahabra1,'unk1': 3,'unk2': 0xFF, + 'variant': 1,'room': 6,'quantity': -1, + 'pos_x': 758.48,'pos_y': 20.97,'pos_z': -936.30, + 'rot_x': 0,'rot_y': -125,'rot_z': 0, + }, + ], + [ + # Area 7 + { + 'type': Monster.baggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 7,'quantity': 3, + 'pos_x': 1495.12,'pos_y': 21.92,'pos_z': -1641.55, + 'rot_x': 0,'rot_y': -28,'rot_z': 0, + }, + { + 'type': Monster.baggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 7,'quantity': 1, + 'pos_x': -1936.97,'pos_y': 7.33,'pos_z': -548.03, + 'rot_x': 0,'rot_y': 0,'rot_z': 0, + }, + { + 'type': Monster.baggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 7,'quantity': 3, + 'pos_x': -1706.10,'pos_y': 2.87,'pos_z': 1374.15, + 'rot_x': 0,'rot_y': 136,'rot_z': 0, + }, + { + 'type': Monster.baggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 7,'quantity': 4, + 'pos_x': 399.71,'pos_y': 0.00,'pos_z': -910.88, + 'rot_x': 0,'rot_y': -153,'rot_z': 0, + }, + ], + [ + # Area 8 (Area 10 in Sandy Plains) + ], + [ + # Area 9 (Area 7 in Sandy Plains) + { + 'type': Monster.baggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': 2, + 'pos_x': -776.39,'pos_y': 27.75,'pos_z': 24.70, + 'rot_x': 0,'rot_y': 23347,'rot_z': 0, + }, + { + 'type': Monster.baggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': 4, + 'pos_x': -1321.35,'pos_y': 97.17,'pos_z': 214.45, + 'rot_x': 0,'rot_y': 45,'rot_z': 0, + }, + { + 'type': Monster.baggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': 2, + 'pos_x': -1395.61,'pos_y': 88.08,'pos_z': -1084.80, + 'rot_x': 0,'rot_y': 30646,'rot_z': 0, + }, + ], + ], + 'quest_info': { + 'quest_id': 61006, + 'name': "Cold Call", + 'client': "Tundra-expedition Member", + 'description': "Hunt a Gig., Bar. & bird wyv.", + 'details': + "It was just a typical sub-zero\n" + "night in the Tundra. But then,\n" + "BOOM! The sky flashed and the\n" + "ground quaked, like something\n" + "big had crashed down. Then the\n" + "monsters came. Help! We can't\n" + "work under these conditions!", + 'success_message': "Complete the Main Quest.", + 'flags': ( + + (0, 0, 1, 0, 0, 1, 0, 0), + (1, 0, 0, 0, 0, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 1, 0, 0, 0, 1, 1) + + # (0, 0, 0, 0, 0, 0, 0, 0), # (0, 0, 0, 0, 0, 0, 0, 0), + # (1, 1, 0, 0, 0, 0, 0, 0), # (1, 1, 0, 0, 0, 0, 0, 0), + # (0, 0, 0, 0, 0, 0, 0, 0), # (0, 0, 0, 0, 0, 0, 0, 0), + # (0, 0, 1, 0, 0, 0, 1, 1) # (1, 0, 1, 0, 0, 0, 1, 1) + ), + 'penalty_per_cart': 6000, + 'quest_fee': 1600, + 'time_limit': 50, + 'main_monster_1': Monster.popo, + 'main_monster_2': Monster.giggi, + 'location': LocationType.QUEST_LOCATION_TUNDRA, + 'quest_rank': QuestRankType.star_3, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_18_INITJOIN, + 'resources': ResourcesType.low_rank, + 'supply_set_number': 8, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 0x001B, + 'summon': 0x00000000, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.great_baggi, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x01, + 'level': 0x22, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x01 + }, + 'monster_2': { + 'type': Monster.gigginox, + 'starting_area': 0x00, + 'boss_id': 0x01, + 'spawn_count': 0x01, + 'level': 0x22, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x01, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x01 + }, + 'monster_3': { + 'type': Monster.barioth, + 'starting_area': 0x00, + 'boss_id': 0x02, + 'spawn_count': 0x01, + 'level': 0x23, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x01, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x01 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000001, # 0x00020101 <-- Fails on capture, also reduced quest complete timer + 'objective_type': Monster.great_baggi, + 'objective_num': 0x01, + 'zenny_reward': 16000, + 'hrp_reward': 2240, + 'rewards_row_1': [ + (ItemsType.barioth_pelt, 1, 2), + (ItemsType.uncanny_hide, 1, 12), + (ItemsType.great_bagi_claw, 1, 20), + (ItemsType.shining_charm, 1, 7), + (ItemsType.mystery_charm, 1, 14), + (ItemsType.frost_sac, 1, 5), + (ItemsType.lightcrystal, 1, 10), + (ItemsType.isisium, 1, 5), + (ItemsType.dark_metal, 1, 25) + ], + 'rewards_row_2': [ + (ItemsType.barioth_pelt, 1, 2), + (ItemsType.uncanny_hide, 1, 12), + (ItemsType.great_bagi_claw, 1, 20), + (ItemsType.shining_charm, 1, 7), + (ItemsType.mystery_charm, 1, 14), + (ItemsType.frost_sac, 1, 5), + (ItemsType.lightcrystal, 1, 10), + (ItemsType.isisium, 1, 5), + (ItemsType.dark_metal, 1, 25) + ], + }, + 'subquest_1': { + 'description': "None", + 'type': 0x00000001, # 0x00020101 <-- Fails on capture, also reduced quest complete timer + 'objective_type': Monster.gigginox, + 'objective_num': 0x01, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + 'subquest_2': { + 'description': "None", + 'type': 0x00000001, # 0x00020101 <-- Fails on capture, also reduced quest complete timer + 'objective_type': Monster.barioth, + 'objective_num': 0x01, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + }, + 'unknown': { + # (2 for large mon quest, 3 for small/delivery, 5 for jhen/ala) + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + } +} + + +""" +EVENT QUEST 7: The Phantom Uragaan +Quest description from https://www.youtube.com/watch?v=Py5PkCXhf6w +""" +QUEST_EVENT_THE_PHANTOM_URAGAAN = { + 'quest_info': { + 'quest_id': 61007, + 'name': "The Phantom Uragaan", + 'client': "Spoiled Princess", + 'description': "Hunt an Uragaan", + 'details': + "Oooh, I just heard they've\n" + "spotted the cutest, tiniest,\n" + "most adorable little Uragaan\n" + "on the Volcano. Hunt me one\n" + "this instant or I will get\n" + "very angry. And if I'm angry,\n" + "Daddy's angry. Now go!", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 1, 0, 0, 0, 0, 0, 0), + (0, 0, 0, 1, 0, 0, 0, 0), + (1, 0, 1, 0, 0, 0, 1, 1) + ), + 'penalty_per_cart': 3000, + 'quest_fee': 850, + 'time_limit': 50, + 'main_monster_1': Monster.uroktor, + 'main_monster_2': Monster.aptonoth, + 'location': LocationType.QUEST_LOCATION_VOLCANO, + 'quest_rank': QuestRankType.star_3, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_18_INITJOIN, + 'resources': ResourcesType.low_rank, + 'supply_set_number': 15, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 0x1D, + 'summon': 0x00000000, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + 'smallmonster_data_file': 'sm_phantomuragaan.dat', + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.uragaan, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x01, + 'level': 0x1D, # 0x01 through 0x3c + 'size': 0x13, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_2': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000001, + 'objective_type': Monster.uragaan, + 'objective_num': 0x01, + 'zenny_reward': 8800, + 'hrp_reward': 1100, + 'rewards_row_1': [ + (ItemsType.mystery_charm, 1, 1), + (ItemsType.uragaan_shell, 1, 16), + (ItemsType.uragaan_scale, 1, 20), + (ItemsType.uragaan_marrow, 1, 10), + (ItemsType.monster_bone_l, 1, 10), + (ItemsType.bone_husk_l, 15, 13), + (ItemsType.shining_charm, 1, 5), + (ItemsType.rustshard, 1, 25) + ], + 'rewards_row_2': [ + (ItemsType.mystery_charm, 1, 1), + (ItemsType.uragaan_shell, 1, 16), + (ItemsType.uragaan_scale, 1, 20), + (ItemsType.uragaan_marrow, 1, 10), + (ItemsType.monster_bone_l, 1, 10), + (ItemsType.bone_husk_l, 15, 13), + (ItemsType.shining_charm, 1, 5), + (ItemsType.rustshard, 1, 25) + ], + }, + 'subquest_1': { + 'description': "None", + 'type': 0x00000000, + 'objective_type': Monster.none, + 'objective_num': 0x00, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + 'subquest_2': { + 'description': "None", + 'type': 0x00000000, + 'objective_type': Monster.none, + 'objective_num': 0x00, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + }, + 'unknown': { + # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + } +} + + +""" +EVENT QUEST 8: Blood Sport +Quest description from https://www.youtube.com/watch?v=tuRSdC_mlO4 +""" +QUEST_EVENT_BLOOD_SPORT = { + 'small_monsters': [ + [ + # Area 0 + ], + [ + # Area 1 + { + 'type': Monster.fly_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 3,'room': 1,'quantity': -1, + 'pos_x': -2404.5,'pos_y': -5038.5,'pos_z': -3542.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type':Monster.fly_wyv, 'unk1': 3, 'unk2': 0xFF, + 'variant': 8, 'room': 1, 'quantity': -1, + 'pos_x': -2404.5,'pos_y': -5038.5,'pos_z': -3542.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type':Monster.fly_wyv, 'unk1': 3, 'unk2': 0xFF, + 'variant': 8, 'room': 1, 'quantity': -1, + 'pos_x': -1404.5,'pos_y': -5038.5,'pos_z': -3542.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type':Monster.fly_wyv, 'unk1': 3, 'unk2': 0xFF, + 'variant': 8, 'room': 1, 'quantity': -1, + 'pos_x': -3404.5,'pos_y': -5038.5,'pos_z': -3542.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type':Monster.fly_wyv, 'unk1': 3, 'unk2': 0xFF, + 'variant': 8, 'room': 1, 'quantity': -1, + 'pos_x': -5404.5,'pos_y': -5038.5,'pos_z': -3542.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type':Monster.fly_wyv, 'unk1': 3, 'unk2': 0xFF, + 'variant': 8, 'room': 1, 'quantity': -1, + 'pos_x': -4404.5,'pos_y': -5038.5,'pos_z': -3542.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type':Monster.fly_wyv, 'unk1': 3, 'unk2': 0xFF, + 'variant': 8, 'room': 1, 'quantity': -1, + 'pos_x': -2404.5,'pos_y': -4038.5,'pos_z': -3542.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + ], + ], + 'quest_info': { + 'quest_id': 61008, + 'name': "Blood Sport", + 'client': "Spoiled Princess", + 'description': + "Hunt an Uragaan\n" + "and a Diablos", + 'details': + "Oh, boo! I'm tired of watching\n" + "run-of-the-mill hunts. The\n" + "Diablos and the Uragaan are\n" + "supposed to be the ultimate\n" + "monster duo. I'd love to watch\n" + "them maim some foolish hunter!\n" + "Do put on a good show...", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 1, 0, 0, 0, 0, 0, 0), + (1, 1, 0, 0, 0, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 1, 0, 0, 0, 0, 0) + ), + 'penalty_per_cart': 6000, + 'quest_fee': 1750, + 'time_limit': 50, + 'main_monster_1': Monster.uragaan, + 'main_monster_2': Monster.diablos, + 'location': LocationType.QUEST_LOCATION_LAND_ARENA_1, + 'quest_rank': QuestRankType.star_3, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_18_INITJOIN, + 'resources': ResourcesType.low_rank, + 'supply_set_number': 43, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 0x001D, + 'summon': 0x00000000, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.uragaan, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x01, + 'level': 0x1D, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x01, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x03 + }, + 'monster_2': { + 'type': Monster.diablos, + 'starting_area': 0x00, + 'boss_id': 0x01, + 'spawn_count': 0x01, + 'level': 0x1D, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x01, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x03 + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000001, + 'objective_type': Monster.uragaan, + 'objective_num': 0x01, + 'zenny_reward': 17600, + 'hrp_reward': 1760, + 'rewards_row_1': [ + (ItemsType.uragaan_scale, 1, 1), + (ItemsType.diablos_ridge, 1, 14), + (ItemsType.uragaan_shell, 1, 10), + (ItemsType.diablos_shell, 1, 20), + (ItemsType.twisted_horn, 1, 12), + (ItemsType.diablos_marrow, 8, 9), + (ItemsType.uragaan_marrow, 1, 9), + (ItemsType.incomplete_plans, 1, 25) + ], + 'rewards_row_2': [ + (ItemsType.uragaan_scale, 1, 1), + (ItemsType.diablos_ridge, 1, 14), + (ItemsType.uragaan_shell, 1, 10), + (ItemsType.diablos_shell, 1, 20), + (ItemsType.twisted_horn, 1, 12), + (ItemsType.diablos_marrow, 1, 9), + (ItemsType.uragaan_marrow, 1, 9), + (ItemsType.incomplete_plans, 1, 25) + ], + }, + 'subquest_1': { + 'description': "None", + 'type': 0x00000001, + 'objective_type': Monster.diablos, + 'objective_num': 0x01, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + 'subquest_2': { + 'description': "None", + 'type': 0, + 'objective_type': Monster.none, + 'objective_num': 0, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + }, + 'unknown': { + # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + } +} + + +""" +EVENT QUEST 9: Alluring Dress +Quest description from https://www.youtube.com/watch?v=afN7ThaN3Vg&t=18s + thanks to Goabie +""" +QUEST_EVENT_ALLURING_DRESS = { + 'small_monsters': [ + [ + # Area 0 + ], + [ + # Area 1 + { + 'type': Monster.fly_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 3,'room': 1,'quantity': -1, + 'pos_x': -0.5,'pos_y': -5038.5,'pos_z': -3042.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + + # { + # 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + # 'variant': 0,'room': 1,'quantity': -1, + # 'pos_x': -100.5,'pos_y': -3038.5,'pos_z': -1042.7, + # 'rot_x': 0,'rot_y': -91,'rot_z': 0, + # }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': -1, + 'pos_x': -1200.5,'pos_y': -2538.5,'pos_z': -1042.7, + 'rot_x': 0,'rot_y': -1,'rot_z': 0, + }, + # { + # 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + # 'variant': 0,'room': 1,'quantity': -1, + # 'pos_x': -300.5,'pos_y': -2038.5,'pos_z': -1042.7, + # 'rot_x': 0,'rot_y': -21,'rot_z': 0, + # }, + # { + # 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + # 'variant': 0,'room': 1,'quantity': -1, + # 'pos_x': -1400.5,'pos_y': -1538.5,'pos_z': -1042.7, + # 'rot_x': 0,'rot_y': -161,'rot_z': 0, + # }, + # { + # 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + # 'variant': 0,'room': 1,'quantity': -1, + # 'pos_x': -400.5,'pos_y': -1038.5,'pos_z': -1042.7, + # 'rot_x': 0,'rot_y': -21,'rot_z': 0, + # }, + # { + # 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + # 'variant': 0,'room': 1,'quantity': -1, + # 'pos_x': -1400.5,'pos_y': -538.5,'pos_z': -1042.7, + # 'rot_x': 0,'rot_y': -11,'rot_z': 0, + # }, + # { + # 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + # 'variant': 0,'room': 1,'quantity': -1, + # 'pos_x': -400.5,'pos_y': -38.5,'pos_z': -1042.7, + # 'rot_x': 0,'rot_y': -1,'rot_z': 0, + # }, + + # { + # 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + # 'variant': 0,'room': 1,'quantity': -1, + # 'pos_x': -100.5,'pos_y': -3038.5,'pos_z': -0042.7, + # 'rot_x': 0,'rot_y': -91,'rot_z': 0, + # }, + # { + # 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + # 'variant': 0,'room': 1,'quantity': -1, + # 'pos_x': -1200.5,'pos_y': -2538.5,'pos_z': -0042.7, + # 'rot_x': 0,'rot_y': -1,'rot_z': 0, + # }, + # { + # 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + # 'variant': 0,'room': 1,'quantity': -1, + # 'pos_x': -300.5,'pos_y': -2038.5,'pos_z': -0042.7, + # 'rot_x': 0,'rot_y': -21,'rot_z': 0, + # }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': -1, + 'pos_x': -1400.5,'pos_y': -1538.5,'pos_z': -0042.7, + 'rot_x': 0,'rot_y': -161,'rot_z': 0, + }, + # { + # 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + # 'variant': 0,'room': 1,'quantity': -1, + # 'pos_x': -400.5,'pos_y': -1038.5,'pos_z': -0042.7, + # 'rot_x': 0,'rot_y': -21,'rot_z': 0, + # }, + # { + # 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + # 'variant': 0,'room': 1,'quantity': -1, + # 'pos_x': -1400.5,'pos_y': -538.5,'pos_z': -0042.7, + # 'rot_x': 0,'rot_y': -11,'rot_z': 0, + # }, + # { + # 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + # 'variant': 0,'room': 1,'quantity': -1, + # 'pos_x': -400.5,'pos_y': -38.5,'pos_z': -0042.7, + # 'rot_x': 0,'rot_y': -1,'rot_z': 0, + # }, + + # { + # 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + # 'variant': 0,'room': 1,'quantity': -1, + # 'pos_x': -100.5,'pos_y': -3038.5,'pos_z': -2042.7, + # 'rot_x': 0,'rot_y': -91,'rot_z': 0, + # }, + # { + # 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + # 'variant': 0,'room': 1,'quantity': -1, + # 'pos_x': -1200.5,'pos_y': -2538.5,'pos_z': -2042.7, + # 'rot_x': 0,'rot_y': -1,'rot_z': 0, + # }, + # { + # 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + # 'variant': 0,'room': 1,'quantity': -1, + # 'pos_x': -300.5,'pos_y': -2038.5,'pos_z': -2042.7, + # 'rot_x': 0,'rot_y': -21,'rot_z': 0, + # }, + # { + # 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + # 'variant': 0,'room': 1,'quantity': -1, + # 'pos_x': -1400.5,'pos_y': -1538.5,'pos_z': -2042.7, + # 'rot_x': 0,'rot_y': -161,'rot_z': 0, + # }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': -1, + 'pos_x': -400.5,'pos_y': -1038.5,'pos_z': -2042.7, + 'rot_x': 0,'rot_y': -21,'rot_z': 0, + }, + # { + # 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + # 'variant': 0,'room': 1,'quantity': -1, + # 'pos_x': -1400.5,'pos_y': -538.5,'pos_z': -2042.7, + # 'rot_x': 0,'rot_y': -11,'rot_z': 0, + # }, + # { + # 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + # 'variant': 0,'room': 1,'quantity': -1, + # 'pos_x': -400.5,'pos_y': -38.5,'pos_z': -2042.7, + # 'rot_x': 0,'rot_y': -1,'rot_z': 0, + # }, + + # { + # 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + # 'variant': 0,'room': 1,'quantity': -1, + # 'pos_x': -1100.5,'pos_y': -3038.5,'pos_z': -1042.7, + # 'rot_x': 0,'rot_y': -91,'rot_z': 0, + # }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': -1, + 'pos_x': -2200.5,'pos_y': -2538.5,'pos_z': -1042.7, + 'rot_x': 0,'rot_y': -1,'rot_z': 0, + }, + # { + # 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + # 'variant': 0,'room': 1,'quantity': -1, + # 'pos_x': -1300.5,'pos_y': -2038.5,'pos_z': -1042.7, + # 'rot_x': 0,'rot_y': -21,'rot_z': 0, + # }, + # { + # 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + # 'variant': 0,'room': 1,'quantity': -1, + # 'pos_x': -2400.5,'pos_y': -1538.5,'pos_z': -1042.7, + # 'rot_x': 0,'rot_y': -161,'rot_z': 0, + # }, + # { + # 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + # 'variant': 0,'room': 1,'quantity': -1, + # 'pos_x': -1400.5,'pos_y': -1038.5,'pos_z': -1042.7, + # 'rot_x': 0,'rot_y': -21,'rot_z': 0, + # }, + # { + # 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + # 'variant': 0,'room': 1,'quantity': -1, + # 'pos_x': -2400.5,'pos_y': -538.5,'pos_z': -1042.7, + # 'rot_x': 0,'rot_y': -11,'rot_z': 0, + # }, + # { + # 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + # 'variant': 0,'room': 1,'quantity': -1, + # 'pos_x': -1400.5,'pos_y': -38.5,'pos_z': -1042.7, + # 'rot_x': 0,'rot_y': -1,'rot_z': 0, + # }, + + # { + # 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + # 'variant': 0,'room': 1,'quantity': -1, + # 'pos_x': 1100.5,'pos_y': -3038.5,'pos_z': -1042.7, + # 'rot_x': 0,'rot_y': -91,'rot_z': 0, + # }, + # { + # 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + # 'variant': 0,'room': 1,'quantity': -1, + # 'pos_x': 2200.5,'pos_y': -2538.5,'pos_z': -1042.7, + # 'rot_x': 0,'rot_y': -1,'rot_z': 0, + # }, + # { + # 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + # 'variant': 0,'room': 1,'quantity': -1, + # 'pos_x': 1300.5,'pos_y': -2038.5,'pos_z': -1042.7, + # 'rot_x': 0,'rot_y': -21,'rot_z': 0, + # }, + # { + # 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + # 'variant': 0,'room': 1,'quantity': -1, + # 'pos_x': 2400.5,'pos_y': -1538.5,'pos_z': -1042.7, + # 'rot_x': 0,'rot_y': -161,'rot_z': 0, + # }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': -1, + 'pos_x': 1400.5,'pos_y': -1038.5,'pos_z': -1042.7, + 'rot_x': 0,'rot_y': -21,'rot_z': 0, + }, + # { + # 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + # 'variant': 0,'room': 1,'quantity': -1, + # 'pos_x': 2400.5,'pos_y': -538.5,'pos_z': -1042.7, + # 'rot_x': 0,'rot_y': -11,'rot_z': 0, + # }, + # { + # 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + # 'variant': 0,'room': 1,'quantity': -1, + # 'pos_x': 1400.5,'pos_y': -38.5,'pos_z': -1042.7, + # 'rot_x': 0,'rot_y': -1,'rot_z': 0, + # }, + ], + ], + 'quest_info': { + 'quest_id': 61009, + 'name': "Alluring Dress", + 'client': "Elder Princess", + 'description': + "Hunt 30 Sharq", + 'details': + "My sister's interest in\n" + "monsters is beginning to\n" + "become scandalous! She simply\n" + "must find a husband --\n" + "hopefully at the next ball. We\n" + "need enough Sharqskin for her\n" + "dress, so please slay 30 fish!", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 1, 0, 0, 0, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), # (1, 1, 1, 0, 1, 1, 1, 1) + (1, 0, 0, 0, 0, 0, 1, 1) + ), + 'penalty_per_cart': 1500, + 'quest_fee': 400, + 'time_limit': 50, + 'main_monster_1': Monster.fish, + 'main_monster_2': Monster.none, + 'location': LocationType.QUEST_LOCATION_WATER_ARENA_2, + 'quest_rank': QuestRankType.star_1, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_NO_ARMOR, + 'resources': ResourcesType.low_rank, + 'supply_set_number': 48, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 0x001D, + 'summon': 0x6401010C, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_2': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000001, + 'objective_type': Monster.fish, + 'objective_num': 0x1E, + 'zenny_reward': 4000, + 'hrp_reward': 120, + 'rewards_row_1': [ + (ItemsType.armor_stone, 1, 1), + (ItemsType.immunizer, 1, 5), + (ItemsType.sharpened_fang, 1, 16), + (ItemsType.sharqskin, 1, 24), + (ItemsType.raw_meat, 2, 12), + (ItemsType.armor_sphere_plus, 1, 12), + (ItemsType.adv_armor_sphere, 1, 5), + (ItemsType.sharq_ticket, 1, 25) + ], + 'rewards_row_2': [ + (ItemsType.armor_stone, 1, 1), + (ItemsType.immunizer, 1, 5), + (ItemsType.sharpened_fang, 1, 16), + (ItemsType.sharqskin, 1, 24), + (ItemsType.raw_meat, 2, 12), + (ItemsType.armor_sphere_plus, 1, 12), + (ItemsType.adv_armor_sphere, 1, 5), + (ItemsType.sharq_ticket, 1, 25) + ], + }, + 'subquest_1': { + 'description': "None", + 'type': 0x00000000, + 'objective_type': Monster.none, + 'objective_num': 0x00, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + 'subquest_2': { + 'description': "None", + 'type': 0, + 'objective_type': Monster.none, + 'objective_num': 0, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + }, + 'unknown': { + # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala + 'unk_12': 0x00000003, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + } +} + +""" +EVENT QUEST 10: Gobuled Everything in Sight +Quest description from https://www.youtube.com/watch?v=2_4o2zaKM8M + thanks to "kazuma_6969" +""" +QUEST_EVENT_GOBULED_EVERYTHING_IN_SIGHT = { + 'quest_info': { + 'quest_id': 61010, + 'name': "Gobuled Everything in Sight", + 'client': "Argosy Captain", + 'description': "Hunt a Gobul", + 'details': + "Taihen! My small ships all\n" + "gobbled by huge Gobul! The\n" + "crew all escaped, but goods\n" + "are in fish's stomach, yes --\n" + "even some are super-rare items\n" + "there! Only hunters can get my\n" + "items back. Onegai!", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 1, 0, 0, 0, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 1, 0, 0, 0, 1, 1) + ), + 'penalty_per_cart': 1900, + 'quest_fee': 550, + 'time_limit': 50, + 'main_monster_1': Monster.ludroth, + 'main_monster_2': Monster.kelbi, + 'location': LocationType.QUEST_LOCATION_FLOODED_FOR, + 'quest_rank': QuestRankType.star_3, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_18_INITJOIN, + 'resources': ResourcesType.low_rank, + 'supply_set_number': 25, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 0x0020, + 'summon': 0x00000000, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + 'smallmonster_data_file': 'sm_ff_free_for_all.dat', + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.gobul, + 'starting_area': 0x00, # 4 -> area 1 # 3 -> area 1 # 2 -> basecamp? # 1 -> area 3 # 0 -> area 4 + 'boss_id': 0x00, + 'spawn_count': 0x01, + 'level': 0x20, # 0x01 through 0x3c + 'size': 0x96, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_2': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000001, + 'objective_type': Monster.gobul, + 'objective_num': 0x01, + 'zenny_reward': 5600, + 'hrp_reward': 1230, + 'rewards_row_1': [ + (ItemsType.rustshard, 1, 15), + (ItemsType.gobul_fin, 1, 13), + (ItemsType.gobul_spike, 1, 15), + (ItemsType.mystery_charm, 1, 25), + (ItemsType.gobul_whisker, 1, 12), + (ItemsType.shining_charm, 1, 10), + (ItemsType.gobul_lantern, 1, 10) + ], + 'rewards_row_2': [ + (ItemsType.rustshard, 1, 15), + (ItemsType.gobul_fin, 1, 13), + (ItemsType.gobul_spike, 1, 15), + (ItemsType.mystery_charm, 1, 25), + (ItemsType.gobul_whisker, 1, 12), + (ItemsType.shining_charm, 1, 10), + (ItemsType.gobul_lantern, 1, 10) + ], + }, + 'subquest_1': { + 'description': "Destroy Gobul's lantern", + 'type': 0x00000204, + 'objective_type': Monster.gobul, + 'objective_num': 0x01, + 'zenny_reward': 800, + 'hrp_reward': 100, + 'rewards_row_1': [ + (ItemsType.gobul_fin, 1, 10), + (ItemsType.gobul_spike, 1, 24), + (ItemsType.gobul_hide, 1, 20), + (ItemsType.paralysis_sac, 1, 28), + (ItemsType.monster_bone_l, 1, 18) + ], + }, + 'subquest_2': { + 'description': "Fish out Gobul once", + 'type': 0x00001000, + 'objective_type': Monster.gobul, + 'objective_num': 0x02, + 'zenny_reward': 1200, + 'hrp_reward': 60, + 'rewards_row_1': [ + (ItemsType.gobul_fin, 1, 10), + (ItemsType.gobul_spike, 1, 24), + (ItemsType.gobul_hide, 1, 20), + (ItemsType.paralysis_sac, 1, 28), + (ItemsType.monster_bone_l, 1, 18) + ], + } + }, + 'unknown': { + # (2 for large mon quest, 3 for small/delivery, 5 for jhen/ala) + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + } +} + + +""" +EVENT QUEST 11: Poached Wyvern Eggs +Quest description from https://www.youtube.com/watch?v=1GuwMhI6Xy8 + Thanks to "kazuma_6969" +""" +QUEST_EVENT_POACHED_WYVERN_EGGS = { + 'small_monsters': [ + # ----- WAVE 1 ----- + [ + # Area 0 + ], + [ + # Area 1 + { + 'type': Monster.fly_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 3,'room': 1,'quantity': 1, + 'pos_x': -5057.57,'pos_y': -2.26,'pos_z': -5940.68, + 'rot_x': 0,'rot_y': -68,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 3,'room': 1,'quantity': 1, + 'pos_x': -4811.71,'pos_y': -66.91,'pos_z': -6502.93, + 'rot_x': 0,'rot_y': -28,'rot_z': 0, + }, + ], + [ + # Area 2 (Area 3 in Deserted Island) + { + 'type': Monster.altaroth,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 2,'quantity': 3, + 'pos_x': -6654.10,'pos_y': 23.12,'pos_z': 117.64, + 'rot_x': 0,'rot_y': 455,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 3,'room': 2,'quantity': 1, + 'pos_x': -4409.86,'pos_y': 160.61,'pos_z': 3585.26, + 'rot_x': 0,'rot_y': -164,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 3,'room': 2,'quantity': 1, + 'pos_x': -2714.98,'pos_y': 150.44,'pos_z': 2758.35, + 'rot_x': 0,'rot_y': -244,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 3,'room': 2,'quantity': 1, + 'pos_x': -3714.37,'pos_y': 77.64,'pos_z': 2717.77, + 'rot_x': 0,'rot_y': -56,'rot_z': 0, + }, + ], + [ + # Area 3 (Area 2 in Deserted Island) + { + 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 3,'quantity': 4, + 'pos_x': 2690.34,'pos_y': 20.00,'pos_z': -843.30, + 'rot_x': 0,'rot_y': -45,'rot_z': 0, + }, + { + 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 3,'quantity': 3, + 'pos_x': 1508.85,'pos_y': 0.71,'pos_z': 933.94, + 'rot_x': 0,'rot_y': 250,'rot_z': 0, + }, + { + 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 3,'quantity': 2, + 'pos_x': 948.50,'pos_y': -19.00,'pos_z': -894.84, + 'rot_x': 0,'rot_y': -307,'rot_z': 0, + }, + { + 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 3,'quantity': 2, + 'pos_x': -671.47,'pos_y': -14.07,'pos_z': 468.25, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + ], + [ + # Area 4 (Area 7 in Deserted Island) + { + 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': 1, + 'pos_x': -877.96,'pos_y': 2.00,'pos_z': 1397.25, + 'rot_x': 0,'rot_y': -125,'rot_z': 0, + }, + { + 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 4,'quantity': 5, + 'pos_x': -1213.07,'pos_y': 2.00,'pos_z': 704.80, + 'rot_x': 0,'rot_y': 312,'rot_z': 0, + }, + { + 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': 3, + 'pos_x': -1976.37,'pos_y': 2.00,'pos_z': 1759.45, + 'rot_x': 0,'rot_y': -301,'rot_z': 0, + }, + { + 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 4,'quantity': 2, + 'pos_x': -2320.33,'pos_y': 2.00,'pos_z': 2294.16, + 'rot_x': 0,'rot_y': 119,'rot_z': 0, + }, + { + 'type': Monster.bnahabra2,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 4,'quantity': -1, + 'pos_x': -5671.42,'pos_y': 466.03,'pos_z': 3073.44, + 'rot_x': 273,'rot_y': 304,'rot_z': 0, + }, + ], + [ + # Area 5 + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': 3, + 'pos_x': -442.09,'pos_y': 16.00,'pos_z': 734.60, + 'rot_x': 0,'rot_y': 119,'rot_z': 0, + }, + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': 2, + 'pos_x': -1122.44,'pos_y': 16.00,'pos_z': 548.27, + 'rot_x': 0,'rot_y': 182,'rot_z': 0, + }, + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': 2, + 'pos_x': -1077.87,'pos_y': 16.00,'pos_z': 1238.55, + 'rot_x': 0,'rot_y': 307,'rot_z': 0, + }, + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': 1, + 'pos_x': -573.41,'pos_y': 16.00,'pos_z': 1474.43, + 'rot_x': 0,'rot_y': 392,'rot_z': 0, + }, + ], + [ + # Area 6 + ], + [ + # Area 7 (Area 11 in Deserted Island) + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 4,'room': 7,'quantity': 4, + 'pos_x': 2237.04,'pos_y': -1090.00,'pos_z': 1586.48, + 'rot_x': 0,'rot_y': 96,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 4,'room': 7,'quantity': 2, + 'pos_x': 2469.26,'pos_y': -1330.00,'pos_z': 2832.58, + 'rot_x': 0,'rot_y': -108,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 4,'room': 7,'quantity': 2, + 'pos_x': 1103.05,'pos_y': -2050.00,'pos_z': -1429.32, + 'rot_x': 0,'rot_y': -108,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 4,'room': 7,'quantity': 1, + 'pos_x': -3054.79,'pos_y': -3047.85,'pos_z': 3126.22, + 'rot_x': 0,'rot_y': -62,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 4,'room': 7,'quantity': 1, + 'pos_x': 1268.03,'pos_y': -2470.00,'pos_z': -557.22, + 'rot_x': 0,'rot_y': -108,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 7,'quantity': 3, + 'pos_x': 1742.13,'pos_y': -3820.00,'pos_z': -1993.49, + 'rot_x': 0,'rot_y': -108,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 7,'quantity': 2, + 'pos_x': 1732.89,'pos_y': -3580.00,'pos_z': -4462.32, + 'rot_x': 0,'rot_y': -278,'rot_z': 0, + }, + ], + [ + # Area 8 (Area 12 in the Deserted Island) + { + 'type': Monster.ludroth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 2, + 'pos_x': 80.95,'pos_y': 35.81,'pos_z': -523.41, + 'rot_x': 0,'rot_y': -420,'rot_z': 0, + }, + { + 'type': Monster.ludroth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 1, + 'pos_x': -1342.36,'pos_y': -18.00,'pos_z': 465.56, + 'rot_x': 0,'rot_y': -324,'rot_z': 0, + }, + ], + [ + # Area 9 (Area 6 in the Deserted Island) + { + 'type': Monster.jaggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': -1, + 'pos_x': 965.46,'pos_y': 27.06,'pos_z': 892.53, + 'rot_x': 0,'rot_y': 563,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': -1, + 'pos_x': 732.00,'pos_y': 24.88,'pos_z': 1123.58, + 'rot_x': 0,'rot_y': 637,'rot_z': 0, + }, + { + 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': 6, + 'pos_x': 962.01,'pos_y': 19.44,'pos_z': -149.63, + 'rot_x': 0,'rot_y': 540,'rot_z': 0, + }, + { + 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': 4, + 'pos_x': 220.21,'pos_y': 20.45,'pos_z': -417.64, + 'rot_x': 0,'rot_y': 557,'rot_z': 0, + }, + { + 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': 2, + 'pos_x': -439.60,'pos_y': 13.03,'pos_z': 98.15, + 'rot_x': 0,'rot_y': 631,'rot_z': 0, + }, + { + 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': 1, + 'pos_x': -237.23,'pos_y': 2.00,'pos_z': 803.55, + 'rot_x': 0,'rot_y': 648,'rot_z': 0, + }, + ], + [ + # Area 10 (Area 8 in the Deserted Island) + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 10,'quantity': 2, + 'pos_x': -2085.64,'pos_y': -283.99,'pos_z': 1193.70, + 'rot_x': 0,'rot_y': -204,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 10,'quantity': 1, + 'pos_x': -2525.41,'pos_y': -190.61,'pos_z': -207.68, + 'rot_x': 0,'rot_y': -51,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 10,'quantity': 1, + 'pos_x': -2950.76,'pos_y': -249.78,'pos_z': 505.61, + 'rot_x': 0,'rot_y': 204,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 10,'quantity': 2, + 'pos_x': -1914.32,'pos_y': -281.12,'pos_z': 889.95, + 'rot_x': 0,'rot_y': 329,'rot_z': 0, + }, + ], + [ + # Area 11 (Area 4 in the Deserted Island) + { + 'type': Monster.giggi,'unk1': 1,'unk2': 0xFF, + 'variant': 6,'room': 11,'quantity': 2, + 'pos_x': -453.62,'pos_y': 705.50,'pos_z': 2253.55, + 'rot_x': 0,'rot_y': -5,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 1,'unk2': 0xFF, + 'variant': 6,'room': 11,'quantity': 4, + 'pos_x': 142.14,'pos_y': 336.98,'pos_z': 3677.44, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 11,'quantity': 1, + 'pos_x': 4363.26,'pos_y': 426.27,'pos_z': 5818.19, + 'rot_x': 0,'rot_y': 171,'rot_z': 0, + }, + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 11,'quantity': 1, + 'pos_x': 4782.14,'pos_y': 426.27,'pos_z': 5556.53, + 'rot_x': 0,'rot_y': 164,'rot_z': 0, + }, + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 11,'quantity': 1, + 'pos_x': 4617.08,'pos_y': 426.27,'pos_z': 6208.15, + 'rot_x': 0,'rot_y': 284,'rot_z': 0, + }, + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 11,'quantity': 1, + 'pos_x': 5099.46,'pos_y': 426.27,'pos_z': 5456.15, + 'rot_x': 0,'rot_y': 161,'rot_z': 0, + }, + { + 'type': Monster.bnahabra2,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 11,'quantity': 4, + 'pos_x': 2767.15,'pos_y': 611.59,'pos_z': 4297.09, + 'rot_x': 0,'rot_y': -301,'rot_z': 0, + }, + { + 'type': Monster.bnahabra2,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 11,'quantity': 2, + 'pos_x': 2793.18,'pos_y': 1205.81,'pos_z': 5908.79, + 'rot_x': 0,'rot_y': -295,'rot_z': 0, + }, + { + 'type': Monster.bnahabra2,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 11,'quantity': 1, + 'pos_x': 3210.49,'pos_y': 845.81,'pos_z': 5369.26, + 'rot_x': 0,'rot_y': -398,'rot_z': 0, + }, + ], + [ + # Area 12 (Area 10 in the Deserted Island) + { + 'type': Monster.epioth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 12,'quantity': -1, + 'pos_x': 572.89,'pos_y': -618.12,'pos_z': -2648.11, + 'rot_x': 0,'rot_y': -142,'rot_z': 0, + }, + { + 'type': Monster.epioth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 12,'quantity': -1, + 'pos_x': -501.62,'pos_y': -210.00,'pos_z': -3356.64, + 'rot_x': 0,'rot_y': 45,'rot_z': 0, + }, + { + 'type': Monster.epioth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 12,'quantity': -1, + 'pos_x': -1624.63,'pos_y': -888.12,'pos_z': -2880.06, + 'rot_x': 0,'rot_y': 113,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 12,'quantity': -1, + 'pos_x': -2352.88,'pos_y': -523.55,'pos_z': -7478.20, + 'rot_x': 0,'rot_y': -91,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 12,'quantity': -1, + 'pos_x': -1957.86,'pos_y': -1228.41,'pos_z': -7734.46, + 'rot_x': 0,'rot_y': -91,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 12,'quantity': -1, + 'pos_x': -2821.80,'pos_y': -988.41,'pos_z': -8174.07, + 'rot_x': 0,'rot_y': -91,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 12,'quantity': -1, + 'pos_x': -2435.99,'pos_y': -988.41,'pos_z': -7780.24, + 'rot_x': 0,'rot_y': -91,'rot_z': 0, + }, + ], + # ----- WAVE 2 ----- + [ + # Area 0 + ], + [ + # Area 1 + { + 'type': Monster.fly_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 3,'room': 1,'quantity': 1, + 'pos_x': -5057.57,'pos_y': -2.26,'pos_z': -5940.68, + 'rot_x': 0,'rot_y': -68,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 3,'room': 1,'quantity': 1, + 'pos_x': -4811.71,'pos_y': -66.91,'pos_z': -6502.93, + 'rot_x': 0,'rot_y': -28,'rot_z': 0, + }, + ], + [ + # Area 2 (Area 3 in Deserted Island) + { + 'type': Monster.melynx,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 2,'quantity': 3, + 'pos_x': -6114.99,'pos_y': 1.01,'pos_z': -305.99, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type': Monster.melynx,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 2,'quantity': 2, + 'pos_x': -5573.24,'pos_y': 28.24,'pos_z': 89.46, + 'rot_x': 0,'rot_y': 62,'rot_z': 0, + }, + { + 'type': Monster.melynx,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 2,'quantity': 2, + 'pos_x': -5266.61,'pos_y': 18.27,'pos_z': -366.28, + 'rot_x': 0,'rot_y': 324,'rot_z': 0, + }, + { + 'type': Monster.melynx,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 2,'quantity': 1, + 'pos_x': -4974.18,'pos_y': 24.04,'pos_z': 118.41, + 'rot_x': 0,'rot_y': 39,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 3,'room': 2,'quantity': 1, + 'pos_x': -4409.86,'pos_y': 160.61,'pos_z': 3585.26, + 'rot_x': 0,'rot_y': -164,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 3,'room': 2,'quantity': 1, + 'pos_x': -2714.98,'pos_y': 150.44,'pos_z': 2758.35, + 'rot_x': 0,'rot_y': -244,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 3,'room': 2,'quantity': 1, + 'pos_x': -3714.37,'pos_y': 77.64,'pos_z': 2717.77, + 'rot_x': 0,'rot_y': -56,'rot_z': 0, + }, + ], + [ + # Area 3 (Area 2 in Deserted Island) + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 3,'quantity': 4, + 'pos_x': -2866.17,'pos_y': 4.00,'pos_z': 207.60, + 'rot_x': 0,'rot_y': -22,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 3,'quantity': 2, + 'pos_x': -3281.49,'pos_y': 5.72,'pos_z': 1054.53, + 'rot_x': 0,'rot_y': -119,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 3,'quantity': 2, + 'pos_x': -2077.49,'pos_y': -0.82,'pos_z': 614.59, + 'rot_x': 0,'rot_y': -113,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 3,'quantity': 3, + 'pos_x': 1844.04,'pos_y': 13.37,'pos_z': -1285.39, + 'rot_x': 0,'rot_y': 238,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 3,'quantity': 1, + 'pos_x': 2591.03,'pos_y': -11.64,'pos_z': -1490.38, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + ], + [ + # Area 4 (Area 7 in Deserted Island) + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': 4, + 'pos_x': -3806.09,'pos_y': 2.00,'pos_z': 1899.19, + 'rot_x': 0,'rot_y': 324,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': 2, + 'pos_x': -2228.14,'pos_y': 2.00,'pos_z': 2084.72, + 'rot_x': 0,'rot_y': 278,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': 2, + 'pos_x': -3075.68,'pos_y': 2.00,'pos_z': 2687.36, + 'rot_x': 0,'rot_y': 244,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': 1, + 'pos_x': -4162.06,'pos_y': 2.00,'pos_z': 2924.56, + 'rot_x': 0,'rot_y': 221,'rot_z': 0, + }, + { + 'type': Monster.bnahabra2,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 4,'quantity': -1, + 'pos_x': -5671.42,'pos_y': 466.03,'pos_z': 3073.44, + 'rot_x': 273,'rot_y': 304,'rot_z': 0, + }, + ], + [ + # Area 5 + { + 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': 6, + 'pos_x': -2138.97,'pos_y': 18.00,'pos_z': -355.64, + 'rot_x': 0,'rot_y': 432,'rot_z': 0, + }, + { + 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': 4, + 'pos_x': -1641.20,'pos_y': 17.36,'pos_z': -875.79, + 'rot_x': 0,'rot_y': 472,'rot_z': 0, + }, + { + 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': 2, + 'pos_x': -1951.09,'pos_y': 18.00,'pos_z': -1441.74, + 'rot_x': 0,'rot_y': 506,'rot_z': 0, + }, + { + 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': 1, + 'pos_x': -2578.55,'pos_y': 25.21,'pos_z': -1423.47, + 'rot_x': 0,'rot_y': 540,'rot_z': 0, + }, + ], + [ + # Area 6 + ], + [ + # Area 7 (Area 11 in Deserted Island) + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 4,'room': 7,'quantity': 4, + 'pos_x': 2237.04,'pos_y': -1090.00,'pos_z': 1586.48, + 'rot_x': 0,'rot_y': 96,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 4,'room': 7,'quantity': 2, + 'pos_x': 2469.26,'pos_y': -1330.00,'pos_z': 2832.58, + 'rot_x': 0,'rot_y': -108,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 4,'room': 7,'quantity': 2, + 'pos_x': 1103.05,'pos_y': -2050.00,'pos_z': -1429.32, + 'rot_x': 0,'rot_y': -108,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 4,'room': 7,'quantity': 1, + 'pos_x': -3054.79,'pos_y': -3047.85,'pos_z': 3126.22, + 'rot_x': 0,'rot_y': -62,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 4,'room': 7,'quantity': 1, + 'pos_x': 1268.03,'pos_y': -2470.00,'pos_z': -557.22, + 'rot_x': 0,'rot_y': -108,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 7,'quantity': 3, + 'pos_x': 1742.13,'pos_y': -3820.00,'pos_z': -1993.49, + 'rot_x': 0,'rot_y': -108,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 7,'quantity': 2, + 'pos_x': 1732.89,'pos_y': -3580.00,'pos_z': -4462.32, + 'rot_x': 0,'rot_y': -278,'rot_z': 0, + }, + ], + [ + # Area 8 (Area 12 in the Deserted Island) + { + 'type': Monster.ludroth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 2, + 'pos_x': 80.95,'pos_y': 35.81,'pos_z': -523.41, + 'rot_x': 0,'rot_y': -420,'rot_z': 0, + }, + { + 'type': Monster.ludroth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 1, + 'pos_x': -1342.36,'pos_y': -18.00,'pos_z': 465.56, + 'rot_x': 0,'rot_y': -324,'rot_z': 0, + }, + ], + [ + # Area 9 (Area 6 in the Deserted Island) + { + 'type': Monster.jaggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': -1, + 'pos_x': 965.46,'pos_y': 27.06,'pos_z': 892.53, + 'rot_x': 0,'rot_y': 563,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': -1, + 'pos_x': 732.00,'pos_y': 24.88,'pos_z': 1123.58, + 'rot_x': 0,'rot_y': 637,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 1,'unk2': 0xFF, + 'variant': 3,'room': 9,'quantity': 6, + 'pos_x': -2618.42,'pos_y': 168.02,'pos_z': -385.05, + 'rot_x': 0,'rot_y': 625,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': 3, + 'pos_x': -3005.70,'pos_y': 19.00,'pos_z': 276.54, + 'rot_x': 0,'rot_y': 961,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': 2, + 'pos_x': -659.60,'pos_y': 21.89,'pos_z': -1327.15, + 'rot_x': 0,'rot_y': 369,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': 1, + 'pos_x': -549.09,'pos_y': 15.82,'pos_z': -103.05, + 'rot_x': 0,'rot_y': -79,'rot_z': 0, + }, + ], + [ + # Area 10 (Area 8 in the Deserted Island) + ], + [ + # Area 11 (Area 4 in the Deserted Island) + { + 'type': Monster.giggi,'unk1': 1,'unk2': 0xFF, + 'variant': 6,'room': 11,'quantity': 2, + 'pos_x': -453.62,'pos_y': 705.50,'pos_z': 2253.55, + 'rot_x': 0,'rot_y': -5,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 1,'unk2': 0xFF, + 'variant': 6,'room': 11,'quantity': 4, + 'pos_x': 142.14,'pos_y': 336.98,'pos_z': 3677.44, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 11,'quantity': 1, + 'pos_x': 4363.26,'pos_y': 426.27,'pos_z': 5818.19, + 'rot_x': 0,'rot_y': 171,'rot_z': 0, + }, + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 11,'quantity': 1, + 'pos_x': 4782.14,'pos_y': 426.27,'pos_z': 5556.53, + 'rot_x': 0,'rot_y': 164,'rot_z': 0, + }, + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 11,'quantity': 1, + 'pos_x': 4617.08,'pos_y': 426.27,'pos_z': 6208.15, + 'rot_x': 0,'rot_y': 284,'rot_z': 0, + }, + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 11,'quantity': 1, + 'pos_x': 5099.46,'pos_y': 426.27,'pos_z': 5456.15, + 'rot_x': 0,'rot_y': 161,'rot_z': 0, + }, + { + 'type': Monster.bnahabra2,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 11,'quantity': 4, + 'pos_x': 2767.15,'pos_y': 611.59,'pos_z': 4297.09, + 'rot_x': 0,'rot_y': -301,'rot_z': 0, + }, + { + 'type': Monster.bnahabra2,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 11,'quantity': 2, + 'pos_x': 2793.18,'pos_y': 1205.81,'pos_z': 5908.79, + 'rot_x': 0,'rot_y': -295,'rot_z': 0, + }, + { + 'type': Monster.bnahabra2,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 11,'quantity': 1, + 'pos_x': 3210.49,'pos_y': 845.81,'pos_z': 5369.26, + 'rot_x': 0,'rot_y': -398,'rot_z': 0, + }, + ], + [ + # Area 12 (Area 10 in the Deserted Island) + { + 'type': Monster.epioth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 12,'quantity': -1, + 'pos_x': 572.89,'pos_y': -618.12,'pos_z': -2648.11, + 'rot_x': 0,'rot_y': -142,'rot_z': 0, + }, + { + 'type': Monster.epioth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 12,'quantity': -1, + 'pos_x': -501.62,'pos_y': -210.00,'pos_z': -3356.64, + 'rot_x': 0,'rot_y': 45,'rot_z': 0, + }, + { + 'type': Monster.epioth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 12,'quantity': -1, + 'pos_x': -1624.63,'pos_y': -888.12,'pos_z': -2880.06, + 'rot_x': 0,'rot_y': 113,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 12,'quantity': -1, + 'pos_x': -2352.88,'pos_y': -523.55,'pos_z': -7478.20, + 'rot_x': 0,'rot_y': -91,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 12,'quantity': -1, + 'pos_x': -1957.86,'pos_y': -1228.41,'pos_z': -7734.46, + 'rot_x': 0,'rot_y': -91,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 12,'quantity': -1, + 'pos_x': -2821.80,'pos_y': -988.41,'pos_z': -8174.07, + 'rot_x': 0,'rot_y': -91,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 12,'quantity': -1, + 'pos_x': -2435.99,'pos_y': -988.41,'pos_z': -7780.24, + 'rot_x': 0,'rot_y': -91,'rot_z': 0, + }, + ], + ], + 'quest_info': { + 'quest_id': 61011, + 'name': "Poached Wyvern Eggs", + 'client': "The Lady Gourmet", + 'description': "Deliver 9 Wyvern Eggs", + 'details': + "Why, hellooo! I mean to hold\n" + "a dinner party, but I've\n" + "discovered the most dreadful\n" + "news -- I don't have enough\n" + "eggs for my recipe! I simply\n" + "mustn't disappoint my guests,\n" + "so please save this supper!", + 'success_message': + "Complete the Main Quest.", + 'flags': ( + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 1, 0, 0, 0, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (0, 1, 0, 0, 0, 0, 1, 1) + ), + 'penalty_per_cart': 10000, + 'quest_fee': 1200, + 'time_limit': 15, + 'main_monster_1': Monster.none, + 'main_monster_2': Monster.none, + 'location': LocationType.QUEST_LOCATION_D_ISLAND, + 'quest_rank': QuestRankType.star_4, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_31_INITJOIN, + 'resources': ResourcesType.high_rank, + 'supply_set_number': 31, + 'starting_position': StartingPositionType.random, + 'general_enemy_level': 0x002A, + 'summon': 0x64010129, # 28 (0x1C) or 41 (0x29) + 'wave_1_transition_type': WaveType.item, + 'wave_1_transition_target': ItemsType.wyvern_eg, + 'wave_1_transition_quantity': 0x0001, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000 + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_2': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000002, + 'objective_type': ItemsType.wyvern_eg, + 'objective_num': 0x09, + 'zenny_reward': 30000, + 'hrp_reward': 400, + 'rewards_row_1': [ + (ItemsType.commendation, 1, 5), + (ItemsType.rustshard, 1, 15), + (ItemsType.ancient_shard, 2, 10), + (ItemsType.mystery_charm, 1, 14), + (ItemsType.shining_charm, 1, 5), + (ItemsType.golden_eg, 1, 8), + (ItemsType.silver_eg, 1, 18), + (ItemsType.steel_eg, 1, 25) + ], + 'rewards_row_2': [ + (ItemsType.commendation, 1, 5), + (ItemsType.rustshard, 1, 15), + (ItemsType.ancient_shard, 2, 10), + (ItemsType.mystery_charm, 1, 14), + (ItemsType.shining_charm, 1, 5), + (ItemsType.golden_eg, 1, 8), + (ItemsType.silver_eg, 1, 18), + (ItemsType.steel_eg, 1, 25) + ], + }, + 'subquest_1': { + 'description': "Deliver 2 Wyvern Tears", + 'type': 0x00000002, + 'objective_type': ItemsType.wyvern_tear, + 'objective_num': 0x02, + 'zenny_reward': 3200, + 'hrp_reward': 80, + 'rewards_row_1': [ + (ItemsType.commendation, 1, 5), + (ItemsType.rustshard, 1, 15), + (ItemsType.ancient_shard, 2, 10), + (ItemsType.mystery_charm, 1, 14), + (ItemsType.shining_charm, 1, 5), + (ItemsType.golden_eg, 1, 8), + (ItemsType.silver_eg, 1, 18), + (ItemsType.steel_eg, 1, 25) + ], + }, + 'subquest_2': { + 'description': "Sever Rathian's Tail", + 'type': 0x00000204, + 'objective_type': Monster.rathian, + 'objective_num': 0x01, + 'zenny_reward': 1200, + 'hrp_reward': 80, + 'rewards_row_1': [ + (ItemsType.commendation, 1, 5), + (ItemsType.rustshard, 1, 15), + (ItemsType.ancient_shard, 2, 10), + (ItemsType.mystery_charm, 1, 14), + (ItemsType.shining_charm, 1, 5), + (ItemsType.golden_eg, 1, 8), + (ItemsType.silver_eg, 1, 18), + (ItemsType.steel_eg, 1, 25) + ], + }, + }, + 'unknown': { + # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala + 'unk_12': 0x00000003, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + } +} + + +""" +EVENT QUEST 12: Speak of the Deviljho +Quest description from https://youtu.be/Py5PkCXhf6w&t=681 +""" +QUEST_EVENT_SPEAK_OF_THE_DEVILJHO = { + 'quest_info': { + 'quest_id': 61012, + 'name': "Speak of the Deviljho", + 'client': "Eccentric Aristocrat", + 'description': "Capture a Deviljho", + 'details': + "Some wyvern named Deviljho has\n" + "Loc Lac hunters fouling their\n" + "armor. I hear it has a taste\n" + "for captured animals. I simply\n" + "must have one! What will I do\n" + "with it? That's for me to know\n" + "and you to NEVER find out!", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 1, 0, 0, 0, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (0, 0, 1, 0, 0, 0, 1, 1) + ), + 'penalty_per_cart': 7500, + 'quest_fee': 1800, + 'time_limit': 50, + 'main_monster_1': Monster.fish, + 'main_monster_2': Monster.altaroth, + 'location': LocationType.QUEST_LOCATION_FLOODED_FOR, + 'quest_rank': QuestRankType.star_4, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_31_INITJOIN, + 'resources': ResourcesType.high_rank, + 'supply_set_number': 18, + 'starting_position': StartingPositionType.random, + 'general_enemy_level': 0x0040, + 'summon': 0x00000000, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + 'smallmonster_data_file': 'sm_ff_free_for_all.dat', + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.deviljho, + 'starting_area': 0x00, # 4 -> area 1 # 3 -> area 1 # 2 -> basecamp? # 1 -> area 3 # 0 -> area 4 + 'boss_id': 0x00, + 'spawn_count': 0x01, + 'level': 0x34, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x03 + }, + 'monster_2': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000081, + 'objective_type': Monster.deviljho, + 'objective_num': 0x01, + 'zenny_reward': 22000, + 'hrp_reward': 1820, + 'rewards_row_1': [ + (ItemsType.hrd_armor_sphere, 1, 3), + (ItemsType.deviljho_talon, 1, 16), + (ItemsType.deviljho_scale, 1, 23), + (ItemsType.deviljho_hide, 1, 20), + (ItemsType.deviljho_fang, 1, 10), + (ItemsType.deviljho_gem, 1, 3), + (ItemsType.lion_kings_seal, 1, 25) + ], + 'rewards_row_2': [ + (ItemsType.hrd_armor_sphere, 1, 3), + (ItemsType.deviljho_talon, 1, 16), + (ItemsType.deviljho_scale, 1, 23), + (ItemsType.deviljho_hide, 1, 20), + (ItemsType.deviljho_fang, 1, 10), + (ItemsType.deviljho_gem, 1, 3), + (ItemsType.lion_kings_seal, 1, 25) + ], + }, + 'subquest_1': { + 'description': "None", + 'type': 0x00000000, + 'objective_type': Monster.none, + 'objective_num': 0x00, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + 'subquest_2': { + 'description': "None", + 'type': 0x00000000, + 'objective_type': Monster.none, + 'objective_num': 0x00, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + } + }, + 'unknown': { + # (2 for large mon quest, 3 for small/delivery, 5 for jhen/ala) + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + } +} + + +""" +EVENT QUEST 13: Marine Warfare +Quest description from https://www.youtube.com/watch?v=Gdl8A1AkXU4 + Thanks to kazuma_6969 +""" +QUEST_EVENT_MARINE_WARFARE = { + 'small_monsters': [ + [ + # Area 0 + ], + [ + # Area 1 + ], + ], + 'quest_info': { + 'quest_id': 61013, + 'name': "Marine Warfare", + 'client': "Guild Weapons Development", + 'description': + "Hunt 2 Gobul\n" + "", + 'details': + "Seeking hunters to aid in the\n" + "development of underwater\n" + "weaponry by hunting aquatic\n" + "monsters. The Guild will\n" + "provide the venue and the\n" + "monster, but applicants should\n" + "have their own equipment.", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 1, 0, 0, 0, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 1, 0, 0, 0, 1, 1) + ), + 'penalty_per_cart': 5600, + 'quest_fee': 1650, + 'time_limit': 50, + 'main_monster_1': Monster.none, + 'main_monster_2': Monster.none, + 'location': LocationType.QUEST_LOCATION_WATER_ARENA_2, + 'quest_rank': QuestRankType.star_4, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_31_INITJOIN, + 'resources': ResourcesType.high_rank, + 'supply_set_number': 48, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 0x0036, + 'summon': 0x00000000, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.gobul, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x01, + 'level': 0x36, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x03 + }, + 'monster_2': { + 'type': Monster.gobul, + 'starting_area': 0x00, + 'boss_id': 0x01, + 'spawn_count': 0x01, + 'level': 0x36, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x03 + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000001, + 'objective_type': Monster.gobul, + 'objective_num': 0x02, + 'zenny_reward': 16800, + 'hrp_reward': 1480, + 'rewards_row_1': [ + (ItemsType.hrd_armor_sphere, 1, 8), + (ItemsType.gobul_fin_plus, 1, 15), + (ItemsType.gobul_spike_plus, 1, 24), + (ItemsType.gobul_hide_plus, 1, 20), + (ItemsType.paralysis_sac, 1, 8), + (ItemsType.gourmet_voucher, 1, 25) + ], + 'rewards_row_2': [ + (ItemsType.shining_charm, 1, 10), + (ItemsType.mystery_charm, 1, 16), + (ItemsType.timeworn_charm, 1, 3), + (ItemsType.monster_bone_m, 2, 23), + (ItemsType.monster_bone_s, 3, 20), + (ItemsType.bone_husk_l, 10, 14), + (ItemsType.bone_husk_s, 18, 14) + ], + }, + 'subquest_1': { + 'description': "None", + 'type': 0x00000000, + 'objective_type': Monster.none, + 'objective_num': 0x00, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + 'subquest_2': { + 'description': "None", + 'type': 0, + 'objective_type': Monster.none, + 'objective_num': 0, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + }, + 'unknown': { + # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + } +} + + +""" +EVENT QUEST 14: Double Diablos +Quest description from https://www.youtube.com/watch?v=l-mqoeORTi8 + Thanks to kazuma_6969 +""" +QUEST_EVENT_DOUBLE_DIABLOS = { + 'small_monsters': [ + [ + # Area 0 + ], + [ + # Area 1 + ], + ], + 'quest_info': { + 'quest_id': 61014, + 'name': "Double Diablos", + 'client': "Passionate Hunter", + 'description': "Capture 2 Diablos", + 'details': + "One Diablos would dismember\n" + "your average weekend warrior,\n" + "but two Diablos!? Only true\n" + "hunters need apply for this\n" + "Quest. Plan your tactics well,\n" + "and perhaps we can compare\n" + "notes later... if you survive.", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 0, 0, 0, 0, 0, 0, 0), # (0, 0, 0, 0, 0, 0, 0, 0), + (1, 1, 0, 0, 0, 0, 0, 0), # (1, 1, 0, 0, 0, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), # (0, 0, 0, 0, 0, 0, 0, 0), + (0, 0, 1, 0, 0, 0, 1, 1) # (1, 0, 1, 0, 0, 0, 1, 1) + ), + 'penalty_per_cart': 12800, + 'quest_fee': 2600, + 'time_limit': 50, + 'main_monster_1': Monster.none, + 'main_monster_2': Monster.none, + 'location': LocationType.QUEST_LOCATION_LAND_ARENA_1, + 'quest_rank': QuestRankType.star_5, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_40_INITJOIN, + 'resources': ResourcesType.high_rank, + 'supply_set_number': 43, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 0x003B, + 'summon': 0x00000000, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.diablos, + 'starting_area': 0x00, + 'boss_id': 0x01, + 'spawn_count': 0x01, + 'level': 0x3B, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x0A + }, + 'monster_2': { + 'type': Monster.diablos, + 'starting_area': 0x01, + 'boss_id': 0x02, + 'spawn_count': 0x01, + 'level': 0x3B, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x0B + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000081, + 'objective_type': Monster.diablos, + 'objective_num': 0x02, + 'zenny_reward': 38400, + 'hrp_reward': 1920, + 'rewards_row_1': [ + (ItemsType.hrd_armor_sphere, 1, 1), + (ItemsType.diablos_ridge, 1, 11), + (ItemsType.diablos_carapace, 1, 20), + (ItemsType.diablos_fang, 1, 18), + (ItemsType.monster_bone_plus, 1, 8), + (ItemsType.diablos_marrow, 1, 7), + (ItemsType.shining_charm, 1, 10), + (ItemsType.soulhunter_tag, 1, 25) + ], + 'rewards_row_2': [ + (ItemsType.hrd_armor_sphere, 1, 1), + (ItemsType.diablos_ridge, 1, 11), + (ItemsType.diablos_carapace, 1, 20), + (ItemsType.diablos_fang, 1, 18), + (ItemsType.monster_bone_plus, 1, 8), + (ItemsType.diablos_marrow, 1, 7), + (ItemsType.shining_charm, 1, 10), + (ItemsType.soulhunter_tag, 1, 25) + ], + }, + 'subquest_1': { + 'description': "None", + 'type': 0x00000000, + 'objective_type': Monster.none, + 'objective_num': 0, + 'zenny_reward': 0, + 'hrp_reward': 0, + 'rewards_row_1': [], + }, + 'subquest_2': { + 'description': "None", + 'type': 0, + 'objective_type': Monster.none, + 'objective_num': 0, + 'zenny_reward': 0, + 'hrp_reward': 0, + 'rewards_row_1': [], + } + }, + 'unknown': { + # (2 for large mon quest, 3 for small/delivery, 5 for jhen/ala) + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + } +} + + +""" +EVENT QUEST 15: Hot Deal +Quest description from https://www.youtube.com/watch?v=8X4P35Y8p60 + thanks to "kazuma_6969" +""" +QUEST_EVENT_HOT_DEAL = { + 'small_monsters': [ + [ + # Area 0 + ], + [ + # Area 1 + { + 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': 2, + 'pos_x': -494.25,'pos_y': 47.01,'pos_z': -947.91, + 'rot_x': 0,'rot_y': 112147,'rot_z': 0, + }, + { + 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': 1, + 'pos_x': -1361.42,'pos_y': 20.60,'pos_z': -712.51, + 'rot_x': 0,'rot_y': 79456,'rot_z': 0, + }, + { + 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 1,'quantity': 1, + 'pos_x': 1031.98,'pos_y': 26.73,'pos_z': -1406.32, + 'rot_x': 0,'rot_y': 152977,'rot_z': 0, + }, + ], + [ + # Area 2 + { + 'type': Monster.altaroth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 2,'quantity': 4, + 'pos_x': 3139.21,'pos_y': -16.41,'pos_z': 1809.58, + 'rot_x': 0,'rot_y': 14105,'rot_z': 0, + }, + { + 'type': Monster.altaroth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 2,'quantity': 3, + 'pos_x': 2598.00,'pos_y': 64.57,'pos_z': 2280.01, + 'rot_x': 0,'rot_y': 14478,'rot_z': 0, + }, + { + 'type': Monster.altaroth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 2,'quantity': 2, + 'pos_x': 2184.05,'pos_y': 66.73,'pos_z': 2453.70, + 'rot_x': 0,'rot_y': 11582,'rot_z': 0, + }, + { + 'type': Monster.altaroth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 2,'quantity': 1, + 'pos_x': 2741.80,'pos_y': -53.82,'pos_z': 1680.05, + 'rot_x': 0,'rot_y': 14128,'rot_z': 0, + }, + ], + [ + # Area 3 + { + 'type': Monster.aptonoth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 3,'quantity': -1, + 'pos_x': 6982.80,'pos_y': 73.73,'pos_z': 4494.92, + 'rot_x': 0,'rot_y': 5856,'rot_z': 0, + }, + { + 'type': Monster.aptonoth,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 3,'quantity': -1, + 'pos_x': 7778.32,'pos_y': 66.41,'pos_z': 4957.68, + 'rot_x': 0,'rot_y': 2872,'rot_z': 0, + }, + { + 'type': Monster.aptonoth,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 3,'quantity': -1, + 'pos_x': 8087.79,'pos_y': 83.54,'pos_z': 5160.52, + 'rot_x': 0,'rot_y': 5774,'rot_z': 0, + }, + { + 'type': Monster.brd_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 3,'quantity': -1, + 'pos_x': 8676.94,'pos_y': 515.74,'pos_z': 2473.30, + 'rot_x': 273,'rot_y': 6351,'rot_z': 0, + }, + ], + [ + # Area 4 + { + 'type': Monster.rhenoplos,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': 1, + 'pos_x': 672.08,'pos_y': 25.43,'pos_z': 639.95, + 'rot_x': 0,'rot_y': 2264,'rot_z': 0, + }, + { + 'type': Monster.rhenoplos,'unk1': 0,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': 3, + 'pos_x': -1151.12,'pos_y': -43.31,'pos_z': 2402.83, + 'rot_x': 0,'rot_y': -39,'rot_z': 0, + }, + { + 'type': Monster.brd_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 4,'quantity': 3, + 'pos_x': 1580.62,'pos_y': 129.42,'pos_z': 3042.75, + 'rot_x': 0,'rot_y': 0,'rot_z': 0, + }, + { + 'type': Monster.brd_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 4,'quantity': 2, + 'pos_x': 1743.00,'pos_y': 339.42,'pos_z': 2633.18, + 'rot_x': 0,'rot_y': 91,'rot_z': 0, + }, + { + 'type': Monster.brd_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': 1, + 'pos_x': 1303.26,'pos_y': 189.42,'pos_z': 2724.68, + 'rot_x': 0,'rot_y': -28,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 4,'quantity': -1, + 'pos_x': -1485.68,'pos_y': 36.65,'pos_z': 104.92, + 'rot_x': 0,'rot_y': 3032,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 4,'quantity': -1, + 'pos_x': 897.01,'pos_y': 25.14,'pos_z': -27.96, + 'rot_x': 0,'rot_y': 56,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 4,'quantity': -1, + 'pos_x': 2948.85,'pos_y': 7.51,'pos_z': 1861.15, + 'rot_x': 0,'rot_y': 20656,'rot_z': 0, + }, + ], + [ + # Area 5 + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 5,'quantity': -1, + 'pos_x': -775.56,'pos_y': 73.07,'pos_z': 542.20, + 'rot_x': 0,'rot_y': 1828,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 5,'quantity': -1, + 'pos_x': -3498.99,'pos_y': 67.50,'pos_z': -1218.55, + 'rot_x': 0,'rot_y': 4835,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 5,'quantity': -1, + 'pos_x': 486.74,'pos_y': 38.66,'pos_z': -422.06, + 'rot_x': 0,'rot_y': 1331,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 5,'quantity': -1, + 'pos_x': 2864.76,'pos_y': 49.34,'pos_z': -1059.79, + 'rot_x': 0,'rot_y': 7296,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 5,'quantity': -1, + 'pos_x': 1202.49,'pos_y': 57.63,'pos_z': -1571.42, + 'rot_x': 0,'rot_y': 0,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 5,'quantity': -1, + 'pos_x': -1733.55,'pos_y': 56.88,'pos_z': -1510.18, + 'rot_x': 0,'rot_y': 0,'rot_z': 0, + }, + ], + [ + # Area 6 + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 6,'quantity': -1, + 'pos_x': 393.15,'pos_y': -35.75,'pos_z': 1076.53, + 'rot_x': 0,'rot_y': -85,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 6,'quantity': -1, + 'pos_x': -1170.83,'pos_y': -30.77,'pos_z': 447.51, + 'rot_x': 0,'rot_y': 0,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 6,'quantity': -1, + 'pos_x': 1020.10,'pos_y': 4.72,'pos_z': -202.83, + 'rot_x': 0,'rot_y': 0,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 6,'quantity': -1, + 'pos_x': -435.28,'pos_y': -28.37,'pos_z': -1280.39, + 'rot_x': 0,'rot_y': 0,'rot_z': 0, + }, + ], + [ + # Area 7 + { + 'type': Monster.uroktor,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 7,'quantity': 3, + 'pos_x': 95.05,'pos_y': -6.35,'pos_z': 228.22, + 'rot_x': 0,'rot_y': 1399,'rot_z': 0, + }, + { + 'type': Monster.uroktor,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 7,'quantity': 2, + 'pos_x': -2114.33,'pos_y': 17.37,'pos_z': 268.38, + 'rot_x': 0,'rot_y': 19692,'rot_z': 0, + }, + { + 'type': Monster.uroktor,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 7,'quantity': 1, + 'pos_x': -1877.72,'pos_y': -22.42,'pos_z': 1532.47, + 'rot_x': 0,'rot_y': 32312,'rot_z': 0, + }, + { + 'type': Monster.uroktor,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 7,'quantity': 1, + 'pos_x': 625.43,'pos_y': 3.37,'pos_z': -496.28, + 'rot_x': 0,'rot_y': 6283,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 7,'quantity': -1, + 'pos_x': -1447.72,'pos_y': 21.43,'pos_z': 61.89, + 'rot_x': 0,'rot_y': 0,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 7,'quantity': -1, + 'pos_x': 316.55,'pos_y': -3.36,'pos_z': -1209.27, + 'rot_x': 0,'rot_y': 0,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 7,'quantity': -1, + 'pos_x': 1008.65,'pos_y': -9.18,'pos_z': 1099.80, + 'rot_x': 0,'rot_y': 0,'rot_z': 0, + }, + ], + [ + # Area 8 (Area 10 in Sandy Plains) + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 4, + 'pos_x': 728.75,'pos_y': -19.44,'pos_z': 1581.60, + 'rot_x': 0,'rot_y': 1581.60,'rot_z': 0, + }, + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 3, + 'pos_x': -375.43,'pos_y': 6.66,'pos_z': 301.92, + 'rot_x': 0,'rot_y': 40860,'rot_z': 0, + }, + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 2, + 'pos_x': 479.45,'pos_y': 30.53,'pos_z': -50.40, + 'rot_x': 0,'rot_y': 59178,'rot_z': 0, + }, + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 1, + 'pos_x': 2190.05,'pos_y': -6.53,'pos_z': 1552.73, + 'rot_x': 0,'rot_y': 24814,'rot_z': 0, + }, + ], + [ + # Area 9 (Area 7 in Sandy Plains) + { + 'type': Monster.uroktor,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 9,'quantity': 2, + 'pos_x': 1226.78,'pos_y': 14.44,'pos_z': -971.03, + 'rot_x': 0,'rot_y': 49126,'rot_z': 0, + }, + { + 'type': Monster.uroktor,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 9,'quantity': 3, + 'pos_x': 30.91,'pos_y': 11.00,'pos_z': -556.52, + 'rot_x': 0,'rot_y': 19871,'rot_z': 0, + }, + ], + [ + # Area 10 + ], + ], + 'quest_info': { + 'quest_id': 61015, + 'name': "Hot Deal", + 'client': "Shady Merchant", + 'description': "Hunt 2 Agnaktor", + 'details': + "A coupla Agnaktor are meltin'\n" + "my profits on the Volcano,\n" + "see? Deal with 'em, and I'll\n" + "give you a weapon recipe I...\n" + "acquired. They say this\n" + "armament can bring wealth,\n" + "or a mysterious death...", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 1, 0, 0, 0, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 1, 0, 0, 0, 1, 1) + ), + 'penalty_per_cart': 5000, + 'quest_fee': 2750, + 'time_limit': 50, + 'main_monster_1': Monster.uroktor, + 'main_monster_2': Monster.rhenoplos, + 'location': LocationType.QUEST_LOCATION_VOLCANO, + 'quest_rank': QuestRankType.star_5, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_40_INITJOIN, + 'resources': ResourcesType.high_rank, + 'supply_set_number': 27, + 'starting_position': StartingPositionType.random, + 'general_enemy_level': 0x39, + 'summon': 0x00000000, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000 + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.agnaktor, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x02, + 'level': 0x39, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x01 + }, + 'monster_2': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000001, + 'objective_type': Monster.agnaktor, + 'objective_num': 0x02, + 'zenny_reward': 13800, + 'hrp_reward': 1240, + 'rewards_row_1': [ + (ItemsType.agnaktorcarapace, 1, 8), + (ItemsType.agnaktor_scale, 1, 18), + (ItemsType.agnaktor_hide_plus, 1, 20), + (ItemsType.monster_bone_plus, 1, 12), + (ItemsType.firecell_stone, 1, 5), + (ItemsType.agnaktor_fin_plus, 15, 12), + (ItemsType.smiths_notebook, 1, 25) + ], + 'rewards_row_2': [ + (ItemsType.agnaktorcarapace, 1, 8), + (ItemsType.agnaktor_scale, 1, 18), + (ItemsType.agnaktor_hide_plus, 1, 20), + (ItemsType.monster_bone_plus, 1, 12), + (ItemsType.firecell_stone, 1, 5), + (ItemsType.agnaktor_fin_plus, 15, 12), + (ItemsType.smiths_notebook, 1, 25) + ], + }, + 'subquest_1': { + 'description': "Hunt an Agnaktor", + 'type': 0x00000001, + 'objective_type': Monster.agnaktor, + 'objective_num': 0x01, + 'zenny_reward': 13800, + 'hrp_reward': 1240, + 'rewards_row_1': [ + (ItemsType.agnaktorcarapace, 1, 8), + (ItemsType.agnaktor_scale, 1, 18), + (ItemsType.agnaktor_hide_plus, 1, 20), + (ItemsType.monster_bone_plus, 1, 12), + (ItemsType.firecell_stone, 1, 5), + (ItemsType.agnaktor_fin_plus, 15, 12), + (ItemsType.smiths_notebook, 1, 25) + ], + }, + 'subquest_2': { + 'description': "None", + 'type': 0x00000000, + 'objective_type': Monster.none, + 'objective_num': 0x00, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + }, + 'unknown': { + # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + } +} + + +""" +EVENT QUEST 16: Sea Power +Quest description from https://www.youtube.com/watch?v=oQL3NtB_GMM + Thanks to kazuma_6969 +""" +QUEST_EVENT_SEA_POWER = { + 'small_monsters': [ + [ + # Area 0 + ], + [ + # Area 1 + ], + ], + 'quest_info': { + 'quest_id': 61016, + 'name': "Sea Power", + 'client': "Retired Hunter", + 'description': + "Hunt 2 Lagiacrus\n" + "", + 'details': + "I once knew a fool of a hunter\n" + "who found a legendary clue --\n" + "but paid for it with his life.\n" + "He left those plans behind.\n" + "They're useless to a retired\n" + "hunter like me, so I figured\n" + "I'd pass them to another fool.", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 1, 0, 0, 0, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 1, 0, 0, 0, 1, 1) + ), + 'penalty_per_cart': 3800, + 'quest_fee': 2250, + 'time_limit': 50, + 'main_monster_1': Monster.none, + 'main_monster_2': Monster.none, + 'location': LocationType.QUEST_LOCATION_WATER_ARENA_2, + 'quest_rank': QuestRankType.star_5, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_40_INITJOIN, + 'resources': ResourcesType.high_rank, + 'supply_set_number': 48, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 0x0036, + 'summon': 0x00000000, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.lagiacrus, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x02, + 'level': 0x3B, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x03 + }, + 'monster_2': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000001, + 'objective_type': Monster.lagiacrus, + 'objective_num': 0x02, + 'zenny_reward': 11400, + 'hrp_reward': 1100, + 'rewards_row_1': [ + (ItemsType.lagiacrus_claw_plus, 1, 5), + (ItemsType.lagiacrus_hide_plus, 1, 16), + (ItemsType.lagiacrus_scale_plus, 1, 22), + (ItemsType.shell_shocker_plus, 1, 8), + (ItemsType.monster_bone_plus, 1, 14), + (ItemsType.lagiacrus_plate, 1, 10), + (ItemsType.lagia_sapphire, 1, 2), + (ItemsType.lightning_ticket, 1, 23) + ], + 'rewards_row_2': [ + (ItemsType.lagiacrus_claw_plus, 1, 5), + (ItemsType.lagiacrus_hide_plus, 1, 16), + (ItemsType.lagiacrus_scale_plus, 1, 22), + (ItemsType.shell_shocker_plus, 1, 8), + (ItemsType.monster_bone_plus, 1, 14), + (ItemsType.lagiacrus_plate, 1, 10), + (ItemsType.lagia_sapphire, 1, 2), + (ItemsType.lightning_ticket, 1, 23) + ], + }, + 'subquest_1': { + 'description': "Hunt a Lagiacrus", + 'type': 0x00000001, + 'objective_type': Monster.lagiacrus, + 'objective_num': 0x01, + 'zenny_reward': 11400, + 'hrp_reward': 1100, + 'rewards_row_1': [ + (ItemsType.lagiacrus_claw_plus, 1, 5), + (ItemsType.lagiacrus_hide_plus, 1, 16), + (ItemsType.lagiacrus_scale_plus, 1, 22), + (ItemsType.shell_shocker_plus, 1, 8), + (ItemsType.monster_bone_plus, 1, 14), + (ItemsType.lagiacrus_plate, 1, 10), + (ItemsType.lagia_sapphire, 1, 2), + (ItemsType.lightning_ticket, 1, 23) + ], + }, + 'subquest_2': { + 'description': "None", + 'type': 0, + 'objective_type': Monster.none, + 'objective_num': 0, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + }, + 'unknown': { + # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + } +} + + +""" +EVENT QUEST 17: Flooded Forest Free-For-All +Quest description from https://www.youtube.com/watch?v=mWHonz4dXHk + thanks to "kazuma_6969" +""" +QUEST_EVENT_FF_FREE_FOR_ALL = { + 'quest_info': { + 'quest_id': 61017, + 'name': "Flooded Forest Free-For-All", + 'client': "Argosy Captain", + 'description': "Hunt a Royal L., Lag. & Gobul", + 'details': + "Taihen! Means very bad, yes?\n" + "Flooded Forest overrun by pack\n" + "of leviathans -- Argosy cannot\n" + "get anywhere near area! Big\n" + "problem for trade, yes? Only\n" + "hunters can return fair seas\n" + "to Flooded Forest. Onegai!", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 0, 1, 0, 0, 0, 0, 0), + (1, 1, 0, 0, 0, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 1, 0, 0, 0, 0, 0) + ), + 'penalty_per_cart': 9000, + 'quest_fee': 2550, + 'time_limit': 50, + 'main_monster_1': Monster.ludroth, + 'main_monster_2': Monster.kelbi, + 'location': LocationType.QUEST_LOCATION_FLOODED_FOR, + 'quest_rank': QuestRankType.star_5, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_40_INITJOIN, + 'resources': ResourcesType.high_rank, + 'supply_set_number': 43, + 'starting_position': StartingPositionType.random, + 'general_enemy_level': 0x0040, + 'summon': 0x00000000, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + 'smallmonster_data_file': 'sm_ff_free_for_all.dat', + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.royal_ludroth, + 'starting_area': 0x00, # 4 -> area 1 # 3 -> area 1 # 2 -> basecamp? # 1 -> area 3 # 0 -> area 4 + 'boss_id': 0x00, + 'spawn_count': 0x01, + 'level': 0x36, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x03 + }, + 'monster_2': { + 'type': Monster.lagiacrus, + 'starting_area': 0x00, + 'boss_id': 0x01, + 'spawn_count': 0x01, + 'level': 0x36, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x03 + }, + 'monster_3': { + 'type': Monster.gobul, + 'starting_area': 0x00, + 'boss_id': 0x02, + 'spawn_count': 0x01, + 'level': 0x36, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x03 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000001, + 'objective_type': Monster.royal_ludroth, + 'objective_num': 0x01, + 'zenny_reward': 25800, + 'hrp_reward': 2600, + 'rewards_row_1': [ + (ItemsType.hrd_armor_sphere, 1, 1), + (ItemsType.hvy_armor_sphere, 1, 5), + (ItemsType.quality_sponge, 1, 14), + (ItemsType.gobul_spike_plus, 1, 20), + (ItemsType.gobul_fin_plus, 1, 7), + (ItemsType.lagiacrus_hide_plus, 1, 10), + (ItemsType.lagiacrus_scale_plus, 1, 8), + (ItemsType.shining_charm, 1, 10), + (ItemsType.black_gem_ticket, 1, 25) + ], + 'rewards_row_2': [ + (ItemsType.hrd_armor_sphere, 1, 1), + (ItemsType.hvy_armor_sphere, 1, 5), + (ItemsType.quality_sponge, 1, 14), + (ItemsType.gobul_spike_plus, 1, 20), + (ItemsType.gobul_fin_plus, 1, 7), + (ItemsType.lagiacrus_hide_plus, 1, 10), + (ItemsType.lagiacrus_scale_plus, 1, 8), + (ItemsType.shining_charm, 1, 10), + (ItemsType.black_gem_ticket, 1, 25) + ], + }, + 'subquest_1': { + 'description': "None", + 'type': 0x00000001, + 'objective_type': Monster.lagiacrus, + 'objective_num': 0x01, + 'zenny_reward': 0, + 'hrp_reward': 0, + 'rewards_row_1': [], + }, + 'subquest_2': { + 'description': "None", + 'type': 0x00000001, + 'objective_type': Monster.gobul, + 'objective_num': 0x01, + 'zenny_reward': 0, + 'hrp_reward': 0, + 'rewards_row_1': [], + } + }, + 'unknown': { + # (2 for large mon quest, 3 for small/delivery, 5 for jhen/ala) + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + } +} + + +""" + +EVENT QUEST 18: Rage Match +Quest description from https://www.youtube.com/watch?v=rbbiLgsAoGU + thanks to "kazuma_6969" +(INCOMPLETE) Second deviljho does not spawn on a delay. +""" +QUEST_EVENT_RAGE_MATCH = { + 'small_monsters': [ + [ + # Area 0 + ], + [ + # Area 1 + ], + ], + 'quest_info': { + 'quest_id': 61018, + 'name': "Rage Match", + 'client': "Arena Manager", + 'description': "Hunt 2 Deviljho", + 'details': + "We've all heard of that\n" + "outrageous dragon of rage,\n" + "the Deviljho! Now, we've got\n" + "not one -- but two -- stalking\n" + "the Arena! What hunter has the\n" + "cojones to challenge these\n" + "pernicious predators? Not me.", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 1, 0, 0, 0, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 1, 0, 0, 0, 1, 1) + ), + 'penalty_per_cart': 13000, + 'quest_fee': 3600, + 'time_limit': 50, + 'main_monster_1': Monster.none, + 'main_monster_2': Monster.none, + 'location': LocationType.QUEST_LOCATION_LAND_ARENA_1, + 'quest_rank': QuestRankType.urgent, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_51_INITJOIN, + 'resources': ResourcesType.high_rank, + 'supply_set_number': 43, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 244, + 'summon': 0x00000000, # 0x64010232, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.deviljho, + 'starting_area': 0x01, + 'boss_id': 0x01, + 'spawn_count': 0x01, + 'level': 0x3C, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x0A + }, + 'monster_2': { + 'type': Monster.deviljho, + 'starting_area': 0x01, + 'boss_id': 0x02, + 'spawn_count': 0x01, + 'level': 0x3C, # 0x01 through 0x3c + 'size': 0x5A, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x0A + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000001, + 'objective_type': Monster.deviljho, + 'objective_num': 0x02, + 'zenny_reward': 36000, + 'hrp_reward': 2880, + 'rewards_row_1': [ + (ItemsType.deviljho_fang, 1, 6), + (ItemsType.deviljho_talon, 1, 13), + (ItemsType.deviljho_scale, 1, 26), + (ItemsType.deviljho_hide, 1, 20), + (ItemsType.shining_charm, 1, 6), + (ItemsType.deviljho_gem, 1, 4), + (ItemsType.wyvrnhide_ticket, 1, 25) + ], + 'rewards_row_2': [ + (ItemsType.deviljho_fang, 1, 6), + (ItemsType.deviljho_talon, 1, 13), + (ItemsType.deviljho_scale, 1, 26), + (ItemsType.deviljho_hide, 1, 20), + (ItemsType.shining_charm, 1, 6), + (ItemsType.deviljho_gem, 1, 4), + (ItemsType.wyvrnhide_ticket, 1, 25) + ], + }, + 'subquest_1': { + 'description': "None", + 'type': 0x00000000, + 'objective_type': Monster.none, + 'objective_num': 0x00, + 'zenny_reward': 0, + 'hrp_reward': 0, + 'rewards_row_1': [], + }, + 'subquest_2': { + 'description': "None", + 'type': 0, + 'objective_type': Monster.none, + 'objective_num': 0, + 'zenny_reward': 0, + 'hrp_reward': 0, + 'rewards_row_1': [], + } + }, + 'unknown': { + # (2 for large mon quest, 3 for small/delivery, 5 for jhen/ala) + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + } +} + + +""" +EVENT QUEST 19: Lords of the Sea and Sky +Quest description from https://www.youtube.com/watch?v=x_uN2UtCA9Y + Thanks to "kazuma_6969" +""" +QUEST_EVENT_LORDS_OF_THE_SEA_AND_SKY = { + 'small_monsters': [ + [ + # Area 0 + ], + [ + # Area 1 + ], + ], + 'quest_info': { + 'quest_id': 61019, + 'name': "Lords of the Sea and Sky", + 'client': "Arena Manager", + 'description': + "Hunt a Lagiacrus\n" + "and a Rathalos", + 'details': + "In the Arena tonight, reunited\n" + "and it feels so--gahh! It's\n" + "the king and lord of sky and\n" + "sea, Rathalos and Lagiacrus!\n" + "Their victims: our hunters!\n" + "Prepare for a bout that'll\n" + "go down in hunting history!", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 1, 0, 0, 0, 0, 0, 0), + (1, 1, 0, 0, 0, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 1, 0, 0, 0, 0, 0) + ), + 'penalty_per_cart': 7800, + 'quest_fee': 2300, + 'time_limit': 50, + 'main_monster_1': Monster.none, + 'main_monster_2': Monster.none, + 'location': LocationType.QUEST_LOCATION_LAND_ARENA_1, + 'quest_rank': QuestRankType.urgent, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_51_INITJOIN, + 'resources': ResourcesType.high_rank, + 'supply_set_number': 43, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 0x003C, + 'summon': 0x64010332, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.lagiacrus, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x01, + 'level': 0x3C, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x03 + }, + 'monster_2': { + 'type': Monster.rathalos, + 'starting_area': 0x00, + 'boss_id': 0x01, + 'spawn_count': 0x01, + 'level': 0x3C, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x03 + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000001, + 'objective_type': Monster.lagiacrus, + 'objective_num': 0x01, + 'zenny_reward': 23400, + 'hrp_reward': 1760, + 'rewards_row_1': [ + (ItemsType.lagiacrus_hide_plus, 1, 10), + (ItemsType.shell_shocker_plus, 1, 14), + (ItemsType.rathaloscarapace, 1, 23), + (ItemsType.rathalos_scale_plus, 1, 15), + (ItemsType.rathalos_ruby, 1, 4), + (ItemsType.lagia_sapphire, 1, 4), + (ItemsType.mystery_charm, 1, 17), + (ItemsType.shining_charm, 1, 8), + (ItemsType.timeworn_charm, 1, 5) + ], + 'rewards_row_2': [ + (ItemsType.shining_charm, 1, 25), + (ItemsType.mystery_charm, 1, 18), + (ItemsType.timeworn_charm, 1, 5), + (ItemsType.adv_armor_sphere, 1, 12), + (ItemsType.hrd_armor_sphere, 1, 20), + (ItemsType.hvy_armor_sphere, 1, 6), + (ItemsType.rustshard, 1, 14) + ], + }, + 'subquest_1': { + 'description': "None", + 'type': 0x00000001, + 'objective_type': Monster.rathalos, + 'objective_num': 0x01, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + 'subquest_2': { + 'description': "None", + 'type': 0, + 'objective_type': Monster.none, + 'objective_num': 0, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + }, + 'unknown': { + # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + } +} + + +""" +EVENT QUEST 20: World Eater +Quest description/rewards/etc from https://www.youtube.com/watch?v=Z6joazT8J78 +(INCOMPLETE) Needs invading queropeco +""" +QUEST_EVENT_WORLD_EATER = { + 'small_monsters': [ + [ + # Area 0 + ], + [ + # Area 1 + { + 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 1,'quantity': 1, + 'pos_x': 247.42,'pos_y': 560.37,'pos_z': -3613.80, + 'rot_x': 0,'rot_y': -119,'rot_z': 0, + }, + { + 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': 3, + 'pos_x': -474.90,'pos_y': 491.91,'pos_z': -3857.25, + 'rot_x': 0,'rot_y': -267,'rot_z': 0, + }, + { + 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 1,'quantity': 3, + 'pos_x': 897.01,'pos_y': 418.60,'pos_z': -4931.83, + 'rot_x': 0,'rot_y': -284,'rot_z': 0, + }, + { + 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': 2, + 'pos_x': 219.95,'pos_y': 402.97,'pos_z': -4449.25, + 'rot_x': 0,'rot_y': 244,'rot_z': 0, + }, + ], + [ + # Area 2 (Area 3 in Deserted Island) + { + 'type': Monster.altaroth,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 2,'quantity': 3, + 'pos_x': -6654.10,'pos_y': 23.12,'pos_z': 117.64, + 'rot_x': 0,'rot_y': 455,'rot_z': 0, + }, + ], + [ + # Area 3 (Area 2 in Deserted Island) + { + 'type': Monster.aptonoth,'unk1': 0,'unk2': 0xFF, + 'variant': 0,'room': 3,'quantity': -1, + 'pos_x': 2567.38,'pos_y': -4.58,'pos_z': -1280.44, + 'rot_x': 0,'rot_y': 352,'rot_z': 0, + }, + { + 'type': Monster.aptonoth,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 3,'quantity': -1, + 'pos_x': 2119.14,'pos_y': -14.21,'pos_z': -787.00, + 'rot_x': 0,'rot_y': 335,'rot_z': 0, + }, + ], + [ + # Area 4 (Area 7 in Deserted Island) + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': 2, + 'pos_x': 39.65,'pos_y': 2.00,'pos_z': 2631.32, + 'rot_x': 0,'rot_y': 113,'rot_z': 0, + }, + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': 2, + 'pos_x': -538.14,'pos_y': 2.00,'pos_z': 2165.99, + 'rot_x': 0,'rot_y': -91,'rot_z': 0, + }, + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': 1, + 'pos_x': 360.98,'pos_y': 2.00,'pos_z': 820.71, + 'rot_x': 0,'rot_y': -187,'rot_z': 0, + }, + { + 'type': Monster.bnahabra2,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 4,'quantity': -1, + 'pos_x': -5671.42,'pos_y': 466.03,'pos_z': 3071.35, + 'rot_x': 273,'rot_y': 304,'rot_z': 0, + }, + ], + [ + # Area 5 + ], + [ + # Area 6 + ], + [ + # Area 7 (Area 11 in Deserted Island) + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 4,'room': 7,'quantity': 4, + 'pos_x': 2237.04,'pos_y': -1090.00,'pos_z': 1586.48, + 'rot_x': 0,'rot_y': 96,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 4,'room': 7,'quantity': 2, + 'pos_x': 2469.26,'pos_y': -1330.00,'pos_z': 2832.58, + 'rot_x': 0,'rot_y': -108,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 4,'room': 7,'quantity': 2, + 'pos_x': 1103.05,'pos_y': -2050.00,'pos_z': -1429.32, + 'rot_x': 0,'rot_y': -108,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 4,'room': 7,'quantity': 1, + 'pos_x': -3054.79,'pos_y': -3047.85,'pos_z': 3126.22, + 'rot_x': 0,'rot_y': -62,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 4,'room': 7,'quantity': 1, + 'pos_x': 1268.03,'pos_y': -2470.00,'pos_z': -557.22, + 'rot_x': 0,'rot_y': -108,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 7,'quantity': 3, + 'pos_x': 1742.13,'pos_y': -3820.00,'pos_z': -1993.49, + 'rot_x': 0,'rot_y': -108,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 7,'quantity': 2, + 'pos_x': 1732.89,'pos_y': -3580.00,'pos_z': -4462.32, + 'rot_x': 0,'rot_y': -278,'rot_z': 0, + }, + ], + [ + # Area 8 (Area 12 in the Deserted Island) + { + 'type': Monster.ludroth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 2, + 'pos_x': 80.95,'pos_y': 35.81,'pos_z': -523.41, + 'rot_x': 0,'rot_y': -420,'rot_z': 0, + }, + { + 'type': Monster.ludroth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 1, + 'pos_x': -1342.36,'pos_y': -18.00,'pos_z': 465.56, + 'rot_x': 0,'rot_y': -324,'rot_z': 0, + }, + ], + [ + # Area 9 (Area 6 in the Deserted Island) + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': 3, + 'pos_x': 1059.13,'pos_y': 5.78,'pos_z': -3228.47, + 'rot_x': 0,'rot_y': -261,'rot_z': 0, + }, + { + 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': 4, + 'pos_x': 390.83,'pos_y': 20.44,'pos_z': -746.07, + 'rot_x': 0,'rot_y': -176,'rot_z': 0, + }, + { + 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': 2, + 'pos_x': -482.31,'pos_y': 16.39,'pos_z': 5.01, + 'rot_x': 0,'rot_y': 250,'rot_z': 0, + }, + ], + [ + # Area 10 (Area 8 in the Deserted Island) + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 10,'quantity': 5, + 'pos_x': -1846.87,'pos_y': -263.00,'pos_z': 931.19, + 'rot_x': 0,'rot_y': -5,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 10,'quantity': 3, + 'pos_x': -3160.63,'pos_y': -206.32,'pos_z': -355.73, + 'rot_x': 0,'rot_y': 307,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 10,'quantity': 2, + 'pos_x': -1949.45,'pos_y': -276.13,'pos_z': 1228.73, + 'rot_x': 0,'rot_y': 216,'rot_z': 0, + }, + { + 'type': Monster.melynx,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 10,'quantity': -1, + 'pos_x': -1552.64,'pos_y': -186.42,'pos_z': 1504.30, + 'rot_x': 0,'rot_y': -28,'rot_z': 0, + }, + { + 'type': Monster.melynx,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 10,'quantity': -1, + 'pos_x': -1352.11,'pos_y': -174.80,'pos_z': 1441.92, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type': Monster.bnahabra2,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 10,'quantity': 1, + 'pos_x': -653.75,'pos_y': 306.58,'pos_z': 2295.24, + 'rot_x': 0,'rot_y': 221,'rot_z': 0, + }, + { + 'type': Monster.bnahabra2,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 10,'quantity': 4, + 'pos_x': -615.28,'pos_y': 96.58,'pos_z': 2086.81, + 'rot_x': 0,'rot_y': 119,'rot_z': 0, + }, + ], + [ + # Area 11 (Area 4 in the Deserted Island) + { + 'type': Monster.giggi,'unk1': 1,'unk2': 0xFF, + 'variant': 6,'room': 11,'quantity': 2, + 'pos_x': -453.62,'pos_y': 705.50,'pos_z': 2253.55, + 'rot_x': 0,'rot_y': -5,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 1,'unk2': 0xFF, + 'variant': 6,'room': 11,'quantity': 4, + 'pos_x': 142.14,'pos_y': 336.98,'pos_z': 3677.44, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 11,'quantity': 1, + 'pos_x': 4363.26,'pos_y': 426.27,'pos_z': 5818.19, + 'rot_x': 0,'rot_y': 171,'rot_z': 0, + }, + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 11,'quantity': 1, + 'pos_x': 4782.14,'pos_y': 426.27,'pos_z': 5556.53, + 'rot_x': 0,'rot_y': 164,'rot_z': 0, + }, + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 11,'quantity': 1, + 'pos_x': 4617.08,'pos_y': 426.27,'pos_z': 6208.15, + 'rot_x': 0,'rot_y': 284,'rot_z': 0, + }, + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 11,'quantity': 1, + 'pos_x': 5099.46,'pos_y': 426.27,'pos_z': 5456.15, + 'rot_x': 0,'rot_y': 161,'rot_z': 0, + }, + { + 'type': Monster.bnahabra2,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 11,'quantity': 4, + 'pos_x': 2767.15,'pos_y': 611.59,'pos_z': 4297.09, + 'rot_x': 0,'rot_y': -301,'rot_z': 0, + }, + { + 'type': Monster.bnahabra2,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 11,'quantity': 2, + 'pos_x': 2793.18,'pos_y': 1205.81,'pos_z': 5908.79, + 'rot_x': 0,'rot_y': -295,'rot_z': 0, + }, + { + 'type': Monster.bnahabra2,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 11,'quantity': 1, + 'pos_x': 3210.49,'pos_y': 845.81,'pos_z': 5369.26, + 'rot_x': 0,'rot_y': -398,'rot_z': 0, + }, + ], + [ + # Area 12 (Area 10 in the Deserted Island) + { + 'type': Monster.epioth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 12,'quantity': -1, + 'pos_x': 572.89,'pos_y': -618.12,'pos_z': -2648.11, + 'rot_x': 0,'rot_y': -142,'rot_z': 0, + }, + { + 'type': Monster.epioth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 12,'quantity': -1, + 'pos_x': -501.62,'pos_y': -210.00,'pos_z': -3356.64, + 'rot_x': 0,'rot_y': 45,'rot_z': 0, + }, + { + 'type': Monster.epioth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 12,'quantity': -1, + 'pos_x': -1624.63,'pos_y': -888.12,'pos_z': -2880.06, + 'rot_x': 0,'rot_y': 113,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 12,'quantity': -1, + 'pos_x': -2352.88,'pos_y': -523.55,'pos_z': -7478.20, + 'rot_x': 0,'rot_y': -91,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 12,'quantity': -1, + 'pos_x': -1957.86,'pos_y': -1228.41,'pos_z': -7734.46, + 'rot_x': 0,'rot_y': -91,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 12,'quantity': -1, + 'pos_x': -2821.80,'pos_y': -988.41,'pos_z': -8174.07, + 'rot_x': 0,'rot_y': -91,'rot_z': 0, + }, + { + 'type': Monster.fish,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 12,'quantity': -1, + 'pos_x': -2435.99,'pos_y': -988.41,'pos_z': -7780.24, + 'rot_x': 0,'rot_y': -91,'rot_z': 0, + }, + ], + ], + 'quest_info': { + 'quest_id': 61020, + 'name': "World Eater", + 'client': "Guildmaster", + 'description': "Hunt a Deviljho", + 'details': + "Emergency! A huge Deviljho has\n" + "appeared. It's twice as big as\n" + "a normal one and it's eating\n" + "everything in sight! Go get\n" + "it! And now, a haiku: A huge\n" + "Deviljho/with no food in its\n" + "stomach/eats the whole island.", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 1, 0, 0, 0, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 1, 0, 0, 0, 1, 1) + ), + 'penalty_per_cart': 6000, + 'quest_fee': 1800, + 'time_limit': 50, + 'main_monster_1': Monster.jaggi, + 'main_monster_2': Monster.jaggia, + 'location': LocationType.QUEST_LOCATION_D_ISLAND, + 'quest_rank': QuestRankType.urgent, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_51_INITJOIN, + 'resources': ResourcesType.high_rank, + 'supply_set_number': 31, + 'starting_position': StartingPositionType.random, + 'general_enemy_level': 0x0034, + 'summon': 0x64010234, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.deviljho, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x01, + 'level': 0x40, # 0x01 through 0x3c + 'size': 0xC8, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_2': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000001, + 'objective_type': Monster.deviljho, + 'objective_num': 0x01, + 'zenny_reward': 18000, + 'hrp_reward': 1800, + 'rewards_row_1': [ + (ItemsType.timeworn_charm, 1, 33), + (ItemsType.deviljho_gem, 1, 4), + (ItemsType.deviljho_scalp, 1, 8), + (ItemsType.deviljho_hide, 1, 17), + (ItemsType.hvy_armor_sphere, 1, 11), + (ItemsType.shining_charm, 1, 19), + (ItemsType.deviljho_fang, 1, 8) + ], + 'rewards_row_2': [ + (ItemsType.deviljho_scalp, 1, 20), + (ItemsType.timeworn_charm, 1, 34), + (ItemsType.deviljho_fang, 1, 6), + (ItemsType.deviljho_hide, 1, 17), + (ItemsType.deviljho_gem, 1, 3), + (ItemsType.shining_charm, 1, 11), + (ItemsType.hvy_armor_sphere, 1, 9) + ], + }, + 'subquest_1': { + 'description': "None", + 'type': 0x00000000, + 'objective_type': Monster.none, + 'objective_num': 0x00, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + 'subquest_2': { + 'description': "None", + 'type': 0x00000000, + 'objective_type': Monster.none, + 'objective_num': 0x00, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + }, + 'unknown': { + # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + } +} + + +""" +EVENT QUEST 21: Where Gods Fear To Tread +Quest description from https://www.youtube.com/watch?v=mQHTdPRlD1w, + thanks to "soulmizute, emperor of the abyss#5094" + and "El Matiah#8904" +""" +QUEST_EVENT_WHERE_GODS_FEAR_TO_TREAD = { + 'small_monsters': [ + [ + # Area 0 + ], + [ + # Area 1 + ], + ], + 'quest_info': { + 'quest_id': 61021, + 'name': "Where Gods Fear to Tread", + 'client': "Scarlet Mystery Man", + 'description': "Slay the Alatreon", + 'details': + "I've been waiting, hunter. Now\n" + "comes your final challenge:\n" + "Alatreon, a dragon of darkness\n" + "and light. Can mere mortals\n" + "fell an elder dragon feared\n" + "even by the gods? Don't even\n" + "bother saying your prayers...", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 1, 0, 0, 0, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 0, 0, 0, 0, 1, 0) + ), + 'penalty_per_cart': 14000, + 'quest_fee': 4200, + 'time_limit': 50, + 'main_monster_1': Monster.none, + 'main_monster_2': Monster.none, + 'location': LocationType.QUEST_LOCATION_SACRED_LAND, + 'quest_rank': QuestRankType.urgent, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_51_INITJOIN, + 'resources': ResourcesType.high_rank, + 'supply_set_number': 0, + 'starting_position': StartingPositionType.shrine, + 'general_enemy_level': 0x0040, + 'summon': 0x00000000, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.alatreon, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x01, + 'level': 0x40, # 0x01 through 0x3c + 'size': 0x7D, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_2': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000101, + 'objective_type': Monster.alatreon, + 'objective_num': 0x01, + 'zenny_reward': 42000, + 'hrp_reward': 4200, + 'rewards_row_1': [ + (ItemsType.alatreon_scute, 1, 40), + (ItemsType.brkn_skypiercer, 1, 30), + (ItemsType.alatreon_talon, 1, 10), + (ItemsType.alatreon_plate, 1, 10), + (ItemsType.skypiercer, 1, 5), + (ItemsType.azure_dragongem, 1, 5) + ], + 'rewards_row_2': [ + (ItemsType.alatreon_plate, 1, 11), + (ItemsType.brkn_skypiercer, 1, 34), + (ItemsType.alatreon_talon, 1, 39), + (ItemsType.elderdragonblood, 1, 6), + (ItemsType.skypiercer, 1, 5), + (ItemsType.azure_dragongem, 1, 5) + ], + }, + 'subquest_1': { + 'description': "None", + 'type': 0x00000000, + 'objective_type': Monster.none, + 'objective_num': 0x00, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + 'subquest_2': { + 'description': "None", + 'type': 0x00000000, + 'objective_type': Monster.none, + 'objective_num': 0x00, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + }, + 'unknown': { + # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala + 'unk_12': 0x00000005, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + } +} + + +""" +EVENT QUEST 21: Red Hot Party! +Quest description from https://www.youtube.com/watch?v=v-pnNyO9-GM, + thanks to "kazuma_6969" +""" +QUEST_EVENT_RED_HOT_PARTY = { + 'small_monsters': [ + [ + # Area 0 + ], + [ + # Area 1 + { + 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': 2, + 'pos_x': -494.25,'pos_y': 47.01,'pos_z': -947.91, + 'rot_x': 0,'rot_y': 112147,'rot_z': 0, + }, + { + 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': 1, + 'pos_x': -1361.42,'pos_y': 20.60,'pos_z': -712.51, + 'rot_x': 0,'rot_y': 79456,'rot_z': 0, + }, + { + 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 1,'quantity': 1, + 'pos_x': 1031.98,'pos_y': 26.73,'pos_z': -1406.32, + 'rot_x': 0,'rot_y': 152977,'rot_z': 0, + }, + ], + [ + # Area 2 + { + 'type': Monster.altaroth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 2,'quantity': 4, + 'pos_x': 3139.21,'pos_y': -16.41,'pos_z': 1809.58, + 'rot_x': 0,'rot_y': 14105,'rot_z': 0, + }, + { + 'type': Monster.altaroth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 2,'quantity': 3, + 'pos_x': 2598.00,'pos_y': 64.57,'pos_z': 2280.01, + 'rot_x': 0,'rot_y': 14478,'rot_z': 0, + }, + { + 'type': Monster.altaroth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 2,'quantity': 2, + 'pos_x': 2184.05,'pos_y': 66.73,'pos_z': 2453.70, + 'rot_x': 0,'rot_y': 11582,'rot_z': 0, + }, + { + 'type': Monster.altaroth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 2,'quantity': 1, + 'pos_x': 2741.80,'pos_y': -53.82,'pos_z': 1680.05, + 'rot_x': 0,'rot_y': 14128,'rot_z': 0, + }, + ], + [ + # Area 3 + { + 'type': Monster.aptonoth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 3,'quantity': -1, + 'pos_x': 6982.80,'pos_y': 73.73,'pos_z': 4494.92, + 'rot_x': 0,'rot_y': 5856,'rot_z': 0, + }, + { + 'type': Monster.aptonoth,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 3,'quantity': -1, + 'pos_x': 7778.32,'pos_y': 66.41,'pos_z': 4957.68, + 'rot_x': 0,'rot_y': 2872,'rot_z': 0, + }, + { + 'type': Monster.aptonoth,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 3,'quantity': -1, + 'pos_x': 8087.79,'pos_y': 83.54,'pos_z': 5160.52, + 'rot_x': 0,'rot_y': 5774,'rot_z': 0, + }, + { + 'type': Monster.brd_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 3,'quantity': -1, + 'pos_x': 8676.94,'pos_y': 515.74,'pos_z': 2473.30, + 'rot_x': 273,'rot_y': 6351,'rot_z': 0, + }, + ], + [ + # Area 4 + { + 'type': Monster.rhenoplos,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': 1, + 'pos_x': 672.08,'pos_y': 25.43,'pos_z': 639.95, + 'rot_x': 0,'rot_y': 2264,'rot_z': 0, + }, + { + 'type': Monster.rhenoplos,'unk1': 0,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': 3, + 'pos_x': -1151.12,'pos_y': -43.31,'pos_z': 2402.83, + 'rot_x': 0,'rot_y': -39,'rot_z': 0, + }, + { + 'type': Monster.brd_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 4,'quantity': 3, + 'pos_x': 1580.62,'pos_y': 129.42,'pos_z': 3042.75, + 'rot_x': 0,'rot_y': 0,'rot_z': 0, + }, + { + 'type': Monster.brd_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 4,'quantity': 2, + 'pos_x': 1743.00,'pos_y': 339.42,'pos_z': 2633.18, + 'rot_x': 0,'rot_y': 91,'rot_z': 0, + }, + { + 'type': Monster.brd_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': 1, + 'pos_x': 1303.26,'pos_y': 189.42,'pos_z': 2724.68, + 'rot_x': 0,'rot_y': -28,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 4,'quantity': -1, + 'pos_x': -1485.68,'pos_y': 36.65,'pos_z': 104.92, + 'rot_x': 0,'rot_y': 3032,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 4,'quantity': -1, + 'pos_x': 897.01,'pos_y': 25.14,'pos_z': -27.96, + 'rot_x': 0,'rot_y': 56,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 4,'quantity': -1, + 'pos_x': 2948.85,'pos_y': 7.51,'pos_z': 1861.15, + 'rot_x': 0,'rot_y': 20656,'rot_z': 0, + }, + ], + [ + # Area 5 + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 5,'quantity': -1, + 'pos_x': -775.56,'pos_y': 73.07,'pos_z': 542.20, + 'rot_x': 0,'rot_y': 1828,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 5,'quantity': -1, + 'pos_x': -3498.99,'pos_y': 67.50,'pos_z': -1218.55, + 'rot_x': 0,'rot_y': 4835,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 5,'quantity': -1, + 'pos_x': 486.74,'pos_y': 38.66,'pos_z': -422.06, + 'rot_x': 0,'rot_y': 1331,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 5,'quantity': -1, + 'pos_x': 2864.76,'pos_y': 49.34,'pos_z': -1059.79, + 'rot_x': 0,'rot_y': 7296,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 5,'quantity': -1, + 'pos_x': 1202.49,'pos_y': 57.63,'pos_z': -1571.42, + 'rot_x': 0,'rot_y': 0,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 5,'quantity': -1, + 'pos_x': -1733.55,'pos_y': 56.88,'pos_z': -1510.18, + 'rot_x': 0,'rot_y': 0,'rot_z': 0, + }, + ], + [ + # Area 6 + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 6,'quantity': -1, + 'pos_x': 393.15,'pos_y': -35.75,'pos_z': 1076.53, + 'rot_x': 0,'rot_y': -85,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 6,'quantity': -1, + 'pos_x': -1170.83,'pos_y': -30.77,'pos_z': 447.51, + 'rot_x': 0,'rot_y': 0,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 6,'quantity': -1, + 'pos_x': 1020.10,'pos_y': 4.72,'pos_z': -202.83, + 'rot_x': 0,'rot_y': 0,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 6,'quantity': -1, + 'pos_x': -435.28,'pos_y': -28.37,'pos_z': -1280.39, + 'rot_x': 0,'rot_y': 0,'rot_z': 0, + }, + ], + [ + # Area 7 + { + 'type': Monster.uroktor,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 7,'quantity': 3, + 'pos_x': 95.05,'pos_y': -6.35,'pos_z': 228.22, + 'rot_x': 0,'rot_y': 1399,'rot_z': 0, + }, + { + 'type': Monster.uroktor,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 7,'quantity': 2, + 'pos_x': -2114.33,'pos_y': 17.37,'pos_z': 268.38, + 'rot_x': 0,'rot_y': 19692,'rot_z': 0, + }, + { + 'type': Monster.uroktor,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 7,'quantity': 1, + 'pos_x': -1877.72,'pos_y': -22.42,'pos_z': 1532.47, + 'rot_x': 0,'rot_y': 32312,'rot_z': 0, + }, + { + 'type': Monster.uroktor,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 7,'quantity': 1, + 'pos_x': 625.43,'pos_y': 3.37,'pos_z': -496.28, + 'rot_x': 0,'rot_y': 6283,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 7,'quantity': -1, + 'pos_x': -1447.72,'pos_y': 21.43,'pos_z': 61.89, + 'rot_x': 0,'rot_y': 0,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 7,'quantity': -1, + 'pos_x': 316.55,'pos_y': -3.36,'pos_z': -1209.27, + 'rot_x': 0,'rot_y': 0,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 7,'quantity': -1, + 'pos_x': 1008.65,'pos_y': -9.18,'pos_z': 1099.80, + 'rot_x': 0,'rot_y': 0,'rot_z': 0, + }, + ], + [ + # Area 8 (Area 10 in Sandy Plains) + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 4, + 'pos_x': 728.75,'pos_y': -19.44,'pos_z': 1581.60, + 'rot_x': 0,'rot_y': 1581.60,'rot_z': 0, + }, + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 3, + 'pos_x': -375.43,'pos_y': 6.66,'pos_z': 301.92, + 'rot_x': 0,'rot_y': 40860,'rot_z': 0, + }, + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 2, + 'pos_x': 479.45,'pos_y': 30.53,'pos_z': -50.40, + 'rot_x': 0,'rot_y': 59178,'rot_z': 0, + }, + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 1, + 'pos_x': 2190.05,'pos_y': -6.53,'pos_z': 1552.73, + 'rot_x': 0,'rot_y': 24814,'rot_z': 0, + }, + ], + [ + # Area 9 (Area 7 in Sandy Plains) + { + 'type': Monster.uroktor,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 9,'quantity': 2, + 'pos_x': 1226.78,'pos_y': 14.44,'pos_z': -971.03, + 'rot_x': 0,'rot_y': 49126,'rot_z': 0, + }, + { + 'type': Monster.uroktor,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 9,'quantity': 3, + 'pos_x': 30.91,'pos_y': 11.00,'pos_z': -556.52, + 'rot_x': 0,'rot_y': 19871,'rot_z': 0, + }, + ], + [ + # Area 10 + ], + ], + 'quest_info': { + 'quest_id': 61022, + 'name': "Red Hot Party!", + 'client': "Deserted Island Chief", + 'description': "Hunt a Ratha., Urag. & Agnak.", + 'details': + "You're back! While you were\n" + "away, three wyverns moved into\n" + "the volcano and are reeking\n" + "havoc throughout the area!\n" + "We haven't a moment to spare!\n" + "Please get rid of all three\n" + "of them for me and my people!", + 'success_message': "Complete the Main Quest.", + 'flags': ( + + (0, 0, 1, 0, 0, 1, 0, 0), + (1, 0, 0, 0, 0, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 1, 0, 0, 0, 1, 1) + + # (0, 0, 0, 0, 0, 0, 0, 0), # (0, 0, 0, 0, 0, 0, 0, 0), + # (1, 1, 0, 0, 0, 0, 0, 0), # (1, 1, 0, 0, 0, 0, 0, 0), + # (0, 0, 0, 0, 0, 0, 0, 0), # (0, 0, 0, 0, 0, 0, 0, 0), + # (0, 0, 1, 0, 0, 0, 1, 1) # (1, 0, 1, 0, 0, 0, 1, 1) + ), + 'penalty_per_cart': 15000, + 'quest_fee': 4050, + 'time_limit': 50, + 'main_monster_1': Monster.bnahabra2, + 'main_monster_2': Monster.felyne, + 'location': LocationType.QUEST_LOCATION_VOLCANO, + 'quest_rank': QuestRankType.star_5, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_40_INITJOIN, + 'resources': ResourcesType.high_rank, + 'supply_set_number': 27, + 'starting_position': StartingPositionType.random, + 'general_enemy_level': 0x0034, + 'summon': 0x00000000, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.rathalos, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x01, + 'level': 0x38, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x01 + }, + 'monster_2': { + 'type': Monster.uragaan, + 'starting_area': 0x00, + 'boss_id': 0x01, + 'spawn_count': 0x01, + 'level': 0x38, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x01, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x01 + }, + 'monster_3': { + 'type': Monster.agnaktor, + 'starting_area': 0x00, + 'boss_id': 0x02, + 'spawn_count': 0x01, + 'level': 0x38, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x01, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x01 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000001, # 0x00020101 <-- Fails on capture, also reduced quest complete timer + 'objective_type': Monster.rathalos, + 'objective_num': 0x01, + 'zenny_reward': 41000, + 'hrp_reward': 3870, + 'rewards_row_1': [ + (ItemsType.rathaloscarapace, 1, 8), + (ItemsType.rathalos_scale_plus, 1, 8), + (ItemsType.rath_medulla, 1, 8), + (ItemsType.agnaktor_fin_plus, 1, 10), + (ItemsType.agnaktorcarapace, 1, 10), + (ItemsType.uragaan_marrow, 1, 10), + (ItemsType.uragaan_carapace, 1, 10), + (ItemsType.ancient_shard, 1, 10), + (ItemsType.rathalos_plate, 1, 8), + (ItemsType.uragaan_ruby, 1, 6), + (ItemsType.rathalos_ruby, 1, 6), + (ItemsType.wyvern_stone, 1, 6) + ], + 'rewards_row_2': [ + (ItemsType.rathaloscarapace, 1, 8), + (ItemsType.rathalos_scale_plus, 1, 8), + (ItemsType.rath_medulla, 1, 8), + (ItemsType.agnaktor_fin_plus, 1, 10), + (ItemsType.agnaktorcarapace, 1, 10), + (ItemsType.uragaan_marrow, 1, 10), + (ItemsType.uragaan_carapace, 1, 10), + (ItemsType.ancient_shard, 1, 10), + (ItemsType.rathalos_plate, 1, 8), + (ItemsType.uragaan_ruby, 1, 6), + (ItemsType.rathalos_ruby, 1, 6), + (ItemsType.wyvern_stone, 1, 6) + ], + }, + 'subquest_1': { + 'description': "None", + 'type': 0x00000001, # 0x00020101 <-- Fails on capture, also reduced quest complete timer + 'objective_type': Monster.uragaan, + 'objective_num': 0x01, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + 'subquest_2': { + 'description': "None", + 'type': 0x00000001, # 0x00020101 <-- Fails on capture, also reduced quest complete timer + 'objective_type': Monster.agnaktor, + 'objective_num': 0x01, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + }, + 'unknown': { + # (2 for large mon quest, 3 for small/delivery, 5 for jhen/ala) + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + } +} + + +""" +EVENT QUEST 22: Fiery Skies, Frozen Fields +Quest description from https://www.youtube.com/watch?v=KRGHjgHagXY, + thanks to "kazuma_6969" +""" +QUEST_EVENT_FIERY_SKIES_FROZEN_FIELDS = { + 'small_monsters': [ + [ + # Area 0 + ], + [ + # Area 1 + ], + ], + 'quest_info': { + 'quest_id': 61023, + 'name': "Fiery Skies, Frozen Fields", + 'client': "Deserted Island Maiden", + 'description': + "Hunt a Barioth and\n" + "a Rathalos", + 'details': + "It's time for a FESTIVAL!\n" + "Presenting the King of the\n" + "Skies and the Knight of the\n" + "Tundra -- the flash of fire\n" + "and ice from above and\n" + "below -- only at the arena!\n" + "Do you have what it takes?", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 1, 0, 0, 0, 0, 0, 0), + (1, 1, 0, 0, 0, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 1, 0, 0, 0, 0, 0) + ), + 'penalty_per_cart': 14000, + 'quest_fee': 4200, + 'time_limit': 50, + 'main_monster_1': Monster.none, + 'main_monster_2': Monster.none, + 'location': LocationType.QUEST_LOCATION_LAND_ARENA_1, + 'quest_rank': QuestRankType.urgent, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_51_INITJOIN, + 'resources': ResourcesType.high_rank, + 'supply_set_number': 43, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 0x003C, + 'summon': 0x00000000, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.barioth, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x01, + 'level': 0x3C, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x0B + }, + 'monster_2': { + 'type': Monster.rathalos, + 'starting_area': 0x00, + 'boss_id': 0x01, + 'spawn_count': 0x01, + 'level': 0x3B, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x0A + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000001, + 'objective_type': Monster.barioth, + 'objective_num': 0x01, + 'zenny_reward': 42000, + 'hrp_reward': 4290, + 'rewards_row_1': [ + (ItemsType.rathaloscarapace, 2, 25), + (ItemsType.barioth_carapace, 2, 24), + (ItemsType.hrd_armor_sphere, 2, 17), + (ItemsType.hvy_armor_sphere, 1, 15), + (ItemsType.rathalos_ruby, 1, 10), + (ItemsType.wyvern_stone, 1, 9) + ], + 'rewards_row_2': [ + (ItemsType.rathaloscarapace, 2, 25), + (ItemsType.barioth_carapace, 2, 24), + (ItemsType.hrd_armor_sphere, 2, 17), + (ItemsType.hvy_armor_sphere, 1, 15), + (ItemsType.rathalos_ruby, 1, 10), + (ItemsType.wyvern_stone, 1, 9) + ], + }, + 'subquest_1': { + 'description': "None", + 'type': 0x00000001, + 'objective_type': Monster.rathalos, + 'objective_num': 0x01, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + 'subquest_2': { + 'description': "None", + 'type': 0, + 'objective_type': Monster.none, + 'objective_num': 0, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + }, + 'unknown': { + # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + } +} + + +QUEST_EVENT_GREEN_EGGS = { + 'small_monsters': [ + [ + # Area 0 + ], + [ + # Area 1 + { + 'type': Monster.giggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': -1, + 'pos_x': -0.5,'pos_y': -5038.5,'pos_z': -3042.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': -1, + 'pos_x': -0.5,'pos_y': -5038.5,'pos_z': -3042.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': -1, + 'pos_x': -0.5,'pos_y': -5038.5,'pos_z': -3042.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': -1, + 'pos_x': -0.5,'pos_y': -5038.5,'pos_z': -3042.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': -1, + 'pos_x': -0.5,'pos_y': -5038.5,'pos_z': -3042.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': -1, + 'pos_x': -0.5,'pos_y': -5038.5,'pos_z': -3042.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type': Monster.bnahabra1,'unk1': 3,'unk2': 0xFF, + 'variant': 1,'room': 1,'quantity': -1, + 'pos_x': -0.5,'pos_y': -5038.5,'pos_z': -3042.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type': Monster.bnahabra1,'unk1': 3,'unk2': 0xFF, + 'variant': 1,'room': 1,'quantity': -1, + 'pos_x': -0.5,'pos_y': -5038.5,'pos_z': -3042.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + ], + ], + 'quest_info': { + 'quest_id': 61050, + 'name': "[MH3SP] Green Eggs and...", + 'client': "Ze SpyRo", + 'description': + "Hunt a Gigginox\n" + "and an Agnaktor", + 'details': + "Why do we live, only to suffer?\n" + "Only slayers of pig meat know\n" + "these things. Take care, Hunter,\n" + "for those who look to antidote\n" + "herbs may find their breath\n" + "stolen away.", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 1, 0, 0, 0, 0, 0, 0), + (1, 1, 0, 0, 0, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 1, 0, 0, 0, 0, 0) + ), + 'penalty_per_cart': 2400, + 'quest_fee': 200, + 'time_limit': 50, + 'main_monster_1': Monster.gigginox, + 'main_monster_2': Monster.agnaktor, + 'location': LocationType.QUEST_LOCATION_LAND_ARENA_1, + 'quest_rank': QuestRankType.star_3, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_18_INITJOIN, + 'resources': ResourcesType.low_rank, + 'supply_set_number': 43, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 0x001B, + 'summon': 0x00000000, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.gigginox, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x01, + 'level': 0x1B, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x03 + }, + 'monster_2': { + 'type': Monster.agnaktor, + 'starting_area': 0x00, + 'boss_id': 0x01, + 'spawn_count': 0x01, + 'level': 0x1B, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x03 + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x02, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000001, + 'objective_type': Monster.gigginox, + 'objective_num': 0x01, + 'zenny_reward': 7000, + 'hrp_reward': 950, + 'rewards_row_1': [ + (ItemsType.flabby_hide, 1, 18), + (ItemsType.uncanny_hide, 1, 6), + (ItemsType.pale_extract, 1, 11), + (ItemsType.poison_sac, 1, 15), + (ItemsType.agnaktor_shell, 1, 10), + (ItemsType.agnaktor_scale, 1, 16), + (ItemsType.agnaktor_hide, 1, 13), + (ItemsType.agnaktor_fin, 1, 6), + (ItemsType.agnaktor_beak, 1, 5) + ], + 'rewards_row_2': [ + (ItemsType.flabby_hide, 1, 13), + (ItemsType.uncanny_hide, 1, 6), + (ItemsType.pale_extract, 1, 11), + (ItemsType.poison_sac, 1, 10), + (ItemsType.agnaktor_shell, 1, 9), + (ItemsType.agnaktor_scale, 1, 10), + (ItemsType.agnaktor_hide, 1, 10), + (ItemsType.agnaktor_fin, 1, 6), + (ItemsType.agnaktor_beak, 1, 5), + (ItemsType.commendation, 1, 20) + ], + }, + 'subquest_1': { + 'description': "None", + 'type': 0x00000001, + 'objective_type': Monster.agnaktor, + 'objective_num': 0x01, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + 'subquest_2': { + 'description': "None", + 'type': 0, + 'objective_type': Monster.none, + 'objective_num': 0x00, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + }, + 'unknown': { + # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + } +} + + +""" +EVENT QUEST ???: Jump Fourty-Eight Jaggi +Quest description/rewards/etc from https://www.youtube.com/watch?v=qyQt2Xmpt0g +Quest requirements altered to make it possible to win. +""" +QUEST_EVENT_JUMP_FOURTY_EIGHT_JAGGI = { + 'small_monsters': [ + [ + # Area 0 + ], + [ + # Area 1 + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': 1, + 'pos_x': 2039.26,'pos_y': 12.70,'pos_z': 210.05, + 'rot_x': 0,'rot_y': 17,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': 1, + 'pos_x': 857.89,'pos_y': -41.97,'pos_z': 814.06, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': 1, + 'pos_x': 97.58,'pos_y': -75.54,'pos_z': 135.22, + 'rot_x': 0,'rot_y': -45,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 1,'quantity': 1, + 'pos_x': -393.52,'pos_y': -163.94,'pos_z': -667.01, + 'rot_x': 0,'rot_y': -199,'rot_z': 0, + }, + ], + [ + # Area 2 + { + 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 2,'quantity': 1, + 'pos_x': -853.86,'pos_y': 19.45,'pos_z': 1381.66, + 'rot_x': 0,'rot_y': -113,'rot_z': 0, + }, + { + 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 2,'quantity': 2, + 'pos_x': -553.59,'pos_y': -2.57,'pos_z': -369.71, + 'rot_x': 0,'rot_y': 193,'rot_z': 0, + }, + { + 'type': Monster.kelbi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 2,'quantity': 3, + 'pos_x': -1698.75,'pos_y': 5.74,'pos_z': -530.30, + 'rot_x': 0,'rot_y': 398,'rot_z': 0, + }, + ], + [ + # Area 3 + { + 'type': Monster.melynx,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 3,'quantity': -1, + 'pos_x': 873.28,'pos_y': 85.07,'pos_z': -610.86, + 'rot_x': 0,'rot_y': -153,'rot_z': 0, + }, + { + 'type': Monster.melynx,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 3,'quantity': -1, + 'pos_x': 1247.84,'pos_y': 106.65,'pos_z': 25.11, + 'rot_x': 0,'rot_y': -358,'rot_z': 0, + }, + { + 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, + 'variant': 2,'room': 3,'quantity': 2, + 'pos_x': 177.92,'pos_y': 450.70,'pos_z': -32.21, + 'rot_x': 0,'rot_y': -238,'rot_z': 0, + }, + { + 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 3,'quantity': 2, + 'pos_x': -78.66,'pos_y': 330.70,'pos_z': 362.86, + 'rot_x': 0,'rot_y': -79,'rot_z': 0, + }, + ], + [ + # Area 4 + { + 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': 3, + 'pos_x': 606.18,'pos_y': -12.89,'pos_z': 4145.11, + 'rot_x': 0,'rot_y': 324,'rot_z': 0, + }, + { + 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': 1, + 'pos_x': 524.37,'pos_y': -18.65,'pos_z': 2292.05, + 'rot_x': 0,'rot_y': 199,'rot_z': 0, + }, + { + 'type': Monster.rhenoplos,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 4,'quantity': -1, + 'pos_x': -460.08,'pos_y': -71.51,'pos_z': 3044.50, + 'rot_x': 0,'rot_y': -460,'rot_z': 0, + }, + ], + [ + # Area 5 + { + 'type': Monster.jaggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': 1, + 'pos_x': 300.40,'pos_y': 4.00,'pos_z': -211.14, + 'rot_x': 0,'rot_y': 0,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': -1, + 'pos_x': 458.16,'pos_y': 1.49,'pos_z': -918.94, + 'rot_x': 0,'rot_y': 51,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': 4, + 'pos_x': 1813.83,'pos_y': 3.06,'pos_z': 925.68, + 'rot_x': 0,'rot_y': 494,'rot_z': 0, + }, + { + 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': -1, + 'pos_x': -504.37,'pos_y': 3.05,'pos_z': -757.30, + 'rot_x': 0,'rot_y': 676,'rot_z': 0, + }, + { + 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': 2, + 'pos_x': 1118.48,'pos_y': 4.00,'pos_z': -420.89, + 'rot_x': 0,'rot_y': 364,'rot_z': 0, + }, + { + 'type': Monster.jaggia,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 5,'quantity': -1, + 'pos_x': 2658.84,'pos_y': 3.24,'pos_z': 222.99, + 'rot_x': 0,'rot_y': 756,'rot_z': 0, + }, + ], + [ + # Area 6 (Area 8 in Sandy Plains) + { + 'type': Monster.rhenoplos,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 6,'quantity': -1, + 'pos_x': 1612.71,'pos_y': -30.27,'pos_z': 695.30, + 'rot_x': 0,'rot_y': 517,'rot_z': 0, + }, + { + 'type': Monster.rhenoplos,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 6,'quantity': -1, + 'pos_x': -2050.04,'pos_y': -31.90,'pos_z': -266.33, + 'rot_x': 0,'rot_y': 28,'rot_z': 0, + }, + { + 'type': Monster.altaroth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 6,'quantity': 5, + 'pos_x': -344.14,'pos_y': -13.00,'pos_z': -26.14, + 'rot_x': 0,'rot_y': 443,'rot_z': 0, + }, + { + 'type': Monster.altaroth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 6,'quantity': 4, + 'pos_x': -161.74,'pos_y': 4.80,'pos_z': -416.52, + 'rot_x': 0,'rot_y': 472,'rot_z': 0, + }, + { + 'type': Monster.altaroth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 6,'quantity': 2, + 'pos_x': -481.05,'pos_y': 15.34,'pos_z': -643.19, + 'rot_x': 0,'rot_y': 568,'rot_z': 0, + }, + { + 'type': Monster.altaroth,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 6,'quantity': -1, + 'pos_x': -692.26,'pos_y': -11.02,'pos_z': -235.13, + 'rot_x': 0,'rot_y': 608,'rot_z': 0, + }, + { + 'type': Monster.altaroth,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 6,'quantity': 3, + 'pos_x': -417.82,'pos_y': -1.44,'pos_z': -343.46, + 'rot_x': 0,'rot_y': 147,'rot_z': 0, + }, + ], + [ + # Area 7 (Area 9 in Sandy Plains) + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 7,'quantity': 3, + 'pos_x': 4294.59,'pos_y': -75.65,'pos_z': -2925.29, + 'rot_x': 0,'rot_y': -130,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 7,'quantity': 2, + 'pos_x': 3995.30,'pos_y': -45.09,'pos_z': -2049.22, + 'rot_x': 0,'rot_y': -85,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 7,'quantity': 2, + 'pos_x': 4187.00,'pos_y': -17.07,'pos_z': -1574.97, + 'rot_x': 0,'rot_y': -17,'rot_z': 0, + }, + { + 'type': Monster.jaggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 7,'quantity': 1, + 'pos_x': 3781.64,'pos_y': -66.86,'pos_z': -2570.78, + 'rot_x': 0,'rot_y': -130,'rot_z': 0, + }, + ], + [ + # Area 8 (Area 10 in Sandy Plains) + { + 'type': Monster.delex,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 7, + 'pos_x': 293.99,'pos_y': -170.31,'pos_z': 4049.95, + 'rot_x': 0,'rot_y': 819,'rot_z': 0, + }, + { + 'type': Monster.delex,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 5, + 'pos_x': 124.95,'pos_y': -186.54,'pos_z': 3440.16, + 'rot_x': 0,'rot_y': 819,'rot_z': 0, + }, + { + 'type': Monster.delex,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 3, + 'pos_x': -425.01,'pos_y': -179.30,'pos_z': 4509.84, + 'rot_x': 0,'rot_y': 819,'rot_z': 0, + }, + { + 'type': Monster.delex,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 2, + 'pos_x': -714.48,'pos_y': -183.78,'pos_z': 4108.50, + 'rot_x': 0,'rot_y': 819,'rot_z': 0, + }, + { + 'type': Monster.delex,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': 1, + 'pos_x': -1021.27,'pos_y': -215.48,'pos_z': 3726.09, + 'rot_x': 0,'rot_y': 819,'rot_z': 0, + }, + { + 'type': Monster.melynx,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': -1, + 'pos_x': -1974.57,'pos_y': -209.48,'pos_z': -316.05, + 'rot_x': 0,'rot_y': -56,'rot_z': 0, + }, + { + 'type': Monster.melynx,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 8,'quantity': -1, + 'pos_x': -1825.11,'pos_y': -210.91,'pos_z': -382.90, + 'rot_x': 0,'rot_y': 130,'rot_z': 0, + }, + ], + [ + # Area 9 (Area 7 in Sandy Plains) + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': 2, + 'pos_x': 3383.92,'pos_y': 2.65,'pos_z': 592.49, + 'rot_x': 0,'rot_y': -193,'rot_z': 0, + }, + { + 'type': Monster.felyne,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': 1, + 'pos_x': 2653.55,'pos_y': -22.59,'pos_z': 987.24, + 'rot_x': 0,'rot_y': -73,'rot_z': 0, + }, + { + 'type': Monster.melynx,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': -1, + 'pos_x': 2838.69,'pos_y': -28.00,'pos_z': 445.91, + 'rot_x': 0,'rot_y': -142,'rot_z': 0, + }, + { + 'type': Monster.melynx,'unk1': 3,'unk2': 0xFF, + 'variant': 0,'room': 9,'quantity': -1, + 'pos_x': 2109.53,'pos_y': -26.57,'pos_z': 575.43, + 'rot_x': 0,'rot_y': -460,'rot_z': 0, + }, + { + 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 9,'quantity': -1, + 'pos_x': -1713.72,'pos_y': 1262.50,'pos_z': 2199.24, + 'rot_x': 273,'rot_y': -45,'rot_z': 0, + }, + { + 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, + 'variant': 1,'room': 9,'quantity': 6, + 'pos_x': -1174.44,'pos_y': 1319.50,'pos_z': 1682.19, + 'rot_x': 0,'rot_y': -39,'rot_z': 0, + }, + ], + [ + # Area 10 + ], + [ + # Area 11 (Area 6 in Sandy Plains) + { + 'type': Monster.giggi,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 11,'quantity': 2, + 'pos_x': 2195.89,'pos_y': 73.70,'pos_z': -720.92, + 'rot_x': 0,'rot_y': 39,'rot_z': 0, + }, + { + 'type': Monster.giggi,'unk1': 1,'unk2': 0xFF, + 'variant': 6,'room': 11,'quantity': 1, + 'pos_x': -535.73,'pos_y': 1212.59,'pos_z': 896.44, + 'rot_x': 0,'rot_y': 169,'rot_z': 0, + }, + { + 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 11,'quantity': 2, + 'pos_x': -434.00,'pos_y': 198.96,'pos_z': 289.52, + 'rot_x': 0,'rot_y': -267,'rot_z': 0, + }, + { + 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 11,'quantity': 2, + 'pos_x': -802.69,'pos_y': 198.96,'pos_z': 66.62, + 'rot_x': 0,'rot_y': -216,'rot_z': 0, + }, + { + 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 11,'quantity': 2, + 'pos_x': -645.14,'pos_y': 288.96,'pos_z': -371.21, + 'rot_x': 0,'rot_y': -227,'rot_z': 0, + }, + { + 'type': Monster.bnahabra3,'unk1': 1,'unk2': 0xFF, + 'variant': 0,'room': 11,'quantity': 1, + 'pos_x': -473.33,'pos_y': 168.96,'pos_z': -166.43, + 'rot_x': 0,'rot_y': -210,'rot_z': 0, + }, + ], + ], + 'quest_info': { + 'quest_id': 61001, + 'name': "Jump Fourty-Eight Jaggi", + 'client': "Guild Subcontractor", + 'description': "Hunt 48 Great Jaggi", + 'details': + "I'm gonna get so fired for\n" + "this... The Great Jaggi some\n" + "hunter brought in just\n" + "escaped. Mind going after\n" + "them? You better hurry,\n" + "though. Bet they've got some\n" + "incredible materials, too.", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 1, 0, 0, 0, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 1, 0, 0, 0, 1, 1) + ), + 'penalty_per_cart': 1400, + 'quest_fee': 400, + 'time_limit': 50, + 'main_monster_1': Monster.bnahabra2, + 'main_monster_2': Monster.melynx, + 'location': LocationType.QUEST_LOCATION_SANDY_PLAINS, + 'quest_rank': QuestRankType.star_1, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_NONE, + 'resources': ResourcesType.low_rank, + 'supply_set_number': 19, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 0x0017, + 'summon': 0x64050219, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.great_jaggi, + 'starting_area': 0x00, + 'boss_id': 0xFF, + 'spawn_count': 0x10, + 'level': 0x17, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x01, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x01 + }, + 'monster_2': { + 'type': Monster.great_jaggi, + 'starting_area': 0x00, + 'boss_id': 0xFF, + 'spawn_count': 0x10, + 'level': 0x17, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x01, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x01 + }, + 'monster_3': { + 'type': Monster.great_jaggi, + 'starting_area': 0x00, + 'boss_id': 0xFF, + 'spawn_count': 0x10, + 'level': 0x17, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x01, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x01 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000001, + 'objective_type': Monster.great_jaggi, + 'objective_num': 0x30, + 'zenny_reward': 15000, + 'hrp_reward': 750, + 'rewards_row_1': [ + (ItemsType.great_jagi_claw, 2, 3), + (ItemsType.great_jagi_hide, 2, 12), + (ItemsType.kings_frill, 1, 10), + (ItemsType.rustshard, 1, 20), + (ItemsType.commendation, 1, 12), + (ItemsType.voucher, 2, 18), + (ItemsType.great_jagi_head, 1, 25) + ], + 'rewards_row_2': [ + (ItemsType.mystery_charm, 1, 1), + (ItemsType.aquaglow_jewel, 1, 1), + (ItemsType.shining_charm, 1, 1), + (ItemsType.armor_sphere, 1, 1), + (ItemsType.armor_sphere_plus, 1, 1) + ], + }, + 'subquest_1': { + 'description': "Hunt 24 Great Jaggi", + 'type': 0x00000001, + 'objective_type': Monster.great_jaggi, + 'objective_num': 0x18, + 'zenny_reward': 8000, + 'hrp_reward': 255, + 'rewards_row_1': [ + (ItemsType.great_jagi_claw, 1, 1), + (ItemsType.great_jagi_hide, 1, 1), + (ItemsType.jagi_scale, 1, 1), + (ItemsType.screamer, 1, 1), + (ItemsType.kings_frill, 1, 1), + (ItemsType.bone_husk_s, 8, 1), + (ItemsType.great_jagi_head, 1, 1) + ], + }, + 'subquest_2': { + 'description': "None", + 'type': 0, + 'objective_type': Monster.none, + 'objective_num': 0, + 'zenny_reward': 0, + 'hrp_reward': 0, + 'rewards_row_1': [], + } + }, + 'unknown': { + # (2 for large mon quest, 3 for small/delivery, 5 for jhen/ala) + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + } +} + +""" +EVENT QUEST ??: Dark Side of the Moon +""" +QUEST_EVENT_DARK_SIDE_OF_THE_MOON = { + 'small_monsters': [ + [ + # Area 0 + ], + [ + + ], + [ + + ], + [ + + ] + ], + 'quest_info': { + 'quest_id': 61008, + 'name': "[MH3SP] Dark Side of the Moon", + 'client': "Moga Village Chief", + 'description': + "Slay a Ceadeus", + 'details': + "Gambala! The sea drake has\n" + "returned! Moga is barely clinging\n" + "to the island after its last\n" + "appearance -- we need this taken\n" + "care of FAST! Get a group of your\n" + "peers from Loc Lac and get your\n" + "tail back here! PRONTO!", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 1, 0, 0, 0, 0, 0, 1), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 0, 0, 0, 0, 0, 0) + ), + 'penalty_per_cart': 10000, + 'quest_fee': 3100, + 'time_limit': 15, + 'main_monster_1': Monster.none, + 'main_monster_2': Monster.none, + 'location': LocationType.QUEST_LOCATION_UW_RUIN, + 'quest_rank': QuestRankType.urgent, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_51_INITJOIN, + 'resources': ResourcesType.low_rank, + 'supply_set_number': 48, # 43, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 0x0010, + 'summon': 0x00000000, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.ceadeus, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x01, + 'level': 0x3C, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_2': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000101, + 'objective_type': Monster.ceadeus, + 'objective_num': 0x01, + 'zenny_reward': 30000, + 'hrp_reward': 1500, + 'rewards_row_1': [ + (ItemsType.luminous_organ, 1, 15), + (ItemsType.ceadeus_hide, 1, 25), + (ItemsType.ceadeus_scale, 1, 14), + (ItemsType.deep_dragongem, 1, 15), + (ItemsType.ceadeus_fur, 1, 18), + (ItemsType.elderdragonblood, 1, 13) + ], + 'rewards_row_2': [ + (ItemsType.sunspire_jewel, 1, 12), + (ItemsType.ceadeus_hide, 1, 18), + (ItemsType.ceadeus_scale, 1, 30), + (ItemsType.monster_bone_l, 1, 15), + (ItemsType.aquaglow_jewel, 1, 25) + ], + }, + 'subquest_1': { + 'description': "None", + 'type': 0x00002000, + 'objective_type': 0x0001, + 'objective_num': 0x00, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + 'subquest_2': { + 'description': "None", + 'type': 0, + 'objective_type': Monster.none, + 'objective_num': 0, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + }, + 'unknown': { + # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala + 'unk_12': 0x00000005, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + } +} + +# ---------- ARENA QUESTS ---------- + +""" +00 00 00 28 +00 00 00 FF +FF +01 +01 +03 +00 00 00 00 +BF 00 00 00 +C5 9D 74 00 +C5 3E 2B 33 +00 00 00 00 +FF FF A4 00 +00 00 00 00 +FF 00 00 00 +00 00 00 00 +""" + +GRUDGE_MATCH_QURUPECO = { + 'small_monsters': [ + [ + # Area 0 + ], + [ + # Area 1 + { + 'type': Monster.fly_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 3,'room': 1,'quantity': -1, + 'pos_x': -2404.5,'pos_y': -5038.5,'pos_z': -3542.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + ], + ], + 'quest_info': { + 'quest_id': 0xEA60, + 'name': "Grudge Match: Qurupeco", + 'client': "Announcer/Receptionist", + 'description': "Slay a Qurupeco", + 'details': + "Wanted:\n" + "The description for this\n" + "quest! If you can find\n" + "it, please let us know!\n" + "Thanks!", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 0, 0, 0, 0, 1, 0, 0), + (1, 0, 0, 0, 1, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 0, 0, 1, 0, 1, 0) + ), + 'penalty_per_cart': 200, + 'quest_fee': 0, + 'time_limit': 50, + 'main_monster_1': Monster.none, + 'main_monster_2': Monster.none, + 'location': LocationType.QUEST_LOCATION_LAND_ARENA_1, + 'quest_rank': QuestRankType.star_1, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_NONE, + 'resources': ResourcesType.arena, + 'supply_set_number': 0, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 0x0017, + 'summon': 0x00000000, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.qurupeco, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x01, + 'level': 0x17, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_2': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000101, + 'objective_type': Monster.qurupeco, + 'objective_num': 0x01, + 'zenny_reward': 500, + 'hrp_reward': 0, + 'rewards_row_1': [ + (ItemsType.qurupeco_coin, 1, 27), + (ItemsType.qurupeco_coin, 2, 10), + (ItemsType.voucher, 1, 10), + (ItemsType.armor_sphere, 1, 22), + (ItemsType.steel_eg, 1, 16), + (ItemsType.pinnacle_coin, 1, 15) + ], + 'rewards_row_2': [], + }, + 'subquest_1': { + 'description': "None", + 'type': 0x00000000, + 'objective_type': Monster.none, + 'objective_num': 0x00, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + 'subquest_2': { + 'description': "None", + 'type': 0x00000000, + 'objective_type': Monster.none, + 'objective_num': 0x00, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + }, + 'unknown': { + # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + }, + 'arena_equipment': ( + ( + (EquipmentClasses.SnS, SnS.AziDahaka), + None, None, + Helmet.RangersHeadgear, Chestpiece.RangersGirdle, + Gauntlets.RangersGauntlets, Faulds.RangersFaulds, + Leggings.RangersEspadrilles, + ((ItemsType.whetstone, 20), (ItemsType.potion, 10), + (ItemsType.ration, 10), (ItemsType.might_seed, 5), + (ItemsType.firedouse_berry, 2), (ItemsType.pitfall_trap, 1), + (ItemsType.sonic_bomb, 2), (ItemsType.ez_barrel_bomb_l, 1), + (ItemsType.barrel_bomb_s, 2)), + () + ), + ( + (EquipmentClasses.Greatsword, Greatsword.BusterSwordPlus), + None, None, + Helmet.AlloyHelm, Chestpiece.SteelMail, + Gauntlets.AlloyVambraces, Faulds.SteelFaulds, + Leggings.BaggiGreaves, + ((ItemsType.whetstone, 20), (ItemsType.potion, 10), + (ItemsType.ration, 10), (ItemsType.shock_trap, 1), + (ItemsType.ez_flash_bomb, 1)), + () + ), + ( + (EquipmentClasses.Hammer, Hammer.WarHammerPlus), + None, None, + Helmet.JaggiHelm, Chestpiece.HuntersMail, + Gauntlets.BlastBracelet, Faulds.BarrothFaulds, + Leggings.BoneGreaves, + ((ItemsType.whetstone, 20), (ItemsType.potion, 10), + (ItemsType.ration, 10), (ItemsType.mega_dash_juice, 1), + (ItemsType.ez_flash_bomb, 1), (ItemsType.ez_barrel_bomb_l, 1), + (ItemsType.barrel_bomb_s, 1)), + () + ), + ( + (EquipmentClasses.BowgunFrame, BowgunFrame.LightBowgun), + (EquipmentClasses.BowgunBarrel, BowgunBarrel.RoyalLauncher), + (EquipmentClasses.BowgunStock, BowgunStock.RoyalLauncher), + Helmet.BarrothCap, Chestpiece.BarrothVest, + Gauntlets.NoEquipment, Faulds.HuntersCoat, + Leggings.AlloyLeggings, + ((ItemsType.potion, 10), (ItemsType.ration, 10), + (ItemsType.ez_flash_bomb, 1), (ItemsType.barrel_bomb_l, 2)), + ((ItemsType.normal_s_lv2, 99), (ItemsType.normal_s_lv3, 99), + (ItemsType.clust_s_lv1, 5), (ItemsType.pellet_s_lv1, 50), + (ItemsType.armor_s_i, 3), (ItemsType.para_s_lv1, 12)), + ) + ) +} + +GRUDGE_MATCH_ROYAL_LUDROTH = { + 'small_monsters': [ + [ + # Area 0 + ], + [ + # Area 1 + { + 'type': Monster.fly_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 3,'room': 1,'quantity': -1, + 'pos_x': -0.5,'pos_y': -5038.5,'pos_z': -3042.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + ], + ], + 'quest_info': { + 'quest_id': 0xEA61, + 'name': "Grudge Match: Royal Ludroth", + 'client': "Announcer/Receptionist", + 'description': "Slay a Royal Ludroth", + 'details': + "Ahoy, adrenaline junkies!\n" + "Next up is the regally maned\n" + "Royal Ludroth! Will the pressure\n" + "of facing this sea dragon on\n" + "its home surf with a strict\n" + "time limit leave the hunters\n" + "all washed up?", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 0, 0, 0, 0, 1, 0, 0), + (1, 0, 0, 0, 1, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 0, 0, 1, 0, 1, 0) + ), + 'penalty_per_cart': 350, + 'quest_fee': 0, + 'time_limit': 50, + 'main_monster_1': Monster.none, + 'main_monster_2': Monster.none, + 'location': LocationType.QUEST_LOCATION_WATER_ARENA_2, + 'quest_rank': QuestRankType.star_1, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_NONE, + 'resources': ResourcesType.arena, + 'supply_set_number': 0, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 0x0017, + 'summon': 0x00000000, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.royal_ludroth, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x01, + 'level': 0x17, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_2': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000101, + 'objective_type': Monster.royal_ludroth, + 'objective_num': 0x01, + 'zenny_reward': 1000, + 'hrp_reward': 0, + 'rewards_row_1': [ + (ItemsType.r_ludroth_coin, 1, 24), + (ItemsType.r_ludroth_coin, 2, 8), + (ItemsType.voucher, 1, 10), + (ItemsType.armor_sphere, 1, 24), + (ItemsType.steel_eg, 1, 18), + (ItemsType.pinnacle_coin, 1, 16) + ], + 'rewards_row_2': [], + }, + 'subquest_1': { + 'description': "None", + 'type': 0x00000000, + 'objective_type': Monster.none, + 'objective_num': 0x00, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + 'subquest_2': { + 'description': "None", + 'type': 0x00000000, + 'objective_type': Monster.none, + 'objective_num': 0x00, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + }, + 'unknown': { + # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + }, + 'arena_equipment': ( + ( + (EquipmentClasses.SnS, SnS.HydraKnife), + None, None, + Helmet.QurupecoHelm, Chestpiece.QurupecoMail, + Gauntlets.BlastBracelet, Faulds.SteelFaulds, + Leggings.IngotGreaves, + ((ItemsType.whetstone, 20), (ItemsType.potion, 10), + (ItemsType.ration, 10), (ItemsType.oxygen_supply, 10), + (ItemsType.lifepowder, 2), (ItemsType.barrel_bomb_l, 3), + (ItemsType.barrel_bomb_s, 10)), + () + ), + ( + (EquipmentClasses.Greatsword, Greatsword.ChieftainsGrtSwd), + None, None, + Helmet.DrawEarring, Chestpiece.SteelMail, + Gauntlets.GobulVambraces, Faulds.GobulFaulds, + Leggings.HuntersGreaves, + ((ItemsType.whetstone, 20), (ItemsType.potion, 10), + (ItemsType.ration, 10), (ItemsType.oxygen_supply, 10), + (ItemsType.might_pill, 2), (ItemsType.shock_trap, 1), + (ItemsType.ez_flash_bomb, 1)), + () + ), + ( + (EquipmentClasses.Hammer, Hammer.BoneBludgeon), + None, None, + Helmet.BarrothHelm, Chestpiece.BarrothMail, + Gauntlets.AlloyVambraces, Faulds.BarrothFaulds, + Leggings.BarrothGreaves, + ((ItemsType.whetstone, 20), (ItemsType.potion, 10), + (ItemsType.ration, 10), (ItemsType.oxygen_supply, 10), + (ItemsType.paralysis_knife, 5), (ItemsType.ez_flash_bomb, 1)), + () + ), + ( + (EquipmentClasses.BowgunFrame, BowgunFrame.RoyalLauncher), + (EquipmentClasses.BowgunBarrel, BowgunBarrel.JaggidFire), + (EquipmentClasses.BowgunStock, BowgunStock.LightBowgun), + Helmet.AlloyCap, Chestpiece.AlloyVest, + Gauntlets.LagiacrusGuards, Faulds.AlloyCoat, + Leggings.PiscineLeggings, + ((ItemsType.potion, 10), (ItemsType.ration, 10), + (ItemsType.oxygen_supply, 10), (ItemsType.lifepowder, 2), + (ItemsType.shock_trap, 1), (ItemsType.barrel_bomb_l_plus, 2), + (ItemsType.barrel_bomb_l, 2)), + ((ItemsType.normal_s_lv2, 99), (ItemsType.pierce_s_lv1, 60), + (ItemsType.pierce_s_lv2, 50), (ItemsType.clust_s_lv1, 5), + (ItemsType.poison_s_lv1, 12), (ItemsType.para_s_lv1, 12)) + ) + ) +} + +GRUDGE_MATCH_RATHIAN = { + 'small_monsters': [ + [ + # Area 0 + ], + [ + # Area 1 + { + 'type': Monster.fly_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 3,'room': 1,'quantity': -1, + 'pos_x': -2404.5,'pos_y': -5038.5,'pos_z': -3542.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + ], + ], + 'quest_info': { + 'quest_id': 0xEA62, + 'name': "Grudge Match: Rathian", + 'client': "Announcer/Receptionist", + 'description': "Slay a Rathian", + 'details': + "Hey there, fight fanatics!\n" + "Tonight's target is the Queen of\n" + "the Land, Rathian! A fan of\n" + "flame attacks, she also packs a\n" + "potent charge from on high!\n" + "Hunters better wear asbestos\n" + "underwear for this fight!", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 0, 0, 0, 0, 1, 0, 0), + (1, 0, 0, 0, 1, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 0, 0, 1, 0, 1, 0) + ), + 'penalty_per_cart': 350, + 'quest_fee': 0, + 'time_limit': 50, + 'main_monster_1': Monster.none, + 'main_monster_2': Monster.none, + 'location': LocationType.QUEST_LOCATION_LAND_ARENA_1, + 'quest_rank': QuestRankType.star_2, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_NONE, + 'resources': ResourcesType.arena, + 'supply_set_number': 0, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 0x001a, + 'summon': 0x00000000, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.rathian, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x01, + 'level': 0x1a, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_2': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000101, + 'objective_type': Monster.rathian, + 'objective_num': 0x01, + 'zenny_reward': 1000, + 'hrp_reward': 0, + 'rewards_row_1': [ + (ItemsType.rathian_coin, 1, 21), + (ItemsType.rathian_coin, 2, 7), + (ItemsType.voucher, 1, 13), + (ItemsType.armor_sphere_plus, 1, 8), + (ItemsType.armor_sphere, 1, 14), + (ItemsType.steel_eg, 1, 19), + (ItemsType.pinnacle_coin, 1, 18) + ], + 'rewards_row_2': [], + }, + 'subquest_1': { + 'description': "None", + 'type': 0x00000000, + 'objective_type': Monster.none, + 'objective_num': 0x00, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + 'subquest_2': { + 'description': "None", + 'type': 0x00000000, + 'objective_type': Monster.none, + 'objective_num': 0x00, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + }, + 'unknown': { + # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + }, + 'arena_equipment': ( + ( + (EquipmentClasses.Switchaxe, Switchaxe.RoughEdge), + None, None, + Helmet.SilenceEarring, Chestpiece.BoneMail, + Gauntlets.BariothVambraces, Faulds.BariothFaulds, + Leggings.BariothGreaves, + ((ItemsType.whetstone, 20), (ItemsType.mega_potion, 10), + (ItemsType.ration, 10), (ItemsType.lifepowder, 2), + (ItemsType.antidote, 2), (ItemsType.dung_bomb, 1), + (ItemsType.ez_flash_bomb, 2), (ItemsType.ez_barrel_bomb_l, 1), + (ItemsType.barrel_bomb_s, 2)), + () + ), + ( + (EquipmentClasses.Longsword, Longsword.Thunderclap), + None, None, + Helmet.ChargeEarring, Chestpiece.RathianMail, + Gauntlets.RathianVambraces, Faulds.IngotCoil, + Leggings.QurupecoGreaves, + ((ItemsType.whetstone, 20), (ItemsType.mega_potion, 10), + (ItemsType.ration, 10), (ItemsType.lifepowder, 2), + (ItemsType.antidote, 2), (ItemsType.dung_bomb, 1), + (ItemsType.ez_shock_trap, 1), (ItemsType.ez_flash_bomb, 1), + (ItemsType.barrel_bomb_l, 2), (ItemsType.barrel_bomb_s, 2)), + () + ), + ( + (EquipmentClasses.Lance, Lance.AzureCrest), + None, None, + Helmet.GigginoxHelm, Chestpiece.GigginoxMail, + Gauntlets.AgnaktorVambraces, Faulds.BnahabraCoil, + Leggings.BnahabraBoots, + ((ItemsType.whetstone, 20), (ItemsType.mega_potion, 10), + (ItemsType.ration, 10), (ItemsType.antidote, 2), + (ItemsType.lifepowder, 2), (ItemsType.dung_bomb, 1), + (ItemsType.firedouse_berry, 2), (ItemsType.ez_flash_bomb, 1), + (ItemsType.barrel_bomb_l, 1), (ItemsType.barrel_bomb_s, 2)), + () + ), + ( + (EquipmentClasses.BowgunFrame, BowgunFrame.HeavyBowgun), + (EquipmentClasses.BowgunBarrel, BowgunBarrel.JaggidFire), + (EquipmentClasses.BowgunStock, BowgunStock.HeavyBowgun), + Helmet.BoneCap, Chestpiece.IngotVest, + Gauntlets.IngotGuards, Faulds.BoneCoat, + Leggings.AlloyLeggings, + ((ItemsType.mega_potion, 10), (ItemsType.ration, 10), + (ItemsType.antidote, 2), (ItemsType.lifepowder, 2), + (ItemsType.dung_bomb, 1), (ItemsType.barrel_bomb_l, 1)), + ((ItemsType.normal_s_lv2, 99), (ItemsType.pierce_s_lv1, 60), + (ItemsType.clust_s_lv1, 5), (ItemsType.wyvernfire_lv1, 9), + (ItemsType.para_s_lv1, 12), (ItemsType.sleep_s_lv1, 12), + (ItemsType.exhaust_s, 10)), + ) + ) +} + +GRUDGE_MATCH_LAGIACRUS = { + 'small_monsters': [ + [ + # Area 0 + ], + [ + # Area 1 + { + 'type': Monster.fly_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 3,'room': 1,'quantity': -1, + 'pos_x': -0.5,'pos_y': -5038.5,'pos_z': -3042.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + ], + ], + 'quest_info': { + 'quest_id': 0xEA63, + 'name': "Grudge Match: Lagiacrus", + 'client': "Announcer/Receptionist", + 'description': "Slay a Lagiacrus", + 'details': + "Wanted:\n" + "The description for this\n" + "quest! If you can find\n" + "it, please let us know!\n" + "Thanks!", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 0, 0, 0, 0, 1, 0, 0), + (1, 0, 0, 0, 1, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 0, 0, 1, 0, 1, 0) + ), + 'penalty_per_cart': 350, + 'quest_fee': 0, + 'time_limit': 50, + 'main_monster_1': Monster.none, + 'main_monster_2': Monster.none, + 'location': LocationType.QUEST_LOCATION_WATER_ARENA_2, + 'quest_rank': QuestRankType.star_2, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_NONE, + 'resources': ResourcesType.arena, + 'supply_set_number': 0, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 0x0017, + 'summon': 0x00000000, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.lagiacrus, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x01, + 'level': 0x17, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_2': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000101, + 'objective_type': Monster.lagiacrus, + 'objective_num': 0x01, + 'zenny_reward': 1000, + 'hrp_reward': 0, + 'rewards_row_1': [ + (ItemsType.lagiacrus_coin, 1, 21), + (ItemsType.lagiacrus_coin, 2, 7), + (ItemsType.voucher, 1, 13), + (ItemsType.armor_sphere_plus, 1, 8), + (ItemsType.armor_sphere, 1, 13), + (ItemsType.steel_eg, 1, 20), + (ItemsType.pinnacle_coin, 1, 18) + ], + 'rewards_row_2': [], + }, + 'subquest_1': { + 'description': "None", + 'type': 0x00000000, + 'objective_type': Monster.none, + 'objective_num': 0x00, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + 'subquest_2': { + 'description': "None", + 'type': 0x00000000, + 'objective_type': Monster.none, + 'objective_num': 0x00, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + }, + 'unknown': { + # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + }, + 'arena_equipment': ( + ( + (EquipmentClasses.Switchaxe, Switchaxe.BlitzkriegB), + None, None, + Helmet.SilenceEarring, Chestpiece.LagiacrusMail, + Gauntlets.UpstreamBracelet, Faulds.LagiacrusFaulds, + Leggings.LagiacrusGreaves, + ((ItemsType.whetstone, 20), (ItemsType.mega_potion, 10), + (ItemsType.ration, 10), (ItemsType.mini_oxy_supply, 10), + (ItemsType.stormsender_seed, 2), (ItemsType.lifepowder, 2), + (ItemsType.poison_knife, 5), (ItemsType.flash_bomb, 2), + (ItemsType.barrel_bomb_l, 3), (ItemsType.barrel_bomb_s, 2)), + () + ), + ( + (EquipmentClasses.Longsword, Longsword.WyvernBladeFire), + None, None, + Helmet.BariothHelm, Chestpiece.BariothMail, + Gauntlets.BariothVambraces, Faulds.ChainmailBelt, + Leggings.ChainmailPants, + ((ItemsType.whetstone, 20), (ItemsType.mega_potion, 10), + (ItemsType.ration, 10), (ItemsType.mini_oxy_supply, 10), + (ItemsType.lifepowder, 2), (ItemsType.sleep_knife, 5), + (ItemsType.shock_trap, 1)), + () + ), + ( + (EquipmentClasses.Lance, Lance.SmaltCraterR), + None, None, + Helmet.DemonEdgeEarring, Chestpiece.BarrothMail, + Gauntlets.RathalosVambraces, Faulds.RathalosFaulds, + Leggings.RathalosGreaves, + ((ItemsType.whetstone, 20), (ItemsType.mega_potion, 10), + (ItemsType.ration, 10), (ItemsType.mini_oxy_supply, 10), + (ItemsType.lifepowder, 2), (ItemsType.might_seed, 3), + (ItemsType.shock_trap, 1), (ItemsType.flash_bomb, 1), + (ItemsType.barrel_bomb_l, 2), (ItemsType.barrel_bomb_s, 2)), + () + ), + ( + (EquipmentClasses.BowgunFrame, BowgunFrame.TropecoGun), + (EquipmentClasses.BowgunBarrel, BowgunBarrel.TropecoGun), + (EquipmentClasses.BowgunStock, BowgunStock.TropecoGun), + Helmet.JumpEarring, Chestpiece.LudrothVest, + Gauntlets.LudrothGuards, Faulds.GigginoxCoat, + Leggings.LudrothLeggings, + ((ItemsType.mega_potion, 10), (ItemsType.ration, 10), + (ItemsType.mini_oxy_supply, 10), (ItemsType.lifepowder, 2), + (ItemsType.ez_barrel_bomb_l, 2)), + ((ItemsType.normal_s_lv2, 99), (ItemsType.normal_s_lv3, 99), + (ItemsType.crag_s_lv1, 9), (ItemsType.recov_s_lv1, 12), + (ItemsType.poison_s_lv1, 12), (ItemsType.para_s_lv1, 12), + (ItemsType.flaming_s, 60)) + ) + ) +} + +GRUDGE_MATCH_URAGAAN = { + 'small_monsters': [ + [ + # Area 0 + ], + [ + # Area 1 + { + 'type': Monster.fly_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 3,'room': 1,'quantity': -1, + 'pos_x': -2404.5,'pos_y': -5038.5,'pos_z': -3542.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type':Monster.fly_wyv, 'unk1': 3, 'unk2': 0xFF, + 'variant': 8, 'room': 1, 'quantity': -1, + 'pos_x': -2404.5,'pos_y': -5038.5,'pos_z': -3542.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type':Monster.fly_wyv, 'unk1': 3, 'unk2': 0xFF, + 'variant': 8, 'room': 1, 'quantity': -1, + 'pos_x': -1404.5,'pos_y': -5038.5,'pos_z': -3542.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type':Monster.fly_wyv, 'unk1': 3, 'unk2': 0xFF, + 'variant': 8, 'room': 1, 'quantity': -1, + 'pos_x': -3404.5,'pos_y': -5038.5,'pos_z': -3542.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type':Monster.fly_wyv, 'unk1': 3, 'unk2': 0xFF, + 'variant': 8, 'room': 1, 'quantity': -1, + 'pos_x': -5404.5,'pos_y': -5038.5,'pos_z': -3542.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type':Monster.fly_wyv, 'unk1': 3, 'unk2': 0xFF, + 'variant': 8, 'room': 1, 'quantity': -1, + 'pos_x': -4404.5,'pos_y': -5038.5,'pos_z': -3542.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type':Monster.fly_wyv, 'unk1': 3, 'unk2': 0xFF, + 'variant': 8, 'room': 1, 'quantity': -1, + 'pos_x': -2404.5,'pos_y': -4038.5,'pos_z': -3542.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + ], + ], + 'quest_info': { + 'quest_id': 0xEA64, + 'name': "Grudge Match: Uragaan", + 'client': "Announcer/Receptionist", + 'description': "Slay an Uragaan", + 'details': + "Riled up, fight fans? Here comes\n" + "a dragon whose name is\n" + "synonymous with pain: Uragaan!\n" + "Oh, and we've added a time limit\n" + "to make the fight extra fun. Are\n" + "the hunters up to the challenge?\n" + "Outlook not good!", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 0, 0, 0, 0, 1, 0, 0), + (1, 0, 0, 0, 1, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 0, 0, 1, 0, 1, 0) + ), + 'penalty_per_cart': 600, + 'quest_fee': 0, + 'time_limit': 50, + 'main_monster_1': Monster.none, + 'main_monster_2': Monster.none, + 'location': LocationType.QUEST_LOCATION_LAND_ARENA_1, + 'quest_rank': QuestRankType.star_2, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_NONE, + 'resources': ResourcesType.arena, + 'supply_set_number': 0, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 0x0017, + 'summon': 0x00000000, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.uragaan, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x01, + 'level': 0x17, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_2': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000101, + 'objective_type': Monster.uragaan, + 'objective_num': 0x01, + 'zenny_reward': 1500, + 'hrp_reward': 0, + 'rewards_row_1': [ + (ItemsType.uragaan_coin, 1, 19), + (ItemsType.uragaan_coin, 2, 7), + (ItemsType.voucher, 1, 14), + (ItemsType.armor_sphere_plus, 1, 8), + (ItemsType.armor_sphere, 1, 12), + (ItemsType.steel_eg, 1, 20), + (ItemsType.pinnacle_coin, 1, 20) + ], + 'rewards_row_2': [], + }, + 'subquest_1': { + 'description': "None", + 'type': 0x00000000, + 'objective_type': Monster.none, + 'objective_num': 0x00, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + 'subquest_2': { + 'description': "None", + 'type': 0x00000000, + 'objective_type': Monster.none, + 'objective_num': 0x00, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + }, + 'unknown': { + # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + }, + 'arena_equipment': ( + ( + (EquipmentClasses.SnS, SnS.ShadowSaberPlus), + None, None, + Helmet.RathianHelm, Chestpiece.BnahabraSuit, + Gauntlets.GigginoxVambraces, Faulds.BnahabraCoil, + Leggings.BnahabraBoots, + ((ItemsType.whetstone, 20), (ItemsType.mega_potion, 10), + (ItemsType.potion, 10), (ItemsType.ration, 10), + (ItemsType.firedouse_berry, 2), (ItemsType.lifepowder, 2), + (ItemsType.shock_trap, 1), (ItemsType.ez_flash_bomb, 2), + (ItemsType.barrel_bomb_l, 3), (ItemsType.barrel_bomb_s, 2)), + () + ), + ( + (EquipmentClasses.Longsword, Longsword.AnantaBonebladePlus), + None, None, + Helmet.SwordSaintEarring, Chestpiece.AgnaktorMail, + Gauntlets.GrinderBracelet, Faulds.RathalosFaulds, + Leggings.AgnaktorGreaves, + ((ItemsType.whetstone, 20), (ItemsType.mega_potion, 10), + (ItemsType.potion, 10), (ItemsType.ration, 10), + (ItemsType.lifepowder, 2), (ItemsType.paralysis_knife, 5), + (ItemsType.pitfall_trap, 1), (ItemsType.ez_flash_bomb, 1), + (ItemsType.ez_barrel_bomb_l, 2), (ItemsType.barrel_bomb_s, 2)), + () + ), + ( + (EquipmentClasses.Hammer, Hammer.CarapaceHammerPlus), + None, None, + Helmet.DiablosHelm, Chestpiece.DiablosMail, + Gauntlets.PepBracelet, Faulds.HuntersFaulds, + Leggings.UragaanGreaves, + ((ItemsType.whetstone, 20), (ItemsType.mega_potion, 10), + (ItemsType.potion, 10), (ItemsType.ration, 10), + (ItemsType.dash_juice, 1), (ItemsType.ez_flash_bomb, 1), + (ItemsType.ez_barrel_bomb_l, 1), (ItemsType.barrel_bomb_s, 1)), + () + ), + ( + (EquipmentClasses.BowgunFrame, BowgunFrame.JaggidFire), + (EquipmentClasses.BowgunBarrel, BowgunBarrel.RoyalLauncher), + (EquipmentClasses.BowgunStock, BowgunStock.Thundacrus), + Helmet.BarrageEarring, Chestpiece.RathianVest, + Gauntlets.RathianGuards, Faulds.RathianCoat, + Leggings.RathianLeggings, + ((ItemsType.mega_potion, 10), (ItemsType.potion, 10), + (ItemsType.ration, 10), (ItemsType.lifepowder, 2), + (ItemsType.barrel_bomb_l, 2)), + ((ItemsType.normal_s_lv2, 99), (ItemsType.pierce_s_lv1, 60), + (ItemsType.pierce_s_lv2, 50), (ItemsType.crag_s_lv2, 9), + (ItemsType.water_s, 30)), + ) + ) +} + +GRUDGE_MATCH_WYVERN_TRIO = { + 'small_monsters': [ + [ + # Area 0 + ], + [ + # Area 1 + { + 'type': Monster.fly_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 3,'room': 1,'quantity': -1, + 'pos_x': -2404.5,'pos_y': -5038.5,'pos_z': -3542.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + ], + ], + 'quest_info': { + 'quest_id': 0xEA65, + 'name': "Grudge Match: Wyvern Trio", + 'client': "Announcer/Receptionist", + 'description': "Slay all 3 monsters", + 'details': + "Wanted:\n" + "The description for this\n" + "quest! If you can find\n" + "it, please let us know!\n" + "Thanks!", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 0, 1, 0, 0, 1, 0, 0), + (1, 0, 0, 0, 1, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 0, 0, 1, 0, 1, 0) + ), + 'penalty_per_cart': 1200, + 'quest_fee': 0, + 'time_limit': 50, + 'main_monster_1': Monster.none, + 'main_monster_2': Monster.none, + 'location': LocationType.QUEST_LOCATION_LAND_ARENA_1, + 'quest_rank': QuestRankType.star_3, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_NONE, + 'resources': ResourcesType.arena, + 'supply_set_number': 0, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 0x0028, + 'summon': 0x00000000, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.barroth, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x01, + 'level': 0x28, + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_2': { + 'type': Monster.barioth, + 'starting_area': 0x00, + 'boss_id': 0x01, + 'spawn_count': 0x01, + 'level': 0x28, + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_3': { + 'type': Monster.rathalos, + 'starting_area': 0x00, + 'boss_id': 0x02, + 'spawn_count': 0x01, + 'level': 0x28, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00020101, + 'objective_type': Monster.barroth, + 'objective_num': 0x01, + 'zenny_reward': 3000, + 'hrp_reward': 0, + 'rewards_row_1': [ + (ItemsType.barroth_coin, 1, 5), + (ItemsType.barioth_coin, 1, 15), + (ItemsType.rathalos_coin, 1, 22), + (ItemsType.voucher, 1, 14), + (ItemsType.armor_sphere_plus, 1, 12), + (ItemsType.silver_eg, 1, 8), + (ItemsType.pinnacle_coin, 1, 24) + ], + 'rewards_row_2': [], + }, + 'subquest_1': { + 'description': "None", + 'type': 0x00020101, + 'objective_type': Monster.barioth, + 'objective_num': 0x01, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + 'subquest_2': { + 'description': "None", + 'type': 0x00020101, + 'objective_type': Monster.rathalos, + 'objective_num': 0x01, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + }, + 'unknown': { + # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + }, + 'arena_equipment': ( + ( + (EquipmentClasses.Switchaxe, Switchaxe.BoltAxe), + None, None, + Helmet.ChargeEarring, Chestpiece.RathalosMail, + Gauntlets.RathalosVambraces, Faulds.RathalosFaulds, + Leggings.RathalosGreaves, + ((ItemsType.whetstone, 20), (ItemsType.mega_potion, 10), + (ItemsType.potion, 10), (ItemsType.ration, 10), + (ItemsType.cleanser, 5), (ItemsType.antidote, 2), + (ItemsType.lifepowder, 3), (ItemsType.dung_bomb, 1), + (ItemsType.pitfall_trap, 1), (ItemsType.shock_trap, 1), + (ItemsType.ez_flash_bomb, 2), (ItemsType.ez_barrel_bomb_l, 2), + (ItemsType.barrel_bomb_s, 2)), + () + ), + ( + (EquipmentClasses.Greatsword, Greatsword.GolemBladePlus), + None, None, + Helmet.UragaanHelm, Chestpiece.UragaanMail, + Gauntlets.UragaanVambraces, Faulds.UragaanFaulds, + Leggings.UragaanGreaves, + ((ItemsType.whetstone, 20), (ItemsType.mega_potion, 10), + (ItemsType.potion, 10), (ItemsType.ration, 10), + (ItemsType.cleanser, 5), (ItemsType.antidote, 2), + (ItemsType.lifepowder, 3), (ItemsType.dung_bomb, 1), + (ItemsType.paralysis_knife, 5), (ItemsType.shock_trap, 1), + (ItemsType.ez_flash_bomb, 2), (ItemsType.ez_barrel_bomb_l, 2), + (ItemsType.barrel_bomb_s, 2)), + () + ), + ( + (EquipmentClasses.Lance, Lance.GobuluMurukaPlus), + None, None, + Helmet.AgnaktorHelm, Chestpiece.AgnaktorMail, + Gauntlets.RathalosVambraces, Faulds.AgnaktorFaulds, + Leggings.AgnaktorGreaves, + ((ItemsType.whetstone, 20), (ItemsType.mega_potion, 10), + (ItemsType.potion, 10), (ItemsType.ration, 10), + (ItemsType.cleanser, 5), (ItemsType.antidote, 2), + (ItemsType.lifepowder, 3), (ItemsType.dung_bomb, 1), + (ItemsType.shock_trap, 1), (ItemsType.ez_shock_trap, 1), + (ItemsType.ez_flash_bomb, 1)), + () + ), + ( + (EquipmentClasses.BowgunFrame, BowgunFrame.Agnablaster), + (EquipmentClasses.BowgunBarrel, BowgunBarrel.Thundacrus), + (EquipmentClasses.BowgunStock, BowgunStock.RathlingGun), + Helmet.KirinEarring, Chestpiece.BariothVest, + Gauntlets.BariothGuards, Faulds.BariothCoat, + Leggings.BariothLeggings, + ((ItemsType.mega_potion, 10), (ItemsType.potion, 10), + (ItemsType.ration, 10), (ItemsType.cleanser, 5), + (ItemsType.antidote, 2), (ItemsType.lifepowder, 3), + (ItemsType.dung_bomb, 1), (ItemsType.pitfall_trap, 1), + (ItemsType.ez_barrel_bomb_l, 2), (ItemsType.ez_flash_bomb, 2), + (ItemsType.flaming_s, 60), (ItemsType.thunder_s, 60)), + ((ItemsType.normal_s_lv2, 99), (ItemsType.pierce_s_lv2, 50), + (ItemsType.pellet_s_lv1, 60), (ItemsType.pellet_s_lv2, 60), + (ItemsType.clust_s_lv2, 5), (ItemsType.clust_s_lv3, 5), + (ItemsType.wyvernfire_lv2, 10), (ItemsType.para_s_lv1, 12), + (ItemsType.demon_s_ii, 5)) + ) + ) +} + +GRUDGE_MATCH_BIRD_BRUTE = { + 'small_monsters': [ + [ + # Area 0 + ], + [ + # Area 1 + { + 'type': Monster.fly_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 3,'room': 1,'quantity': -1, + 'pos_x': -2404.5,'pos_y': -5038.5,'pos_z': -3542.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + ], + ], + 'quest_info': { + 'quest_id': 0xEA66, + 'name': "Grudge Match: Bird and Brute", + 'client': "Announcer/Receptionist", + 'description': + "Slay a Qurupeco\n" + "and a Barroth", + 'details': + "Double trouble! It's the\n" + "dirty-bird Qurupeco and the\n" + "land dragon Barroth -- heaven\n" + "and earth, laughter and tears,\n" + "in an ultimate contest! When\n" + "the dust clears, will it\n" + "reveal victory? Or tragedy?", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 1, 0, 0, 0, 1, 0, 0), + (1, 0, 0, 0, 1, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 0, 0, 1, 0, 1, 0) + ), + 'penalty_per_cart': 350, + 'quest_fee': 0, + 'time_limit': 50, + 'main_monster_1': Monster.none, + 'main_monster_2': Monster.none, + 'location': LocationType.QUEST_LOCATION_LAND_ARENA_1, + 'quest_rank': QuestRankType.star_4, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_31_INITJOIN, + 'resources': ResourcesType.arena, + 'supply_set_number': 0, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 0x0037, + 'summon': 0x00000000, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.qurupeco, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x01, + 'level': 0x37, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_2': { + 'type': Monster.barroth, + 'starting_area': 0x00, + 'boss_id': 0x01, + 'spawn_count': 0x01, + 'level': 0x37, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000101, + 'objective_type': Monster.qurupeco, + 'objective_num': 0x01, + 'zenny_reward': 1000, + 'hrp_reward': 0, + 'rewards_row_1': [ + (ItemsType.qurupeco_coin, 1, 16), + (ItemsType.barroth_coin, 1, 20), + (ItemsType.voucher, 1, 14), + (ItemsType.armor_sphere_plus, 1, 10), + (ItemsType.adv_armor_sphere, 1, 5), + (ItemsType.steel_eg, 1, 15), + (ItemsType.silver_eg, 1, 5), + (ItemsType.hunter_king_coin, 1, 15) + ], + 'rewards_row_2': [], + }, + 'subquest_1': { + 'description': "None", + 'type': 0x00000101, + 'objective_type': Monster.barroth, + 'objective_num': 0x01, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + 'subquest_2': { + 'description': "None", + 'type': 0x00000000, + 'objective_type': Monster.none, + 'objective_num': 0x00, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + }, + 'unknown': { + # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + }, + 'arena_equipment': ( + ( + (EquipmentClasses.Switchaxe, Switchaxe.AssaultAxePlus), + None, None, + Helmet.GigginoxCapPlus, Chestpiece.AlloyMail, + Gauntlets.BaggiVambracesPlus, Faulds.GigginoxFauldsPlus, + Leggings.GigginoxGreaves, + ((ItemsType.potion, 10), (ItemsType.mega_potion, 10), + (ItemsType.whetstone, 20), (ItemsType.ration, 10), + (ItemsType.cleanser, 5), (ItemsType.barrel_bomb_l, 2), + (ItemsType.lifepowder, 1), (ItemsType.ez_shock_trap, 1), + (ItemsType.ez_flash_bomb, 2)), + () + ), + ( + (EquipmentClasses.Greatsword, Greatsword.CataclysmSword), + None, None, + Helmet.DrawEarring, Chestpiece.JaggiMailPlus, + Gauntlets.JaggiVambracesPlus, Faulds.JaggiFauldsPlus, + Leggings.BoneGreavesPlus, + ((ItemsType.potion, 10), (ItemsType.mega_potion, 10), + (ItemsType.whetstone, 20), (ItemsType.ration, 10), + (ItemsType.cleanser, 5), (ItemsType.barrel_bomb_l, 3), + (ItemsType.barrel_bomb_s, 2), (ItemsType.pitfall_trap, 1), + (ItemsType.ez_flash_bomb, 2)), + () + ), + ( + (EquipmentClasses.Lance, Lance.Undertaker), + None, None, + Helmet.DiablosCap, Chestpiece.AgnaktorMailPlus, + Gauntlets.SteelVambracesPlus, Faulds.SteelCoilPlus, + Leggings.AlloyGreaves, + ((ItemsType.potion, 10), (ItemsType.mega_potion, 10), + (ItemsType.whetstone, 20), (ItemsType.ration, 10), + (ItemsType.cleanser, 5), (ItemsType.barrel_bomb_l, 2), + (ItemsType.ez_flash_bomb, 1)), + () + ), + ( + (EquipmentClasses.BowgunFrame, BowgunFrame.PoisonStinger), + (EquipmentClasses.BowgunBarrel, BowgunBarrel.RathlingGunPlus), + (EquipmentClasses.BowgunStock, BowgunStock.LightBowgun), + Helmet.AgnaktorCapPlus, Chestpiece.AgnaktorVestPlus, + Gauntlets.AgnaktorGuardsPlus, Faulds.AgnaktorCoatPlus, + Leggings.RathalosLeggingsPlus, + ((ItemsType.potion, 10), (ItemsType.mega_potion, 10), + (ItemsType.ration, 10), (ItemsType.cleanser, 5), + (ItemsType.lifepowder, 2), (ItemsType.ez_flash_bomb, 1), + (ItemsType.sonic_bomb, 2)), + ((ItemsType.normal_s_lv2, 99), (ItemsType.normal_s_lv3, 99), + (ItemsType.pierce_s_lv2, 50), (ItemsType.clust_s_lv2, 5), + (ItemsType.crag_s_lv2, 9), (ItemsType.poison_s_lv1, 12), + (ItemsType.para_s_lv1, 12), (ItemsType.sleep_s_lv1, 12)) + ) + ) +} + +GRUDGE_MATCH_SEA_POWER = { + 'small_monsters': [ + [ + # Area 0 + ], + [ + # Area 1 + { + 'type': Monster.fly_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 3,'room': 1,'quantity': -1, + 'pos_x': -0.5,'pos_y': -5038.5,'pos_z': -3042.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + ], + ], + 'quest_info': { + 'quest_id': 0xEA67, + 'name': "Grudge Match: Sea Power", + 'client': "Announcer/Receptionist", + 'description': + "Slay a Royal Ludroth\n" + "and a Gobul", + 'details': + "Wanted:\n" + "The description for this\n" + "quest! If you can find\n" + "it, please let us know!\n" + "Thanks!", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 1, 0, 0, 0, 1, 0, 0), + (1, 0, 0, 0, 1, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 0, 0, 1, 0, 1, 0) + ), + 'penalty_per_cart': 350, + 'quest_fee': 0, + 'time_limit': 50, + 'main_monster_1': Monster.none, + 'main_monster_2': Monster.none, + 'location': LocationType.QUEST_LOCATION_WATER_ARENA_2, + 'quest_rank': QuestRankType.star_4, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_31_INITJOIN, + 'resources': ResourcesType.arena, + 'supply_set_number': 0, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 0x0037, + 'summon': 0x00000000, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.royal_ludroth, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x01, + 'level': 0x37, # 0x01 through 0x3c 0x17, 0x37, or 0x3a + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_2': { + 'type': Monster.gobul, + 'starting_area': 0x00, + 'boss_id': 0x01, + 'spawn_count': 0x01, + 'level': 0x37, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000101, + 'objective_type': Monster.royal_ludroth, + 'objective_num': 0x01, + 'zenny_reward': 1000, + 'hrp_reward': 0, + 'rewards_row_1': [ + (ItemsType.gobul_coin, 1, 10), + (ItemsType.r_ludroth_coin, 2, 23), + (ItemsType.voucher, 1, 14), + (ItemsType.armor_sphere_plus, 1, 10), + (ItemsType.adv_armor_sphere, 1, 6), + (ItemsType.steel_eg, 1, 16), + (ItemsType.silver_eg, 1, 6), + (ItemsType.hunter_king_coin, 1, 15) + ], + 'rewards_row_2': [], + }, + 'subquest_1': { + 'description': "None", + 'type': 0x00000101, + 'objective_type': Monster.gobul, + 'objective_num': 0x01, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + 'subquest_2': { + 'description': "None", + 'type': 0x00000000, + 'objective_type': Monster.none, + 'objective_num': 0x00, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + }, + 'unknown': { + # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + }, + 'arena_equipment': ( + ( + (EquipmentClasses.Switchaxe, Switchaxe.VoltAxeY), + None, None, + Helmet.PiscineMaskPlus, Chestpiece.LagiacrusMailPlus, + Gauntlets.BaggiVambracesPlus, Faulds.PiscineBeltPlus, + Leggings.PiscineLeggingsPlus, + ((ItemsType.mega_potion, 10), (ItemsType.whetstone, 20), + (ItemsType.ration, 10), (ItemsType.mini_oxy_supply, 10), + (ItemsType.lifepowder, 2), (ItemsType.shock_trap, 1), + (ItemsType.ez_flash_bomb, 2)), + () + ), + ( + (EquipmentClasses.Longsword, Longsword.DancingHellfire), + None, None, + Helmet.RathianHelmPlus, Chestpiece.RathianMailPlus, + Gauntlets.ChainmailVambracesPlus, Faulds.AlloyCoil, + Leggings.AlloyGreaves, + ((ItemsType.mega_potion, 10), (ItemsType.whetstone, 20), + (ItemsType.ration, 10), (ItemsType.mini_oxy_supply, 10), + (ItemsType.lifepowder, 2), (ItemsType.barrel_bomb_l, 2), + (ItemsType.barrel_bomb_s, 2), (ItemsType.ez_flash_bomb, 3)), + () + ), + ( + (EquipmentClasses.Hammer, Hammer.CarapaceHammerPlus), + None, None, + Helmet.StimulusEarring, Chestpiece.DoberMail, + Gauntlets.DoberVambraces, Faulds.BoneFauldsPlus, + Leggings.BoneGreavesPlus, + ((ItemsType.mega_potion, 10), (ItemsType.whetstone, 20), + (ItemsType.ration, 10), (ItemsType.mini_oxy_supply, 10), + (ItemsType.lifepowder, 2), (ItemsType.mega_dash_juice, 1), + (ItemsType.paralysis_knife, 5), (ItemsType.shock_trap, 1), + (ItemsType.flash_bomb, 1), (ItemsType.ez_barrel_bomb_l, 1), + (ItemsType.barrel_bomb_l, 3), (ItemsType.barrel_bomb_s, 2), + (ItemsType.powercharm, 1), (ItemsType.powertalon, 1)), + () + ), + ( # rathling gun barrel, rathling gun + frame, rathling gun + stock + (EquipmentClasses.BowgunFrame, BowgunFrame.RathlingGunPlus), + (EquipmentClasses.BowgunBarrel, BowgunBarrel.RathlingGunPlus), # RathlingGun), + (EquipmentClasses.BowgunStock, BowgunStock.RathlingGunPlus), + Helmet.LagiacrusCapPlus, Chestpiece.LagiacrusVestPlus, + Gauntlets.LagiacrusGuardsPlus, Faulds.LagiacrusCoatPlus, + Leggings.LagiacrusLeggingsPlus, + ((ItemsType.mega_potion, 10), (ItemsType.ration, 10), + (ItemsType.mini_oxy_supply, 10), (ItemsType.lifepowder, 2), + (ItemsType.flash_bomb, 2), (ItemsType.shock_trap, 1), + (ItemsType.ez_barrel_bomb_l, 2), (ItemsType.barrel_bomb_l, 2), + (ItemsType.powertalon, 1), (ItemsType.armortalon, 1)), + ((ItemsType.normal_s_lv2, 99), (ItemsType.normal_s_lv3, 99), + (ItemsType.pierce_s_lv2, 50), (ItemsType.wyvernfire_lv2, 10), + (ItemsType.flaming_s, 60)) + ) + ) +} + +GRUDGE_MATCH_TWO_FLAMES = { + 'small_monsters': [ + [ + # Area 0 + ], + [ + # Area 1 + { + 'type': Monster.fly_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 3,'room': 1,'quantity': -1, + 'pos_x': -2404.5,'pos_y': -5038.5,'pos_z': -3542.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + ], + ], + 'quest_info': { + 'quest_id': 0xEA68, + 'name': "Grudge Match: The Two Flames", + 'client': "Announcer/Receptionist", + 'description': + "Slay a Rathalos\n" + "and a Rathian", + 'details': + "Wanted:\n" + "The description for this\n" + "quest! If you can find\n" + "it, please let us know!\n" + "Thanks!", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 1, 0, 0, 0, 1, 0, 0), + (1, 0, 0, 0, 1, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 0, 0, 1, 0, 1, 0) + ), + 'penalty_per_cart': 350, + 'quest_fee': 0, + 'time_limit': 50, + 'main_monster_1': Monster.none, + 'main_monster_2': Monster.none, + 'location': LocationType.QUEST_LOCATION_LAND_ARENA_1, + 'quest_rank': QuestRankType.star_5, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_31_INITJOIN, + 'resources': ResourcesType.arena, + 'supply_set_number': 0, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 0x0037, + 'summon': 0x00000000, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.rathalos, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x01, + 'level': 0x37, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_2': { + 'type': Monster.rathian, + 'starting_area': 0x00, + 'boss_id': 0x01, + 'spawn_count': 0x01, + 'level': 0x37, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000101, + 'objective_type': Monster.rathalos, + 'objective_num': 0x01, + 'zenny_reward': 1000, + 'hrp_reward': 0, + 'rewards_row_1': [ + (ItemsType.rathalos_coin, 1, 10), + (ItemsType.rathian_coin, 1, 24), + (ItemsType.voucher, 1, 14), + (ItemsType.armor_sphere_plus, 1, 10), + (ItemsType.adv_armor_sphere, 1, 5), + (ItemsType.steel_eg, 1, 15), + (ItemsType.silver_eg, 1, 5), + (ItemsType.hunter_king_coin, 1, 17) + ], + 'rewards_row_2': [], + }, + 'subquest_1': { + 'description': "None", + 'type': 0x00000101, + 'objective_type': Monster.rathian, + 'objective_num': 0x01, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + 'subquest_2': { + 'description': "None", + 'type': 0x00000000, + 'objective_type': Monster.none, + 'objective_num': 0x00, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + }, + 'unknown': { + # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + }, + 'arena_equipment': ( + ( + (EquipmentClasses.SnS, SnS.IcicleSpikePlus), + None, None, + Helmet.QurupecoHelmPlus, Chestpiece.QurupecoMailPlus, + Gauntlets.QurupecoVambracesPlus, Faulds.QurupecoCoilPlus, + Leggings.QurupecoGreavesPlus, + ((ItemsType.potion, 10), (ItemsType.mega_potion, 10), + (ItemsType.whetstone, 20), (ItemsType.ration, 10), + (ItemsType.might_pill, 2), (ItemsType.antidote, 2), + (ItemsType.lifepowder, 1), (ItemsType.dung_bomb, 1), + (ItemsType.paralysis_knife, 5), (ItemsType.pitfall_trap, 1), + (ItemsType.ez_flash_bomb, 5), (ItemsType.barrel_bomb_l_plus, 1), + (ItemsType.barrel_bomb_s, 1)), + () + ), + ( + (EquipmentClasses.Longsword, Longsword.Thunderclap), + None, None, + Helmet.SilenceEarring, Chestpiece.AlloyMailPlus, + Gauntlets.SteelVambracesPlus, Faulds.SteelCoilPlus, + Leggings.VangisGreaves, + ((ItemsType.potion, 10), (ItemsType.mega_potion, 10), + (ItemsType.whetstone, 20), (ItemsType.ration, 10), + (ItemsType.antidote, 2), (ItemsType.lifepowder, 1), + (ItemsType.dung_bomb, 1), (ItemsType.ez_flash_bomb, 2)), + () + ), + ( + (EquipmentClasses.Lance, Lance.SpiralLancePlus), + None, None, + Helmet.DemonEdgeEarring, Chestpiece.IngotMailPlus, + Gauntlets.AgnaktorVambracesPlus, Faulds.RhenoplosCoilPlus, + Leggings.IngotGreavesPlus, + ((ItemsType.potion, 10), (ItemsType.mega_potion, 10), + (ItemsType.whetstone, 20), (ItemsType.well_done_steak, 10), + (ItemsType.antidote, 2), (ItemsType.lifepowder, 1), + (ItemsType.dung_bomb, 1), (ItemsType.poison_knife, 5), + (ItemsType.shock_trap, 1), (ItemsType.ez_flash_bomb, 1)), + () + ), + ( + (EquipmentClasses.BowgunFrame, BowgunFrame.ThundacrusRex), + (EquipmentClasses.BowgunBarrel, BowgunBarrel.ThundacrusRex), + (EquipmentClasses.BowgunStock, BowgunStock.BlizzardCannon), + Helmet.EarringofFate, Chestpiece.UragaanVestPlus, + Gauntlets.BlastBracelet, Faulds.UragaanCoatPlus, + Leggings.UragaanLeggingsPlus, + ((ItemsType.potion, 10), (ItemsType.mega_potion, 10), + (ItemsType.ration, 10), (ItemsType.antidote, 2), + (ItemsType.lifepowder, 2), (ItemsType.dung_bomb, 1), + (ItemsType.shock_trap, 1), (ItemsType.ez_shock_trap, 1), + (ItemsType.pitfall_trap, 1), (ItemsType.ez_barrel_bomb_l, 1), + (ItemsType.barrel_bomb_l, 3), (ItemsType.barrel_bomb_s, 10)), + ((ItemsType.normal_s_lv2, 99), (ItemsType.normal_s_lv3, 99), + (ItemsType.pierce_s_lv3, 40), (ItemsType.demon_s_ii, 5), + (ItemsType.thunder_s, 60)) + ) + ) +} + +GRUDGE_MATCH_ICE_AND_FIRE = { + 'small_monsters': [ + [ + # Area 0 + ], + [ + # Area 1 + { + 'type': Monster.fly_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 3,'room': 1,'quantity': -1, + 'pos_x': -2404.5,'pos_y': -5038.5,'pos_z': -3542.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + ], + ], + 'quest_info': { + 'quest_id': 0xEA69, + 'name': "Grudge Match: Ice and Fire", + 'client': "Announcer/Receptionist", + 'description': + "Slay a Barioth\n" + "and an Agnaktor", + 'details': + "Double trouble! The forecast\n" + "today calls for a storm of fire\n" + "and ice -- with a 90 percent\n" + "chance of death -- as you take\n" + "on both Barioth and Agnaktor at\n" + "once! Days like this I just\n" + "wanna stay in bed.", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 1, 0, 0, 0, 1, 0, 0), + (1, 0, 0, 0, 1, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 0, 0, 1, 0, 1, 0) + ), + 'penalty_per_cart': 250, + 'quest_fee': 0, + 'time_limit': 50, + 'main_monster_1': Monster.none, + 'main_monster_2': Monster.none, + 'location': LocationType.QUEST_LOCATION_LAND_ARENA_1, + 'quest_rank': QuestRankType.star_5, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_31_INITJOIN, + 'resources': ResourcesType.arena, + 'supply_set_number': 0, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 0x0037, + 'summon': 0x00000000, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.barioth, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x01, + 'level': 0x37, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_2': { + 'type': Monster.agnaktor, + 'starting_area': 0x00, + 'boss_id': 0x01, + 'spawn_count': 0x01, + 'level': 0x37, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000101, + 'objective_type': Monster.barioth, + 'objective_num': 0x01, + 'zenny_reward': 1500, + 'hrp_reward': 0, + 'rewards_row_1': [ + (ItemsType.agnaktor_coin, 1, 13), + (ItemsType.barioth_coin, 1, 20), + (ItemsType.voucher, 1, 14), + (ItemsType.adv_armor_sphere, 1, 8), + (ItemsType.hrd_armor_sphere, 1, 5), + (ItemsType.steel_eg, 1, 13), + (ItemsType.silver_eg, 1, 8), + (ItemsType.hunter_king_coin, 1, 19) + ], + 'rewards_row_2': [], + }, + 'subquest_1': { + 'description': "None", + 'type': 0x00000101, + 'objective_type': Monster.agnaktor, + 'objective_num': 0x01, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + 'subquest_2': { + 'description': "None", + 'type': 0x00000000, + 'objective_type': Monster.none, + 'objective_num': 0x00, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + }, + 'unknown': { + # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + }, + 'arena_equipment': ( + ( + (EquipmentClasses.SnS, SnS.BlazingFalchion), + None, None, + Helmet.GobulHelmPlus, Chestpiece.GobulMailPlus, + Gauntlets.GobulVambracesPlus, Faulds.GobulFauldsPlus, + Leggings.GobulGreavesPlus, + ((ItemsType.potion, 10), (ItemsType.mega_potion, 10), + (ItemsType.whetstone, 20), (ItemsType.ration, 10), + (ItemsType.cleanser, 5), (ItemsType.lifepowder, 2), + (ItemsType.poison_knife, 5), (ItemsType.paralysis_knife, 5), + (ItemsType.shock_trap, 1), (ItemsType.flash_bomb, 2), + (ItemsType.sonic_bomb, 2), (ItemsType.barrel_bomb_l, 2), + (ItemsType.barrel_bomb_s, 2), (ItemsType.max_potion, 1)), + () + ), + ( + (EquipmentClasses.Greatsword, Greatsword.RathalosFlamesword), + None, None, + Helmet.BaggiHelmPlus, Chestpiece.BaggiMailPlus, + Gauntlets.BaggiVambracesPlus, Faulds.BaggiCoilPlus, + Leggings.BaggiGreavesPlus, + ((ItemsType.potion, 10), (ItemsType.mega_potion, 10), + (ItemsType.whetstone, 20), (ItemsType.ration, 10), + (ItemsType.cleanser, 5), (ItemsType.lifepowder, 2), + (ItemsType.firedouse_berry, 2), (ItemsType.paralysis_knife, 5), + (ItemsType.pitfall_trap, 1), (ItemsType.shock_trap, 1), + (ItemsType.ez_flash_bomb, 1), (ItemsType.barrel_bomb_l, 3), + (ItemsType.barrel_bomb_s, 2), (ItemsType.max_potion, 1)), + () + ), + ( + (EquipmentClasses.Hammer, Hammer.GreatGaiarchG), + None, None, + Helmet.DemonEdgeEarring, Chestpiece.GobulMailPlus, + Gauntlets.RathalosVambracesPlus, Faulds.RathalosFauldsPlus, + Leggings.RathalosGreavesPlus, + ((ItemsType.potion, 10), (ItemsType.mega_potion, 10), + (ItemsType.whetstone, 20), (ItemsType.ration, 10), + (ItemsType.cleanser, 5), (ItemsType.lifepowder, 2), + (ItemsType.mega_dash_juice, 2), (ItemsType.sleep_knife, 5), + (ItemsType.shock_trap, 1), (ItemsType.flash_bomb, 2), + (ItemsType.sonic_bomb, 2), (ItemsType.max_potion, 2)), + () + ), + ( + (EquipmentClasses.Longsword, Longsword.BarbrianSharqP), + None, None, + Helmet.BariothHelmPlus, Chestpiece.BariothMailPlus, + Gauntlets.BariothVambracesPlus, Faulds.BariothFauldsPlus, + Leggings.BariothGreavesPlus, + ((ItemsType.potion, 10), (ItemsType.mega_potion, 10), + (ItemsType.whetstone, 20), (ItemsType.ration, 10), + (ItemsType.cleanser, 5), (ItemsType.lifepowder, 2), + (ItemsType.firedouse_berry, 2), (ItemsType.poison_knife, 5), + (ItemsType.shock_trap, 1), (ItemsType.ez_flash_bomb, 2), + (ItemsType.ez_barrel_bomb_l, 1), (ItemsType.max_potion, 2)), + () + ) + ) +} + +GRUDGE_MATCH_BRUTE_HORNS = { + 'small_monsters': [ + [ + # Area 0 + ], + [ + # Area 1 + { + 'type': Monster.fly_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 3,'room': 1,'quantity': -1, + 'pos_x': -2404.5,'pos_y': -5038.5,'pos_z': -3542.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 1,'quantity': -1, + 'pos_x': -2404.5,'pos_y': -5038.5,'pos_z': -3542.7, + 'rot_x': 0,'rot_y': 1828,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 1,'quantity': -1, + 'pos_x': -2404.5,'pos_y': -5038.5,'pos_z': -3542.7, + 'rot_x': 0,'rot_y': 1828,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 1,'quantity': -1, + 'pos_x': -2404.5,'pos_y': -5038.5,'pos_z': -3542.7, + 'rot_x': 0,'rot_y': 1828,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 1,'quantity': -1, + 'pos_x': -2404.5,'pos_y': -5038.5,'pos_z': -3542.7, + 'rot_x': 0,'rot_y': 1828,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 1,'quantity': -1, + 'pos_x': -2404.5,'pos_y': -5038.5,'pos_z': -3542.7, + 'rot_x': 0,'rot_y': 1828,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 1,'quantity': -1, + 'pos_x': -2404.5,'pos_y': -5038.5,'pos_z': -3542.7, + 'rot_x': 0,'rot_y': 1828,'rot_z': 0, + }, + ], + ], + 'quest_info': { + 'quest_id': 0xEA6A, + 'name': "Grudge Match: Brute Horns", + 'client': "Announcer/Receptionist", + 'description': + "Slay an Uragaan\n" + "and a Diablos", + 'details': + "Wanted:\n" + "The description for this\n" + "quest! If you can find\n" + "it, please let us know!\n" + "Thanks!", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 1, 0, 0, 0, 1, 0, 0), + (1, 0, 0, 0, 1, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 0, 0, 1, 0, 1, 0) + ), + 'penalty_per_cart': 700, + 'quest_fee': 0, + 'time_limit': 50, + 'main_monster_1': Monster.none, + 'main_monster_2': Monster.none, + 'location': LocationType.QUEST_LOCATION_LAND_ARENA_1, + 'quest_rank': QuestRankType.star_5, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_31_INITJOIN, + 'resources': ResourcesType.arena, + 'supply_set_number': 0, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 0x0037, + 'summon': 0x00000000, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.uragaan, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x01, + 'level': 0x12, # 0x01 through 0x3c 0x0f, 0x12, or 0x38 + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_2': { + 'type': Monster.diablos, + 'starting_area': 0x00, + 'boss_id': 0x01, + 'spawn_count': 0x01, + 'level': 0x37, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_3': { + 'type': Monster.none, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x00, + 'level': 0x00, # 0x01 through 0x3c + 'size': 0x00, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00000101, + 'objective_type': Monster.uragaan, + 'objective_num': 0x01, + 'zenny_reward': 2000, + 'hrp_reward': 0, + 'rewards_row_1': [ + (ItemsType.diablos_coin, 1, 10), + (ItemsType.uragaan_coin, 1, 20), + (ItemsType.voucher, 1, 10), + (ItemsType.adv_armor_sphere, 1, 10), + (ItemsType.hrd_armor_sphere, 1, 5), + (ItemsType.steel_eg, 1, 15), + (ItemsType.silver_eg, 1, 8), + (ItemsType.hunter_king_coin, 1, 22) + ], + 'rewards_row_2': [], + }, + 'subquest_1': { + 'description': "None", + 'type': 0x00000101, + 'objective_type': Monster.diablos, + 'objective_num': 0x01, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + 'subquest_2': { + 'description': "None", + 'type': 0x00000000, + 'objective_type': Monster.none, + 'objective_num': 0x00, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + }, + 'unknown': { + # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + }, + 'arena_equipment': ( + ( + (EquipmentClasses.Greatsword, Greatsword.HighSieglindeP), + None, None, + Helmet.SwordSaintEarring, Chestpiece.SteelMailPlus, + Gauntlets.SteelVambracesPlus, Faulds.SteelCoilPlus, + Leggings.LagiacrusGreavesPlus, + ((ItemsType.whetstone, 20), (ItemsType.potion, 10), + (ItemsType.mega_potion, 20), (ItemsType.well_done_steak, 10), + (ItemsType.paralysis_knife, 5), (ItemsType.pitfall_trap, 1), + (ItemsType.ez_flash_bomb, 2), (ItemsType.sonic_bomb, 2), + (ItemsType.ez_barrel_bomb_l, 2), (ItemsType.max_potion, 2)), + () + ), + ( + (EquipmentClasses.Hammer, Hammer.JhenMohranHammer), + None, None, + Helmet.ChargeEarring, Chestpiece.DamascusMail, + Gauntlets.DiablosVambracesPlus, Faulds.IngotCoilPlus, + Leggings.AgnaktorGreavesPlus, + ((ItemsType.whetstone, 20), (ItemsType.potion, 10), + (ItemsType.mega_potion, 10), (ItemsType.ration, 10), + (ItemsType.lifepowder, 2), (ItemsType.sleep_knife, 5), + (ItemsType.poison_knife, 5), (ItemsType.shock_trap, 1), + (ItemsType.flash_bomb, 2), (ItemsType.sonic_bomb, 2), + (ItemsType.max_potion, 2)), + () + ), + ( + (EquipmentClasses.Lance, Lance.SabertoothG), + None, None, + Helmet.LudrothCapPlus, Chestpiece.LudrothMailPlus, + Gauntlets.PepBracelet, Faulds.VangisCoil, + Leggings.DamascusGreaves, + ((ItemsType.whetstone, 20), (ItemsType.potion, 10), + (ItemsType.mega_potion, 10), (ItemsType.ration, 10), + (ItemsType.lifepowder, 2), (ItemsType.shock_trap, 1), + (ItemsType.ez_shock_trap, 1), (ItemsType.flash_bomb, 2), + (ItemsType.sonic_bomb, 2), (ItemsType.barrel_bomb_l, 2), + (ItemsType.barrel_bomb_s, 2), (ItemsType.max_potion, 1)), + () + ), + ( + (EquipmentClasses.Switchaxe, Switchaxe.InceadeusPlus), + None, None, + Helmet.DiablosHelmPlus, Chestpiece.DiablosMailPlus, + Gauntlets.DiablosVambracesPlus, Faulds.LagiacrusFauldsPlus, + Leggings.LagiacrusGreavesPlus, + ((ItemsType.whetstone, 20), (ItemsType.potion, 10), + (ItemsType.mega_potion, 10), (ItemsType.ration, 10), + (ItemsType.lifepowder, 2), (ItemsType.shock_trap, 1), + (ItemsType.flash_bomb, 2), (ItemsType.sonic_bomb, 2), + (ItemsType.barrel_bomb_l, 2), (ItemsType.max_potion, 2)), + () + ) + ) +} + +GRUDGE_MATCH_LAND_LORDS = { + 'small_monsters': [ + [ + # Area 0 + ], + [ + # Area 1 + { + 'type': Monster.fly_wyv,'unk1': 1,'unk2': 0xFF, + 'variant': 3,'room': 1,'quantity': -1, + 'pos_x': -2404.5,'pos_y': -5038.5,'pos_z': -3542.7, + 'rot_x': 0,'rot_y': 170,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 1,'quantity': -1, + 'pos_x': -2404.5,'pos_y': -5038.5,'pos_z': -3542.7, + 'rot_x': 0,'rot_y': 1828,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 1,'quantity': -1, + 'pos_x': -2404.5,'pos_y': -5038.5,'pos_z': -3542.7, + 'rot_x': 0,'rot_y': 1828,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 1,'quantity': -1, + 'pos_x': -2404.5,'pos_y': -5038.5,'pos_z': -3542.7, + 'rot_x': 0,'rot_y': 1828,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 1,'quantity': -1, + 'pos_x': -2404.5,'pos_y': -5038.5,'pos_z': -3542.7, + 'rot_x': 0,'rot_y': 1828,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 1,'quantity': -1, + 'pos_x': -2404.5,'pos_y': -5038.5,'pos_z': -3542.7, + 'rot_x': 0,'rot_y': 1828,'rot_z': 0, + }, + { + 'type': Monster.fly_wyv,'unk1': 3,'unk2': 0xFF, + 'variant': 8,'room': 1,'quantity': -1, + 'pos_x': -2404.5,'pos_y': -5038.5,'pos_z': -3542.7, + 'rot_x': 0,'rot_y': 1828,'rot_z': 0, + }, + ], + ], + 'quest_info': { + 'quest_id': 0xEA6B, + 'name': "Grudge Match: Land Lords", + 'client': "Announcer/Receptionist", + 'description': "Slay all 3 monsters", + 'details': + "Wanted:\n" + "The description for this\n" + "quest! If you can find\n" + "it, please let us know!\n" + "Thanks!", + 'success_message': "Complete the Main Quest.", + 'flags': ( + (0, 0, 1, 0, 0, 1, 0, 0), + (1, 0, 0, 0, 1, 0, 0, 0), + (0, 0, 0, 0, 0, 0, 0, 0), + (1, 0, 0, 0, 1, 0, 1, 0) + ), + 'penalty_per_cart': 1150, + 'quest_fee': 0, + 'time_limit': 50, + 'main_monster_1': Monster.none, + 'main_monster_2': Monster.none, + 'location': LocationType.QUEST_LOCATION_LAND_ARENA_1, + 'quest_rank': QuestRankType.urgent, + 'hrp_restriction': QuestRestrictionType.RESTRICTION_31_INITJOIN, + 'resources': ResourcesType.arena, + 'supply_set_number': 0, + 'starting_position': StartingPositionType.camp, + 'general_enemy_level': 0x0037, + 'summon': 0x00000000, + 'wave_1_transition_type': WaveType.none, + 'wave_1_transition_target': 0x0000, + 'wave_1_transition_quantity': 0x0000, + 'wave_2_transition_type': WaveType.none, + 'wave_2_transition_target': 0x0000, + 'wave_2_transition_quantity': 0x0000, + }, + 'large_monsters': { + 'monster_1': { + 'type': Monster.barroth, + 'starting_area': 0x00, + 'boss_id': 0x00, + 'spawn_count': 0x01, + 'level': 0x37, + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_2': { + 'type': Monster.uragaan, + 'starting_area': 0x00, + 'boss_id': 0x01, + 'spawn_count': 0x01, + 'level': 0x37, + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + }, + 'monster_3': { + 'type': Monster.deviljho, + 'starting_area': 0x00, + 'boss_id': 0x02, + 'spawn_count': 0x01, + 'level': 0x38, # 0x01 through 0x3c + 'size': 0x64, + 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 + 'size_spread': 0x00 + } + }, + 'objective_details': { + 'main_quest': { + 'type': 0x00020101, + 'objective_type': Monster.barroth, + 'objective_num': 0x01, + 'zenny_reward': 3000, + 'hrp_reward': 0, + 'rewards_row_1': [ + (ItemsType.deviljho_coin, 1, 10), + (ItemsType.barroth_coin, 1, 10), + (ItemsType.uragaan_coin, 1, 15), + (ItemsType.voucher, 1, 14), + (ItemsType.adv_armor_sphere, 1, 10), + (ItemsType.hrd_armor_sphere, 1, 7), + (ItemsType.silver_eg, 1, 10), + (ItemsType.hunter_king_coin, 1, 24) + ], + 'rewards_row_2': [], + }, + 'subquest_1': { + 'description': "None", + 'type': 0x00020101, + 'objective_type': Monster.uragaan, + 'objective_num': 0x01, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + 'subquest_2': { + 'description': "None", + 'type': 0x00020101, + 'objective_type': Monster.deviljho, + 'objective_num': 0x01, + 'zenny_reward': 0, + 'hrp_reward': 0x00000000, + 'rewards_row_1': [], + }, + }, + 'unknown': { + # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala + 'unk_12': 0x00000002, + 'unk_4': 0x00, + 'unk_5': 0x00, + 'unk_6': 0x00, + 'unk_7': 0x00000000, + }, + 'arena_equipment': ( + ( + (EquipmentClasses.SnS, SnS.PlagueTabar), + None, None, + Helmet.UragaanHelmPlus, Chestpiece.UragaanMailPlus, + Gauntlets.UragaanVambracesPlus, Faulds.UragaanFauldsPlus, + Leggings.UragaanGreavesPlus, + ((ItemsType.whetstone, 20), (ItemsType.potion, 10), + (ItemsType.mega_potion, 10), (ItemsType.energy_drink, 5), + (ItemsType.lifepowder, 3), (ItemsType.paralysis_knife, 5), + (ItemsType.sleep_knife, 5), (ItemsType.poison_knife, 5), + (ItemsType.tinged_meat, 5), (ItemsType.druged_meat, 5), + (ItemsType.poisoned_meat, 5), (ItemsType.pitfall_trap, 1), + (ItemsType.shock_trap, 1), (ItemsType.ez_shock_trap, 1), + (ItemsType.ez_flash_bomb, 5), (ItemsType.barrel_bomb_l_plus, 2), + (ItemsType.barrel_bomb_l, 3), (ItemsType.barrel_bomb_s, 10), + (ItemsType.max_potion, 2), (ItemsType.ancient_potion, 1), + (ItemsType.powercharm, 1), (ItemsType.armorcharm, 1), + (ItemsType.powertalon, 1), (ItemsType.armortalon, 1)), + () + ), + ( + (EquipmentClasses.Switchaxe, Switchaxe.GreatDemonbindG), + None, None, + Helmet.RathalosHelmPlus, Chestpiece.RathalosMailPlus, + Gauntlets.RathalosVambracesPlus, Faulds.RathalosFauldsPlus, + Leggings.RathalosGreavesPlus, + ((ItemsType.whetstone, 20), (ItemsType.potion, 10), + (ItemsType.mega_potion, 10), (ItemsType.energy_drink, 5), + (ItemsType.lifepowder, 3), (ItemsType.dung_bomb, 5), + (ItemsType.paralysis_knife, 5), (ItemsType.sleep_knife, 5), + (ItemsType.poison_knife, 5), (ItemsType.tinged_meat, 5), + (ItemsType.druged_meat, 5), (ItemsType.poisoned_meat, 5), + (ItemsType.pitfall_trap, 1), (ItemsType.shock_trap, 1), + (ItemsType.ez_flash_bomb, 5), (ItemsType.barrel_bomb_l_plus, 1), + (ItemsType.max_potion, 2), (ItemsType.ancient_potion, 1), + (ItemsType.powercharm, 1), (ItemsType.armorcharm, 1), + (ItemsType.powertalon, 1), (ItemsType.armortalon, 1)), + () + ), + ( + (EquipmentClasses.Longsword, Longsword.ReaverCalamity), + None, None, + Helmet.StimulusEarring, Chestpiece.VangisMail, + Gauntlets.DoberVambraces, Faulds.DoberCoil, + Leggings.DamascusGreaves, + ((ItemsType.whetstone, 20), (ItemsType.potion, 10), + (ItemsType.mega_potion, 10), (ItemsType.energy_drink, 5), + (ItemsType.cleanser, 5), (ItemsType.lifepowder, 5), + (ItemsType.paralysis_knife, 5), (ItemsType.sleep_knife, 5), + (ItemsType.poison_knife, 5), (ItemsType.tinged_meat, 5), + (ItemsType.druged_meat, 5), (ItemsType.poisoned_meat, 5), + (ItemsType.pitfall_trap, 1), (ItemsType.shock_trap, 1), + (ItemsType.ez_shock_trap, 1), (ItemsType.ez_flash_bomb, 5), + (ItemsType.barrel_bomb_l_plus, 2), (ItemsType.barrel_bomb_l, 3), + (ItemsType.barrel_bomb_s, 10), (ItemsType.max_potion, 2), + (ItemsType.ancient_potion, 1), (ItemsType.powercharm, 1), + (ItemsType.armorcharm, 1), (ItemsType.armortalon, 1)), + () + ), + ( + (EquipmentClasses.BowgunFrame, BowgunFrame.Diablazooka), + (EquipmentClasses.BowgunBarrel, BowgunBarrel.DevilsGrin), + (EquipmentClasses.BowgunStock, BowgunStock.BlizzardCannon), + Helmet.BarrageEarring, Chestpiece.DamascusVest, + Gauntlets.DamascusGuards, Faulds.DamascusCoat, + Leggings.DamascusLeggings, + ((ItemsType.potion, 10), (ItemsType.mega_potion, 10), + (ItemsType.energy_drink, 5), (ItemsType.lifepowder, 3), + (ItemsType.paralysis_knife, 5), (ItemsType.sleep_knife, 5), + (ItemsType.poison_knife, 5), (ItemsType.tinged_meat, 5), + (ItemsType.druged_meat, 5), (ItemsType.pitfall_trap, 1), + (ItemsType.shock_trap, 1), (ItemsType.ez_shock_trap, 1), + (ItemsType.ez_flash_bomb, 5), (ItemsType.ez_barrel_bomb_l, 2), + (ItemsType.barrel_bomb_l_plus, 2), (ItemsType.barrel_bomb_l, 3), + (ItemsType.barrel_bomb_s, 10), (ItemsType.max_potion, 2), + (ItemsType.ancient_potion, 1), (ItemsType.powercharm, 1), + (ItemsType.armorcharm, 1), (ItemsType.powertalon, 1), + (ItemsType.armortalon, 1)), + ((ItemsType.normal_s_lv2, 99), (ItemsType.pierce_s_lv3, 40), + (ItemsType.crag_s_lv2, 9), (ItemsType.crag_s_lv3, 9), + (ItemsType.wyvernfire_lv1, 10), (ItemsType.water_s, 60), + (ItemsType.sleep_s_lv2, 8), (ItemsType.dragon_s, 20), + (ItemsType.demon_s_ii, 5)) + ) + ) +} + + +if __name__ == "__main__": + import json + + QUESTS = [ + QUEST_EVENT_JUMP_FOUR_JAGGI, + QUEST_EVENT_ANIMAL_ATTRACTIONS, + QUEST_EVENT_SHUT_UP_AND_FISH, + QUEST_EVENT_MOTLEY_MISSION, + QUEST_EVENT_COLD_CALL, + QUEST_EVENT_THE_PHANTOM_URAGAAN, + QUEST_EVENT_BLOOD_SPORT, + QUEST_EVENT_ALLURING_DRESS, + QUEST_EVENT_GOBULED_EVERYTHING_IN_SIGHT, + QUEST_EVENT_POACHED_WYVERN_EGGS, + QUEST_EVENT_MERCY_MISSION, + QUEST_EVENT_SPEAK_OF_THE_DEVILJHO, + QUEST_EVENT_MARINE_WARFARE, + QUEST_EVENT_DOUBLE_DIABLOS, + QUEST_EVENT_HOT_DEAL, + QUEST_EVENT_SEA_POWER, + QUEST_EVENT_FF_FREE_FOR_ALL, + QUEST_EVENT_RAGE_MATCH, + QUEST_EVENT_LORDS_OF_THE_SEA_AND_SKY, + QUEST_EVENT_WORLD_EATER, + QUEST_EVENT_WHERE_GODS_FEAR_TO_TREAD, + QUEST_EVENT_RED_HOT_PARTY, + QUEST_EVENT_FIERY_SKIES_FROZEN_FIELDS, + QUEST_EVENT_GREEN_EGGS, + QUEST_EVENT_JUMP_FOURTY_EIGHT_JAGGI, + QUEST_EVENT_DARK_SIDE_OF_THE_MOON, + GRUDGE_MATCH_QURUPECO, + GRUDGE_MATCH_ROYAL_LUDROTH, + GRUDGE_MATCH_RATHIAN, + GRUDGE_MATCH_LAGIACRUS, + GRUDGE_MATCH_URAGAAN, + GRUDGE_MATCH_WYVERN_TRIO, + GRUDGE_MATCH_BIRD_BRUTE, + GRUDGE_MATCH_SEA_POWER, + GRUDGE_MATCH_TWO_FLAMES, + GRUDGE_MATCH_ICE_AND_FIRE, + GRUDGE_MATCH_BRUTE_HORNS, + GRUDGE_MATCH_LAND_LORDS, + ] + + for quest in QUESTS: + name = quest['quest_info']['name'].replace(':', '') + with open('event/{}.json'.format(name), "w") as outfile: + json.dump(quest, outfile, indent=4) + + print("done") diff --git a/dump_trading_post.py b/dump_trading_post.py new file mode 100644 index 0000000..4ce42aa --- /dev/null +++ b/dump_trading_post.py @@ -0,0 +1,713 @@ +#! /usr/bin/env python +# -*- coding: utf-8 -*- +# SPDX-FileCopyrightText: Copyright (C) 2025 MH3SP Server Project +# SPDX-License-Identifier: AGPL-3.0-or-later + +import json + +from mh.quest_utils import ItemsType + +TRADING_POST_OPTIONS = { + ItemsType.burst_arowana: (10, (ItemsType.earth_crystal, 5), (ItemsType.none, 0)), + ItemsType.bitterbug: (10, (ItemsType.jagi_hide, 3), (ItemsType.none, 0)), + ItemsType.blue_mushroom: (10, (ItemsType.bird_wyvern_fang, 2), (ItemsType.none, 0)), + ItemsType.flashbug: (5, (ItemsType.rhenoplos_scalp, 1), (ItemsType.none, 0)), + ItemsType.bomberry: (10, (ItemsType.vivid_feather, 1), (ItemsType.none, 0)), + ItemsType.adamant_seed: (3, (ItemsType.immature_sponge, 1), (ItemsType.none, 0)), + ItemsType.dung: (5, (ItemsType.monster_fluid, 1), (ItemsType.r_ludroth_coin, 1)), + ItemsType.ivy: (10, (ItemsType.kelbi_horn, 2), (ItemsType.none, 0)), + ItemsType.ice_crystal: (5, (ItemsType.sharpened_fang, 3), (ItemsType.none, 0)), + ItemsType.icethaw_pellet: (3, (ItemsType.mystery_bone, 4), (ItemsType.r_ludroth_coin, 1)), + ItemsType.paintberry: (10, (ItemsType.bnahabra_wing, 1), (ItemsType.none, 0)), + ItemsType.fire_herb: (10, (ItemsType.monster_bone_m, 1), (ItemsType.none, 0)), + ItemsType.firedouse_berry: (3, (ItemsType.mystery_bone, 4), (ItemsType.none, 0)), + ItemsType.sharpened_fang: (5, (ItemsType.hydro_hide, 2), (ItemsType.r_ludroth_coin, 2)), + ItemsType.toadstool: (5, (ItemsType.sharpened_fang, 1), (ItemsType.qurupeco_coin, 1)), + ItemsType.godbug: (5, (ItemsType.blue_kelbi_horn, 1), (ItemsType.none, 0)), + ItemsType.sap_plant: (10, (ItemsType.kelbi_horn, 2), (ItemsType.none, 0)), + ItemsType.honey: (5, (ItemsType.sharpened_fang, 1), (ItemsType.none, 0)), + ItemsType.bughopper: (10, (ItemsType.big_fin, 3), (ItemsType.r_ludroth_coin, 2)), + ItemsType.bone_husk_s: (10, (ItemsType.bone, 2), (ItemsType.barroth_coin, 2)), + ItemsType.herb: (10, (ItemsType.gigi_stinger, 2), (ItemsType.none, 0)), + ItemsType.parashroom: (5, (ItemsType.sharpened_fang, 1), (ItemsType.none, 0)), + ItemsType.might_seed: (3, (ItemsType.immature_sponge, 1), (ItemsType.none, 0)), + ItemsType.mega_harpoon: (5, (ItemsType.immature_sponge, 2), (ItemsType.none, 0)), + ItemsType.monster_bone_m: (5, (ItemsType.rathian_webbing, 1), (ItemsType.none, 0)), + ItemsType.monster_bone_s: (5, (ItemsType.blue_kelbi_horn, 1), (ItemsType.none, 0)), + ItemsType.pin_tuna: (10, (ItemsType.iron_ore, 4), (ItemsType.none, 0)), + ItemsType.nitroshroom: (10, (ItemsType.jagi_hide, 2), (ItemsType.none, 0)), + ItemsType.popfish: (8, (ItemsType.machalite_ore, 2), (ItemsType.rathian_coin, 2)), + ItemsType.exciteshroom: (5, (ItemsType.immature_sponge, 1), (ItemsType.none, 0)), + ItemsType.sleepyfish: (8, (ItemsType.iron_ore, 3), (ItemsType.none, 0)), + ItemsType.sleep_herb: (10, (ItemsType.velvety_hide, 1), (ItemsType.none, 0)), + ItemsType.spider_web: (5, (ItemsType.monster_fluid, 1), (ItemsType.barroth_coin, 1)), + ItemsType.stone: (10, (ItemsType.monster_bone_m, 1), (ItemsType.great_jagi_coin, 1)), + ItemsType.stormsender_seed: (3, (ItemsType.bone, 4), (ItemsType.none, 0)), + ItemsType.sushifish: (10, (ItemsType.gigi_stinger, 5), (ItemsType.none, 0)), + ItemsType.waterblock_seed: (3, (ItemsType.bone, 4), (ItemsType.qurupeco_coin, 1)), + ItemsType.whetfish: (10, (ItemsType.gigi_stinger, 3), (ItemsType.none, 0)), + ItemsType.snakebee_larva: (5, (ItemsType.rhenoplos_scalp, 2), (ItemsType.none, 0)), + ItemsType.yambug: (10, (ItemsType.sharpened_fang, 3), (ItemsType.none, 0)), + + ItemsType.bomb_arowana: (3, (ItemsType.iron_ore, 1), (ItemsType.none, 0)), + ItemsType.barioth_shell: (1, (ItemsType.barioth_coin, 3), (ItemsType.pinnacle_coin, 2)), + ItemsType.barroth_shell: (1, (ItemsType.barroth_coin, 3), (ItemsType.none, 0)), + ItemsType.diablos_shell: (1, (ItemsType.diablos_coin, 3), (ItemsType.none, 0)), + ItemsType.dragon_toadstool: (5, (ItemsType.flabby_hide, 2), (ItemsType.none, 0)), + ItemsType.dragonfell_berry: (4, (ItemsType.thunderbug, 1), (ItemsType.none, 0)), + ItemsType.well_done_steak: (5, (ItemsType.iron_ore, 5), (ItemsType.none, 0)), + ItemsType.gobul_hide: (1, (ItemsType.gobul_coin, 3), (ItemsType.none, 0)), + ItemsType.prize_gold_sword: (1, (ItemsType.lagiacrus_coin, 15), (ItemsType.pinnacle_coin, 8)), + ItemsType.great_jagi_hide: (1, (ItemsType.great_jagi_coin, 3), (ItemsType.none, 0)), + ItemsType.bone_husk_l: (2, (ItemsType.great_bagi_claw, 1), (ItemsType.none, 0)), + ItemsType.screamer: (3, (ItemsType.r_ludroth_scale, 1), (ItemsType.none, 0)), + ItemsType.lagiacrus_hide: (1, (ItemsType.lagiacrus_coin, 3), (ItemsType.none, 0)), + ItemsType.qurupeco_scale: (1, (ItemsType.qurupeco_coin, 3), (ItemsType.none, 0)), + ItemsType.rathalos_scale: (1, (ItemsType.rathalos_coin, 3), (ItemsType.none, 0)), + ItemsType.rathian_scale: (1, (ItemsType.rathian_coin, 3), (ItemsType.pinnacle_coin, 2)), + ItemsType.armor_stone: (3, (ItemsType.deviljho_coin, 1), (ItemsType.pinnacle_coin, 1)), + ItemsType.scatterfish: (2, (ItemsType.machalite_ore, 2), (ItemsType.none, 0)), + ItemsType.wyvern_claw_: (8, (ItemsType.great_bagi_claw, 1), (ItemsType.rathian_coin, 1)), + ItemsType.wyvern_fang: (8, (ItemsType.qurupeco_scale, 1), (ItemsType.none, 0)) +} + +if __name__ == "__main__": + import json + + def get_trading_post_entry(entry): + qty, price1, price2 = TRADING_POST_OPTIONS[entry] + return [(entry, qty), price1, price2] + + trading_post = [ + [ + get_trading_post_entry(ItemsType.popfish), + get_trading_post_entry(ItemsType.waterblock_seed), + get_trading_post_entry(ItemsType.bone_husk_s), + get_trading_post_entry(ItemsType.dung), + get_trading_post_entry(ItemsType.sharpened_fang), + + get_trading_post_entry(ItemsType.toadstool), + get_trading_post_entry(ItemsType.stone), + get_trading_post_entry(ItemsType.spider_web), + get_trading_post_entry(ItemsType.bughopper), + get_trading_post_entry(ItemsType.icethaw_pellet), + + get_trading_post_entry(ItemsType.rathian_scale), + get_trading_post_entry(ItemsType.wyvern_claw_), + get_trading_post_entry(ItemsType.prize_gold_sword), + get_trading_post_entry(ItemsType.barioth_shell), + get_trading_post_entry(ItemsType.armor_stone), + ], + [ + get_trading_post_entry(ItemsType.bitterbug), + get_trading_post_entry(ItemsType.whetfish), + get_trading_post_entry(ItemsType.mega_harpoon), + get_trading_post_entry(ItemsType.blue_mushroom), + get_trading_post_entry(ItemsType.herb), + + get_trading_post_entry(ItemsType.honey), + get_trading_post_entry(ItemsType.nitroshroom), + get_trading_post_entry(ItemsType.yambug), + get_trading_post_entry(ItemsType.might_seed), + get_trading_post_entry(ItemsType.sap_plant), + + get_trading_post_entry(ItemsType.scatterfish), + get_trading_post_entry(ItemsType.rathian_scale), + get_trading_post_entry(ItemsType.well_done_steak), + get_trading_post_entry(ItemsType.barroth_shell), + get_trading_post_entry(ItemsType.wyvern_claw_), + ], + [ + get_trading_post_entry(ItemsType.sharpened_fang), + get_trading_post_entry(ItemsType.bughopper), + get_trading_post_entry(ItemsType.herb), + get_trading_post_entry(ItemsType.monster_bone_m), + get_trading_post_entry(ItemsType.firedouse_berry), + + get_trading_post_entry(ItemsType.bone_husk_s), + get_trading_post_entry(ItemsType.burst_arowana), + get_trading_post_entry(ItemsType.blue_mushroom), + get_trading_post_entry(ItemsType.yambug), + get_trading_post_entry(ItemsType.sleepyfish), + + get_trading_post_entry(ItemsType.well_done_steak), + get_trading_post_entry(ItemsType.bomb_arowana), + get_trading_post_entry(ItemsType.bone_husk_l), + get_trading_post_entry(ItemsType.lagiacrus_hide), + get_trading_post_entry(ItemsType.dragon_toadstool), + ], + [ + get_trading_post_entry(ItemsType.paintberry), + get_trading_post_entry(ItemsType.pin_tuna), + get_trading_post_entry(ItemsType.herb), + get_trading_post_entry(ItemsType.snakebee_larva), + get_trading_post_entry(ItemsType.bone_husk_s), + + get_trading_post_entry(ItemsType.parashroom), + get_trading_post_entry(ItemsType.monster_bone_m), + get_trading_post_entry(ItemsType.firedouse_berry), + get_trading_post_entry(ItemsType.blue_mushroom), + get_trading_post_entry(ItemsType.dung), + + get_trading_post_entry(ItemsType.rathian_scale), + get_trading_post_entry(ItemsType.wyvern_claw_), + get_trading_post_entry(ItemsType.prize_gold_sword), + get_trading_post_entry(ItemsType.barioth_shell), + get_trading_post_entry(ItemsType.armor_stone), + ], + [ + get_trading_post_entry(ItemsType.dung), + get_trading_post_entry(ItemsType.pin_tuna), + get_trading_post_entry(ItemsType.mega_harpoon), + get_trading_post_entry(ItemsType.sleep_herb), + get_trading_post_entry(ItemsType.burst_arowana), + + get_trading_post_entry(ItemsType.flashbug), + get_trading_post_entry(ItemsType.monster_bone_m), + get_trading_post_entry(ItemsType.icethaw_pellet), + get_trading_post_entry(ItemsType.sleep_herb), + get_trading_post_entry(ItemsType.fire_herb), + + get_trading_post_entry(ItemsType.scatterfish), + get_trading_post_entry(ItemsType.qurupeco_scale), + get_trading_post_entry(ItemsType.dragon_toadstool), + get_trading_post_entry(ItemsType.prize_gold_sword), + get_trading_post_entry(ItemsType.barioth_shell), + ], + [ + get_trading_post_entry(ItemsType.flashbug), + get_trading_post_entry(ItemsType.herb), + get_trading_post_entry(ItemsType.pin_tuna), + get_trading_post_entry(ItemsType.parashroom), + get_trading_post_entry(ItemsType.dung), + + get_trading_post_entry(ItemsType.exciteshroom), + get_trading_post_entry(ItemsType.whetfish), + get_trading_post_entry(ItemsType.monster_bone_m), + get_trading_post_entry(ItemsType.stone), + get_trading_post_entry(ItemsType.spider_web), + + get_trading_post_entry(ItemsType.qurupeco_scale), + get_trading_post_entry(ItemsType.screamer), + get_trading_post_entry(ItemsType.gobul_hide), + get_trading_post_entry(ItemsType.dragonfell_berry), + get_trading_post_entry(ItemsType.diablos_shell), + ], + [ + get_trading_post_entry(ItemsType.bughopper), + get_trading_post_entry(ItemsType.whetfish), + get_trading_post_entry(ItemsType.pin_tuna), + get_trading_post_entry(ItemsType.popfish), + get_trading_post_entry(ItemsType.parashroom), + + get_trading_post_entry(ItemsType.sharpened_fang), + get_trading_post_entry(ItemsType.snakebee_larva), + get_trading_post_entry(ItemsType.ivy), + get_trading_post_entry(ItemsType.sleepyfish), + get_trading_post_entry(ItemsType.fire_herb), + + get_trading_post_entry(ItemsType.scatterfish), + get_trading_post_entry(ItemsType.rathian_scale), + get_trading_post_entry(ItemsType.well_done_steak), + get_trading_post_entry(ItemsType.barroth_shell), + get_trading_post_entry(ItemsType.wyvern_claw_), + ], + [ + get_trading_post_entry(ItemsType.whetfish), + get_trading_post_entry(ItemsType.might_seed), + get_trading_post_entry(ItemsType.bitterbug), + get_trading_post_entry(ItemsType.sharpened_fang), + get_trading_post_entry(ItemsType.spider_web), + + get_trading_post_entry(ItemsType.monster_bone_m), + get_trading_post_entry(ItemsType.ivy), + get_trading_post_entry(ItemsType.icethaw_pellet), + get_trading_post_entry(ItemsType.honey), + get_trading_post_entry(ItemsType.stone), + + get_trading_post_entry(ItemsType.wyvern_fang), + get_trading_post_entry(ItemsType.prize_gold_sword), + get_trading_post_entry(ItemsType.qurupeco_scale), + get_trading_post_entry(ItemsType.rathian_scale), + get_trading_post_entry(ItemsType.rathalos_scale), + ], + [ + get_trading_post_entry(ItemsType.monster_bone_m), + get_trading_post_entry(ItemsType.nitroshroom), + get_trading_post_entry(ItemsType.mega_harpoon), + get_trading_post_entry(ItemsType.dung), + get_trading_post_entry(ItemsType.flashbug), + + get_trading_post_entry(ItemsType.snakebee_larva), + get_trading_post_entry(ItemsType.herb), + get_trading_post_entry(ItemsType.stormsender_seed), + get_trading_post_entry(ItemsType.exciteshroom), + get_trading_post_entry(ItemsType.toadstool), + + get_trading_post_entry(ItemsType.wyvern_claw_), + get_trading_post_entry(ItemsType.rathalos_scale), + get_trading_post_entry(ItemsType.barioth_shell), + get_trading_post_entry(ItemsType.well_done_steak), + get_trading_post_entry(ItemsType.prize_gold_sword), + ], + [ + get_trading_post_entry(ItemsType.adamant_seed), + get_trading_post_entry(ItemsType.stormsender_seed), + get_trading_post_entry(ItemsType.toadstool), + get_trading_post_entry(ItemsType.snakebee_larva), + get_trading_post_entry(ItemsType.monster_bone_m), + + get_trading_post_entry(ItemsType.herb), + get_trading_post_entry(ItemsType.honey), + get_trading_post_entry(ItemsType.sushifish), + get_trading_post_entry(ItemsType.bitterbug), + get_trading_post_entry(ItemsType.blue_mushroom), + + get_trading_post_entry(ItemsType.rathian_scale), + get_trading_post_entry(ItemsType.wyvern_claw_), + get_trading_post_entry(ItemsType.prize_gold_sword), + get_trading_post_entry(ItemsType.barioth_shell), + get_trading_post_entry(ItemsType.armor_stone), + ], + [ + get_trading_post_entry(ItemsType.blue_mushroom), + get_trading_post_entry(ItemsType.might_seed), + get_trading_post_entry(ItemsType.dung), + get_trading_post_entry(ItemsType.spider_web), + get_trading_post_entry(ItemsType.icethaw_pellet), + + get_trading_post_entry(ItemsType.burst_arowana), + get_trading_post_entry(ItemsType.flashbug), + get_trading_post_entry(ItemsType.fire_herb), + get_trading_post_entry(ItemsType.whetfish), + get_trading_post_entry(ItemsType.sushifish), + + get_trading_post_entry(ItemsType.prize_gold_sword), + get_trading_post_entry(ItemsType.dragonfell_berry), + get_trading_post_entry(ItemsType.rathalos_scale), + get_trading_post_entry(ItemsType.wyvern_fang), + get_trading_post_entry(ItemsType.qurupeco_scale), + ], + [ + get_trading_post_entry(ItemsType.ice_crystal), + get_trading_post_entry(ItemsType.parashroom), + get_trading_post_entry(ItemsType.honey), + get_trading_post_entry(ItemsType.yambug), + get_trading_post_entry(ItemsType.sap_plant), + + get_trading_post_entry(ItemsType.godbug), + get_trading_post_entry(ItemsType.herb), + get_trading_post_entry(ItemsType.blue_mushroom), + get_trading_post_entry(ItemsType.fire_herb), + get_trading_post_entry(ItemsType.bitterbug), + + get_trading_post_entry(ItemsType.wyvern_fang), + get_trading_post_entry(ItemsType.prize_gold_sword), + get_trading_post_entry(ItemsType.qurupeco_scale), + get_trading_post_entry(ItemsType.rathian_scale), + get_trading_post_entry(ItemsType.rathalos_scale), + ], + [ + get_trading_post_entry(ItemsType.godbug), + get_trading_post_entry(ItemsType.popfish), + get_trading_post_entry(ItemsType.stone), + get_trading_post_entry(ItemsType.bitterbug), + get_trading_post_entry(ItemsType.sleepyfish), + + get_trading_post_entry(ItemsType.paintberry), + get_trading_post_entry(ItemsType.icethaw_pellet), + get_trading_post_entry(ItemsType.nitroshroom), + get_trading_post_entry(ItemsType.monster_bone_s), + get_trading_post_entry(ItemsType.dung), + + get_trading_post_entry(ItemsType.wyvern_fang), + get_trading_post_entry(ItemsType.prize_gold_sword), + get_trading_post_entry(ItemsType.qurupeco_scale), + get_trading_post_entry(ItemsType.rathian_scale), + get_trading_post_entry(ItemsType.rathalos_scale), + ], + [ + get_trading_post_entry(ItemsType.parashroom), + get_trading_post_entry(ItemsType.bone_husk_s), + get_trading_post_entry(ItemsType.toadstool), + get_trading_post_entry(ItemsType.snakebee_larva), + get_trading_post_entry(ItemsType.adamant_seed), + + get_trading_post_entry(ItemsType.monster_bone_s), + get_trading_post_entry(ItemsType.might_seed), + get_trading_post_entry(ItemsType.dung), + get_trading_post_entry(ItemsType.sap_plant), + get_trading_post_entry(ItemsType.herb), + + get_trading_post_entry(ItemsType.scatterfish), + get_trading_post_entry(ItemsType.qurupeco_scale), + get_trading_post_entry(ItemsType.dragon_toadstool), + get_trading_post_entry(ItemsType.prize_gold_sword), + get_trading_post_entry(ItemsType.barioth_shell), + ], + [ + get_trading_post_entry(ItemsType.parashroom), + get_trading_post_entry(ItemsType.bone_husk_s), + get_trading_post_entry(ItemsType.toadstool), + get_trading_post_entry(ItemsType.snakebee_larva), + get_trading_post_entry(ItemsType.adamant_seed), + + get_trading_post_entry(ItemsType.monster_bone_s), + get_trading_post_entry(ItemsType.might_seed), + get_trading_post_entry(ItemsType.dung), + get_trading_post_entry(ItemsType.sap_plant), + get_trading_post_entry(ItemsType.herb), + + get_trading_post_entry(ItemsType.scatterfish), + get_trading_post_entry(ItemsType.qurupeco_scale), + get_trading_post_entry(ItemsType.dragon_toadstool), + get_trading_post_entry(ItemsType.prize_gold_sword), + get_trading_post_entry(ItemsType.barioth_shell), + ], + [ + get_trading_post_entry(ItemsType.parashroom), + get_trading_post_entry(ItemsType.bone_husk_s), + get_trading_post_entry(ItemsType.bughopper), + get_trading_post_entry(ItemsType.spider_web), + get_trading_post_entry(ItemsType.dung), + + get_trading_post_entry(ItemsType.honey), + get_trading_post_entry(ItemsType.paintberry), + get_trading_post_entry(ItemsType.godbug), + get_trading_post_entry(ItemsType.yambug), + get_trading_post_entry(ItemsType.sleep_herb), + + get_trading_post_entry(ItemsType.dragonfell_berry), + get_trading_post_entry(ItemsType.prize_gold_sword), + get_trading_post_entry(ItemsType.rathalos_scale), + get_trading_post_entry(ItemsType.well_done_steak), + get_trading_post_entry(ItemsType.gobul_hide), + ], + [ + get_trading_post_entry(ItemsType.spider_web), + get_trading_post_entry(ItemsType.flashbug), + get_trading_post_entry(ItemsType.bone_husk_s), + get_trading_post_entry(ItemsType.fire_herb), + get_trading_post_entry(ItemsType.popfish), + + get_trading_post_entry(ItemsType.ivy), + get_trading_post_entry(ItemsType.herb), + get_trading_post_entry(ItemsType.paintberry), + get_trading_post_entry(ItemsType.blue_mushroom), + get_trading_post_entry(ItemsType.icethaw_pellet), + + get_trading_post_entry(ItemsType.barroth_shell), + get_trading_post_entry(ItemsType.wyvern_claw_), + get_trading_post_entry(ItemsType.dragonfell_berry), + get_trading_post_entry(ItemsType.screamer), + get_trading_post_entry(ItemsType.wyvern_fang), + ], + [ + get_trading_post_entry(ItemsType.icethaw_pellet), + get_trading_post_entry(ItemsType.bitterbug), + get_trading_post_entry(ItemsType.yambug), + get_trading_post_entry(ItemsType.mega_harpoon), + get_trading_post_entry(ItemsType.flashbug), + + get_trading_post_entry(ItemsType.exciteshroom), + get_trading_post_entry(ItemsType.popfish), + get_trading_post_entry(ItemsType.stone), + get_trading_post_entry(ItemsType.bughopper), + get_trading_post_entry(ItemsType.dung), + + get_trading_post_entry(ItemsType.barioth_shell), + get_trading_post_entry(ItemsType.gobul_hide), + get_trading_post_entry(ItemsType.great_jagi_hide), + get_trading_post_entry(ItemsType.barroth_shell), + get_trading_post_entry(ItemsType.prize_gold_sword), + ], + [ + get_trading_post_entry(ItemsType.blue_mushroom), + get_trading_post_entry(ItemsType.snakebee_larva), + get_trading_post_entry(ItemsType.paintberry), + get_trading_post_entry(ItemsType.icethaw_pellet), + get_trading_post_entry(ItemsType.bone_husk_s), + + get_trading_post_entry(ItemsType.popfish), + get_trading_post_entry(ItemsType.burst_arowana), + get_trading_post_entry(ItemsType.pin_tuna), + get_trading_post_entry(ItemsType.flashbug), + get_trading_post_entry(ItemsType.spider_web), + + get_trading_post_entry(ItemsType.prize_gold_sword), + get_trading_post_entry(ItemsType.lagiacrus_hide), + get_trading_post_entry(ItemsType.qurupeco_scale), + get_trading_post_entry(ItemsType.well_done_steak), + get_trading_post_entry(ItemsType.scatterfish), + ], + [ + get_trading_post_entry(ItemsType.dung), + get_trading_post_entry(ItemsType.burst_arowana), + get_trading_post_entry(ItemsType.ice_crystal), + get_trading_post_entry(ItemsType.herb), + get_trading_post_entry(ItemsType.sushifish), + + get_trading_post_entry(ItemsType.pin_tuna), + get_trading_post_entry(ItemsType.flashbug), + get_trading_post_entry(ItemsType.snakebee_larva), + get_trading_post_entry(ItemsType.ivy), + get_trading_post_entry(ItemsType.icethaw_pellet), + + get_trading_post_entry(ItemsType.barroth_shell), + get_trading_post_entry(ItemsType.wyvern_claw_), + get_trading_post_entry(ItemsType.dragonfell_berry), + get_trading_post_entry(ItemsType.screamer), + get_trading_post_entry(ItemsType.wyvern_fang), + ], + [ + get_trading_post_entry(ItemsType.adamant_seed), + get_trading_post_entry(ItemsType.blue_mushroom), + get_trading_post_entry(ItemsType.flashbug), + get_trading_post_entry(ItemsType.stone), + get_trading_post_entry(ItemsType.exciteshroom), + + get_trading_post_entry(ItemsType.dung), + get_trading_post_entry(ItemsType.nitroshroom), + get_trading_post_entry(ItemsType.bomberry), + get_trading_post_entry(ItemsType.burst_arowana), + get_trading_post_entry(ItemsType.firedouse_berry), + + get_trading_post_entry(ItemsType.barioth_shell), + get_trading_post_entry(ItemsType.gobul_hide), + get_trading_post_entry(ItemsType.great_jagi_hide), + get_trading_post_entry(ItemsType.barroth_shell), + get_trading_post_entry(ItemsType.prize_gold_sword), + ], + [ + get_trading_post_entry(ItemsType.honey), + get_trading_post_entry(ItemsType.bughopper), + get_trading_post_entry(ItemsType.bone_husk_s), + get_trading_post_entry(ItemsType.whetfish), + get_trading_post_entry(ItemsType.sushifish), + + get_trading_post_entry(ItemsType.herb), + get_trading_post_entry(ItemsType.sap_plant), + get_trading_post_entry(ItemsType.stone), + get_trading_post_entry(ItemsType.fire_herb), + get_trading_post_entry(ItemsType.firedouse_berry), + + get_trading_post_entry(ItemsType.barroth_shell), + get_trading_post_entry(ItemsType.wyvern_claw_), + get_trading_post_entry(ItemsType.dragonfell_berry), + get_trading_post_entry(ItemsType.screamer), + get_trading_post_entry(ItemsType.wyvern_fang), + ], + [ + get_trading_post_entry(ItemsType.flashbug), + get_trading_post_entry(ItemsType.godbug), + get_trading_post_entry(ItemsType.sap_plant), + get_trading_post_entry(ItemsType.parashroom), + get_trading_post_entry(ItemsType.herb), + + get_trading_post_entry(ItemsType.burst_arowana), + get_trading_post_entry(ItemsType.pin_tuna), + get_trading_post_entry(ItemsType.bone_husk_s), + get_trading_post_entry(ItemsType.ivy), + get_trading_post_entry(ItemsType.honey), + + get_trading_post_entry(ItemsType.qurupeco_scale), + get_trading_post_entry(ItemsType.screamer), + get_trading_post_entry(ItemsType.gobul_hide), + get_trading_post_entry(ItemsType.dragonfell_berry), + get_trading_post_entry(ItemsType.diablos_shell), + ], + [ + get_trading_post_entry(ItemsType.blue_mushroom), + get_trading_post_entry(ItemsType.sleep_herb), + get_trading_post_entry(ItemsType.bone_husk_s), + get_trading_post_entry(ItemsType.herb), + get_trading_post_entry(ItemsType.toadstool), + + get_trading_post_entry(ItemsType.sushifish), + get_trading_post_entry(ItemsType.might_seed), + get_trading_post_entry(ItemsType.icethaw_pellet), + get_trading_post_entry(ItemsType.ivy), + get_trading_post_entry(ItemsType.snakebee_larva), + + get_trading_post_entry(ItemsType.barioth_shell), + get_trading_post_entry(ItemsType.bomb_arowana), + get_trading_post_entry(ItemsType.bone_husk_l), + get_trading_post_entry(ItemsType.screamer), + get_trading_post_entry(ItemsType.wyvern_claw_), + ], + [ + get_trading_post_entry(ItemsType.herb), + get_trading_post_entry(ItemsType.spider_web), + get_trading_post_entry(ItemsType.bone_husk_s), + get_trading_post_entry(ItemsType.bomberry), + get_trading_post_entry(ItemsType.dung), + + get_trading_post_entry(ItemsType.bitterbug), + get_trading_post_entry(ItemsType.firedouse_berry), + get_trading_post_entry(ItemsType.yambug), + get_trading_post_entry(ItemsType.blue_mushroom), + get_trading_post_entry(ItemsType.popfish), + + get_trading_post_entry(ItemsType.qurupeco_scale), + get_trading_post_entry(ItemsType.screamer), + get_trading_post_entry(ItemsType.gobul_hide), + get_trading_post_entry(ItemsType.dragonfell_berry), + get_trading_post_entry(ItemsType.diablos_shell), + ], + [ + get_trading_post_entry(ItemsType.blue_mushroom), + get_trading_post_entry(ItemsType.whetfish), + get_trading_post_entry(ItemsType.stone), + get_trading_post_entry(ItemsType.yambug), + get_trading_post_entry(ItemsType.flashbug), + + get_trading_post_entry(ItemsType.mega_harpoon), + get_trading_post_entry(ItemsType.paintberry), + get_trading_post_entry(ItemsType.honey), + get_trading_post_entry(ItemsType.burst_arowana), + get_trading_post_entry(ItemsType.adamant_seed), + + get_trading_post_entry(ItemsType.barioth_shell), + get_trading_post_entry(ItemsType.bomb_arowana), + get_trading_post_entry(ItemsType.bone_husk_l), + get_trading_post_entry(ItemsType.screamer), + get_trading_post_entry(ItemsType.wyvern_claw_), + ], + [ + get_trading_post_entry(ItemsType.might_seed), + get_trading_post_entry(ItemsType.toadstool), + get_trading_post_entry(ItemsType.ice_crystal), + get_trading_post_entry(ItemsType.flashbug), + get_trading_post_entry(ItemsType.yambug), + + get_trading_post_entry(ItemsType.toadstool), + get_trading_post_entry(ItemsType.firedouse_berry), + get_trading_post_entry(ItemsType.bitterbug), + get_trading_post_entry(ItemsType.fire_herb), + get_trading_post_entry(ItemsType.might_seed), + + get_trading_post_entry(ItemsType.prize_gold_sword), + get_trading_post_entry(ItemsType.lagiacrus_hide), + get_trading_post_entry(ItemsType.qurupeco_scale), + get_trading_post_entry(ItemsType.well_done_steak), + get_trading_post_entry(ItemsType.scatterfish), + ], + [ + get_trading_post_entry(ItemsType.bone_husk_s), + get_trading_post_entry(ItemsType.exciteshroom), + get_trading_post_entry(ItemsType.monster_bone_s), + get_trading_post_entry(ItemsType.ivy), + get_trading_post_entry(ItemsType.flashbug), + + get_trading_post_entry(ItemsType.firedouse_berry), + get_trading_post_entry(ItemsType.paintberry), + get_trading_post_entry(ItemsType.spider_web), + get_trading_post_entry(ItemsType.icethaw_pellet), + get_trading_post_entry(ItemsType.monster_bone_m), + + get_trading_post_entry(ItemsType.barioth_shell), + get_trading_post_entry(ItemsType.bomb_arowana), + get_trading_post_entry(ItemsType.bone_husk_l), + get_trading_post_entry(ItemsType.screamer), + get_trading_post_entry(ItemsType.wyvern_claw_), + ], + [ + get_trading_post_entry(ItemsType.snakebee_larva), + get_trading_post_entry(ItemsType.godbug), + get_trading_post_entry(ItemsType.bughopper), + get_trading_post_entry(ItemsType.fire_herb), + get_trading_post_entry(ItemsType.honey), + + get_trading_post_entry(ItemsType.bone_husk_s), + get_trading_post_entry(ItemsType.popfish), + get_trading_post_entry(ItemsType.dung), + get_trading_post_entry(ItemsType.spider_web), + get_trading_post_entry(ItemsType.ice_crystal), + + get_trading_post_entry(ItemsType.prize_gold_sword), + get_trading_post_entry(ItemsType.lagiacrus_hide), + get_trading_post_entry(ItemsType.qurupeco_scale), + get_trading_post_entry(ItemsType.well_done_steak), + get_trading_post_entry(ItemsType.scatterfish), + ], + [ + get_trading_post_entry(ItemsType.sushifish), + get_trading_post_entry(ItemsType.flashbug), + get_trading_post_entry(ItemsType.yambug), + get_trading_post_entry(ItemsType.bughopper), + get_trading_post_entry(ItemsType.bomberry), + + get_trading_post_entry(ItemsType.popfish), + get_trading_post_entry(ItemsType.blue_mushroom), + get_trading_post_entry(ItemsType.ivy), + get_trading_post_entry(ItemsType.herb), + get_trading_post_entry(ItemsType.bitterbug), + + get_trading_post_entry(ItemsType.barioth_shell), + get_trading_post_entry(ItemsType.gobul_hide), + get_trading_post_entry(ItemsType.great_jagi_hide), + get_trading_post_entry(ItemsType.barroth_shell), + get_trading_post_entry(ItemsType.prize_gold_sword), + ], + [ + get_trading_post_entry(ItemsType.honey), + get_trading_post_entry(ItemsType.dung), + get_trading_post_entry(ItemsType.bitterbug), + get_trading_post_entry(ItemsType.herb), + get_trading_post_entry(ItemsType.firedouse_berry), + + get_trading_post_entry(ItemsType.mega_harpoon), + get_trading_post_entry(ItemsType.sharpened_fang), + get_trading_post_entry(ItemsType.toadstool), + get_trading_post_entry(ItemsType.bughopper), + get_trading_post_entry(ItemsType.bone_husk_s), + + get_trading_post_entry(ItemsType.barioth_shell), + get_trading_post_entry(ItemsType.bomb_arowana), + get_trading_post_entry(ItemsType.bone_husk_l), + get_trading_post_entry(ItemsType.screamer), + get_trading_post_entry(ItemsType.wyvern_claw_), + ], + [ + get_trading_post_entry(ItemsType.parashroom), + get_trading_post_entry(ItemsType.ivy), + get_trading_post_entry(ItemsType.sap_plant), + get_trading_post_entry(ItemsType.sleepyfish), + get_trading_post_entry(ItemsType.blue_mushroom), + + get_trading_post_entry(ItemsType.godbug), + get_trading_post_entry(ItemsType.nitroshroom), + get_trading_post_entry(ItemsType.paintberry), + get_trading_post_entry(ItemsType.exciteshroom), + get_trading_post_entry(ItemsType.firedouse_berry), + + get_trading_post_entry(ItemsType.wyvern_fang), + get_trading_post_entry(ItemsType.prize_gold_sword), + get_trading_post_entry(ItemsType.qurupeco_scale), + get_trading_post_entry(ItemsType.rathian_scale), + get_trading_post_entry(ItemsType.rathalos_scale), + ], + [ + get_trading_post_entry(ItemsType.waterblock_seed), + get_trading_post_entry(ItemsType.sap_plant), + get_trading_post_entry(ItemsType.spider_web), + get_trading_post_entry(ItemsType.paintberry), + get_trading_post_entry(ItemsType.herb), + + get_trading_post_entry(ItemsType.godbug), + get_trading_post_entry(ItemsType.ivy), + get_trading_post_entry(ItemsType.monster_bone_s), + get_trading_post_entry(ItemsType.blue_mushroom), + get_trading_post_entry(ItemsType.snakebee_larva), + + get_trading_post_entry(ItemsType.scatterfish), + get_trading_post_entry(ItemsType.qurupeco_scale), + get_trading_post_entry(ItemsType.dragon_toadstool), + get_trading_post_entry(ItemsType.prize_gold_sword), + get_trading_post_entry(ItemsType.barioth_shell), + ], + ] + + with open('event/trading_post.json', "w") as outfile: + json.dump(trading_post, outfile, indent=4) + print("done!") diff --git a/event/Alluring Dress.json b/event/Alluring Dress.json new file mode 100644 index 0000000..ff25c0a --- /dev/null +++ b/event/Alluring Dress.json @@ -0,0 +1,310 @@ +{ + "unknown": { + "unk_12": 3, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "objective_details": { + "subquest_2": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + }, + "main_quest": { + "objective_num": 30, + "hrp_reward": 120, + "rewards_row_1": [ + [ + 443, + 1, + 1 + ], + [ + 334, + 1, + 5 + ], + [ + 562, + 1, + 16 + ], + [ + 602, + 1, + 24 + ], + [ + 29, + 2, + 12 + ], + [ + 328, + 1, + 12 + ], + [ + 444, + 1, + 5 + ], + [ + 109, + 1, + 25 + ] + ], + "rewards_row_2": [ + [ + 443, + 1, + 1 + ], + [ + 334, + 1, + 5 + ], + [ + 562, + 1, + 16 + ], + [ + 602, + 1, + 24 + ], + [ + 29, + 2, + 12 + ], + [ + 328, + 1, + 12 + ], + [ + 444, + 1, + 5 + ], + [ + 109, + 1, + 25 + ] + ], + "objective_type": 32, + "zenny_reward": 4000, + "type": 1 + }, + "subquest_1": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + } + }, + "small_monsters": [ + [], + [ + { + "variant": 3, + "unk1": 1, + "unk2": 255, + "pos_z": -3042.7, + "pos_x": -0.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -1042.7, + "pos_x": -1200.5, + "pos_y": -2538.5, + "room": 1, + "rot_z": 0, + "rot_y": -1, + "rot_x": 0, + "type": 32, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -42.7, + "pos_x": -1400.5, + "pos_y": -1538.5, + "room": 1, + "rot_z": 0, + "rot_y": -161, + "rot_x": 0, + "type": 32, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -2042.7, + "pos_x": -400.5, + "pos_y": -1038.5, + "room": 1, + "rot_z": 0, + "rot_y": -21, + "rot_x": 0, + "type": 32, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -1042.7, + "pos_x": -2200.5, + "pos_y": -2538.5, + "room": 1, + "rot_z": 0, + "rot_y": -1, + "rot_x": 0, + "type": 32, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -1042.7, + "pos_x": 1400.5, + "pos_y": -1038.5, + "room": 1, + "rot_z": 0, + "rot_y": -21, + "rot_x": 0, + "type": 32, + "quantity": -1 + } + ] + ], + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 0, + "quest_rank": 1, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 29, + "wave_2_transition_type": 0, + "location": 12, + "penalty_per_cart": 1500, + "resources": 0, + "details": "My sister's interest in\nmonsters is beginning to\nbecome scandalous! She simply\nmust find a husband --\nhopefully at the next ball. We\nneed enough Sharqskin for her\ndress, so please slay 30 fish!", + "description": "Hunt 30 Sharq", + "wave_1_transition_target": 0, + "hrp_restriction": 20, + "quest_fee": 400, + "quest_id": 61009, + "name": "Alluring Dress", + "main_monster_2": 0, + "main_monster_1": 32, + "supply_set_number": 48, + "summon": 1677787404, + "client": "Elder Princess", + "flags": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 1 + ] + ], + "success_message": "Complete the Main Quest." + }, + "large_monsters": { + "monster_2": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_1": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + } + } +} \ No newline at end of file diff --git a/event/Animal Attractions.json b/event/Animal Attractions.json new file mode 100644 index 0000000..372258e --- /dev/null +++ b/event/Animal Attractions.json @@ -0,0 +1,935 @@ +{ + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "objective_details": { + "subquest_2": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + }, + "main_quest": { + "objective_num": 2, + "hrp_reward": 1250, + "rewards_row_1": [ + [ + 300, + 1, + 2 + ], + [ + 299, + 1, + 24 + ], + [ + 301, + 1, + 18 + ], + [ + 155, + 1, + 8 + ], + [ + 154, + 1, + 8 + ], + [ + 303, + 1, + 12 + ], + [ + 590, + 1, + 28 + ] + ], + "rewards_row_2": [ + [ + 300, + 1, + 2 + ], + [ + 299, + 1, + 24 + ], + [ + 301, + 1, + 18 + ], + [ + 155, + 1, + 8 + ], + [ + 154, + 1, + 8 + ], + [ + 303, + 1, + 12 + ], + [ + 590, + 1, + 28 + ] + ], + "objective_type": 8, + "zenny_reward": 14400, + "type": 129 + }, + "subquest_1": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + } + }, + "small_monsters": [ + [], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 210.05, + "pos_x": 2039.26, + "pos_y": 12.7, + "room": 1, + "rot_z": 0, + "rot_y": 17, + "rot_x": 0, + "type": 10, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 814.06, + "pos_x": 857.89, + "pos_y": -41.97, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 10, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 135.22, + "pos_x": 97.58, + "pos_y": -75.54, + "room": 1, + "rot_z": 0, + "rot_y": -45, + "rot_x": 0, + "type": 10, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -667.01, + "pos_x": -393.52, + "pos_y": -163.94, + "room": 1, + "rot_z": 0, + "rot_y": -199, + "rot_x": 0, + "type": 10, + "quantity": 1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 1381.66, + "pos_x": -853.86, + "pos_y": 19.45, + "room": 2, + "rot_z": 0, + "rot_y": -113, + "rot_x": 0, + "type": 34, + "quantity": 1 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": -369.71, + "pos_x": -553.59, + "pos_y": -2.57, + "room": 2, + "rot_z": 0, + "rot_y": 193, + "rot_x": 0, + "type": 34, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -530.3, + "pos_x": -1698.75, + "pos_y": 5.74, + "room": 2, + "rot_z": 0, + "rot_y": 398, + "rot_x": 0, + "type": 34, + "quantity": 3 + } + ], + [ + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -610.86, + "pos_x": 873.28, + "pos_y": 85.07, + "room": 3, + "rot_z": 0, + "rot_y": -153, + "rot_x": 0, + "type": 31, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": 25.11, + "pos_x": 1247.84, + "pos_y": 106.65, + "room": 3, + "rot_z": 0, + "rot_y": -358, + "rot_x": 0, + "type": 31, + "quantity": -1 + }, + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": -32.21, + "pos_x": 177.92, + "pos_y": 450.7, + "room": 3, + "rot_z": 0, + "rot_y": -238, + "rot_x": 0, + "type": 37, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 362.86, + "pos_x": -78.66, + "pos_y": 330.7, + "room": 3, + "rot_z": 0, + "rot_y": -79, + "rot_x": 0, + "type": 37, + "quantity": 2 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 4145.11, + "pos_x": 606.18, + "pos_y": -12.89, + "room": 4, + "rot_z": 0, + "rot_y": 324, + "rot_x": 0, + "type": 11, + "quantity": 3 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 2292.05, + "pos_x": 524.37, + "pos_y": -18.65, + "room": 4, + "rot_z": 0, + "rot_y": 199, + "rot_x": 0, + "type": 11, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": 3044.5, + "pos_x": -460.08, + "pos_y": -71.51, + "room": 4, + "rot_z": 0, + "rot_y": -460, + "rot_x": 0, + "type": 29, + "quantity": -1 + } + ], + [ + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -211.14, + "pos_x": 300.4, + "pos_y": 4.0, + "room": 5, + "rot_z": 0, + "rot_y": 0, + "rot_x": 0, + "type": 10, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -918.94, + "pos_x": 458.16, + "pos_y": 1.49, + "room": 5, + "rot_z": 0, + "rot_y": 51, + "rot_x": 0, + "type": 10, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 925.68, + "pos_x": 1813.83, + "pos_y": 3.06, + "room": 5, + "rot_z": 0, + "rot_y": 494, + "rot_x": 0, + "type": 10, + "quantity": 4 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -757.3, + "pos_x": -504.37, + "pos_y": 3.05, + "room": 5, + "rot_z": 0, + "rot_y": 676, + "rot_x": 0, + "type": 11, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -420.89, + "pos_x": 1118.48, + "pos_y": 4.0, + "room": 5, + "rot_z": 0, + "rot_y": 364, + "rot_x": 0, + "type": 11, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 222.99, + "pos_x": 2658.84, + "pos_y": 3.24, + "room": 5, + "rot_z": 0, + "rot_y": 756, + "rot_x": 0, + "type": 11, + "quantity": -1 + } + ], + [ + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": 695.3, + "pos_x": 1612.71, + "pos_y": -30.27, + "room": 6, + "rot_z": 0, + "rot_y": 517, + "rot_x": 0, + "type": 29, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -266.33, + "pos_x": -2050.04, + "pos_y": -31.9, + "room": 6, + "rot_z": 0, + "rot_y": 28, + "rot_x": 0, + "type": 29, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -26.14, + "pos_x": -344.14, + "pos_y": -13.0, + "room": 6, + "rot_z": 0, + "rot_y": 443, + "rot_x": 0, + "type": 33, + "quantity": 5 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -416.52, + "pos_x": -161.74, + "pos_y": 4.8, + "room": 6, + "rot_z": 0, + "rot_y": 472, + "rot_x": 0, + "type": 33, + "quantity": 4 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -643.19, + "pos_x": -481.05, + "pos_y": 15.34, + "room": 6, + "rot_z": 0, + "rot_y": 568, + "rot_x": 0, + "type": 33, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -235.13, + "pos_x": -692.26, + "pos_y": -11.02, + "room": 6, + "rot_z": 0, + "rot_y": 608, + "rot_x": 0, + "type": 33, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -343.46, + "pos_x": -417.82, + "pos_y": -1.44, + "room": 6, + "rot_z": 0, + "rot_y": 147, + "rot_x": 0, + "type": 33, + "quantity": 3 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -2925.29, + "pos_x": 4294.59, + "pos_y": -75.65, + "room": 7, + "rot_z": 0, + "rot_y": -130, + "rot_x": 0, + "type": 10, + "quantity": 3 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -2049.22, + "pos_x": 3995.3, + "pos_y": -45.09, + "room": 7, + "rot_z": 0, + "rot_y": -85, + "rot_x": 0, + "type": 10, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -1574.97, + "pos_x": 4187.0, + "pos_y": -17.07, + "room": 7, + "rot_z": 0, + "rot_y": -17, + "rot_x": 0, + "type": 10, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -2570.78, + "pos_x": 3781.64, + "pos_y": -66.86, + "room": 7, + "rot_z": 0, + "rot_y": -130, + "rot_x": 0, + "type": 10, + "quantity": 1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 4049.95, + "pos_x": 293.99, + "pos_y": -170.31, + "room": 8, + "rot_z": 0, + "rot_y": 819, + "rot_x": 0, + "type": 22, + "quantity": 7 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 3440.16, + "pos_x": 124.95, + "pos_y": -186.54, + "room": 8, + "rot_z": 0, + "rot_y": 819, + "rot_x": 0, + "type": 22, + "quantity": 5 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 4509.84, + "pos_x": -425.01, + "pos_y": -179.3, + "room": 8, + "rot_z": 0, + "rot_y": 819, + "rot_x": 0, + "type": 22, + "quantity": 3 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 4108.5, + "pos_x": -714.48, + "pos_y": -183.78, + "room": 8, + "rot_z": 0, + "rot_y": 819, + "rot_x": 0, + "type": 22, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 3726.09, + "pos_x": -1021.27, + "pos_y": -215.48, + "room": 8, + "rot_z": 0, + "rot_y": 819, + "rot_x": 0, + "type": 22, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -316.05, + "pos_x": -1974.57, + "pos_y": -209.48, + "room": 8, + "rot_z": 0, + "rot_y": -56, + "rot_x": 0, + "type": 31, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -382.9, + "pos_x": -1825.11, + "pos_y": -210.91, + "room": 8, + "rot_z": 0, + "rot_y": 130, + "rot_x": 0, + "type": 31, + "quantity": -1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 592.49, + "pos_x": 3383.92, + "pos_y": 2.65, + "room": 9, + "rot_z": 0, + "rot_y": -193, + "rot_x": 0, + "type": 30, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 987.24, + "pos_x": 2653.55, + "pos_y": -22.59, + "room": 9, + "rot_z": 0, + "rot_y": -73, + "rot_x": 0, + "type": 30, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": 445.91, + "pos_x": 2838.69, + "pos_y": -28.0, + "room": 9, + "rot_z": 0, + "rot_y": -142, + "rot_x": 0, + "type": 31, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": 575.43, + "pos_x": 2109.53, + "pos_y": -26.57, + "room": 9, + "rot_z": 0, + "rot_y": -460, + "rot_x": 0, + "type": 31, + "quantity": -1 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 2199.24, + "pos_x": -1713.72, + "pos_y": 1262.5, + "room": 9, + "rot_z": 0, + "rot_y": -45, + "rot_x": 273, + "type": 37, + "quantity": -1 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 1682.19, + "pos_x": -1174.44, + "pos_y": 1319.5, + "room": 9, + "rot_z": 0, + "rot_y": -39, + "rot_x": 0, + "type": 37, + "quantity": 6 + } + ], + [], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -720.92, + "pos_x": 2195.89, + "pos_y": 73.7, + "room": 11, + "rot_z": 0, + "rot_y": 39, + "rot_x": 0, + "type": 26, + "quantity": 2 + }, + { + "variant": 6, + "unk1": 1, + "unk2": 255, + "pos_z": 896.44, + "pos_x": -535.73, + "pos_y": 1212.59, + "room": 11, + "rot_z": 0, + "rot_y": 169, + "rot_x": 0, + "type": 26, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 289.52, + "pos_x": -434.0, + "pos_y": 198.96, + "room": 11, + "rot_z": 0, + "rot_y": -267, + "rot_x": 0, + "type": 37, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 66.62, + "pos_x": -802.69, + "pos_y": 198.96, + "room": 11, + "rot_z": 0, + "rot_y": -216, + "rot_x": 0, + "type": 37, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -371.21, + "pos_x": -645.14, + "pos_y": 288.96, + "room": 11, + "rot_z": 0, + "rot_y": -227, + "rot_x": 0, + "type": 37, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -166.43, + "pos_x": -473.33, + "pos_y": 168.96, + "room": 11, + "rot_z": 0, + "rot_y": -210, + "rot_x": 0, + "type": 37, + "quantity": 1 + } + ] + ], + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 0, + "quest_rank": 2, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 25, + "wave_2_transition_type": 0, + "location": 2, + "penalty_per_cart": 5200, + "resources": 0, + "details": "You'll need more than big\nmuscles and bigger weapons to\ncapture two of the fiercest\nmonsters around -- you'll need\nfinesse! If you live for the\nart and craft of the hunt,\nshow me what you got!", + "description": "Capture 2 Barroth", + "wave_1_transition_target": 0, + "hrp_restriction": 7, + "quest_fee": 1000, + "quest_id": 61003, + "name": "Animal Attractions", + "main_monster_2": 33, + "main_monster_1": 36, + "supply_set_number": 14, + "summon": 0, + "client": "Passionate Hunter", + "flags": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 1 + ] + ], + "success_message": "Complete the Main Quest." + }, + "large_monsters": { + "monster_2": { + "size_spread": 1, + "hp_spread": 1, + "level": 25, + "boss_id": 1, + "type": 8, + "starting_area": 1, + "spawn_count": 1, + "size": 100 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_1": { + "size_spread": 1, + "hp_spread": 1, + "level": 25, + "boss_id": 1, + "type": 8, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + } + } +} \ No newline at end of file diff --git a/event/Blood Sport.json b/event/Blood Sport.json new file mode 100644 index 0000000..36472fc --- /dev/null +++ b/event/Blood Sport.json @@ -0,0 +1,324 @@ +{ + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "objective_details": { + "subquest_2": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + }, + "main_quest": { + "objective_num": 1, + "hrp_reward": 1760, + "rewards_row_1": [ + [ + 479, + 1, + 1 + ], + [ + 457, + 1, + 14 + ], + [ + 410, + 1, + 10 + ], + [ + 296, + 1, + 20 + ], + [ + 386, + 1, + 12 + ], + [ + 455, + 8, + 9 + ], + [ + 412, + 1, + 9 + ], + [ + 592, + 1, + 25 + ] + ], + "rewards_row_2": [ + [ + 479, + 1, + 1 + ], + [ + 457, + 1, + 14 + ], + [ + 410, + 1, + 10 + ], + [ + 296, + 1, + 20 + ], + [ + 386, + 1, + 12 + ], + [ + 455, + 1, + 9 + ], + [ + 412, + 1, + 9 + ], + [ + 592, + 1, + 25 + ] + ], + "objective_type": 9, + "zenny_reward": 17600, + "type": 1 + }, + "subquest_1": { + "objective_num": 1, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 6, + "zenny_reward": 0, + "type": 1 + } + }, + "small_monsters": [ + [], + [ + { + "variant": 3, + "unk1": 1, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -2404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -2404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -1404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -3404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -5404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -4404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -2404.5, + "pos_y": -4038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 40, + "quantity": -1 + } + ] + ], + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 0, + "quest_rank": 3, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 29, + "wave_2_transition_type": 0, + "location": 8, + "penalty_per_cart": 6000, + "resources": 0, + "details": "Oh, boo! I'm tired of watching\nrun-of-the-mill hunts. The\nDiablos and the Uragaan are\nsupposed to be the ultimate\nmonster duo. I'd love to watch\nthem maim some foolish hunter!\nDo put on a good show...", + "description": "Hunt an Uragaan\nand a Diablos", + "wave_1_transition_target": 0, + "hrp_restriction": 8, + "quest_fee": 1750, + "quest_id": 61008, + "name": "Blood Sport", + "main_monster_2": 6, + "main_monster_1": 9, + "supply_set_number": 43, + "summon": 0, + "client": "Spoiled Princess", + "flags": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ] + ], + "success_message": "Complete the Main Quest." + }, + "large_monsters": { + "monster_2": { + "size_spread": 3, + "hp_spread": 1, + "level": 29, + "boss_id": 1, + "type": 6, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_1": { + "size_spread": 3, + "hp_spread": 1, + "level": 29, + "boss_id": 0, + "type": 9, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + } + } +} \ No newline at end of file diff --git a/event/Cold Call.json b/event/Cold Call.json new file mode 100644 index 0000000..6a781b2 --- /dev/null +++ b/event/Cold Call.json @@ -0,0 +1,979 @@ +{ + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "objective_details": { + "subquest_2": { + "objective_num": 1, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 5, + "zenny_reward": 0, + "type": 1 + }, + "main_quest": { + "objective_num": 1, + "hrp_reward": 2240, + "rewards_row_1": [ + [ + 405, + 1, + 2 + ], + [ + 292, + 1, + 12 + ], + [ + 541, + 1, + 20 + ], + [ + 441, + 1, + 7 + ], + [ + 440, + 1, + 14 + ], + [ + 409, + 1, + 5 + ], + [ + 108, + 1, + 10 + ], + [ + 112, + 1, + 5 + ], + [ + 591, + 1, + 25 + ] + ], + "rewards_row_2": [ + [ + 405, + 1, + 2 + ], + [ + 292, + 1, + 12 + ], + [ + 541, + 1, + 20 + ], + [ + 441, + 1, + 7 + ], + [ + 440, + 1, + 14 + ], + [ + 409, + 1, + 5 + ], + [ + 108, + 1, + 10 + ], + [ + 112, + 1, + 5 + ], + [ + 591, + 1, + 25 + ] + ], + "objective_type": 14, + "zenny_reward": 16000, + "type": 1 + }, + "subquest_1": { + "objective_num": 1, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 4, + "zenny_reward": 0, + "type": 1 + } + }, + "small_monsters": [ + [], + [ + { + "variant": 0, + "unk1": 0, + "unk2": 255, + "pos_z": -979.26, + "pos_x": -559.73, + "pos_y": 20.32, + "room": 1, + "rot_z": 0, + "rot_y": 352, + "rot_x": 0, + "type": 28, + "quantity": -1 + }, + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": -616.77, + "pos_x": 207.09, + "pos_y": 5.0, + "room": 1, + "rot_z": 0, + "rot_y": 238, + "rot_x": 0, + "type": 28, + "quantity": -1 + } + ], + [ + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -1620.63, + "pos_x": 1189.65, + "pos_y": 10.65, + "room": 2, + "rot_z": 0, + "rot_y": 28, + "rot_x": 0, + "type": 26, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -1651.16, + "pos_x": 760.17, + "pos_y": 27.35, + "room": 2, + "rot_z": 0, + "rot_y": -22, + "rot_x": 0, + "type": 26, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -1902.14, + "pos_x": 724.92, + "pos_y": 2.63, + "room": 2, + "rot_z": 0, + "rot_y": -79, + "rot_x": 0, + "type": 26, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": 1144.14, + "pos_x": -1433.39, + "pos_y": 13.81, + "room": 2, + "rot_z": 0, + "rot_y": 426, + "rot_x": 0, + "type": 26, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": 918.99, + "pos_x": -1297.7, + "pos_y": 12.96, + "room": 2, + "rot_z": 0, + "rot_y": 477, + "rot_x": 0, + "type": 26, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": 806.39, + "pos_x": -1437.67, + "pos_y": 27.98, + "room": 2, + "rot_z": 0, + "rot_y": 534, + "rot_x": 0, + "type": 26, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 768.87, + "pos_x": 1137.17, + "pos_y": 5.05, + "room": 2, + "rot_z": 0, + "rot_y": -28, + "rot_x": 0, + "type": 28, + "quantity": -1 + }, + { + "variant": 1, + "unk1": 0, + "unk2": 255, + "pos_z": 1833.63, + "pos_x": 14.17, + "pos_y": 46.5, + "room": 2, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 28, + "quantity": -1 + }, + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": 1106.89, + "pos_x": 556.11, + "pos_y": 18.99, + "room": 2, + "rot_z": 0, + "rot_y": 728, + "rot_x": 0, + "type": 28, + "quantity": -1 + }, + { + "variant": 1, + "unk1": 3, + "unk2": 255, + "pos_z": 1109.13, + "pos_x": -1739.64, + "pos_y": 34.73, + "room": 2, + "rot_z": 0, + "rot_y": -102, + "rot_x": 0, + "type": 35, + "quantity": -1 + }, + { + "variant": 1, + "unk1": 3, + "unk2": 255, + "pos_z": -1964.12, + "pos_x": 969.57, + "pos_y": 0.5, + "room": 2, + "rot_z": 0, + "rot_y": -102, + "rot_x": 0, + "type": 35, + "quantity": -1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 314.53, + "pos_x": 3146.44, + "pos_y": 40.98, + "room": 3, + "rot_z": 0, + "rot_y": -56, + "rot_x": 0, + "type": 13, + "quantity": 3 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -709.74, + "pos_x": 3471.39, + "pos_y": 7.0, + "room": 3, + "rot_z": 0, + "rot_y": -136, + "rot_x": 0, + "type": 13, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -3259.04, + "pos_x": 3589.04, + "pos_y": 5.0, + "room": 3, + "rot_z": 0, + "rot_y": -11, + "rot_x": 0, + "type": 26, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -3166.77, + "pos_x": 3306.99, + "pos_y": 5.0, + "room": 3, + "rot_z": 0, + "rot_y": -34, + "rot_x": 0, + "type": 26, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -3692.1, + "pos_x": 3546.64, + "pos_y": 15.73, + "room": 3, + "rot_z": 0, + "rot_y": -113, + "rot_x": 0, + "type": 26, + "quantity": -1 + }, + { + "variant": 1, + "unk1": 3, + "unk2": 255, + "pos_z": -3606.37, + "pos_x": 3742.35, + "pos_y": 29.38, + "room": 3, + "rot_z": 0, + "rot_y": -39, + "rot_x": 0, + "type": 35, + "quantity": -1 + } + ], + [ + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": 20.74, + "pos_x": 76.48, + "pos_y": 18.62, + "room": 4, + "rot_z": 0, + "rot_y": 298, + "rot_x": 0, + "type": 26, + "quantity": 2 + }, + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": -353.74, + "pos_x": 643.46, + "pos_y": 0.0, + "room": 4, + "rot_z": 0, + "rot_y": 25696, + "rot_x": 0, + "type": 26, + "quantity": 3 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 236.08, + "pos_x": 345.94, + "pos_y": 3.39, + "room": 4, + "rot_z": 0, + "rot_y": -59, + "rot_x": 0, + "type": 26, + "quantity": 7 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": -299.36, + "pos_x": 1276.36, + "pos_y": 10.24, + "room": 4, + "rot_z": 0, + "rot_y": -19, + "rot_x": 0, + "type": 26, + "quantity": 4 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -701.98, + "pos_x": 3776.99, + "pos_y": 0.61, + "room": 4, + "rot_z": 0, + "rot_y": 46555, + "rot_x": 0, + "type": 26, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": 479.04, + "pos_x": 3282.63, + "pos_y": 0.0, + "room": 4, + "rot_z": 0, + "rot_y": 0, + "rot_x": 0, + "type": 26, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -124.31, + "pos_x": 2717.68, + "pos_y": 0.6, + "room": 4, + "rot_z": 0, + "rot_y": -91, + "rot_x": 0, + "type": 26, + "quantity": -1 + }, + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": -347.36, + "pos_x": -629.64, + "pos_y": 1496.43, + "room": 4, + "rot_z": 0, + "rot_y": 5, + "rot_x": 0, + "type": 26, + "quantity": 4 + }, + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": -1054.46, + "pos_x": -380.25, + "pos_y": 1428.15, + "room": 4, + "rot_z": 0, + "rot_y": -45, + "rot_x": 0, + "type": 26, + "quantity": 4 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -2848.38, + "pos_x": 4169.78, + "pos_y": 7.24, + "room": 4, + "rot_z": 0, + "rot_y": 182, + "rot_x": 0, + "type": 35, + "quantity": 1 + }, + { + "variant": 1, + "unk1": 3, + "unk2": 255, + "pos_z": 438.18, + "pos_x": 1700.26, + "pos_y": 0.0, + "room": 4, + "rot_z": 0, + "rot_y": 147, + "rot_x": 0, + "type": 35, + "quantity": -1 + }, + { + "variant": 1, + "unk1": 3, + "unk2": 255, + "pos_z": -579.15, + "pos_x": -2452.98, + "pos_y": 44.18, + "room": 4, + "rot_z": 0, + "rot_y": 51, + "rot_x": 0, + "type": 35, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -1208.04, + "pos_x": 103.34, + "pos_y": 41.02, + "room": 4, + "rot_z": 0, + "rot_y": 244, + "rot_x": 0, + "type": 35, + "quantity": 1 + } + ], + [ + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": 157.88, + "pos_x": -11.26, + "pos_y": -15.36, + "room": 5, + "rot_z": 0, + "rot_y": 238, + "rot_x": 0, + "type": 13, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": 509.01, + "pos_x": -1291.4, + "pos_y": 4.0, + "room": 5, + "rot_z": 0, + "rot_y": 0, + "rot_x": 0, + "type": 13, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -1393.44, + "pos_x": -855.8, + "pos_y": 0.48, + "room": 5, + "rot_z": 0, + "rot_y": 159, + "rot_x": 0, + "type": 26, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -1264.1, + "pos_x": -525.73, + "pos_y": -4.16, + "room": 5, + "rot_z": 0, + "rot_y": -182, + "rot_x": 0, + "type": 26, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -1717.3, + "pos_x": -574.99, + "pos_y": -4.64, + "room": 5, + "rot_z": 0, + "rot_y": 159, + "rot_x": 0, + "type": 26, + "quantity": -1 + }, + { + "variant": 1, + "unk1": 3, + "unk2": 255, + "pos_z": -267.32, + "pos_x": 865.61, + "pos_y": -4.3, + "room": 5, + "rot_z": 0, + "rot_y": 0, + "rot_x": 0, + "type": 35, + "quantity": -1 + }, + { + "variant": 1, + "unk1": 3, + "unk2": 255, + "pos_z": -1119.9, + "pos_x": -1246.4, + "pos_y": 6.31, + "room": 5, + "rot_z": 0, + "rot_y": 0, + "rot_x": 0, + "type": 35, + "quantity": -1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 1426.87, + "pos_x": -1266.86, + "pos_y": 17.79, + "room": 6, + "rot_z": 0, + "rot_y": 26038, + "rot_x": 0, + "type": 13, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -1385.65, + "pos_x": -1838.98, + "pos_y": -0.78, + "room": 6, + "rot_z": 0, + "rot_y": 39, + "rot_x": 0, + "type": 13, + "quantity": 4 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -1722.55, + "pos_x": -1219.15, + "pos_y": -2.77, + "room": 6, + "rot_z": 0, + "rot_y": 0, + "rot_x": 0, + "type": 13, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -712.22, + "pos_x": 1068.11, + "pos_y": -9.24, + "room": 6, + "rot_z": 0, + "rot_y": -73, + "rot_x": 0, + "type": 26, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": 187.09, + "pos_x": 784.49, + "pos_y": -8.94, + "room": 6, + "rot_z": 0, + "rot_y": -73, + "rot_x": 0, + "type": 26, + "quantity": -1 + }, + { + "variant": 1, + "unk1": 3, + "unk2": 255, + "pos_z": -936.3, + "pos_x": 758.48, + "pos_y": 20.97, + "room": 6, + "rot_z": 0, + "rot_y": -125, + "rot_x": 0, + "type": 35, + "quantity": -1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -1641.55, + "pos_x": 1495.12, + "pos_y": 21.92, + "room": 7, + "rot_z": 0, + "rot_y": -28, + "rot_x": 0, + "type": 13, + "quantity": 3 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -548.03, + "pos_x": -1936.97, + "pos_y": 7.33, + "room": 7, + "rot_z": 0, + "rot_y": 0, + "rot_x": 0, + "type": 13, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 1374.15, + "pos_x": -1706.1, + "pos_y": 2.87, + "room": 7, + "rot_z": 0, + "rot_y": 136, + "rot_x": 0, + "type": 13, + "quantity": 3 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -910.88, + "pos_x": 399.71, + "pos_y": 0.0, + "room": 7, + "rot_z": 0, + "rot_y": -153, + "rot_x": 0, + "type": 13, + "quantity": 4 + } + ], + [], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 24.7, + "pos_x": -776.39, + "pos_y": 27.75, + "room": 9, + "rot_z": 0, + "rot_y": 23347, + "rot_x": 0, + "type": 13, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 214.45, + "pos_x": -1321.35, + "pos_y": 97.17, + "room": 9, + "rot_z": 0, + "rot_y": 45, + "rot_x": 0, + "type": 13, + "quantity": 4 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -1084.8, + "pos_x": -1395.61, + "pos_y": 88.08, + "room": 9, + "rot_z": 0, + "rot_y": 30646, + "rot_x": 0, + "type": 13, + "quantity": 2 + } + ] + ], + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 0, + "quest_rank": 3, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 27, + "wave_2_transition_type": 0, + "location": 4, + "penalty_per_cart": 6000, + "resources": 0, + "details": "It was just a typical sub-zero\nnight in the Tundra. But then,\nBOOM! The sky flashed and the\nground quaked, like something\nbig had crashed down. Then the\nmonsters came. Help! We can't\nwork under these conditions!", + "description": "Hunt a Gig., Bar. & bird wyv.", + "wave_1_transition_target": 0, + "hrp_restriction": 8, + "quest_fee": 1600, + "quest_id": 61006, + "name": "Cold Call", + "main_monster_2": 26, + "main_monster_1": 28, + "supply_set_number": 8, + "summon": 0, + "client": "Tundra-expedition Member", + "flags": [ + [ + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 1, + 1 + ] + ], + "success_message": "Complete the Main Quest." + }, + "large_monsters": { + "monster_2": { + "size_spread": 1, + "hp_spread": 1, + "level": 34, + "boss_id": 1, + "type": 4, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + }, + "monster_3": { + "size_spread": 1, + "hp_spread": 1, + "level": 35, + "boss_id": 2, + "type": 5, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + }, + "monster_1": { + "size_spread": 1, + "hp_spread": 0, + "level": 34, + "boss_id": 0, + "type": 14, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + } + } +} \ No newline at end of file diff --git a/event/Double Diablos.json b/event/Double Diablos.json new file mode 100644 index 0000000..c5ca9bd --- /dev/null +++ b/event/Double Diablos.json @@ -0,0 +1,225 @@ +{ + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "objective_details": { + "subquest_2": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + }, + "main_quest": { + "objective_num": 2, + "hrp_reward": 1920, + "rewards_row_1": [ + [ + 445, + 1, + 1 + ], + [ + 457, + 1, + 11 + ], + [ + 456, + 1, + 20 + ], + [ + 295, + 1, + 18 + ], + [ + 595, + 1, + 8 + ], + [ + 455, + 1, + 7 + ], + [ + 441, + 1, + 10 + ], + [ + 594, + 1, + 25 + ] + ], + "rewards_row_2": [ + [ + 445, + 1, + 1 + ], + [ + 457, + 1, + 11 + ], + [ + 456, + 1, + 20 + ], + [ + 295, + 1, + 18 + ], + [ + 595, + 1, + 8 + ], + [ + 455, + 1, + 7 + ], + [ + 441, + 1, + 10 + ], + [ + 594, + 1, + 25 + ] + ], + "objective_type": 6, + "zenny_reward": 38400, + "type": 129 + }, + "subquest_1": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + } + }, + "small_monsters": [ + [], + [] + ], + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 0, + "quest_rank": 5, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 59, + "wave_2_transition_type": 0, + "location": 8, + "penalty_per_cart": 12800, + "resources": 1, + "details": "One Diablos would dismember\nyour average weekend warrior,\nbut two Diablos!? Only true\nhunters need apply for this\nQuest. Plan your tactics well,\nand perhaps we can compare\nnotes later... if you survive.", + "description": "Capture 2 Diablos", + "wave_1_transition_target": 0, + "hrp_restriction": 10, + "quest_fee": 2600, + "quest_id": 61014, + "name": "Double Diablos", + "main_monster_2": 0, + "main_monster_1": 0, + "supply_set_number": 43, + "summon": 0, + "client": "Passionate Hunter", + "flags": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 1 + ] + ], + "success_message": "Complete the Main Quest." + }, + "large_monsters": { + "monster_2": { + "size_spread": 11, + "hp_spread": 0, + "level": 59, + "boss_id": 2, + "type": 6, + "starting_area": 1, + "spawn_count": 1, + "size": 100 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_1": { + "size_spread": 10, + "hp_spread": 0, + "level": 59, + "boss_id": 1, + "type": 6, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + } + } +} \ No newline at end of file diff --git a/event/Fiery Skies, Frozen Fields.json b/event/Fiery Skies, Frozen Fields.json new file mode 100644 index 0000000..c9ae4df --- /dev/null +++ b/event/Fiery Skies, Frozen Fields.json @@ -0,0 +1,205 @@ +{ + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "objective_details": { + "subquest_2": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + }, + "main_quest": { + "objective_num": 1, + "hrp_reward": 4290, + "rewards_row_1": [ + [ + 177, + 2, + 25 + ], + [ + 451, + 2, + 24 + ], + [ + 445, + 2, + 17 + ], + [ + 446, + 1, + 15 + ], + [ + 174, + 1, + 10 + ], + [ + 183, + 1, + 9 + ] + ], + "rewards_row_2": [ + [ + 177, + 2, + 25 + ], + [ + 451, + 2, + 24 + ], + [ + 445, + 2, + 17 + ], + [ + 446, + 1, + 15 + ], + [ + 174, + 1, + 10 + ], + [ + 183, + 1, + 9 + ] + ], + "objective_type": 5, + "zenny_reward": 42000, + "type": 1 + }, + "subquest_1": { + "objective_num": 1, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 2, + "zenny_reward": 0, + "type": 1 + } + }, + "small_monsters": [ + [], + [] + ], + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 0, + "quest_rank": 6, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 60, + "wave_2_transition_type": 0, + "location": 8, + "penalty_per_cart": 14000, + "resources": 1, + "details": "It's time for a FESTIVAL!\nPresenting the King of the\nSkies and the Knight of the\nTundra -- the flash of fire\nand ice from above and\nbelow -- only at the arena!\nDo you have what it takes?", + "description": "Hunt a Barioth and\na Rathalos", + "wave_1_transition_target": 0, + "hrp_restriction": 11, + "quest_fee": 4200, + "quest_id": 61023, + "name": "Fiery Skies, Frozen Fields", + "main_monster_2": 0, + "main_monster_1": 0, + "supply_set_number": 43, + "summon": 0, + "client": "Deserted Island Maiden", + "flags": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ] + ], + "success_message": "Complete the Main Quest." + }, + "large_monsters": { + "monster_2": { + "size_spread": 10, + "hp_spread": 0, + "level": 59, + "boss_id": 1, + "type": 2, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_1": { + "size_spread": 11, + "hp_spread": 0, + "level": 60, + "boss_id": 0, + "type": 5, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + } + } +} \ No newline at end of file diff --git a/event/Flooded Forest Free-For-All.json b/event/Flooded Forest Free-For-All.json new file mode 100644 index 0000000..bf860b4 --- /dev/null +++ b/event/Flooded Forest Free-For-All.json @@ -0,0 +1,723 @@ +{ + "small_monsters": [ + [], + [ + { + "type": 17, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 1, + "quantity": 1, + "pos_x": -1169.23, + "pos_y": -50.0, + "pos_z": -423.3, + "rot_x": 0, + "rot_y": -25600, + "rot_z": 0 + }, + { + "type": 17, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 1, + "quantity": 3, + "pos_x": 1367.09, + "pos_y": -50.0, + "pos_z": -1500.72, + "rot_x": 0, + "rot_y": 59392, + "rot_z": 0 + }, + { + "type": 36, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 1, + "quantity": -1, + "pos_x": 1019.5, + "pos_y": 120.0, + "pos_z": -3357.52, + "rot_x": 49152, + "rot_y": 32768, + "rot_z": 0 + } + ], + [ + { + "type": 23, + "unk1": 1, + "unk2": 2, + "variant": 0, + "room": 2, + "quantity": -1, + "pos_x": -2518.64, + "pos_y": -470.0, + "pos_z": 620.06, + "rot_x": 0, + "rot_y": 27648, + "rot_z": 0 + }, + { + "type": 23, + "unk1": 1, + "unk2": 2, + "variant": 0, + "room": 2, + "quantity": -1, + "pos_x": -1786.72, + "pos_y": -230.0, + "pos_z": 24.74, + "rot_x": 0, + "rot_y": 51200, + "rot_z": 0 + }, + { + "type": 32, + "unk1": 1, + "unk2": 2, + "variant": 6, + "room": 2, + "quantity": -1, + "pos_x": -2127.59, + "pos_y": -479.91, + "pos_z": -1175.97, + "rot_x": 0, + "rot_y": -7168, + "rot_z": 0 + }, + { + "type": 32, + "unk1": 1, + "unk2": 2, + "variant": 6, + "room": 2, + "quantity": -1, + "pos_x": -2231.54, + "pos_y": -751.13, + "pos_z": -1060.03, + "rot_x": 0, + "rot_y": -7168, + "rot_z": 0 + }, + { + "type": 32, + "unk1": 1, + "unk2": 2, + "variant": 6, + "room": 2, + "quantity": -1, + "pos_x": -2037.48, + "pos_y": -628.68, + "pos_z": -957.11, + "rot_x": 0, + "rot_y": -7168, + "rot_z": 0 + } + ], + [ + { + "type": 36, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 3, + "quantity": 3, + "pos_x": -1084.83, + "pos_y": 283.44, + "pos_z": -815.51, + "rot_x": 0, + "rot_y": -9216, + "rot_z": 0 + }, + { + "type": 36, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 3, + "quantity": 2, + "pos_x": -737.17, + "pos_y": 163.44, + "pos_z": -1328.84, + "rot_x": 0, + "rot_y": -39936, + "rot_z": 0 + } + ], + [ + { + "type": 32, + "unk1": 4, + "unk2": 255, + "variant": 5, + "room": 4, + "quantity": 3, + "pos_x": 1295.68, + "pos_y": -1334.54, + "pos_z": -1102.45, + "rot_x": 0, + "rot_y": -22528, + "rot_z": 0 + }, + { + "type": 32, + "unk1": 4, + "unk2": 255, + "variant": 5, + "room": 4, + "quantity": 1, + "pos_x": 2116.25, + "pos_y": -1371.63, + "pos_z": 1500.92, + "rot_x": 0, + "rot_y": -38912, + "rot_z": 0 + } + ], + [ + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 5, + "quantity": 3, + "pos_x": 2381.23, + "pos_y": 3.57, + "pos_z": 5454.15, + "rot_x": 0, + "rot_y": 14336, + "rot_z": 0 + }, + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 5, + "quantity": 2, + "pos_x": 2530.36, + "pos_y": 5.0, + "pos_z": 4637.36, + "rot_x": 0, + "rot_y": 27648, + "rot_z": 0 + }, + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 5, + "quantity": 1, + "pos_x": -399.12, + "pos_y": 0.87, + "pos_z": -1183.24, + "rot_x": 0, + "rot_y": 63488, + "rot_z": 0 + }, + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 5, + "quantity": 1, + "pos_x": -941.2, + "pos_y": 9.76, + "pos_z": -1589.08, + "rot_x": 0, + "rot_y": 26624, + "rot_z": 0 + } + ], + [ + { + "type": 17, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 6, + "quantity": 1, + "pos_x": 2376.71, + "pos_y": -1090.0, + "pos_z": 74.87, + "rot_x": 0, + "rot_y": -38912, + "rot_z": 0 + }, + { + "type": 17, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 6, + "quantity": 3, + "pos_x": 341.73, + "pos_y": -453.9, + "pos_z": 722.12, + "rot_x": 0, + "rot_y": -120832, + "rot_z": 0 + } + ], + [ + { + "type": 34, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 7, + "quantity": 4, + "pos_x": 1787.81, + "pos_y": 71.74, + "pos_z": -65.12, + "rot_x": 0, + "rot_y": 132096, + "rot_z": 0 + }, + { + "type": 34, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 7, + "quantity": 2, + "pos_x": 1060.48, + "pos_y": 50.13, + "pos_z": 805.32, + "rot_x": 0, + "rot_y": 137216, + "rot_z": 0 + }, + { + "type": 34, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 7, + "quantity": 2, + "pos_x": 700.34, + "pos_y": 50.0, + "pos_z": -197.27, + "rot_x": 0, + "rot_y": 155648, + "rot_z": 0 + }, + { + "type": 34, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 7, + "quantity": 1, + "pos_x": 2239.39, + "pos_y": 71.92, + "pos_z": 647.27, + "rot_x": 0, + "rot_y": 120832, + "rot_z": 0 + } + ], + [ + { + "type": 23, + "unk1": 1, + "unk2": 8, + "variant": 0, + "room": 8, + "quantity": -1, + "pos_x": 561.24, + "pos_y": -355.07, + "pos_z": -2312.24, + "rot_x": 0, + "rot_y": 125952, + "rot_z": 0 + }, + { + "type": 23, + "unk1": 0, + "unk2": 8, + "variant": 0, + "room": 8, + "quantity": -1, + "pos_x": -112.72, + "pos_y": -655.07, + "pos_z": -2436.54, + "rot_x": 0, + "rot_y": 137216, + "rot_z": 0 + } + ], + [ + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 9, + "quantity": 5, + "pos_x": 1578.47, + "pos_y": 0.56, + "pos_z": -1719.01, + "rot_x": 0, + "rot_y": -2048, + "rot_z": 0 + }, + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 9, + "quantity": 4, + "pos_x": 1820.89, + "pos_y": 1.5, + "pos_z": -1833.48, + "rot_x": 0, + "rot_y": 12288, + "rot_z": 0 + }, + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 9, + "quantity": 2, + "pos_x": 1800.76, + "pos_y": 0.0, + "pos_z": -2222.79, + "rot_x": 0, + "rot_y": 25600, + "rot_z": 0 + }, + { + "type": 36, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 9, + "quantity": -1, + "pos_x": 1072.78, + "pos_y": 191.26, + "pos_z": -4962.6, + "rot_x": 49152, + "rot_y": -31744, + "rot_z": 0 + } + ], + [ + { + "type": 30, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 10, + "quantity": 3, + "pos_x": -3822.84, + "pos_y": 153.28, + "pos_z": -436.94, + "rot_x": 0, + "rot_y": -26624, + "rot_z": 0 + }, + { + "type": 30, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 10, + "quantity": 2, + "pos_x": -3609.85, + "pos_y": 151.4, + "pos_z": -233.0, + "rot_x": 0, + "rot_y": -46080, + "rot_z": 0 + }, + { + "type": 30, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 10, + "quantity": 2, + "pos_x": -4182.17, + "pos_y": 167.72, + "pos_z": -152.06, + "rot_x": 0, + "rot_y": -22528, + "rot_z": 0 + }, + { + "type": 30, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 10, + "quantity": 1, + "pos_x": -3677.0, + "pos_y": 201.89, + "pos_z": 290.37, + "rot_x": 0, + "rot_y": 5120, + "rot_z": 0 + } + ] + ], + "quest_info": { + "quest_id": 61017, + "name": "Flooded Forest Free-For-All", + "client": "Argosy Captain", + "description": "Hunt a Royal L., Lag. & Gobul", + "details": "Taihen! Means very bad, yes?\nFlooded Forest overrun by pack\nof leviathans -- Argosy cannot\nget anywhere near area! Big\nproblem for trade, yes? Only\nhunters can return fair seas\nto Flooded Forest. Onegai!", + "success_message": "Complete the Main Quest.", + "failure_message": "Reward hits 0, or time\nexpires.", + "flags": [ + [ + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ] + ], + "penalty_per_cart": 9000, + "quest_fee": 2550, + "time_limit": 50, + "main_monster_1": 17, + "main_monster_2": 34, + "location": 3, + "quest_rank": 5, + "hrp_restriction": 10, + "resources": 1, + "supply_set_number": 43, + "starting_position": 1, + "general_enemy_level": 64, + "summon": 0, + "wave_1_transition_type": 0, + "wave_1_transition_target": 0, + "wave_1_transition_quantity": 0, + "wave_2_transition_type": 0, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0 + }, + "large_monsters": { + "monster_1": { + "type": 16, + "starting_area": 0, + "boss_id": 0, + "spawn_count": 1, + "level": 54, + "size": 100, + "hp_spread": 0, + "size_spread": 3 + }, + "monster_2": { + "type": 15, + "starting_area": 0, + "boss_id": 1, + "spawn_count": 1, + "level": 54, + "size": 100, + "hp_spread": 0, + "size_spread": 3 + }, + "monster_3": { + "type": 18, + "starting_area": 0, + "boss_id": 2, + "spawn_count": 1, + "level": 54, + "size": 100, + "hp_spread": 0, + "size_spread": 3 + } + }, + "objective_details": { + "main_quest": { + "type": 1, + "objective_type": 16, + "objective_num": 1, + "zenny_reward": 25800, + "hrp_reward": 2600, + "rewards_row_1": [ + [ + 445, + 1, + 1 + ], + [ + 446, + 1, + 5 + ], + [ + 490, + 1, + 14 + ], + [ + 495, + 1, + 20 + ], + [ + 498, + 1, + 7 + ], + [ + 499, + 1, + 10 + ], + [ + 500, + 1, + 8 + ], + [ + 441, + 1, + 10 + ], + [ + 186, + 1, + 25 + ] + ], + "rewards_row_2": [ + [ + 445, + 1, + 1 + ], + [ + 446, + 1, + 5 + ], + [ + 490, + 1, + 14 + ], + [ + 495, + 1, + 20 + ], + [ + 498, + 1, + 7 + ], + [ + 499, + 1, + 10 + ], + [ + 500, + 1, + 8 + ], + [ + 441, + 1, + 10 + ], + [ + 186, + 1, + 25 + ] + ] + }, + "subquest_1": { + "description": "None", + "type": 1, + "objective_type": 15, + "objective_num": 1, + "zenny_reward": 0, + "hrp_reward": 0, + "rewards_row_1": [] + }, + "subquest_2": { + "description": "None", + "type": 1, + "objective_type": 18, + "objective_num": 1, + "zenny_reward": 0, + "hrp_reward": 0, + "rewards_row_1": [] + } + }, + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0, + "unkInt0": 0, + "unkShort0": 0, + "unkByte0": 0, + "unkBytes0_0": 0, + "unkBytes0_1": 0, + "unkBytes0_2": 0, + "unkBytes1_0": 0, + "unkBytes1_1": 0, + "unkBytes1_2": 0, + "unkBytes2_0": 0, + "unkBytes2_1": 0, + "unkUintAlways15": 15, + "unkShort1": 0, + "unkShort2": 0, + "unkByte1": 0, + "unkByte2": 0, + "unkByte3": 0, + "unkByte4": 0, + "unkByte7": 0, + "unkByte8": 0 + } +} \ No newline at end of file diff --git a/event/Gobuled Everything in Sight.json b/event/Gobuled Everything in Sight.json new file mode 100644 index 0000000..ca5dc66 --- /dev/null +++ b/event/Gobuled Everything in Sight.json @@ -0,0 +1,755 @@ +{ + "small_monsters": [ + [], + [ + { + "type": 17, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 1, + "quantity": 1, + "pos_x": -1169.23, + "pos_y": -50.0, + "pos_z": -423.3, + "rot_x": 0, + "rot_y": -25600, + "rot_z": 0 + }, + { + "type": 17, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 1, + "quantity": 3, + "pos_x": 1367.09, + "pos_y": -50.0, + "pos_z": -1500.72, + "rot_x": 0, + "rot_y": 59392, + "rot_z": 0 + }, + { + "type": 36, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 1, + "quantity": -1, + "pos_x": 1019.5, + "pos_y": 120.0, + "pos_z": -3357.52, + "rot_x": 49152, + "rot_y": 32768, + "rot_z": 0 + } + ], + [ + { + "type": 23, + "unk1": 1, + "unk2": 2, + "variant": 0, + "room": 2, + "quantity": -1, + "pos_x": -2518.64, + "pos_y": -470.0, + "pos_z": 620.06, + "rot_x": 0, + "rot_y": 27648, + "rot_z": 0 + }, + { + "type": 23, + "unk1": 1, + "unk2": 2, + "variant": 0, + "room": 2, + "quantity": -1, + "pos_x": -1786.72, + "pos_y": -230.0, + "pos_z": 24.74, + "rot_x": 0, + "rot_y": 51200, + "rot_z": 0 + }, + { + "type": 32, + "unk1": 1, + "unk2": 2, + "variant": 6, + "room": 2, + "quantity": -1, + "pos_x": -2127.59, + "pos_y": -479.91, + "pos_z": -1175.97, + "rot_x": 0, + "rot_y": -7168, + "rot_z": 0 + }, + { + "type": 32, + "unk1": 1, + "unk2": 2, + "variant": 6, + "room": 2, + "quantity": -1, + "pos_x": -2231.54, + "pos_y": -751.13, + "pos_z": -1060.03, + "rot_x": 0, + "rot_y": -7168, + "rot_z": 0 + }, + { + "type": 32, + "unk1": 1, + "unk2": 2, + "variant": 6, + "room": 2, + "quantity": -1, + "pos_x": -2037.48, + "pos_y": -628.68, + "pos_z": -957.11, + "rot_x": 0, + "rot_y": -7168, + "rot_z": 0 + } + ], + [ + { + "type": 36, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 3, + "quantity": 3, + "pos_x": -1084.83, + "pos_y": 283.44, + "pos_z": -815.51, + "rot_x": 0, + "rot_y": -9216, + "rot_z": 0 + }, + { + "type": 36, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 3, + "quantity": 2, + "pos_x": -737.17, + "pos_y": 163.44, + "pos_z": -1328.84, + "rot_x": 0, + "rot_y": -39936, + "rot_z": 0 + } + ], + [ + { + "type": 32, + "unk1": 4, + "unk2": 255, + "variant": 5, + "room": 4, + "quantity": 3, + "pos_x": 1295.68, + "pos_y": -1334.54, + "pos_z": -1102.45, + "rot_x": 0, + "rot_y": -22528, + "rot_z": 0 + }, + { + "type": 32, + "unk1": 4, + "unk2": 255, + "variant": 5, + "room": 4, + "quantity": 1, + "pos_x": 2116.25, + "pos_y": -1371.63, + "pos_z": 1500.92, + "rot_x": 0, + "rot_y": -38912, + "rot_z": 0 + } + ], + [ + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 5, + "quantity": 3, + "pos_x": 2381.23, + "pos_y": 3.57, + "pos_z": 5454.15, + "rot_x": 0, + "rot_y": 14336, + "rot_z": 0 + }, + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 5, + "quantity": 2, + "pos_x": 2530.36, + "pos_y": 5.0, + "pos_z": 4637.36, + "rot_x": 0, + "rot_y": 27648, + "rot_z": 0 + }, + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 5, + "quantity": 1, + "pos_x": -399.12, + "pos_y": 0.87, + "pos_z": -1183.24, + "rot_x": 0, + "rot_y": 63488, + "rot_z": 0 + }, + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 5, + "quantity": 1, + "pos_x": -941.2, + "pos_y": 9.76, + "pos_z": -1589.08, + "rot_x": 0, + "rot_y": 26624, + "rot_z": 0 + } + ], + [ + { + "type": 17, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 6, + "quantity": 1, + "pos_x": 2376.71, + "pos_y": -1090.0, + "pos_z": 74.87, + "rot_x": 0, + "rot_y": -38912, + "rot_z": 0 + }, + { + "type": 17, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 6, + "quantity": 3, + "pos_x": 341.73, + "pos_y": -453.9, + "pos_z": 722.12, + "rot_x": 0, + "rot_y": -120832, + "rot_z": 0 + } + ], + [ + { + "type": 34, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 7, + "quantity": 4, + "pos_x": 1787.81, + "pos_y": 71.74, + "pos_z": -65.12, + "rot_x": 0, + "rot_y": 132096, + "rot_z": 0 + }, + { + "type": 34, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 7, + "quantity": 2, + "pos_x": 1060.48, + "pos_y": 50.13, + "pos_z": 805.32, + "rot_x": 0, + "rot_y": 137216, + "rot_z": 0 + }, + { + "type": 34, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 7, + "quantity": 2, + "pos_x": 700.34, + "pos_y": 50.0, + "pos_z": -197.27, + "rot_x": 0, + "rot_y": 155648, + "rot_z": 0 + }, + { + "type": 34, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 7, + "quantity": 1, + "pos_x": 2239.39, + "pos_y": 71.92, + "pos_z": 647.27, + "rot_x": 0, + "rot_y": 120832, + "rot_z": 0 + } + ], + [ + { + "type": 23, + "unk1": 1, + "unk2": 8, + "variant": 0, + "room": 8, + "quantity": -1, + "pos_x": 561.24, + "pos_y": -355.07, + "pos_z": -2312.24, + "rot_x": 0, + "rot_y": 125952, + "rot_z": 0 + }, + { + "type": 23, + "unk1": 0, + "unk2": 8, + "variant": 0, + "room": 8, + "quantity": -1, + "pos_x": -112.72, + "pos_y": -655.07, + "pos_z": -2436.54, + "rot_x": 0, + "rot_y": 137216, + "rot_z": 0 + } + ], + [ + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 9, + "quantity": 5, + "pos_x": 1578.47, + "pos_y": 0.56, + "pos_z": -1719.01, + "rot_x": 0, + "rot_y": -2048, + "rot_z": 0 + }, + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 9, + "quantity": 4, + "pos_x": 1820.89, + "pos_y": 1.5, + "pos_z": -1833.48, + "rot_x": 0, + "rot_y": 12288, + "rot_z": 0 + }, + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 9, + "quantity": 2, + "pos_x": 1800.76, + "pos_y": 0.0, + "pos_z": -2222.79, + "rot_x": 0, + "rot_y": 25600, + "rot_z": 0 + }, + { + "type": 36, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 9, + "quantity": -1, + "pos_x": 1072.78, + "pos_y": 191.26, + "pos_z": -4962.6, + "rot_x": 49152, + "rot_y": -31744, + "rot_z": 0 + } + ], + [ + { + "type": 30, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 10, + "quantity": 3, + "pos_x": -3822.84, + "pos_y": 153.28, + "pos_z": -436.94, + "rot_x": 0, + "rot_y": -26624, + "rot_z": 0 + }, + { + "type": 30, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 10, + "quantity": 2, + "pos_x": -3609.85, + "pos_y": 151.4, + "pos_z": -233.0, + "rot_x": 0, + "rot_y": -46080, + "rot_z": 0 + }, + { + "type": 30, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 10, + "quantity": 2, + "pos_x": -4182.17, + "pos_y": 167.72, + "pos_z": -152.06, + "rot_x": 0, + "rot_y": -22528, + "rot_z": 0 + }, + { + "type": 30, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 10, + "quantity": 1, + "pos_x": -3677.0, + "pos_y": 201.89, + "pos_z": 290.37, + "rot_x": 0, + "rot_y": 5120, + "rot_z": 0 + } + ] + ], + "quest_info": { + "quest_id": 61010, + "name": "Gobuled Everything in Sight", + "client": "Argosy Captain", + "description": "Hunt a Gobul", + "details": "Taihen! My small ships all\ngobbled by huge Gobul! The\ncrew all escaped, but goods\nare in fish's stomach, yes --\neven some are super-rare items\nthere! Only hunters can get my\nitems back. Onegai!", + "success_message": "Complete the Main Quest.", + "failure_message": "Reward hits 0, or time\nexpires.", + "flags": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 1, + 1 + ] + ], + "penalty_per_cart": 1900, + "quest_fee": 550, + "time_limit": 50, + "main_monster_1": 17, + "main_monster_2": 34, + "location": 3, + "quest_rank": 3, + "hrp_restriction": 8, + "resources": 0, + "supply_set_number": 25, + "starting_position": 0, + "general_enemy_level": 32, + "summon": 0, + "wave_1_transition_type": 0, + "wave_1_transition_target": 0, + "wave_1_transition_quantity": 0, + "wave_2_transition_type": 0, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0 + }, + "large_monsters": { + "monster_1": { + "type": 18, + "starting_area": 0, + "boss_id": 0, + "spawn_count": 1, + "level": 32, + "size": 150, + "hp_spread": 0, + "size_spread": 0 + }, + "monster_2": { + "type": 0, + "starting_area": 0, + "boss_id": 0, + "spawn_count": 0, + "level": 0, + "size": 0, + "hp_spread": 0, + "size_spread": 0 + }, + "monster_3": { + "type": 0, + "starting_area": 0, + "boss_id": 0, + "spawn_count": 0, + "level": 0, + "size": 0, + "hp_spread": 0, + "size_spread": 0 + } + }, + "objective_details": { + "main_quest": { + "type": 1, + "objective_type": 18, + "objective_num": 1, + "zenny_reward": 5600, + "hrp_reward": 1230, + "rewards_row_1": [ + [ + 110, + 1, + 15 + ], + [ + 326, + 1, + 13 + ], + [ + 323, + 1, + 15 + ], + [ + 440, + 1, + 25 + ], + [ + 422, + 1, + 12 + ], + [ + 441, + 1, + 10 + ], + [ + 329, + 1, + 10 + ] + ], + "rewards_row_2": [ + [ + 110, + 1, + 15 + ], + [ + 326, + 1, + 13 + ], + [ + 323, + 1, + 15 + ], + [ + 440, + 1, + 25 + ], + [ + 422, + 1, + 12 + ], + [ + 441, + 1, + 10 + ], + [ + 329, + 1, + 10 + ] + ] + }, + "subquest_1": { + "description": "Destroy Gobul's lantern", + "type": 516, + "objective_type": 18, + "objective_num": 1, + "zenny_reward": 800, + "hrp_reward": 100, + "rewards_row_1": [ + [ + 326, + 1, + 10 + ], + [ + 323, + 1, + 24 + ], + [ + 324, + 1, + 20 + ], + [ + 325, + 1, + 28 + ], + [ + 155, + 1, + 18 + ] + ] + }, + "subquest_2": { + "description": "Fish out Gobul once", + "type": 4096, + "objective_type": 18, + "objective_num": 2, + "zenny_reward": 1200, + "hrp_reward": 60, + "rewards_row_1": [ + [ + 326, + 1, + 10 + ], + [ + 323, + 1, + 24 + ], + [ + 324, + 1, + 20 + ], + [ + 325, + 1, + 28 + ], + [ + 155, + 1, + 18 + ] + ] + } + }, + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0, + "unkInt0": 0, + "unkShort0": 0, + "unkByte0": 0, + "unkBytes0_0": 0, + "unkBytes0_1": 0, + "unkBytes0_2": 0, + "unkBytes1_0": 0, + "unkBytes1_1": 0, + "unkBytes1_2": 0, + "unkBytes2_0": 0, + "unkBytes2_1": 0, + "unkUintAlways15": 15, + "unkShort1": 0, + "unkShort2": 0, + "unkByte1": 0, + "unkByte2": 0, + "unkByte3": 0, + "unkByte4": 0, + "unkByte7": 0, + "unkByte8": 0 + } +} \ No newline at end of file diff --git a/event/Grudge Match Bird and Brute.json b/event/Grudge Match Bird and Brute.json new file mode 100644 index 0000000..e6e1f6e --- /dev/null +++ b/event/Grudge Match Bird and Brute.json @@ -0,0 +1,432 @@ +{ + "small_monsters": [ + [], + [ + { + "variant": 3, + "unk1": 1, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -2404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 40, + "quantity": -1 + } + ] + ], + "arena_equipment": [ + [ + [ + 15, + 4 + ], + null, + null, + 89, + 8, + 75, + 95, + 35, + [ + [ + 13, + 10 + ], + [ + 14, + 10 + ], + [ + 98, + 20 + ], + [ + 45, + 10 + ], + [ + 375, + 5 + ], + [ + 2, + 2 + ], + [ + 360, + 1 + ], + [ + 49, + 1 + ], + [ + 50, + 2 + ] + ], + [] + ], + [ + [ + 7, + 35 + ], + null, + null, + 131, + 71, + 66, + 72, + 67, + [ + [ + 13, + 10 + ], + [ + 14, + 10 + ], + [ + 98, + 20 + ], + [ + 45, + 10 + ], + [ + 375, + 5 + ], + [ + 2, + 3 + ], + [ + 1, + 2 + ], + [ + 3, + 1 + ], + [ + 50, + 2 + ] + ], + [] + ], + [ + [ + 10, + 66 + ], + null, + null, + 43, + 110, + 74, + 82, + 9, + [ + [ + 13, + 10 + ], + [ + 14, + 10 + ], + [ + 98, + 20 + ], + [ + 45, + 10 + ], + [ + 375, + 5 + ], + [ + 2, + 2 + ], + [ + 50, + 1 + ] + ], + [] + ], + [ + [ + 11, + 9 + ], + [ + 12, + 10 + ], + [ + 13, + 1 + ], + 105, + 111, + 104, + 110, + 102, + [ + [ + 13, + 10 + ], + [ + 14, + 10 + ], + [ + 45, + 10 + ], + [ + 375, + 5 + ], + [ + 360, + 2 + ], + [ + 50, + 1 + ], + [ + 7, + 2 + ] + ], + [ + [ + 54, + 99 + ], + [ + 55, + 99 + ], + [ + 57, + 50 + ], + [ + 66, + 5 + ], + [ + 63, + 9 + ], + [ + 75, + 12 + ], + [ + 77, + 12 + ], + [ + 79, + 12 + ] + ] + ] + ], + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 0, + "quest_rank": 4, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 55, + "wave_2_transition_type": 0, + "location": 8, + "penalty_per_cart": 350, + "resources": 2, + "details": "Double trouble! It's the\ndirty-bird Qurupeco and the\nland dragon Barroth -- heaven\nand earth, laughter and tears,\nin an ultimate contest! When\nthe dust clears, will it\nreveal victory? Or tragedy?", + "description": "Slay a Qurupeco\nand a Barroth", + "wave_1_transition_target": 0, + "hrp_restriction": 9, + "quest_fee": 0, + "quest_id": 60006, + "name": "Grudge Match: Bird and Brute", + "main_monster_2": 0, + "main_monster_1": 0, + "supply_set_number": 0, + "summon": 0, + "client": "Announcer/Receptionist", + "flags": [ + [ + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 1, + 0 + ] + ], + "success_message": "Complete the Main Quest." + }, + "objective_details": { + "subquest_2": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + }, + "main_quest": { + "objective_num": 1, + "hrp_reward": 0, + "rewards_row_1": [ + [ + 607, + 1, + 16 + ], + [ + 608, + 1, + 20 + ], + [ + 431, + 1, + 14 + ], + [ + 328, + 1, + 10 + ], + [ + 444, + 1, + 5 + ], + [ + 569, + 1, + 15 + ], + [ + 570, + 1, + 5 + ], + [ + 587, + 1, + 15 + ] + ], + "rewards_row_2": [], + "objective_type": 3, + "zenny_reward": 1000, + "type": 257 + }, + "subquest_1": { + "objective_num": 1, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 8, + "zenny_reward": 0, + "type": 257 + } + }, + "large_monsters": { + "monster_2": { + "size_spread": 0, + "hp_spread": 0, + "level": 55, + "boss_id": 1, + "type": 8, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_1": { + "size_spread": 0, + "hp_spread": 0, + "level": 55, + "boss_id": 0, + "type": 3, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + } + } +} \ No newline at end of file diff --git a/event/Grudge Match Brute Horns.json b/event/Grudge Match Brute Horns.json new file mode 100644 index 0000000..d7b6a0e --- /dev/null +++ b/event/Grudge Match Brute Horns.json @@ -0,0 +1,521 @@ +{ + "small_monsters": [ + [], + [ + { + "variant": 3, + "unk1": 1, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -2404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -2404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 1828, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -2404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 1828, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -2404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 1828, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -2404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 1828, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -2404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 1828, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -2404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 1828, + "rot_x": 0, + "type": 40, + "quantity": -1 + } + ] + ], + "arena_equipment": [ + [ + [ + 7, + 56 + ], + null, + null, + 129, + 81, + 74, + 82, + 99, + [ + [ + 98, + 20 + ], + [ + 13, + 10 + ], + [ + 14, + 20 + ], + [ + 26, + 10 + ], + [ + 11, + 5 + ], + [ + 3, + 1 + ], + [ + 50, + 2 + ], + [ + 7, + 2 + ], + [ + 582, + 2 + ], + [ + 51, + 2 + ] + ], + [] + ], + [ + [ + 9, + 46 + ], + null, + null, + 134, + 114, + 99, + 97, + 107, + [ + [ + 98, + 20 + ], + [ + 13, + 10 + ], + [ + 14, + 10 + ], + [ + 45, + 10 + ], + [ + 360, + 2 + ], + [ + 10, + 5 + ], + [ + 9, + 5 + ], + [ + 4, + 1 + ], + [ + 5, + 2 + ], + [ + 7, + 2 + ], + [ + 51, + 2 + ] + ], + [] + ], + [ + [ + 10, + 36 + ], + null, + null, + 75, + 79, + 124, + 111, + 111, + [ + [ + 98, + 20 + ], + [ + 13, + 10 + ], + [ + 14, + 10 + ], + [ + 45, + 10 + ], + [ + 360, + 2 + ], + [ + 4, + 1 + ], + [ + 49, + 1 + ], + [ + 5, + 2 + ], + [ + 7, + 2 + ], + [ + 2, + 2 + ], + [ + 1, + 2 + ], + [ + 51, + 1 + ] + ], + [] + ], + [ + [ + 15, + 37 + ], + null, + null, + 100, + 106, + 99, + 101, + 99, + [ + [ + 98, + 20 + ], + [ + 13, + 10 + ], + [ + 14, + 10 + ], + [ + 45, + 10 + ], + [ + 360, + 2 + ], + [ + 4, + 1 + ], + [ + 5, + 2 + ], + [ + 7, + 2 + ], + [ + 2, + 2 + ], + [ + 51, + 2 + ] + ], + [] + ] + ], + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 0, + "quest_rank": 5, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 55, + "wave_2_transition_type": 0, + "location": 8, + "penalty_per_cart": 700, + "resources": 2, + "details": "Wanted:\nThe description for this\nquest! If you can find\nit, please let us know!\nThanks!", + "description": "Slay an Uragaan\nand a Diablos", + "wave_1_transition_target": 0, + "hrp_restriction": 9, + "quest_fee": 0, + "quest_id": 60010, + "name": "Grudge Match: Brute Horns", + "main_monster_2": 0, + "main_monster_1": 0, + "supply_set_number": 0, + "summon": 0, + "client": "Announcer/Receptionist", + "flags": [ + [ + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 1, + 0 + ] + ], + "success_message": "Complete the Main Quest." + }, + "objective_details": { + "subquest_2": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + }, + "main_quest": { + "objective_num": 1, + "hrp_reward": 0, + "rewards_row_1": [ + [ + 588, + 1, + 10 + ], + [ + 612, + 1, + 20 + ], + [ + 431, + 1, + 10 + ], + [ + 444, + 1, + 10 + ], + [ + 445, + 1, + 5 + ], + [ + 569, + 1, + 15 + ], + [ + 570, + 1, + 8 + ], + [ + 587, + 1, + 22 + ] + ], + "rewards_row_2": [], + "objective_type": 9, + "zenny_reward": 2000, + "type": 257 + }, + "subquest_1": { + "objective_num": 1, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 6, + "zenny_reward": 0, + "type": 257 + } + }, + "large_monsters": { + "monster_2": { + "size_spread": 0, + "hp_spread": 0, + "level": 55, + "boss_id": 1, + "type": 6, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_1": { + "size_spread": 0, + "hp_spread": 0, + "level": 18, + "boss_id": 0, + "type": 9, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + } + } +} \ No newline at end of file diff --git a/event/Grudge Match Brute and Brute.json b/event/Grudge Match Brute and Brute.json new file mode 100644 index 0000000..edecd82 --- /dev/null +++ b/event/Grudge Match Brute and Brute.json @@ -0,0 +1,642 @@ +{ + "small_monsters": [ + [], + [ + { + "type": 40, + "unk1": 1, + "unk2": 255, + "variant": 3, + "room": 1, + "quantity": -1, + "pos_x": -2404.5, + "pos_y": -5038.5, + "pos_z": -3542.7, + "rot_x": 0, + "rot_y": 170, + "rot_z": 0 + }, + { + "type": 7, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 1, + "quantity": 1, + "pos_x": -1404.5, + "pos_y": -5038.5, + "pos_z": -1942.7, + "rot_x": 0, + "rot_y": 170, + "rot_z": 0 + }, + { + "type": 7, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 1, + "quantity": 1, + "pos_x": -1404.5, + "pos_y": -5038.5, + "pos_z": -1342.7, + "rot_x": 0, + "rot_y": 170, + "rot_z": 0 + }, + { + "type": 7, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 1, + "quantity": 1, + "pos_x": -1404.5, + "pos_y": -5038.5, + "pos_z": -1542.7, + "rot_x": 0, + "rot_y": 170, + "rot_z": 0 + }, + { + "type": 7, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 1, + "quantity": 1, + "pos_x": -1404.5, + "pos_y": -5038.5, + "pos_z": -1842.7, + "rot_x": 0, + "rot_y": 170, + "rot_z": 0 + }, + { + "type": 7, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 1, + "quantity": 1, + "pos_x": -404.5, + "pos_y": -5038.5, + "pos_z": -1742.7, + "rot_x": 0, + "rot_y": 170, + "rot_z": 0 + }, + { + "type": 7, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 1, + "quantity": 1, + "pos_x": -404.5, + "pos_y": -5038.5, + "pos_z": -1342.7, + "rot_x": 0, + "rot_y": 170, + "rot_z": 0 + }, + { + "type": 7, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 1, + "quantity": 1, + "pos_x": -404.5, + "pos_y": -5038.5, + "pos_z": -1142.7, + "rot_x": 0, + "rot_y": 170, + "rot_z": 0 + }, + { + "type": 7, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 1, + "quantity": 1, + "pos_x": -1704.5, + "pos_y": -5038.5, + "pos_z": -1042.7, + "rot_x": 0, + "rot_y": 170, + "rot_z": 0 + }, + { + "type": 7, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 1, + "quantity": 1, + "pos_x": -1404.5, + "pos_y": -5038.5, + "pos_z": -1742.7, + "rot_x": 0, + "rot_y": 170, + "rot_z": 0 + }, + { + "type": 7, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 1, + "quantity": 1, + "pos_x": -1404.5, + "pos_y": -5038.5, + "pos_z": -2142.7, + "rot_x": 0, + "rot_y": 170, + "rot_z": 0 + }, + { + "type": 7, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 1, + "quantity": 1, + "pos_x": -1704.5, + "pos_y": -5038.5, + "pos_z": -2542.7, + "rot_x": 0, + "rot_y": 170, + "rot_z": 0 + }, + { + "type": 7, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 1, + "quantity": 1, + "pos_x": -2404.5, + "pos_y": -5038.5, + "pos_z": -2742.7, + "rot_x": 0, + "rot_y": 170, + "rot_z": 0 + }, + { + "type": 7, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 1, + "quantity": 1, + "pos_x": -1404.5, + "pos_y": -5038.5, + "pos_z": -3142.7, + "rot_x": 0, + "rot_y": 170, + "rot_z": 0 + }, + { + "type": 7, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 1, + "quantity": 1, + "pos_x": -1104.5, + "pos_y": -5038.5, + "pos_z": -3542.7, + "rot_x": 0, + "rot_y": 170, + "rot_z": 0 + }, + { + "type": 7, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 1, + "quantity": 1, + "pos_x": -2904.5, + "pos_y": -5038.5, + "pos_z": -3742.7, + "rot_x": 0, + "rot_y": 170, + "rot_z": 0 + } + ] + ], + "quest_info": { + "quest_id": 60006, + "name": "Grudge Match: Brute and Brute", + "client": "Announcer/Receptionist", + "description": "Slay a Barroth\nand a Barroth", + "details": "Double trouble! It's the\nland dragon Barroth and the\nland dragon Barroth -- earth\nand earth, laughter and tears,\nin an ultimate contest! When\nthe dust clears, will it\nreveal victory? Or tragedy?", + "success_message": "Complete the Main Quest.", + "flags": [ + [ + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 1, + 0 + ] + ], + "penalty_per_cart": 1100, + "quest_fee": 0, + "time_limit": 50, + "main_monster_1": 0, + "main_monster_2": 0, + "location": 8, + "quest_rank": 4, + "hrp_restriction": 9, + "resources": 2, + "supply_set_number": 0, + "starting_position": 0, + "general_enemy_level": 23, + "summon": 0, + "wave_1_transition_type": 0, + "wave_1_transition_target": 0, + "wave_1_transition_quantity": 0, + "wave_2_transition_type": 0, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0 + }, + "large_monsters": { + "monster_1": { + "type": 7, + "starting_area": 0, + "boss_id": 0, + "spawn_count": 1, + "level": 23, + "size": 100, + "hp_spread": 0, + "size_spread": 0 + }, + "monster_2": { + "type": 7, + "starting_area": 0, + "boss_id": 1, + "spawn_count": 1, + "level": 23, + "size": 100, + "hp_spread": 0, + "size_spread": 0 + }, + "monster_3": { + "type": 0, + "starting_area": 0, + "boss_id": 0, + "spawn_count": 0, + "level": 0, + "size": 0, + "hp_spread": 0, + "size_spread": 0 + } + }, + "objective_details": { + "main_quest": { + "type": 257, + "objective_type": 8, + "objective_num": 1, + "zenny_reward": 1000, + "hrp_reward": 0, + "rewards_row_1": [ + [ + 607, + 1, + 16 + ], + [ + 608, + 1, + 20 + ], + [ + 431, + 1, + 14 + ], + [ + 328, + 1, + 10 + ], + [ + 444, + 1, + 5 + ], + [ + 569, + 1, + 15 + ], + [ + 570, + 1, + 5 + ], + [ + 587, + 1, + 15 + ] + ], + "rewards_row_2": [] + }, + "subquest_1": { + "description": "None", + "type": 257, + "objective_type": 8, + "objective_num": 1, + "zenny_reward": 0, + "hrp_reward": 0, + "rewards_row_1": [] + }, + "subquest_2": { + "description": "None", + "type": 0, + "objective_type": 0, + "objective_num": 0, + "zenny_reward": 0, + "hrp_reward": 0, + "rewards_row_1": [] + } + }, + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "arena_equipment": [ + [ + [ + 15, + 4 + ], + null, + null, + 89, + 8, + 75, + 95, + 35, + [ + [ + 13, + 10 + ], + [ + 14, + 10 + ], + [ + 98, + 20 + ], + [ + 45, + 10 + ], + [ + 375, + 5 + ], + [ + 2, + 2 + ], + [ + 360, + 1 + ], + [ + 49, + 1 + ], + [ + 50, + 2 + ] + ], + [] + ], + [ + [ + 7, + 35 + ], + null, + null, + 131, + 71, + 66, + 72, + 67, + [ + [ + 13, + 10 + ], + [ + 14, + 10 + ], + [ + 98, + 20 + ], + [ + 45, + 10 + ], + [ + 375, + 5 + ], + [ + 2, + 3 + ], + [ + 1, + 2 + ], + [ + 3, + 1 + ], + [ + 50, + 2 + ] + ], + [] + ], + [ + [ + 10, + 66 + ], + null, + null, + 43, + 110, + 74, + 82, + 9, + [ + [ + 13, + 10 + ], + [ + 14, + 10 + ], + [ + 98, + 20 + ], + [ + 45, + 10 + ], + [ + 375, + 5 + ], + [ + 2, + 2 + ], + [ + 50, + 1 + ] + ], + [] + ], + [ + [ + 11, + 9 + ], + [ + 12, + 10 + ], + [ + 13, + 1 + ], + 105, + 111, + 104, + 110, + 102, + [ + [ + 13, + 10 + ], + [ + 14, + 10 + ], + [ + 45, + 10 + ], + [ + 375, + 5 + ], + [ + 360, + 2 + ], + [ + 50, + 1 + ], + [ + 7, + 2 + ] + ], + [ + [ + 54, + 99 + ], + [ + 55, + 99 + ], + [ + 57, + 50 + ], + [ + 66, + 5 + ], + [ + 63, + 9 + ], + [ + 75, + 12 + ], + [ + 77, + 12 + ], + [ + 79, + 12 + ] + ] + ] + ] +} \ No newline at end of file diff --git a/event/Grudge Match Ice and Fire.json b/event/Grudge Match Ice and Fire.json new file mode 100644 index 0000000..009d238 --- /dev/null +++ b/event/Grudge Match Ice and Fire.json @@ -0,0 +1,473 @@ +{ + "small_monsters": [ + [], + [ + { + "variant": 3, + "unk1": 1, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -2404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 40, + "quantity": -1 + } + ] + ], + "arena_equipment": [ + [ + [ + 8, + 43 + ], + null, + null, + 80, + 86, + 79, + 87, + 85, + [ + [ + 13, + 10 + ], + [ + 14, + 10 + ], + [ + 98, + 20 + ], + [ + 45, + 10 + ], + [ + 375, + 5 + ], + [ + 360, + 2 + ], + [ + 9, + 5 + ], + [ + 11, + 5 + ], + [ + 4, + 1 + ], + [ + 5, + 2 + ], + [ + 7, + 2 + ], + [ + 2, + 2 + ], + [ + 1, + 2 + ], + [ + 51, + 1 + ] + ], + [] + ], + [ + [ + 7, + 41 + ], + null, + null, + 76, + 82, + 75, + 83, + 81, + [ + [ + 13, + 10 + ], + [ + 14, + 10 + ], + [ + 98, + 20 + ], + [ + 45, + 10 + ], + [ + 375, + 5 + ], + [ + 360, + 2 + ], + [ + 391, + 2 + ], + [ + 11, + 5 + ], + [ + 3, + 1 + ], + [ + 4, + 1 + ], + [ + 50, + 1 + ], + [ + 2, + 3 + ], + [ + 1, + 2 + ], + [ + 51, + 1 + ] + ], + [] + ], + [ + [ + 9, + 74 + ], + null, + null, + 136, + 86, + 95, + 103, + 101, + [ + [ + 13, + 10 + ], + [ + 14, + 10 + ], + [ + 98, + 20 + ], + [ + 45, + 10 + ], + [ + 375, + 5 + ], + [ + 360, + 2 + ], + [ + 16, + 2 + ], + [ + 10, + 5 + ], + [ + 4, + 1 + ], + [ + 5, + 2 + ], + [ + 7, + 2 + ], + [ + 51, + 2 + ] + ], + [] + ], + [ + [ + 14, + 28 + ], + null, + null, + 98, + 104, + 97, + 105, + 103, + [ + [ + 13, + 10 + ], + [ + 14, + 10 + ], + [ + 98, + 20 + ], + [ + 45, + 10 + ], + [ + 375, + 5 + ], + [ + 360, + 2 + ], + [ + 391, + 2 + ], + [ + 9, + 5 + ], + [ + 4, + 1 + ], + [ + 50, + 2 + ], + [ + 582, + 1 + ], + [ + 51, + 2 + ] + ], + [] + ] + ], + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 0, + "quest_rank": 5, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 55, + "wave_2_transition_type": 0, + "location": 8, + "penalty_per_cart": 250, + "resources": 2, + "details": "Double trouble! The forecast\ntoday calls for a storm of fire\nand ice -- with a 90 percent\nchance of death -- as you take\non both Barioth and Agnaktor at\nonce! Days like this I just\nwanna stay in bed.", + "description": "Slay a Barioth\nand an Agnaktor", + "wave_1_transition_target": 0, + "hrp_restriction": 9, + "quest_fee": 0, + "quest_id": 60009, + "name": "Grudge Match: Ice and Fire", + "main_monster_2": 0, + "main_monster_1": 0, + "supply_set_number": 0, + "summon": 0, + "client": "Announcer/Receptionist", + "flags": [ + [ + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 1, + 0 + ] + ], + "success_message": "Complete the Main Quest." + }, + "objective_details": { + "subquest_2": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + }, + "main_quest": { + "objective_num": 1, + "hrp_reward": 0, + "rewards_row_1": [ + [ + 379, + 1, + 13 + ], + [ + 586, + 1, + 20 + ], + [ + 431, + 1, + 14 + ], + [ + 444, + 1, + 8 + ], + [ + 445, + 1, + 5 + ], + [ + 569, + 1, + 13 + ], + [ + 570, + 1, + 8 + ], + [ + 587, + 1, + 19 + ] + ], + "rewards_row_2": [], + "objective_type": 5, + "zenny_reward": 1500, + "type": 257 + }, + "subquest_1": { + "objective_num": 1, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 19, + "zenny_reward": 0, + "type": 257 + } + }, + "large_monsters": { + "monster_2": { + "size_spread": 0, + "hp_spread": 0, + "level": 55, + "boss_id": 1, + "type": 19, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_1": { + "size_spread": 0, + "hp_spread": 0, + "level": 55, + "boss_id": 0, + "type": 5, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + } + } +} \ No newline at end of file diff --git a/event/Grudge Match Lagiacrus.json b/event/Grudge Match Lagiacrus.json new file mode 100644 index 0000000..cae60ee --- /dev/null +++ b/event/Grudge Match Lagiacrus.json @@ -0,0 +1,423 @@ +{ + "small_monsters": [ + [], + [ + { + "variant": 3, + "unk1": 1, + "unk2": 255, + "pos_z": -3042.7, + "pos_x": -0.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 40, + "quantity": -1 + } + ] + ], + "arena_equipment": [ + [ + [ + 15, + 7 + ], + null, + null, + 132, + 39, + 122, + 40, + 39, + [ + [ + 98, + 20 + ], + [ + 14, + 10 + ], + [ + 45, + 10 + ], + [ + 46, + 10 + ], + [ + 394, + 2 + ], + [ + 360, + 2 + ], + [ + 9, + 5 + ], + [ + 5, + 2 + ], + [ + 2, + 3 + ], + [ + 1, + 2 + ] + ], + [] + ], + [ + [ + 14, + 19 + ], + null, + null, + 40, + 43, + 40, + 3, + 3, + [ + [ + 98, + 20 + ], + [ + 14, + 10 + ], + [ + 45, + 10 + ], + [ + 46, + 10 + ], + [ + 360, + 2 + ], + [ + 10, + 5 + ], + [ + 4, + 1 + ] + ], + [] + ], + [ + [ + 10, + 73 + ], + null, + null, + 136, + 23, + 38, + 42, + 41, + [ + [ + 98, + 20 + ], + [ + 14, + 10 + ], + [ + 45, + 10 + ], + [ + 46, + 10 + ], + [ + 360, + 2 + ], + [ + 134, + 3 + ], + [ + 4, + 1 + ], + [ + 5, + 1 + ], + [ + 2, + 2 + ], + [ + 1, + 2 + ] + ], + [] + ], + [ + [ + 11, + 11 + ], + [ + 12, + 13 + ], + [ + 13, + 12 + ], + 133, + 19, + 16, + 37, + 20, + [ + [ + 14, + 10 + ], + [ + 45, + 10 + ], + [ + 46, + 10 + ], + [ + 360, + 2 + ], + [ + 582, + 2 + ] + ], + [ + [ + 54, + 99 + ], + [ + 55, + 99 + ], + [ + 62, + 9 + ], + [ + 73, + 12 + ], + [ + 75, + 12 + ], + [ + 77, + 12 + ], + [ + 68, + 60 + ] + ] + ] + ], + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 0, + "quest_rank": 2, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 23, + "wave_2_transition_type": 0, + "location": 12, + "penalty_per_cart": 350, + "resources": 2, + "details": "Wanted:\nThe description for this\nquest! If you can find\nit, please let us know!\nThanks!", + "description": "Slay a Lagiacrus", + "wave_1_transition_target": 0, + "hrp_restriction": 0, + "quest_fee": 0, + "quest_id": 60003, + "name": "Grudge Match: Lagiacrus", + "main_monster_2": 0, + "main_monster_1": 0, + "supply_set_number": 0, + "summon": 0, + "client": "Announcer/Receptionist", + "flags": [ + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 1, + 0 + ] + ], + "success_message": "Complete the Main Quest." + }, + "objective_details": { + "subquest_2": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + }, + "main_quest": { + "objective_num": 1, + "hrp_reward": 0, + "rewards_row_1": [ + [ + 611, + 1, + 21 + ], + [ + 611, + 2, + 7 + ], + [ + 431, + 1, + 13 + ], + [ + 328, + 1, + 8 + ], + [ + 327, + 1, + 13 + ], + [ + 569, + 1, + 20 + ], + [ + 615, + 1, + 18 + ] + ], + "rewards_row_2": [], + "objective_type": 15, + "zenny_reward": 1000, + "type": 257 + }, + "subquest_1": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + } + }, + "large_monsters": { + "monster_2": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_1": { + "size_spread": 0, + "hp_spread": 0, + "level": 23, + "boss_id": 0, + "type": 15, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + } + } +} \ No newline at end of file diff --git a/event/Grudge Match Land Lords.json b/event/Grudge Match Land Lords.json new file mode 100644 index 0000000..98b4973 --- /dev/null +++ b/event/Grudge Match Land Lords.json @@ -0,0 +1,764 @@ +{ + "small_monsters": [ + [], + [ + { + "variant": 3, + "unk1": 1, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -2404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -2404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 1828, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -2404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 1828, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -2404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 1828, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -2404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 1828, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -2404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 1828, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -2404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 1828, + "rot_x": 0, + "type": 40, + "quantity": -1 + } + ] + ], + "arena_equipment": [ + [ + [ + 8, + 39 + ], + null, + null, + 102, + 108, + 101, + 107, + 105, + [ + [ + 98, + 20 + ], + [ + 13, + 10 + ], + [ + 14, + 10 + ], + [ + 374, + 5 + ], + [ + 360, + 3 + ], + [ + 11, + 5 + ], + [ + 10, + 5 + ], + [ + 9, + 5 + ], + [ + 31, + 5 + ], + [ + 32, + 5 + ], + [ + 30, + 5 + ], + [ + 3, + 1 + ], + [ + 4, + 1 + ], + [ + 49, + 1 + ], + [ + 50, + 5 + ], + [ + 52, + 2 + ], + [ + 2, + 3 + ], + [ + 1, + 10 + ], + [ + 51, + 2 + ], + [ + 377, + 1 + ], + [ + 596, + 1 + ], + [ + 598, + 1 + ], + [ + 597, + 1 + ], + [ + 599, + 1 + ] + ], + [] + ], + [ + [ + 15, + 45 + ], + null, + null, + 96, + 102, + 95, + 103, + 101, + [ + [ + 98, + 20 + ], + [ + 13, + 10 + ], + [ + 14, + 10 + ], + [ + 374, + 5 + ], + [ + 360, + 3 + ], + [ + 347, + 5 + ], + [ + 11, + 5 + ], + [ + 10, + 5 + ], + [ + 9, + 5 + ], + [ + 31, + 5 + ], + [ + 32, + 5 + ], + [ + 30, + 5 + ], + [ + 3, + 1 + ], + [ + 4, + 1 + ], + [ + 50, + 5 + ], + [ + 52, + 1 + ], + [ + 51, + 2 + ], + [ + 377, + 1 + ], + [ + 596, + 1 + ], + [ + 598, + 1 + ], + [ + 597, + 1 + ], + [ + 599, + 1 + ] + ], + [] + ], + [ + [ + 14, + 38 + ], + null, + null, + 139, + 112, + 91, + 99, + 111, + [ + [ + 98, + 20 + ], + [ + 13, + 10 + ], + [ + 14, + 10 + ], + [ + 374, + 5 + ], + [ + 375, + 5 + ], + [ + 360, + 5 + ], + [ + 11, + 5 + ], + [ + 10, + 5 + ], + [ + 9, + 5 + ], + [ + 31, + 5 + ], + [ + 32, + 5 + ], + [ + 30, + 5 + ], + [ + 3, + 1 + ], + [ + 4, + 1 + ], + [ + 49, + 1 + ], + [ + 50, + 5 + ], + [ + 52, + 2 + ], + [ + 2, + 3 + ], + [ + 1, + 10 + ], + [ + 51, + 2 + ], + [ + 377, + 1 + ], + [ + 596, + 1 + ], + [ + 598, + 1 + ], + [ + 599, + 1 + ] + ], + [] + ], + [ + [ + 11, + 12 + ], + [ + 12, + 12 + ], + [ + 13, + 10 + ], + 130, + 115, + 108, + 114, + 112, + [ + [ + 13, + 10 + ], + [ + 14, + 10 + ], + [ + 374, + 5 + ], + [ + 360, + 3 + ], + [ + 11, + 5 + ], + [ + 10, + 5 + ], + [ + 9, + 5 + ], + [ + 31, + 5 + ], + [ + 32, + 5 + ], + [ + 3, + 1 + ], + [ + 4, + 1 + ], + [ + 49, + 1 + ], + [ + 50, + 5 + ], + [ + 582, + 2 + ], + [ + 52, + 2 + ], + [ + 2, + 3 + ], + [ + 1, + 10 + ], + [ + 51, + 2 + ], + [ + 377, + 1 + ], + [ + 596, + 1 + ], + [ + 598, + 1 + ], + [ + 597, + 1 + ], + [ + 599, + 1 + ] + ], + [ + [ + 54, + 99 + ], + [ + 58, + 40 + ], + [ + 63, + 9 + ], + [ + 64, + 9 + ], + [ + 92, + 10 + ], + [ + 69, + 60 + ], + [ + 80, + 8 + ], + [ + 72, + 20 + ], + [ + 84, + 5 + ] + ] + ] + ], + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 0, + "quest_rank": 6, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 55, + "wave_2_transition_type": 0, + "location": 8, + "penalty_per_cart": 1150, + "resources": 2, + "details": "Wanted:\nThe description for this\nquest! If you can find\nit, please let us know!\nThanks!", + "description": "Slay all 3 monsters", + "wave_1_transition_target": 0, + "hrp_restriction": 9, + "quest_fee": 0, + "quest_id": 60011, + "name": "Grudge Match: Land Lords", + "main_monster_2": 0, + "main_monster_1": 0, + "supply_set_number": 0, + "summon": 0, + "client": "Announcer/Receptionist", + "flags": [ + [ + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 1, + 0 + ] + ], + "success_message": "Complete the Main Quest." + }, + "objective_details": { + "subquest_2": { + "objective_num": 1, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 7, + "zenny_reward": 0, + "type": 131329 + }, + "main_quest": { + "objective_num": 1, + "hrp_reward": 0, + "rewards_row_1": [ + [ + 589, + 1, + 10 + ], + [ + 608, + 1, + 10 + ], + [ + 612, + 1, + 15 + ], + [ + 431, + 1, + 14 + ], + [ + 444, + 1, + 10 + ], + [ + 445, + 1, + 7 + ], + [ + 570, + 1, + 10 + ], + [ + 587, + 1, + 24 + ] + ], + "rewards_row_2": [], + "objective_type": 8, + "zenny_reward": 3000, + "type": 131329 + }, + "subquest_1": { + "objective_num": 1, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 9, + "zenny_reward": 0, + "type": 131329 + } + }, + "large_monsters": { + "monster_2": { + "size_spread": 0, + "hp_spread": 0, + "level": 55, + "boss_id": 1, + "type": 9, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 56, + "boss_id": 2, + "type": 7, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + }, + "monster_1": { + "size_spread": 0, + "hp_spread": 0, + "level": 55, + "boss_id": 0, + "type": 8, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + } + } +} \ No newline at end of file diff --git a/event/Grudge Match Qurupeco.json b/event/Grudge Match Qurupeco.json new file mode 100644 index 0000000..f8eab56 --- /dev/null +++ b/event/Grudge Match Qurupeco.json @@ -0,0 +1,386 @@ +{ + "small_monsters": [ + [], + [ + { + "variant": 3, + "unk1": 1, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -2404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 40, + "quantity": -1 + } + ] + ], + "arena_equipment": [ + [ + [ + 8, + 17 + ], + null, + null, + 24, + 27, + 24, + 28, + 27, + [ + [ + 98, + 20 + ], + [ + 13, + 10 + ], + [ + 45, + 10 + ], + [ + 134, + 5 + ], + [ + 391, + 2 + ], + [ + 3, + 1 + ], + [ + 7, + 2 + ], + [ + 582, + 1 + ], + [ + 1, + 2 + ] + ], + [] + ], + [ + [ + 7, + 4 + ], + null, + null, + 8, + 20, + 7, + 21, + 21, + [ + [ + 98, + 20 + ], + [ + 13, + 10 + ], + [ + 45, + 10 + ], + [ + 4, + 1 + ], + [ + 50, + 1 + ] + ], + [] + ], + [ + [ + 9, + 4 + ], + null, + null, + 10, + 4, + 123, + 24, + 7, + [ + [ + 98, + 20 + ], + [ + 13, + 10 + ], + [ + 45, + 10 + ], + [ + 16, + 1 + ], + [ + 50, + 1 + ], + [ + 582, + 1 + ], + [ + 1, + 1 + ] + ], + [] + ], + [ + [ + 11, + 1 + ], + [ + 12, + 5 + ], + [ + 13, + 5 + ], + 21, + 24, + 0, + 6, + 10, + [ + [ + 13, + 10 + ], + [ + 45, + 10 + ], + [ + 50, + 1 + ], + [ + 2, + 2 + ] + ], + [ + [ + 54, + 99 + ], + [ + 55, + 99 + ], + [ + 65, + 5 + ], + [ + 59, + 50 + ], + [ + 85, + 3 + ], + [ + 77, + 12 + ] + ] + ] + ], + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 0, + "quest_rank": 1, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 23, + "wave_2_transition_type": 0, + "location": 8, + "penalty_per_cart": 200, + "resources": 2, + "details": "Wanted:\nThe description for this\nquest! If you can find\nit, please let us know!\nThanks!", + "description": "Slay a Qurupeco", + "wave_1_transition_target": 0, + "hrp_restriction": 0, + "quest_fee": 0, + "quest_id": 60000, + "name": "Grudge Match: Qurupeco", + "main_monster_2": 0, + "main_monster_1": 0, + "supply_set_number": 0, + "summon": 0, + "client": "Announcer/Receptionist", + "flags": [ + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 1, + 0 + ] + ], + "success_message": "Complete the Main Quest." + }, + "objective_details": { + "subquest_2": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + }, + "main_quest": { + "objective_num": 1, + "hrp_reward": 0, + "rewards_row_1": [ + [ + 607, + 1, + 27 + ], + [ + 607, + 2, + 10 + ], + [ + 431, + 1, + 10 + ], + [ + 327, + 1, + 22 + ], + [ + 569, + 1, + 16 + ], + [ + 615, + 1, + 15 + ] + ], + "rewards_row_2": [], + "objective_type": 3, + "zenny_reward": 500, + "type": 257 + }, + "subquest_1": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + } + }, + "large_monsters": { + "monster_2": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_1": { + "size_spread": 0, + "hp_spread": 0, + "level": 23, + "boss_id": 0, + "type": 3, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + } + } +} \ No newline at end of file diff --git a/event/Grudge Match Rathian.json b/event/Grudge Match Rathian.json new file mode 100644 index 0000000..5532237 --- /dev/null +++ b/event/Grudge Match Rathian.json @@ -0,0 +1,435 @@ +{ + "small_monsters": [ + [], + [ + { + "variant": 3, + "unk1": 1, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -2404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 40, + "quantity": -1 + } + ] + ], + "arena_equipment": [ + [ + [ + 15, + 46 + ], + null, + null, + 132, + 6, + 40, + 44, + 43, + [ + [ + 98, + 20 + ], + [ + 14, + 10 + ], + [ + 45, + 10 + ], + [ + 360, + 2 + ], + [ + 17, + 2 + ], + [ + 347, + 1 + ], + [ + 50, + 2 + ], + [ + 582, + 1 + ], + [ + 1, + 2 + ] + ], + [] + ], + [ + [ + 14, + 1 + ], + null, + null, + 134, + 33, + 30, + 38, + 17, + [ + [ + 98, + 20 + ], + [ + 14, + 10 + ], + [ + 45, + 10 + ], + [ + 360, + 2 + ], + [ + 17, + 2 + ], + [ + 347, + 1 + ], + [ + 49, + 1 + ], + [ + 50, + 1 + ], + [ + 2, + 2 + ], + [ + 1, + 2 + ] + ], + [] + ], + [ + [ + 10, + 44 + ], + null, + null, + 32, + 35, + 46, + 13, + 13, + [ + [ + 98, + 20 + ], + [ + 14, + 10 + ], + [ + 45, + 10 + ], + [ + 17, + 2 + ], + [ + 360, + 2 + ], + [ + 347, + 1 + ], + [ + 391, + 2 + ], + [ + 50, + 1 + ], + [ + 2, + 1 + ], + [ + 1, + 2 + ] + ], + [] + ], + [ + [ + 11, + 3 + ], + [ + 12, + 6 + ], + [ + 13, + 3 + ], + 7, + 38, + 35, + 8, + 10, + [ + [ + 14, + 10 + ], + [ + 45, + 10 + ], + [ + 17, + 2 + ], + [ + 360, + 2 + ], + [ + 347, + 1 + ], + [ + 2, + 1 + ] + ], + [ + [ + 54, + 99 + ], + [ + 56, + 60 + ], + [ + 65, + 5 + ], + [ + 92, + 9 + ], + [ + 77, + 12 + ], + [ + 79, + 12 + ], + [ + 89, + 10 + ] + ] + ] + ], + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 0, + "quest_rank": 2, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 26, + "wave_2_transition_type": 0, + "location": 8, + "penalty_per_cart": 350, + "resources": 2, + "details": "Hey there, fight fanatics!\nTonight's target is the Queen of\nthe Land, Rathian! A fan of\nflame attacks, she also packs a\npotent charge from on high!\nHunters better wear asbestos\nunderwear for this fight!", + "description": "Slay a Rathian", + "wave_1_transition_target": 0, + "hrp_restriction": 0, + "quest_fee": 0, + "quest_id": 60002, + "name": "Grudge Match: Rathian", + "main_monster_2": 0, + "main_monster_1": 0, + "supply_set_number": 0, + "summon": 0, + "client": "Announcer/Receptionist", + "flags": [ + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 1, + 0 + ] + ], + "success_message": "Complete the Main Quest." + }, + "objective_details": { + "subquest_2": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + }, + "main_quest": { + "objective_num": 1, + "hrp_reward": 0, + "rewards_row_1": [ + [ + 610, + 1, + 21 + ], + [ + 610, + 2, + 7 + ], + [ + 431, + 1, + 13 + ], + [ + 328, + 1, + 8 + ], + [ + 327, + 1, + 14 + ], + [ + 569, + 1, + 19 + ], + [ + 615, + 1, + 18 + ] + ], + "rewards_row_2": [], + "objective_type": 1, + "zenny_reward": 1000, + "type": 257 + }, + "subquest_1": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + } + }, + "large_monsters": { + "monster_2": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_1": { + "size_spread": 0, + "hp_spread": 0, + "level": 26, + "boss_id": 0, + "type": 1, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + } + } +} \ No newline at end of file diff --git a/event/Grudge Match Royal Ludroth.json b/event/Grudge Match Royal Ludroth.json new file mode 100644 index 0000000..4abd354 --- /dev/null +++ b/event/Grudge Match Royal Ludroth.json @@ -0,0 +1,394 @@ +{ + "small_monsters": [ + [], + [ + { + "variant": 3, + "unk1": 1, + "unk2": 255, + "pos_z": -3042.7, + "pos_x": -0.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 40, + "quantity": -1 + } + ] + ], + "arena_equipment": [ + [ + [ + 8, + 13 + ], + null, + null, + 14, + 16, + 123, + 21, + 37, + [ + [ + 98, + 20 + ], + [ + 13, + 10 + ], + [ + 45, + 10 + ], + [ + 6, + 10 + ], + [ + 360, + 2 + ], + [ + 2, + 3 + ], + [ + 1, + 10 + ] + ], + [] + ], + [ + [ + 7, + 13 + ], + null, + null, + 131, + 20, + 22, + 26, + 5, + [ + [ + 98, + 20 + ], + [ + 13, + 10 + ], + [ + 45, + 10 + ], + [ + 6, + 10 + ], + [ + 20, + 2 + ], + [ + 4, + 1 + ], + [ + 50, + 1 + ] + ], + [] + ], + [ + [ + 9, + 53 + ], + null, + null, + 20, + 23, + 7, + 24, + 23, + [ + [ + 98, + 20 + ], + [ + 13, + 10 + ], + [ + 45, + 10 + ], + [ + 6, + 10 + ], + [ + 11, + 5 + ], + [ + 50, + 1 + ] + ], + [] + ], + [ + [ + 11, + 4 + ], + [ + 12, + 6 + ], + [ + 13, + 1 + ], + 9, + 9, + 37, + 10, + 2, + [ + [ + 13, + 10 + ], + [ + 45, + 10 + ], + [ + 6, + 10 + ], + [ + 360, + 2 + ], + [ + 4, + 1 + ], + [ + 52, + 2 + ], + [ + 2, + 2 + ] + ], + [ + [ + 54, + 99 + ], + [ + 56, + 60 + ], + [ + 57, + 50 + ], + [ + 65, + 5 + ], + [ + 75, + 12 + ], + [ + 77, + 12 + ] + ] + ] + ], + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 0, + "quest_rank": 1, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 23, + "wave_2_transition_type": 0, + "location": 12, + "penalty_per_cart": 350, + "resources": 2, + "details": "Ahoy, adrenaline junkies!\nNext up is the regally maned\nRoyal Ludroth! Will the pressure\nof facing this sea dragon on\nits home surf with a strict\ntime limit leave the hunters\nall washed up?", + "description": "Slay a Royal Ludroth", + "wave_1_transition_target": 0, + "hrp_restriction": 0, + "quest_fee": 0, + "quest_id": 60001, + "name": "Grudge Match: Royal Ludroth", + "main_monster_2": 0, + "main_monster_1": 0, + "supply_set_number": 0, + "summon": 0, + "client": "Announcer/Receptionist", + "flags": [ + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 1, + 0 + ] + ], + "success_message": "Complete the Main Quest." + }, + "objective_details": { + "subquest_2": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + }, + "main_quest": { + "objective_num": 1, + "hrp_reward": 0, + "rewards_row_1": [ + [ + 609, + 1, + 24 + ], + [ + 609, + 2, + 8 + ], + [ + 431, + 1, + 10 + ], + [ + 327, + 1, + 24 + ], + [ + 569, + 1, + 18 + ], + [ + 615, + 1, + 16 + ] + ], + "rewards_row_2": [], + "objective_type": 16, + "zenny_reward": 1000, + "type": 257 + }, + "subquest_1": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + } + }, + "large_monsters": { + "monster_2": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_1": { + "size_spread": 0, + "hp_spread": 0, + "level": 23, + "boss_id": 0, + "type": 16, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + } + } +} \ No newline at end of file diff --git a/event/Grudge Match Sea Power.json b/event/Grudge Match Sea Power.json new file mode 100644 index 0000000..5b051ee --- /dev/null +++ b/event/Grudge Match Sea Power.json @@ -0,0 +1,448 @@ +{ + "small_monsters": [ + [], + [ + { + "variant": 3, + "unk1": 1, + "unk2": 255, + "pos_z": -3042.7, + "pos_x": -0.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 40, + "quantity": -1 + } + ] + ], + "arena_equipment": [ + [ + [ + 15, + 23 + ], + null, + null, + 58, + 100, + 75, + 60, + 59, + [ + [ + 14, + 10 + ], + [ + 98, + 20 + ], + [ + 45, + 10 + ], + [ + 46, + 10 + ], + [ + 360, + 2 + ], + [ + 4, + 1 + ], + [ + 50, + 2 + ] + ], + [] + ], + [ + [ + 14, + 18 + ], + null, + null, + 86, + 92, + 58, + 9, + 9, + [ + [ + 14, + 10 + ], + [ + 98, + 20 + ], + [ + 45, + 10 + ], + [ + 46, + 10 + ], + [ + 360, + 2 + ], + [ + 2, + 2 + ], + [ + 1, + 2 + ], + [ + 50, + 3 + ] + ], + [] + ], + [ + [ + 9, + 48 + ], + null, + null, + 139, + 98, + 91, + 68, + 67, + [ + [ + 14, + 10 + ], + [ + 98, + 20 + ], + [ + 45, + 10 + ], + [ + 46, + 10 + ], + [ + 360, + 2 + ], + [ + 16, + 1 + ], + [ + 11, + 5 + ], + [ + 4, + 1 + ], + [ + 5, + 1 + ], + [ + 582, + 1 + ], + [ + 2, + 3 + ], + [ + 1, + 2 + ], + [ + 596, + 1 + ], + [ + 597, + 1 + ] + ], + [] + ], + [ + [ + 11, + 7 + ], + [ + 12, + 10 + ], + [ + 13, + 9 + ], + 95, + 101, + 94, + 102, + 100, + [ + [ + 14, + 10 + ], + [ + 45, + 10 + ], + [ + 46, + 10 + ], + [ + 360, + 2 + ], + [ + 5, + 2 + ], + [ + 4, + 1 + ], + [ + 582, + 2 + ], + [ + 2, + 2 + ], + [ + 597, + 1 + ], + [ + 599, + 1 + ] + ], + [ + [ + 54, + 99 + ], + [ + 55, + 99 + ], + [ + 57, + 50 + ], + [ + 93, + 10 + ], + [ + 68, + 60 + ] + ] + ] + ], + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 0, + "quest_rank": 4, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 55, + "wave_2_transition_type": 0, + "location": 12, + "penalty_per_cart": 350, + "resources": 2, + "details": "Wanted:\nThe description for this\nquest! If you can find\nit, please let us know!\nThanks!", + "description": "Slay a Royal Ludroth\nand a Gobul", + "wave_1_transition_target": 0, + "hrp_restriction": 9, + "quest_fee": 0, + "quest_id": 60007, + "name": "Grudge Match: Sea Power", + "main_monster_2": 0, + "main_monster_1": 0, + "supply_set_number": 0, + "summon": 0, + "client": "Announcer/Receptionist", + "flags": [ + [ + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 1, + 0 + ] + ], + "success_message": "Complete the Main Quest." + }, + "objective_details": { + "subquest_2": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + }, + "main_quest": { + "objective_num": 1, + "hrp_reward": 0, + "rewards_row_1": [ + [ + 585, + 1, + 10 + ], + [ + 609, + 2, + 23 + ], + [ + 431, + 1, + 14 + ], + [ + 328, + 1, + 10 + ], + [ + 444, + 1, + 6 + ], + [ + 569, + 1, + 16 + ], + [ + 570, + 1, + 6 + ], + [ + 587, + 1, + 15 + ] + ], + "rewards_row_2": [], + "objective_type": 16, + "zenny_reward": 1000, + "type": 257 + }, + "subquest_1": { + "objective_num": 1, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 18, + "zenny_reward": 0, + "type": 257 + } + }, + "large_monsters": { + "monster_2": { + "size_spread": 0, + "hp_spread": 0, + "level": 55, + "boss_id": 1, + "type": 18, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_1": { + "size_spread": 0, + "hp_spread": 0, + "level": 55, + "boss_id": 0, + "type": 16, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + } + } +} \ No newline at end of file diff --git a/event/Grudge Match The Two Flames.json b/event/Grudge Match The Two Flames.json new file mode 100644 index 0000000..9e63915 --- /dev/null +++ b/event/Grudge Match The Two Flames.json @@ -0,0 +1,464 @@ +{ + "small_monsters": [ + [], + [ + { + "variant": 3, + "unk1": 1, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -2404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 40, + "quantity": -1 + } + ] + ], + "arena_equipment": [ + [ + [ + 8, + 9 + ], + null, + null, + 72, + 77, + 70, + 78, + 77, + [ + [ + 13, + 10 + ], + [ + 14, + 10 + ], + [ + 98, + 20 + ], + [ + 45, + 10 + ], + [ + 20, + 2 + ], + [ + 17, + 2 + ], + [ + 360, + 1 + ], + [ + 347, + 1 + ], + [ + 11, + 5 + ], + [ + 3, + 1 + ], + [ + 50, + 5 + ], + [ + 52, + 1 + ], + [ + 1, + 1 + ] + ], + [] + ], + [ + [ + 14, + 1 + ], + null, + null, + 132, + 69, + 74, + 82, + 109, + [ + [ + 13, + 10 + ], + [ + 14, + 10 + ], + [ + 98, + 20 + ], + [ + 45, + 10 + ], + [ + 17, + 2 + ], + [ + 360, + 1 + ], + [ + 347, + 1 + ], + [ + 50, + 2 + ] + ], + [] + ], + [ + [ + 10, + 55 + ], + null, + null, + 136, + 96, + 103, + 76, + 95, + [ + [ + 13, + 10 + ], + [ + 14, + 10 + ], + [ + 98, + 20 + ], + [ + 26, + 10 + ], + [ + 17, + 2 + ], + [ + 360, + 1 + ], + [ + 347, + 1 + ], + [ + 9, + 5 + ], + [ + 4, + 1 + ], + [ + 50, + 1 + ] + ], + [] + ], + [ + [ + 11, + 6 + ], + [ + 12, + 8 + ], + [ + 13, + 10 + ], + 140, + 109, + 123, + 108, + 106, + [ + [ + 13, + 10 + ], + [ + 14, + 10 + ], + [ + 45, + 10 + ], + [ + 17, + 2 + ], + [ + 360, + 2 + ], + [ + 347, + 1 + ], + [ + 4, + 1 + ], + [ + 49, + 1 + ], + [ + 3, + 1 + ], + [ + 582, + 1 + ], + [ + 2, + 3 + ], + [ + 1, + 10 + ] + ], + [ + [ + 54, + 99 + ], + [ + 55, + 99 + ], + [ + 58, + 40 + ], + [ + 84, + 5 + ], + [ + 70, + 60 + ] + ] + ] + ], + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 0, + "quest_rank": 5, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 55, + "wave_2_transition_type": 0, + "location": 8, + "penalty_per_cart": 350, + "resources": 2, + "details": "Wanted:\nThe description for this\nquest! If you can find\nit, please let us know!\nThanks!", + "description": "Slay a Rathalos\nand a Rathian", + "wave_1_transition_target": 0, + "hrp_restriction": 9, + "quest_fee": 0, + "quest_id": 60008, + "name": "Grudge Match: The Two Flames", + "main_monster_2": 0, + "main_monster_1": 0, + "supply_set_number": 0, + "summon": 0, + "client": "Announcer/Receptionist", + "flags": [ + [ + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 1, + 0 + ] + ], + "success_message": "Complete the Main Quest." + }, + "objective_details": { + "subquest_2": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + }, + "main_quest": { + "objective_num": 1, + "hrp_reward": 0, + "rewards_row_1": [ + [ + 584, + 1, + 10 + ], + [ + 610, + 1, + 24 + ], + [ + 431, + 1, + 14 + ], + [ + 328, + 1, + 10 + ], + [ + 444, + 1, + 5 + ], + [ + 569, + 1, + 15 + ], + [ + 570, + 1, + 5 + ], + [ + 587, + 1, + 17 + ] + ], + "rewards_row_2": [], + "objective_type": 2, + "zenny_reward": 1000, + "type": 257 + }, + "subquest_1": { + "objective_num": 1, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 1, + "zenny_reward": 0, + "type": 257 + } + }, + "large_monsters": { + "monster_2": { + "size_spread": 0, + "hp_spread": 0, + "level": 55, + "boss_id": 1, + "type": 1, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_1": { + "size_spread": 0, + "hp_spread": 0, + "level": 55, + "boss_id": 0, + "type": 2, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + } + } +} \ No newline at end of file diff --git a/event/Grudge Match Uragaan.json b/event/Grudge Match Uragaan.json new file mode 100644 index 0000000..6ccd607 --- /dev/null +++ b/event/Grudge Match Uragaan.json @@ -0,0 +1,503 @@ +{ + "small_monsters": [ + [], + [ + { + "variant": 3, + "unk1": 1, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -2404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -2404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -1404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -3404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -5404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -4404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -2404.5, + "pos_y": -4038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 40, + "quantity": -1 + } + ] + ], + "arena_equipment": [ + [ + [ + 8, + 6 + ], + null, + null, + 30, + 12, + 32, + 13, + 13, + [ + [ + 98, + 20 + ], + [ + 14, + 10 + ], + [ + 13, + 10 + ], + [ + 45, + 10 + ], + [ + 391, + 2 + ], + [ + 360, + 2 + ], + [ + 4, + 1 + ], + [ + 50, + 2 + ], + [ + 2, + 3 + ], + [ + 1, + 2 + ] + ], + [] + ], + [ + [ + 14, + 10 + ], + null, + null, + 129, + 49, + 120, + 42, + 47, + [ + [ + 98, + 20 + ], + [ + 14, + 10 + ], + [ + 13, + 10 + ], + [ + 45, + 10 + ], + [ + 360, + 2 + ], + [ + 11, + 5 + ], + [ + 3, + 1 + ], + [ + 50, + 1 + ], + [ + 582, + 2 + ], + [ + 1, + 2 + ] + ], + [] + ], + [ + [ + 9, + 48 + ], + null, + null, + 42, + 45, + 124, + 5, + 45, + [ + [ + 98, + 20 + ], + [ + 14, + 10 + ], + [ + 13, + 10 + ], + [ + 45, + 10 + ], + [ + 15, + 1 + ], + [ + 50, + 1 + ], + [ + 582, + 1 + ], + [ + 1, + 1 + ] + ], + [] + ], + [ + [ + 11, + 5 + ], + [ + 12, + 5 + ], + [ + 13, + 6 + ], + 130, + 34, + 31, + 35, + 34, + [ + [ + 14, + 10 + ], + [ + 13, + 10 + ], + [ + 45, + 10 + ], + [ + 360, + 2 + ], + [ + 2, + 2 + ] + ], + [ + [ + 54, + 99 + ], + [ + 56, + 60 + ], + [ + 57, + 50 + ], + [ + 63, + 9 + ], + [ + 69, + 30 + ] + ] + ] + ], + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 0, + "quest_rank": 2, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 23, + "wave_2_transition_type": 0, + "location": 8, + "penalty_per_cart": 600, + "resources": 2, + "details": "Riled up, fight fans? Here comes\na dragon whose name is\nsynonymous with pain: Uragaan!\nOh, and we've added a time limit\nto make the fight extra fun. Are\nthe hunters up to the challenge?\nOutlook not good!", + "description": "Slay an Uragaan", + "wave_1_transition_target": 0, + "hrp_restriction": 0, + "quest_fee": 0, + "quest_id": 60004, + "name": "Grudge Match: Uragaan", + "main_monster_2": 0, + "main_monster_1": 0, + "supply_set_number": 0, + "summon": 0, + "client": "Announcer/Receptionist", + "flags": [ + [ + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 1, + 0 + ] + ], + "success_message": "Complete the Main Quest." + }, + "objective_details": { + "subquest_2": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + }, + "main_quest": { + "objective_num": 1, + "hrp_reward": 0, + "rewards_row_1": [ + [ + 612, + 1, + 19 + ], + [ + 612, + 2, + 7 + ], + [ + 431, + 1, + 14 + ], + [ + 328, + 1, + 8 + ], + [ + 327, + 1, + 12 + ], + [ + 569, + 1, + 20 + ], + [ + 615, + 1, + 20 + ] + ], + "rewards_row_2": [], + "objective_type": 9, + "zenny_reward": 1500, + "type": 257 + }, + "subquest_1": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + } + }, + "large_monsters": { + "monster_2": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_1": { + "size_spread": 0, + "hp_spread": 0, + "level": 23, + "boss_id": 0, + "type": 9, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + } + } +} \ No newline at end of file diff --git a/event/Grudge Match Wyvern Trio.json b/event/Grudge Match Wyvern Trio.json new file mode 100644 index 0000000..f3e110e --- /dev/null +++ b/event/Grudge Match Wyvern Trio.json @@ -0,0 +1,499 @@ +{ + "small_monsters": [ + [], + [ + { + "variant": 3, + "unk1": 1, + "unk2": 255, + "pos_z": -3542.7, + "pos_x": -2404.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 40, + "quantity": -1 + } + ] + ], + "arena_equipment": [ + [ + [ + 15, + 19 + ], + null, + null, + 134, + 41, + 38, + 42, + 41, + [ + [ + 98, + 20 + ], + [ + 14, + 10 + ], + [ + 13, + 10 + ], + [ + 45, + 10 + ], + [ + 375, + 5 + ], + [ + 17, + 2 + ], + [ + 360, + 3 + ], + [ + 347, + 1 + ], + [ + 3, + 1 + ], + [ + 4, + 1 + ], + [ + 50, + 2 + ], + [ + 582, + 2 + ], + [ + 1, + 2 + ] + ], + [] + ], + [ + [ + 7, + 48 + ], + null, + null, + 44, + 47, + 44, + 46, + 45, + [ + [ + 98, + 20 + ], + [ + 14, + 10 + ], + [ + 13, + 10 + ], + [ + 45, + 10 + ], + [ + 375, + 5 + ], + [ + 17, + 2 + ], + [ + 360, + 3 + ], + [ + 347, + 1 + ], + [ + 11, + 5 + ], + [ + 4, + 1 + ], + [ + 50, + 2 + ], + [ + 582, + 2 + ], + [ + 1, + 2 + ] + ], + [] + ], + [ + [ + 10, + 38 + ], + null, + null, + 46, + 49, + 38, + 48, + 47, + [ + [ + 98, + 20 + ], + [ + 14, + 10 + ], + [ + 13, + 10 + ], + [ + 45, + 10 + ], + [ + 375, + 5 + ], + [ + 17, + 2 + ], + [ + 360, + 3 + ], + [ + 347, + 1 + ], + [ + 4, + 1 + ], + [ + 49, + 1 + ], + [ + 50, + 1 + ] + ], + [] + ], + [ + [ + 11, + 13 + ], + [ + 12, + 7 + ], + [ + 13, + 8 + ], + 138, + 44, + 41, + 45, + 44, + [ + [ + 14, + 10 + ], + [ + 13, + 10 + ], + [ + 45, + 10 + ], + [ + 375, + 5 + ], + [ + 17, + 2 + ], + [ + 360, + 3 + ], + [ + 347, + 1 + ], + [ + 3, + 1 + ], + [ + 582, + 2 + ], + [ + 50, + 2 + ], + [ + 68, + 60 + ], + [ + 70, + 60 + ] + ], + [ + [ + 54, + 99 + ], + [ + 57, + 50 + ], + [ + 59, + 60 + ], + [ + 60, + 60 + ], + [ + 66, + 5 + ], + [ + 67, + 5 + ], + [ + 93, + 10 + ], + [ + 77, + 12 + ], + [ + 84, + 5 + ] + ] + ] + ], + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 0, + "quest_rank": 3, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 40, + "wave_2_transition_type": 0, + "location": 8, + "penalty_per_cart": 1200, + "resources": 2, + "details": "Wanted:\nThe description for this\nquest! If you can find\nit, please let us know!\nThanks!", + "description": "Slay all 3 monsters", + "wave_1_transition_target": 0, + "hrp_restriction": 0, + "quest_fee": 0, + "quest_id": 60005, + "name": "Grudge Match: Wyvern Trio", + "main_monster_2": 0, + "main_monster_1": 0, + "supply_set_number": 0, + "summon": 0, + "client": "Announcer/Receptionist", + "flags": [ + [ + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 1, + 0, + 1, + 0 + ] + ], + "success_message": "Complete the Main Quest." + }, + "objective_details": { + "subquest_2": { + "objective_num": 1, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 2, + "zenny_reward": 0, + "type": 131329 + }, + "main_quest": { + "objective_num": 1, + "hrp_reward": 0, + "rewards_row_1": [ + [ + 608, + 1, + 5 + ], + [ + 586, + 1, + 15 + ], + [ + 584, + 1, + 22 + ], + [ + 431, + 1, + 14 + ], + [ + 328, + 1, + 12 + ], + [ + 570, + 1, + 8 + ], + [ + 615, + 1, + 24 + ] + ], + "rewards_row_2": [], + "objective_type": 8, + "zenny_reward": 3000, + "type": 131329 + }, + "subquest_1": { + "objective_num": 1, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 5, + "zenny_reward": 0, + "type": 131329 + } + }, + "large_monsters": { + "monster_2": { + "size_spread": 0, + "hp_spread": 0, + "level": 40, + "boss_id": 1, + "type": 5, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 40, + "boss_id": 2, + "type": 2, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + }, + "monster_1": { + "size_spread": 0, + "hp_spread": 0, + "level": 40, + "boss_id": 0, + "type": 8, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + } + } +} \ No newline at end of file diff --git a/event/Hot Deal.json b/event/Hot Deal.json new file mode 100644 index 0000000..2db65b9 --- /dev/null +++ b/event/Hot Deal.json @@ -0,0 +1,857 @@ +{ + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "objective_details": { + "subquest_2": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + }, + "main_quest": { + "objective_num": 2, + "hrp_reward": 1240, + "rewards_row_1": [ + [ + 505, + 1, + 8 + ], + [ + 418, + 1, + 18 + ], + [ + 506, + 1, + 20 + ], + [ + 595, + 1, + 12 + ], + [ + 509, + 1, + 5 + ], + [ + 507, + 15, + 12 + ], + [ + 558, + 1, + 25 + ] + ], + "rewards_row_2": [ + [ + 505, + 1, + 8 + ], + [ + 418, + 1, + 18 + ], + [ + 506, + 1, + 20 + ], + [ + 595, + 1, + 12 + ], + [ + 509, + 1, + 5 + ], + [ + 507, + 15, + 12 + ], + [ + 558, + 1, + 25 + ] + ], + "objective_type": 19, + "zenny_reward": 13800, + "type": 1 + }, + "subquest_1": { + "objective_num": 1, + "hrp_reward": 1240, + "rewards_row_1": [ + [ + 505, + 1, + 8 + ], + [ + 418, + 1, + 18 + ], + [ + 506, + 1, + 20 + ], + [ + 595, + 1, + 12 + ], + [ + 509, + 1, + 5 + ], + [ + 507, + 15, + 12 + ], + [ + 558, + 1, + 25 + ] + ], + "description": "Hunt an Agnaktor", + "objective_type": 19, + "zenny_reward": 13800, + "type": 1 + } + }, + "small_monsters": [ + [], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -947.91, + "pos_x": -494.25, + "pos_y": 47.01, + "room": 1, + "rot_z": 0, + "rot_y": 112147, + "rot_x": 0, + "type": 34, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -712.51, + "pos_x": -1361.42, + "pos_y": 20.6, + "room": 1, + "rot_z": 0, + "rot_y": 79456, + "rot_x": 0, + "type": 34, + "quantity": 1 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": -1406.32, + "pos_x": 1031.98, + "pos_y": 26.73, + "room": 1, + "rot_z": 0, + "rot_y": 152977, + "rot_x": 0, + "type": 34, + "quantity": 1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 1809.58, + "pos_x": 3139.21, + "pos_y": -16.41, + "room": 2, + "rot_z": 0, + "rot_y": 14105, + "rot_x": 0, + "type": 33, + "quantity": 4 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 2280.01, + "pos_x": 2598.0, + "pos_y": 64.57, + "room": 2, + "rot_z": 0, + "rot_y": 14478, + "rot_x": 0, + "type": 33, + "quantity": 3 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 2453.7, + "pos_x": 2184.05, + "pos_y": 66.73, + "room": 2, + "rot_z": 0, + "rot_y": 11582, + "rot_x": 0, + "type": 33, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 1680.05, + "pos_x": 2741.8, + "pos_y": -53.82, + "room": 2, + "rot_z": 0, + "rot_y": 14128, + "rot_x": 0, + "type": 33, + "quantity": 1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 4494.92, + "pos_x": 6982.8, + "pos_y": 73.73, + "room": 3, + "rot_z": 0, + "rot_y": 5856, + "rot_x": 0, + "type": 27, + "quantity": -1 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 4957.68, + "pos_x": 7778.32, + "pos_y": 66.41, + "room": 3, + "rot_z": 0, + "rot_y": 2872, + "rot_x": 0, + "type": 27, + "quantity": -1 + }, + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": 5160.52, + "pos_x": 8087.79, + "pos_y": 83.54, + "room": 3, + "rot_z": 0, + "rot_y": 5774, + "rot_x": 0, + "type": 27, + "quantity": -1 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 2473.3, + "pos_x": 8676.94, + "pos_y": 515.74, + "room": 3, + "rot_z": 0, + "rot_y": 6351, + "rot_x": 273, + "type": 39, + "quantity": -1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 639.95, + "pos_x": 672.08, + "pos_y": 25.43, + "room": 4, + "rot_z": 0, + "rot_y": 2264, + "rot_x": 0, + "type": 29, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 0, + "unk2": 255, + "pos_z": 2402.83, + "pos_x": -1151.12, + "pos_y": -43.31, + "room": 4, + "rot_z": 0, + "rot_y": -39, + "rot_x": 0, + "type": 29, + "quantity": 3 + }, + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": 3042.75, + "pos_x": 1580.62, + "pos_y": 129.42, + "room": 4, + "rot_z": 0, + "rot_y": 0, + "rot_x": 0, + "type": 39, + "quantity": 3 + }, + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": 2633.18, + "pos_x": 1743.0, + "pos_y": 339.42, + "room": 4, + "rot_z": 0, + "rot_y": 91, + "rot_x": 0, + "type": 39, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 2724.68, + "pos_x": 1303.26, + "pos_y": 189.42, + "room": 4, + "rot_z": 0, + "rot_y": -28, + "rot_x": 0, + "type": 39, + "quantity": 1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": 104.92, + "pos_x": -1485.68, + "pos_y": 36.65, + "room": 4, + "rot_z": 0, + "rot_y": 3032, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -27.96, + "pos_x": 897.01, + "pos_y": 25.14, + "room": 4, + "rot_z": 0, + "rot_y": 56, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": 1861.15, + "pos_x": 2948.85, + "pos_y": 7.51, + "room": 4, + "rot_z": 0, + "rot_y": 20656, + "rot_x": 0, + "type": 40, + "quantity": -1 + } + ], + [ + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": 542.2, + "pos_x": -775.56, + "pos_y": 73.07, + "room": 5, + "rot_z": 0, + "rot_y": 1828, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -1218.55, + "pos_x": -3498.99, + "pos_y": 67.5, + "room": 5, + "rot_z": 0, + "rot_y": 4835, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -422.06, + "pos_x": 486.74, + "pos_y": 38.66, + "room": 5, + "rot_z": 0, + "rot_y": 1331, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -1059.79, + "pos_x": 2864.76, + "pos_y": 49.34, + "room": 5, + "rot_z": 0, + "rot_y": 7296, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -1571.42, + "pos_x": 1202.49, + "pos_y": 57.63, + "room": 5, + "rot_z": 0, + "rot_y": 0, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -1510.18, + "pos_x": -1733.55, + "pos_y": 56.88, + "room": 5, + "rot_z": 0, + "rot_y": 0, + "rot_x": 0, + "type": 40, + "quantity": -1 + } + ], + [ + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": 1076.53, + "pos_x": 393.15, + "pos_y": -35.75, + "room": 6, + "rot_z": 0, + "rot_y": -85, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": 447.51, + "pos_x": -1170.83, + "pos_y": -30.77, + "room": 6, + "rot_z": 0, + "rot_y": 0, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -202.83, + "pos_x": 1020.1, + "pos_y": 4.72, + "room": 6, + "rot_z": 0, + "rot_y": 0, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -1280.39, + "pos_x": -435.28, + "pos_y": -28.37, + "room": 6, + "rot_z": 0, + "rot_y": 0, + "rot_x": 0, + "type": 40, + "quantity": -1 + } + ], + [ + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 228.22, + "pos_x": 95.05, + "pos_y": -6.35, + "room": 7, + "rot_z": 0, + "rot_y": 1399, + "rot_x": 0, + "type": 21, + "quantity": 3 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 268.38, + "pos_x": -2114.33, + "pos_y": 17.37, + "room": 7, + "rot_z": 0, + "rot_y": 19692, + "rot_x": 0, + "type": 21, + "quantity": 2 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 1532.47, + "pos_x": -1877.72, + "pos_y": -22.42, + "room": 7, + "rot_z": 0, + "rot_y": 32312, + "rot_x": 0, + "type": 21, + "quantity": 1 + }, + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": -496.28, + "pos_x": 625.43, + "pos_y": 3.37, + "room": 7, + "rot_z": 0, + "rot_y": 6283, + "rot_x": 0, + "type": 21, + "quantity": 1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": 61.89, + "pos_x": -1447.72, + "pos_y": 21.43, + "room": 7, + "rot_z": 0, + "rot_y": 0, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -1209.27, + "pos_x": 316.55, + "pos_y": -3.36, + "room": 7, + "rot_z": 0, + "rot_y": 0, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": 1099.8, + "pos_x": 1008.65, + "pos_y": -9.18, + "room": 7, + "rot_z": 0, + "rot_y": 0, + "rot_x": 0, + "type": 40, + "quantity": -1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 1581.6, + "pos_x": 728.75, + "pos_y": -19.44, + "room": 8, + "rot_z": 0, + "rot_y": 1581.6, + "rot_x": 0, + "type": 30, + "quantity": 4 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 301.92, + "pos_x": -375.43, + "pos_y": 6.66, + "room": 8, + "rot_z": 0, + "rot_y": 40860, + "rot_x": 0, + "type": 30, + "quantity": 3 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -50.4, + "pos_x": 479.45, + "pos_y": 30.53, + "room": 8, + "rot_z": 0, + "rot_y": 59178, + "rot_x": 0, + "type": 30, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 1552.73, + "pos_x": 2190.05, + "pos_y": -6.53, + "room": 8, + "rot_z": 0, + "rot_y": 24814, + "rot_x": 0, + "type": 30, + "quantity": 1 + } + ], + [ + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": -971.03, + "pos_x": 1226.78, + "pos_y": 14.44, + "room": 9, + "rot_z": 0, + "rot_y": 49126, + "rot_x": 0, + "type": 21, + "quantity": 2 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": -556.52, + "pos_x": 30.91, + "pos_y": 11.0, + "room": 9, + "rot_z": 0, + "rot_y": 19871, + "rot_x": 0, + "type": 21, + "quantity": 3 + } + ], + [] + ], + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 1, + "quest_rank": 5, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 57, + "wave_2_transition_type": 0, + "location": 5, + "penalty_per_cart": 5000, + "resources": 1, + "details": "A coupla Agnaktor are meltin'\nmy profits on the Volcano,\nsee? Deal with 'em, and I'll\ngive you a weapon recipe I...\nacquired. They say this\narmament can bring wealth,\nor a mysterious death...", + "description": "Hunt 2 Agnaktor", + "wave_1_transition_target": 0, + "hrp_restriction": 10, + "quest_fee": 2750, + "quest_id": 61015, + "name": "Hot Deal", + "main_monster_2": 29, + "main_monster_1": 21, + "supply_set_number": 27, + "summon": 0, + "client": "Shady Merchant", + "flags": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 1, + 1 + ] + ], + "success_message": "Complete the Main Quest." + }, + "large_monsters": { + "monster_2": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_1": { + "size_spread": 1, + "hp_spread": 0, + "level": 57, + "boss_id": 0, + "type": 19, + "starting_area": 0, + "spawn_count": 2, + "size": 100 + } + } +} \ No newline at end of file diff --git a/event/Jump Four Jaggi.json b/event/Jump Four Jaggi.json new file mode 100644 index 0000000..b4f67ff --- /dev/null +++ b/event/Jump Four Jaggi.json @@ -0,0 +1,961 @@ +{ + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "objective_details": { + "subquest_2": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + }, + "main_quest": { + "objective_num": 4, + "hrp_reward": 440, + "rewards_row_1": [ + [ + 307, + 1, + 3 + ], + [ + 308, + 1, + 12 + ], + [ + 306, + 1, + 10 + ], + [ + 309, + 1, + 20 + ], + [ + 420, + 1, + 12 + ], + [ + 342, + 8, + 18 + ], + [ + 41, + 1, + 25 + ] + ], + "rewards_row_2": [ + [ + 440, + 1, + 1 + ], + [ + 447, + 1, + 1 + ], + [ + 441, + 1, + 1 + ], + [ + 327, + 1, + 1 + ], + [ + 328, + 1, + 1 + ] + ], + "objective_type": 12, + "zenny_reward": 4000, + "type": 1 + }, + "subquest_1": { + "objective_num": 2, + "hrp_reward": 440, + "rewards_row_1": [ + [ + 307, + 1, + 1 + ], + [ + 308, + 1, + 1 + ], + [ + 306, + 1, + 1 + ], + [ + 309, + 1, + 1 + ], + [ + 420, + 1, + 1 + ], + [ + 342, + 8, + 1 + ], + [ + 41, + 1, + 1 + ] + ], + "description": "Hunt 2 Great Jaggi", + "objective_type": 12, + "zenny_reward": 4000, + "type": 1 + } + }, + "small_monsters": [ + [], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 210.05, + "pos_x": 2039.26, + "pos_y": 12.7, + "room": 1, + "rot_z": 0, + "rot_y": 17, + "rot_x": 0, + "type": 10, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 814.06, + "pos_x": 857.89, + "pos_y": -41.97, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 10, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 135.22, + "pos_x": 97.58, + "pos_y": -75.54, + "room": 1, + "rot_z": 0, + "rot_y": -45, + "rot_x": 0, + "type": 10, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -667.01, + "pos_x": -393.52, + "pos_y": -163.94, + "room": 1, + "rot_z": 0, + "rot_y": -199, + "rot_x": 0, + "type": 10, + "quantity": 1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 1381.66, + "pos_x": -853.86, + "pos_y": 19.45, + "room": 2, + "rot_z": 0, + "rot_y": -113, + "rot_x": 0, + "type": 34, + "quantity": 1 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": -369.71, + "pos_x": -553.59, + "pos_y": -2.57, + "room": 2, + "rot_z": 0, + "rot_y": 193, + "rot_x": 0, + "type": 34, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -530.3, + "pos_x": -1698.75, + "pos_y": 5.74, + "room": 2, + "rot_z": 0, + "rot_y": 398, + "rot_x": 0, + "type": 34, + "quantity": 3 + } + ], + [ + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -610.86, + "pos_x": 873.28, + "pos_y": 85.07, + "room": 3, + "rot_z": 0, + "rot_y": -153, + "rot_x": 0, + "type": 31, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": 25.11, + "pos_x": 1247.84, + "pos_y": 106.65, + "room": 3, + "rot_z": 0, + "rot_y": -358, + "rot_x": 0, + "type": 31, + "quantity": -1 + }, + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": -32.21, + "pos_x": 177.92, + "pos_y": 450.7, + "room": 3, + "rot_z": 0, + "rot_y": -238, + "rot_x": 0, + "type": 37, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 362.86, + "pos_x": -78.66, + "pos_y": 330.7, + "room": 3, + "rot_z": 0, + "rot_y": -79, + "rot_x": 0, + "type": 37, + "quantity": 2 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 4145.11, + "pos_x": 606.18, + "pos_y": -12.89, + "room": 4, + "rot_z": 0, + "rot_y": 324, + "rot_x": 0, + "type": 11, + "quantity": 3 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 2292.05, + "pos_x": 524.37, + "pos_y": -18.65, + "room": 4, + "rot_z": 0, + "rot_y": 199, + "rot_x": 0, + "type": 11, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": 3044.5, + "pos_x": -460.08, + "pos_y": -71.51, + "room": 4, + "rot_z": 0, + "rot_y": -460, + "rot_x": 0, + "type": 29, + "quantity": -1 + } + ], + [ + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -211.14, + "pos_x": 300.4, + "pos_y": 4.0, + "room": 5, + "rot_z": 0, + "rot_y": 0, + "rot_x": 0, + "type": 10, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -918.94, + "pos_x": 458.16, + "pos_y": 1.49, + "room": 5, + "rot_z": 0, + "rot_y": 51, + "rot_x": 0, + "type": 10, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 925.68, + "pos_x": 1813.83, + "pos_y": 3.06, + "room": 5, + "rot_z": 0, + "rot_y": 494, + "rot_x": 0, + "type": 10, + "quantity": 4 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -757.3, + "pos_x": -504.37, + "pos_y": 3.05, + "room": 5, + "rot_z": 0, + "rot_y": 676, + "rot_x": 0, + "type": 11, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -420.89, + "pos_x": 1118.48, + "pos_y": 4.0, + "room": 5, + "rot_z": 0, + "rot_y": 364, + "rot_x": 0, + "type": 11, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 222.99, + "pos_x": 2658.84, + "pos_y": 3.24, + "room": 5, + "rot_z": 0, + "rot_y": 756, + "rot_x": 0, + "type": 11, + "quantity": -1 + } + ], + [ + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": 695.3, + "pos_x": 1612.71, + "pos_y": -30.27, + "room": 6, + "rot_z": 0, + "rot_y": 517, + "rot_x": 0, + "type": 29, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -266.33, + "pos_x": -2050.04, + "pos_y": -31.9, + "room": 6, + "rot_z": 0, + "rot_y": 28, + "rot_x": 0, + "type": 29, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -26.14, + "pos_x": -344.14, + "pos_y": -13.0, + "room": 6, + "rot_z": 0, + "rot_y": 443, + "rot_x": 0, + "type": 33, + "quantity": 5 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -416.52, + "pos_x": -161.74, + "pos_y": 4.8, + "room": 6, + "rot_z": 0, + "rot_y": 472, + "rot_x": 0, + "type": 33, + "quantity": 4 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -643.19, + "pos_x": -481.05, + "pos_y": 15.34, + "room": 6, + "rot_z": 0, + "rot_y": 568, + "rot_x": 0, + "type": 33, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -235.13, + "pos_x": -692.26, + "pos_y": -11.02, + "room": 6, + "rot_z": 0, + "rot_y": 608, + "rot_x": 0, + "type": 33, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -343.46, + "pos_x": -417.82, + "pos_y": -1.44, + "room": 6, + "rot_z": 0, + "rot_y": 147, + "rot_x": 0, + "type": 33, + "quantity": 3 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -2925.29, + "pos_x": 4294.59, + "pos_y": -75.65, + "room": 7, + "rot_z": 0, + "rot_y": -130, + "rot_x": 0, + "type": 10, + "quantity": 3 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -2049.22, + "pos_x": 3995.3, + "pos_y": -45.09, + "room": 7, + "rot_z": 0, + "rot_y": -85, + "rot_x": 0, + "type": 10, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -1574.97, + "pos_x": 4187.0, + "pos_y": -17.07, + "room": 7, + "rot_z": 0, + "rot_y": -17, + "rot_x": 0, + "type": 10, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -2570.78, + "pos_x": 3781.64, + "pos_y": -66.86, + "room": 7, + "rot_z": 0, + "rot_y": -130, + "rot_x": 0, + "type": 10, + "quantity": 1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 4049.95, + "pos_x": 293.99, + "pos_y": -170.31, + "room": 8, + "rot_z": 0, + "rot_y": 819, + "rot_x": 0, + "type": 22, + "quantity": 7 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 3440.16, + "pos_x": 124.95, + "pos_y": -186.54, + "room": 8, + "rot_z": 0, + "rot_y": 819, + "rot_x": 0, + "type": 22, + "quantity": 5 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 4509.84, + "pos_x": -425.01, + "pos_y": -179.3, + "room": 8, + "rot_z": 0, + "rot_y": 819, + "rot_x": 0, + "type": 22, + "quantity": 3 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 4108.5, + "pos_x": -714.48, + "pos_y": -183.78, + "room": 8, + "rot_z": 0, + "rot_y": 819, + "rot_x": 0, + "type": 22, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 3726.09, + "pos_x": -1021.27, + "pos_y": -215.48, + "room": 8, + "rot_z": 0, + "rot_y": 819, + "rot_x": 0, + "type": 22, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -316.05, + "pos_x": -1974.57, + "pos_y": -209.48, + "room": 8, + "rot_z": 0, + "rot_y": -56, + "rot_x": 0, + "type": 31, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -382.9, + "pos_x": -1825.11, + "pos_y": -210.91, + "room": 8, + "rot_z": 0, + "rot_y": 130, + "rot_x": 0, + "type": 31, + "quantity": -1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 592.49, + "pos_x": 3383.92, + "pos_y": 2.65, + "room": 9, + "rot_z": 0, + "rot_y": -193, + "rot_x": 0, + "type": 30, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 987.24, + "pos_x": 2653.55, + "pos_y": -22.59, + "room": 9, + "rot_z": 0, + "rot_y": -73, + "rot_x": 0, + "type": 30, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": 445.91, + "pos_x": 2838.69, + "pos_y": -28.0, + "room": 9, + "rot_z": 0, + "rot_y": -142, + "rot_x": 0, + "type": 31, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": 575.43, + "pos_x": 2109.53, + "pos_y": -26.57, + "room": 9, + "rot_z": 0, + "rot_y": -460, + "rot_x": 0, + "type": 31, + "quantity": -1 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 2199.24, + "pos_x": -1713.72, + "pos_y": 1262.5, + "room": 9, + "rot_z": 0, + "rot_y": -45, + "rot_x": 273, + "type": 37, + "quantity": -1 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 1682.19, + "pos_x": -1174.44, + "pos_y": 1319.5, + "room": 9, + "rot_z": 0, + "rot_y": -39, + "rot_x": 0, + "type": 37, + "quantity": 6 + } + ], + [], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -720.92, + "pos_x": 2195.89, + "pos_y": 73.7, + "room": 11, + "rot_z": 0, + "rot_y": 39, + "rot_x": 0, + "type": 26, + "quantity": 2 + }, + { + "variant": 6, + "unk1": 1, + "unk2": 255, + "pos_z": 896.44, + "pos_x": -535.73, + "pos_y": 1212.59, + "room": 11, + "rot_z": 0, + "rot_y": 169, + "rot_x": 0, + "type": 26, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 289.52, + "pos_x": -434.0, + "pos_y": 198.96, + "room": 11, + "rot_z": 0, + "rot_y": -267, + "rot_x": 0, + "type": 37, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 66.62, + "pos_x": -802.69, + "pos_y": 198.96, + "room": 11, + "rot_z": 0, + "rot_y": -216, + "rot_x": 0, + "type": 37, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -371.21, + "pos_x": -645.14, + "pos_y": 288.96, + "room": 11, + "rot_z": 0, + "rot_y": -227, + "rot_x": 0, + "type": 37, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -166.43, + "pos_x": -473.33, + "pos_y": 168.96, + "room": 11, + "rot_z": 0, + "rot_y": -210, + "rot_x": 0, + "type": 37, + "quantity": 1 + } + ] + ], + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 0, + "quest_rank": 1, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 23, + "wave_2_transition_type": 0, + "location": 2, + "penalty_per_cart": 1400, + "resources": 0, + "details": "I'm gonna get so fired for\nthis... The Great Jaggi some\nhunter brought in just\nescaped. Mind going after\nthem? You better hurry,\nthough. Bet they've got some\nincredible materials, too.", + "description": "Hunt 4 Great Jaggi", + "wave_1_transition_target": 0, + "hrp_restriction": 0, + "quest_fee": 400, + "quest_id": 61001, + "name": "Jump Four Jaggi", + "main_monster_2": 31, + "main_monster_1": 36, + "supply_set_number": 19, + "summon": 1678049817, + "client": "Guild Subcontractor", + "flags": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 1, + 1 + ] + ], + "success_message": "Complete the Main Quest." + }, + "large_monsters": { + "monster_2": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_1": { + "size_spread": 1, + "hp_spread": 1, + "level": 23, + "boss_id": 255, + "type": 12, + "starting_area": 0, + "spawn_count": 4, + "size": 100 + } + } +} \ No newline at end of file diff --git a/event/Jump Fourty-Eight Jaggi.json b/event/Jump Fourty-Eight Jaggi.json new file mode 100644 index 0000000..10bf812 --- /dev/null +++ b/event/Jump Fourty-Eight Jaggi.json @@ -0,0 +1,961 @@ +{ + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "objective_details": { + "subquest_2": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + }, + "main_quest": { + "objective_num": 48, + "hrp_reward": 750, + "rewards_row_1": [ + [ + 307, + 2, + 3 + ], + [ + 308, + 2, + 12 + ], + [ + 420, + 1, + 10 + ], + [ + 110, + 1, + 20 + ], + [ + 565, + 1, + 12 + ], + [ + 431, + 2, + 18 + ], + [ + 41, + 1, + 25 + ] + ], + "rewards_row_2": [ + [ + 440, + 1, + 1 + ], + [ + 447, + 1, + 1 + ], + [ + 441, + 1, + 1 + ], + [ + 327, + 1, + 1 + ], + [ + 328, + 1, + 1 + ] + ], + "objective_type": 12, + "zenny_reward": 15000, + "type": 1 + }, + "subquest_1": { + "objective_num": 24, + "hrp_reward": 255, + "rewards_row_1": [ + [ + 307, + 1, + 1 + ], + [ + 308, + 1, + 1 + ], + [ + 306, + 1, + 1 + ], + [ + 309, + 1, + 1 + ], + [ + 420, + 1, + 1 + ], + [ + 342, + 8, + 1 + ], + [ + 41, + 1, + 1 + ] + ], + "description": "Hunt 24 Great Jaggi", + "objective_type": 12, + "zenny_reward": 8000, + "type": 1 + } + }, + "small_monsters": [ + [], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 210.05, + "pos_x": 2039.26, + "pos_y": 12.7, + "room": 1, + "rot_z": 0, + "rot_y": 17, + "rot_x": 0, + "type": 10, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 814.06, + "pos_x": 857.89, + "pos_y": -41.97, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 10, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 135.22, + "pos_x": 97.58, + "pos_y": -75.54, + "room": 1, + "rot_z": 0, + "rot_y": -45, + "rot_x": 0, + "type": 10, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -667.01, + "pos_x": -393.52, + "pos_y": -163.94, + "room": 1, + "rot_z": 0, + "rot_y": -199, + "rot_x": 0, + "type": 10, + "quantity": 1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 1381.66, + "pos_x": -853.86, + "pos_y": 19.45, + "room": 2, + "rot_z": 0, + "rot_y": -113, + "rot_x": 0, + "type": 34, + "quantity": 1 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": -369.71, + "pos_x": -553.59, + "pos_y": -2.57, + "room": 2, + "rot_z": 0, + "rot_y": 193, + "rot_x": 0, + "type": 34, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -530.3, + "pos_x": -1698.75, + "pos_y": 5.74, + "room": 2, + "rot_z": 0, + "rot_y": 398, + "rot_x": 0, + "type": 34, + "quantity": 3 + } + ], + [ + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -610.86, + "pos_x": 873.28, + "pos_y": 85.07, + "room": 3, + "rot_z": 0, + "rot_y": -153, + "rot_x": 0, + "type": 31, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": 25.11, + "pos_x": 1247.84, + "pos_y": 106.65, + "room": 3, + "rot_z": 0, + "rot_y": -358, + "rot_x": 0, + "type": 31, + "quantity": -1 + }, + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": -32.21, + "pos_x": 177.92, + "pos_y": 450.7, + "room": 3, + "rot_z": 0, + "rot_y": -238, + "rot_x": 0, + "type": 37, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 362.86, + "pos_x": -78.66, + "pos_y": 330.7, + "room": 3, + "rot_z": 0, + "rot_y": -79, + "rot_x": 0, + "type": 37, + "quantity": 2 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 4145.11, + "pos_x": 606.18, + "pos_y": -12.89, + "room": 4, + "rot_z": 0, + "rot_y": 324, + "rot_x": 0, + "type": 11, + "quantity": 3 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 2292.05, + "pos_x": 524.37, + "pos_y": -18.65, + "room": 4, + "rot_z": 0, + "rot_y": 199, + "rot_x": 0, + "type": 11, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": 3044.5, + "pos_x": -460.08, + "pos_y": -71.51, + "room": 4, + "rot_z": 0, + "rot_y": -460, + "rot_x": 0, + "type": 29, + "quantity": -1 + } + ], + [ + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -211.14, + "pos_x": 300.4, + "pos_y": 4.0, + "room": 5, + "rot_z": 0, + "rot_y": 0, + "rot_x": 0, + "type": 10, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -918.94, + "pos_x": 458.16, + "pos_y": 1.49, + "room": 5, + "rot_z": 0, + "rot_y": 51, + "rot_x": 0, + "type": 10, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 925.68, + "pos_x": 1813.83, + "pos_y": 3.06, + "room": 5, + "rot_z": 0, + "rot_y": 494, + "rot_x": 0, + "type": 10, + "quantity": 4 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -757.3, + "pos_x": -504.37, + "pos_y": 3.05, + "room": 5, + "rot_z": 0, + "rot_y": 676, + "rot_x": 0, + "type": 11, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -420.89, + "pos_x": 1118.48, + "pos_y": 4.0, + "room": 5, + "rot_z": 0, + "rot_y": 364, + "rot_x": 0, + "type": 11, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 222.99, + "pos_x": 2658.84, + "pos_y": 3.24, + "room": 5, + "rot_z": 0, + "rot_y": 756, + "rot_x": 0, + "type": 11, + "quantity": -1 + } + ], + [ + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": 695.3, + "pos_x": 1612.71, + "pos_y": -30.27, + "room": 6, + "rot_z": 0, + "rot_y": 517, + "rot_x": 0, + "type": 29, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -266.33, + "pos_x": -2050.04, + "pos_y": -31.9, + "room": 6, + "rot_z": 0, + "rot_y": 28, + "rot_x": 0, + "type": 29, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -26.14, + "pos_x": -344.14, + "pos_y": -13.0, + "room": 6, + "rot_z": 0, + "rot_y": 443, + "rot_x": 0, + "type": 33, + "quantity": 5 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -416.52, + "pos_x": -161.74, + "pos_y": 4.8, + "room": 6, + "rot_z": 0, + "rot_y": 472, + "rot_x": 0, + "type": 33, + "quantity": 4 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -643.19, + "pos_x": -481.05, + "pos_y": 15.34, + "room": 6, + "rot_z": 0, + "rot_y": 568, + "rot_x": 0, + "type": 33, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -235.13, + "pos_x": -692.26, + "pos_y": -11.02, + "room": 6, + "rot_z": 0, + "rot_y": 608, + "rot_x": 0, + "type": 33, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -343.46, + "pos_x": -417.82, + "pos_y": -1.44, + "room": 6, + "rot_z": 0, + "rot_y": 147, + "rot_x": 0, + "type": 33, + "quantity": 3 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -2925.29, + "pos_x": 4294.59, + "pos_y": -75.65, + "room": 7, + "rot_z": 0, + "rot_y": -130, + "rot_x": 0, + "type": 10, + "quantity": 3 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -2049.22, + "pos_x": 3995.3, + "pos_y": -45.09, + "room": 7, + "rot_z": 0, + "rot_y": -85, + "rot_x": 0, + "type": 10, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -1574.97, + "pos_x": 4187.0, + "pos_y": -17.07, + "room": 7, + "rot_z": 0, + "rot_y": -17, + "rot_x": 0, + "type": 10, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -2570.78, + "pos_x": 3781.64, + "pos_y": -66.86, + "room": 7, + "rot_z": 0, + "rot_y": -130, + "rot_x": 0, + "type": 10, + "quantity": 1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 4049.95, + "pos_x": 293.99, + "pos_y": -170.31, + "room": 8, + "rot_z": 0, + "rot_y": 819, + "rot_x": 0, + "type": 22, + "quantity": 7 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 3440.16, + "pos_x": 124.95, + "pos_y": -186.54, + "room": 8, + "rot_z": 0, + "rot_y": 819, + "rot_x": 0, + "type": 22, + "quantity": 5 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 4509.84, + "pos_x": -425.01, + "pos_y": -179.3, + "room": 8, + "rot_z": 0, + "rot_y": 819, + "rot_x": 0, + "type": 22, + "quantity": 3 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 4108.5, + "pos_x": -714.48, + "pos_y": -183.78, + "room": 8, + "rot_z": 0, + "rot_y": 819, + "rot_x": 0, + "type": 22, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 3726.09, + "pos_x": -1021.27, + "pos_y": -215.48, + "room": 8, + "rot_z": 0, + "rot_y": 819, + "rot_x": 0, + "type": 22, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -316.05, + "pos_x": -1974.57, + "pos_y": -209.48, + "room": 8, + "rot_z": 0, + "rot_y": -56, + "rot_x": 0, + "type": 31, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -382.9, + "pos_x": -1825.11, + "pos_y": -210.91, + "room": 8, + "rot_z": 0, + "rot_y": 130, + "rot_x": 0, + "type": 31, + "quantity": -1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 592.49, + "pos_x": 3383.92, + "pos_y": 2.65, + "room": 9, + "rot_z": 0, + "rot_y": -193, + "rot_x": 0, + "type": 30, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 987.24, + "pos_x": 2653.55, + "pos_y": -22.59, + "room": 9, + "rot_z": 0, + "rot_y": -73, + "rot_x": 0, + "type": 30, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": 445.91, + "pos_x": 2838.69, + "pos_y": -28.0, + "room": 9, + "rot_z": 0, + "rot_y": -142, + "rot_x": 0, + "type": 31, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": 575.43, + "pos_x": 2109.53, + "pos_y": -26.57, + "room": 9, + "rot_z": 0, + "rot_y": -460, + "rot_x": 0, + "type": 31, + "quantity": -1 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 2199.24, + "pos_x": -1713.72, + "pos_y": 1262.5, + "room": 9, + "rot_z": 0, + "rot_y": -45, + "rot_x": 273, + "type": 37, + "quantity": -1 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 1682.19, + "pos_x": -1174.44, + "pos_y": 1319.5, + "room": 9, + "rot_z": 0, + "rot_y": -39, + "rot_x": 0, + "type": 37, + "quantity": 6 + } + ], + [], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -720.92, + "pos_x": 2195.89, + "pos_y": 73.7, + "room": 11, + "rot_z": 0, + "rot_y": 39, + "rot_x": 0, + "type": 26, + "quantity": 2 + }, + { + "variant": 6, + "unk1": 1, + "unk2": 255, + "pos_z": 896.44, + "pos_x": -535.73, + "pos_y": 1212.59, + "room": 11, + "rot_z": 0, + "rot_y": 169, + "rot_x": 0, + "type": 26, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 289.52, + "pos_x": -434.0, + "pos_y": 198.96, + "room": 11, + "rot_z": 0, + "rot_y": -267, + "rot_x": 0, + "type": 37, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 66.62, + "pos_x": -802.69, + "pos_y": 198.96, + "room": 11, + "rot_z": 0, + "rot_y": -216, + "rot_x": 0, + "type": 37, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -371.21, + "pos_x": -645.14, + "pos_y": 288.96, + "room": 11, + "rot_z": 0, + "rot_y": -227, + "rot_x": 0, + "type": 37, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -166.43, + "pos_x": -473.33, + "pos_y": 168.96, + "room": 11, + "rot_z": 0, + "rot_y": -210, + "rot_x": 0, + "type": 37, + "quantity": 1 + } + ] + ], + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 0, + "quest_rank": 1, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 23, + "wave_2_transition_type": 0, + "location": 2, + "penalty_per_cart": 1400, + "resources": 0, + "details": "I'm gonna get so fired for\nthis... The Great Jaggi some\nhunter brought in just\nescaped. Mind going after\nthem? You better hurry,\nthough. Bet they've got some\nincredible materials, too.", + "description": "Hunt 48 Great Jaggi", + "wave_1_transition_target": 0, + "hrp_restriction": 0, + "quest_fee": 400, + "quest_id": 61001, + "name": "Jump Fourty-Eight Jaggi", + "main_monster_2": 31, + "main_monster_1": 36, + "supply_set_number": 19, + "summon": 1678049817, + "client": "Guild Subcontractor", + "flags": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 1, + 1 + ] + ], + "success_message": "Complete the Main Quest." + }, + "large_monsters": { + "monster_2": { + "size_spread": 1, + "hp_spread": 1, + "level": 23, + "boss_id": 255, + "type": 12, + "starting_area": 0, + "spawn_count": 16, + "size": 100 + }, + "monster_3": { + "size_spread": 1, + "hp_spread": 1, + "level": 23, + "boss_id": 255, + "type": 12, + "starting_area": 0, + "spawn_count": 16, + "size": 100 + }, + "monster_1": { + "size_spread": 1, + "hp_spread": 1, + "level": 23, + "boss_id": 255, + "type": 12, + "starting_area": 0, + "spawn_count": 16, + "size": 100 + } + } +} \ No newline at end of file diff --git a/event/Lords of the Sea and Sky.json b/event/Lords of the Sea and Sky.json new file mode 100644 index 0000000..b9b87b2 --- /dev/null +++ b/event/Lords of the Sea and Sky.json @@ -0,0 +1,225 @@ +{ + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "objective_details": { + "subquest_2": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + }, + "main_quest": { + "objective_num": 1, + "hrp_reward": 1760, + "rewards_row_1": [ + [ + 499, + 1, + 10 + ], + [ + 313, + 1, + 14 + ], + [ + 177, + 1, + 23 + ], + [ + 176, + 1, + 15 + ], + [ + 174, + 1, + 4 + ], + [ + 503, + 1, + 4 + ], + [ + 440, + 1, + 17 + ], + [ + 441, + 1, + 8 + ], + [ + 442, + 1, + 5 + ] + ], + "rewards_row_2": [ + [ + 441, + 1, + 25 + ], + [ + 440, + 1, + 18 + ], + [ + 442, + 1, + 5 + ], + [ + 444, + 1, + 12 + ], + [ + 445, + 1, + 20 + ], + [ + 446, + 1, + 6 + ], + [ + 110, + 1, + 14 + ] + ], + "objective_type": 15, + "zenny_reward": 23400, + "type": 1 + }, + "subquest_1": { + "objective_num": 1, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 2, + "zenny_reward": 0, + "type": 1 + } + }, + "small_monsters": [ + [], + [] + ], + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 0, + "quest_rank": 6, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 60, + "wave_2_transition_type": 0, + "location": 8, + "penalty_per_cart": 7800, + "resources": 1, + "details": "In the Arena tonight, reunited\nand it feels so--gahh! It's\nthe king and lord of sky and\nsea, Rathalos and Lagiacrus!\nTheir victims: our hunters!\nPrepare for a bout that'll\ngo down in hunting history!", + "description": "Hunt a Lagiacrus\nand a Rathalos", + "wave_1_transition_target": 0, + "hrp_restriction": 11, + "quest_fee": 2300, + "quest_id": 61019, + "name": "Lords of the Sea and Sky", + "main_monster_2": 0, + "main_monster_1": 0, + "supply_set_number": 43, + "summon": 1677787954, + "client": "Arena Manager", + "flags": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ] + ], + "success_message": "Complete the Main Quest." + }, + "large_monsters": { + "monster_2": { + "size_spread": 3, + "hp_spread": 0, + "level": 60, + "boss_id": 1, + "type": 2, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_1": { + "size_spread": 3, + "hp_spread": 0, + "level": 60, + "boss_id": 0, + "type": 15, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + } + } +} \ No newline at end of file diff --git a/event/Marine Warfare.json b/event/Marine Warfare.json new file mode 100644 index 0000000..18f79a5 --- /dev/null +++ b/event/Marine Warfare.json @@ -0,0 +1,210 @@ +{ + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "objective_details": { + "subquest_2": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + }, + "main_quest": { + "objective_num": 2, + "hrp_reward": 1480, + "rewards_row_1": [ + [ + 445, + 1, + 8 + ], + [ + 498, + 1, + 15 + ], + [ + 495, + 1, + 24 + ], + [ + 496, + 1, + 20 + ], + [ + 325, + 1, + 8 + ], + [ + 432, + 1, + 25 + ] + ], + "rewards_row_2": [ + [ + 441, + 1, + 10 + ], + [ + 440, + 1, + 16 + ], + [ + 442, + 1, + 3 + ], + [ + 154, + 2, + 23 + ], + [ + 153, + 3, + 20 + ], + [ + 343, + 10, + 14 + ], + [ + 342, + 18, + 14 + ] + ], + "objective_type": 18, + "zenny_reward": 16800, + "type": 1 + }, + "subquest_1": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + } + }, + "small_monsters": [ + [], + [] + ], + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 0, + "quest_rank": 4, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 54, + "wave_2_transition_type": 0, + "location": 12, + "penalty_per_cart": 5600, + "resources": 1, + "details": "Seeking hunters to aid in the\ndevelopment of underwater\nweaponry by hunting aquatic\nmonsters. The Guild will\nprovide the venue and the\nmonster, but applicants should\nhave their own equipment.", + "description": "Hunt 2 Gobul\n", + "wave_1_transition_target": 0, + "hrp_restriction": 9, + "quest_fee": 1650, + "quest_id": 61013, + "name": "Marine Warfare", + "main_monster_2": 0, + "main_monster_1": 0, + "supply_set_number": 48, + "summon": 0, + "client": "Guild Weapons Development", + "flags": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 1, + 1 + ] + ], + "success_message": "Complete the Main Quest." + }, + "large_monsters": { + "monster_2": { + "size_spread": 3, + "hp_spread": 0, + "level": 54, + "boss_id": 1, + "type": 18, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_1": { + "size_spread": 3, + "hp_spread": 0, + "level": 54, + "boss_id": 0, + "type": 18, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + } + } +} \ No newline at end of file diff --git a/event/Mercy Mission.json b/event/Mercy Mission.json new file mode 100644 index 0000000..0cb1c6f --- /dev/null +++ b/event/Mercy Mission.json @@ -0,0 +1,784 @@ +{ + "small_monsters": [ + [], + [ + { + "type": 34, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 1, + "quantity": 1, + "pos_x": 247.42, + "pos_y": 560.37, + "pos_z": -3613.8, + "rot_x": 0, + "rot_y": -21504, + "rot_z": 0 + }, + { + "type": 34, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 1, + "quantity": 3, + "pos_x": -474.9, + "pos_y": 491.91, + "pos_z": -3857.25, + "rot_x": 0, + "rot_y": -48128, + "rot_z": 0 + }, + { + "type": 34, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 1, + "quantity": 3, + "pos_x": 897.01, + "pos_y": 418.6, + "pos_z": -4931.83, + "rot_x": 0, + "rot_y": -51200, + "rot_z": 0 + }, + { + "type": 34, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 1, + "quantity": 2, + "pos_x": 219.95, + "pos_y": 402.97, + "pos_z": -4449.25, + "rot_x": 0, + "rot_y": 44032, + "rot_z": 0 + } + ], + [ + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 2, + "quantity": 3, + "pos_x": -6654.1, + "pos_y": 23.12, + "pos_z": 117.64, + "rot_x": 0, + "rot_y": 81920, + "rot_z": 0 + } + ], + [ + { + "type": 27, + "unk1": 0, + "unk2": 3, + "variant": 0, + "room": 3, + "quantity": -1, + "pos_x": 2567.38, + "pos_y": -4.58, + "pos_z": -1280.44, + "rot_x": 0, + "rot_y": 63488, + "rot_z": 0 + }, + { + "type": 27, + "unk1": 1, + "unk2": 3, + "variant": 2, + "room": 3, + "quantity": -1, + "pos_x": 2119.14, + "pos_y": -14.21, + "pos_z": -787.0, + "rot_x": 0, + "rot_y": 60416, + "rot_z": 0 + } + ], + [ + { + "type": 30, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 4, + "quantity": 2, + "pos_x": 39.65, + "pos_y": 2.0, + "pos_z": 2631.32, + "rot_x": 0, + "rot_y": 20480, + "rot_z": 0 + }, + { + "type": 30, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 4, + "quantity": 2, + "pos_x": -538.14, + "pos_y": 2.0, + "pos_z": 2165.99, + "rot_x": 0, + "rot_y": -16384, + "rot_z": 0 + }, + { + "type": 30, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 4, + "quantity": 1, + "pos_x": 360.98, + "pos_y": 2.0, + "pos_z": 820.71, + "rot_x": 0, + "rot_y": -33792, + "rot_z": 0 + }, + { + "type": 36, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 4, + "quantity": -1, + "pos_x": -5671.42, + "pos_y": 466.03, + "pos_z": 3071.35, + "rot_x": 49152, + "rot_y": 54871, + "rot_z": 0 + } + ], + [], + [], + [ + { + "type": 32, + "unk1": 1, + "unk2": 255, + "variant": 4, + "room": 7, + "quantity": 2, + "pos_x": 1103.05, + "pos_y": -2050.0, + "pos_z": -1429.32, + "rot_x": 0, + "rot_y": -19456, + "rot_z": 0 + }, + { + "type": 32, + "unk1": 1, + "unk2": 255, + "variant": 4, + "room": 7, + "quantity": 1, + "pos_x": -3054.79, + "pos_y": -3047.85, + "pos_z": 3126.22, + "rot_x": 0, + "rot_y": -11264, + "rot_z": 0 + }, + { + "type": 32, + "unk1": 1, + "unk2": 255, + "variant": 4, + "room": 7, + "quantity": 1, + "pos_x": 1268.03, + "pos_y": -2470.0, + "pos_z": -557.22, + "rot_x": 0, + "rot_y": -19456, + "rot_z": 0 + }, + { + "type": 32, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 7, + "quantity": 3, + "pos_x": 1742.13, + "pos_y": -3820.0, + "pos_z": -1993.49, + "rot_x": 0, + "rot_y": -19456, + "rot_z": 0 + }, + { + "type": 32, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 7, + "quantity": 2, + "pos_x": 1732.89, + "pos_y": -3580.0, + "pos_z": -4462.32, + "rot_x": 0, + "rot_y": -50176, + "rot_z": 0 + } + ], + [], + [ + { + "type": 11, + "unk1": 1, + "unk2": 9, + "variant": 0, + "room": 9, + "quantity": 2, + "pos_x": -482.31, + "pos_y": 16.39, + "pos_z": 5.01, + "rot_x": 0, + "rot_y": 45056, + "rot_z": 0 + } + ], + [ + { + "type": 10, + "unk1": 1, + "unk2": 10, + "variant": 0, + "room": 10, + "quantity": 2, + "pos_x": -1949.45, + "pos_y": -276.13, + "pos_z": 1228.73, + "rot_x": 0, + "rot_y": 38912, + "rot_z": 0 + }, + { + "type": 31, + "unk1": 3, + "unk2": 255, + "variant": 0, + "room": 10, + "quantity": -1, + "pos_x": -1552.64, + "pos_y": -186.42, + "pos_z": 1504.3, + "rot_x": 0, + "rot_y": -5120, + "rot_z": 0 + }, + { + "type": 31, + "unk1": 3, + "unk2": 255, + "variant": 0, + "room": 10, + "quantity": -1, + "pos_x": -1352.11, + "pos_y": -174.8, + "pos_z": 1441.92, + "rot_x": 0, + "rot_y": 30720, + "rot_z": 0 + }, + { + "type": 36, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 10, + "quantity": 1, + "pos_x": -653.75, + "pos_y": 306.58, + "pos_z": 2295.24, + "rot_x": 0, + "rot_y": 39936, + "rot_z": 0 + }, + { + "type": 36, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 10, + "quantity": 4, + "pos_x": -615.28, + "pos_y": 96.58, + "pos_z": 2086.81, + "rot_x": 0, + "rot_y": 21504, + "rot_z": 0 + } + ], + [ + { + "type": 30, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 11, + "quantity": 1, + "pos_x": 4363.26, + "pos_y": 426.27, + "pos_z": 5818.19, + "rot_x": 0, + "rot_y": 30939, + "rot_z": 0 + }, + { + "type": 30, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 11, + "quantity": 1, + "pos_x": 4782.14, + "pos_y": 426.27, + "pos_z": 5556.53, + "rot_x": 0, + "rot_y": 29696, + "rot_z": 0 + }, + { + "type": 30, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 11, + "quantity": 1, + "pos_x": 4617.08, + "pos_y": 426.27, + "pos_z": 6208.15, + "rot_x": 0, + "rot_y": 51186, + "rot_z": 0 + }, + { + "type": 30, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 11, + "quantity": 1, + "pos_x": 5099.46, + "pos_y": 426.27, + "pos_z": 5456.15, + "rot_x": 0, + "rot_y": 28996, + "rot_z": 0 + }, + { + "type": 36, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 11, + "quantity": 4, + "pos_x": 2767.15, + "pos_y": 611.59, + "pos_z": 4297.09, + "rot_x": 0, + "rot_y": -54272, + "rot_z": 0 + }, + { + "type": 36, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 11, + "quantity": 2, + "pos_x": 2793.18, + "pos_y": 1205.81, + "pos_z": 5908.79, + "rot_x": 0, + "rot_y": -53248, + "rot_z": 0 + }, + { + "type": 36, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 11, + "quantity": 1, + "pos_x": 3210.49, + "pos_y": 845.81, + "pos_z": 5369.26, + "rot_x": 0, + "rot_y": -71680, + "rot_z": 0 + } + ], + [ + { + "type": 23, + "unk1": 1, + "unk2": 12, + "variant": 0, + "room": 12, + "quantity": -1, + "pos_x": -1624.63, + "pos_y": -888.12, + "pos_z": -2880.06, + "rot_x": 0, + "rot_y": 30720, + "rot_z": 0 + }, + { + "type": 23, + "unk1": 1, + "unk2": 12, + "variant": 2, + "room": 12, + "quantity": 3, + "pos_x": -2352.88, + "pos_y": -523.55, + "pos_z": -7478.2, + "rot_x": 0, + "rot_y": -16384, + "rot_z": 0 + }, + { + "type": 23, + "unk1": 1, + "unk2": 12, + "variant": 2, + "room": 12, + "quantity": 1, + "pos_x": -1957.86, + "pos_y": -1228.41, + "pos_z": -7734.46, + "rot_x": 0, + "rot_y": -16384, + "rot_z": 0 + }, + { + "type": 32, + "unk1": 1, + "unk2": 12, + "variant": 2, + "room": 12, + "quantity": -1, + "pos_x": -2821.8, + "pos_y": -988.41, + "pos_z": -8174.07, + "rot_x": 0, + "rot_y": -16384, + "rot_z": 0 + }, + { + "type": 32, + "unk1": 1, + "unk2": 12, + "variant": 2, + "room": 12, + "quantity": -1, + "pos_x": -2435.99, + "pos_y": -988.41, + "pos_z": -7780.24, + "rot_x": 0, + "rot_y": -16384, + "rot_z": 0 + } + ] + ], + "quest_info": { + "quest_id": 61002, + "name": "Mercy Mission", + "client": "MH3SP Dev Team", + "description": "Deliver 10 Monster Guts", + "details": "Wanted:\nThe description for this\nquest! If you can find\nit, please let us know!\nThanks!", + "success_message": "Complete the Main Quest\nand both Subquests.", + "failure_message": "Reward hits 0, or time\nexpires.", + "flags": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ] + ], + "penalty_per_cart": 600, + "quest_fee": 150, + "time_limit": 15, + "main_monster_1": 17, + "main_monster_2": 23, + "location": 1, + "quest_rank": 1, + "hrp_restriction": 0, + "resources": 0, + "supply_set_number": 35, + "starting_position": 0, + "general_enemy_level": 23, + "summon": 1677787404, + "wave_1_transition_type": 0, + "wave_1_transition_target": 0, + "wave_1_transition_quantity": 0, + "wave_2_transition_type": 0, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0 + }, + "large_monsters": { + "monster_1": { + "type": 0, + "starting_area": 0, + "boss_id": 0, + "spawn_count": 0, + "level": 0, + "size": 0, + "hp_spread": 0, + "size_spread": 0 + }, + "monster_2": { + "type": 0, + "starting_area": 0, + "boss_id": 0, + "spawn_count": 0, + "level": 0, + "size": 0, + "hp_spread": 0, + "size_spread": 0 + }, + "monster_3": { + "type": 0, + "starting_area": 0, + "boss_id": 0, + "spawn_count": 0, + "level": 0, + "size": 0, + "hp_spread": 0, + "size_spread": 0 + } + }, + "objective_details": { + "main_quest": { + "type": 2, + "objective_type": 429, + "objective_num": 10, + "zenny_reward": 1500, + "hrp_reward": 70, + "rewards_row_1": [ + [ + 440, + 1, + 8 + ], + [ + 149, + 1, + 20 + ], + [ + 141, + 2, + 20 + ], + [ + 327, + 1, + 18 + ], + [ + 216, + 1, + 8 + ], + [ + 101, + 8, + 14 + ], + [ + 569, + 1, + 12 + ] + ], + "rewards_row_2": [ + [ + 440, + 1, + 35 + ], + [ + 447, + 1, + 5 + ], + [ + 441, + 1, + 15 + ], + [ + 327, + 1, + 20 + ], + [ + 328, + 1, + 25 + ] + ] + }, + "subquest_1": { + "description": "Deliver 12 Red Coral Stones", + "type": 2, + "objective_type": 430, + "objective_num": 12, + "zenny_reward": 1200, + "hrp_reward": 55, + "rewards_row_1": [ + [ + 440, + 1, + 8 + ], + [ + 149, + 1, + 20 + ], + [ + 141, + 2, + 20 + ], + [ + 327, + 1, + 18 + ], + [ + 216, + 1, + 8 + ], + [ + 101, + 1, + 14 + ], + [ + 569, + 1, + 12 + ] + ] + }, + "subquest_2": { + "description": "Deliver 3 Goldenfish", + "type": 2, + "objective_type": 217, + "objective_num": 3, + "zenny_reward": 2000, + "hrp_reward": 70, + "rewards_row_1": [ + [ + 440, + 1, + 35 + ], + [ + 447, + 1, + 5 + ], + [ + 441, + 1, + 15 + ], + [ + 327, + 1, + 20 + ], + [ + 328, + 1, + 25 + ] + ] + } + }, + "unknown": { + "unk_12": 3, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0, + "unkInt0": 0, + "unkShort0": 0, + "unkByte0": 0, + "unkBytes0_0": 0, + "unkBytes0_1": 0, + "unkBytes0_2": 0, + "unkBytes1_0": 0, + "unkBytes1_1": 0, + "unkBytes1_2": 0, + "unkBytes2_0": 0, + "unkBytes2_1": 0, + "unkUintAlways15": 15, + "unkShort1": 0, + "unkShort2": 0, + "unkByte1": 0, + "unkByte2": 0, + "unkByte3": 0, + "unkByte4": 0, + "unkByte7": 0, + "unkByte8": 0 + } +} \ No newline at end of file diff --git a/event/Poached Wyvern Eggs.json b/event/Poached Wyvern Eggs.json new file mode 100644 index 0000000..44514a2 --- /dev/null +++ b/event/Poached Wyvern Eggs.json @@ -0,0 +1,1864 @@ +{ + "unknown": { + "unk_12": 3, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "objective_details": { + "subquest_2": { + "objective_num": 1, + "hrp_reward": 80, + "rewards_row_1": [ + [ + 565, + 1, + 5 + ], + [ + 110, + 1, + 15 + ], + [ + 111, + 2, + 10 + ], + [ + 440, + 1, + 14 + ], + [ + 441, + 1, + 5 + ], + [ + 571, + 1, + 8 + ], + [ + 570, + 1, + 18 + ], + [ + 569, + 1, + 25 + ] + ], + "description": "Sever Rathian's Tail", + "objective_type": 1, + "zenny_reward": 1200, + "type": 516 + }, + "main_quest": { + "objective_num": 9, + "hrp_reward": 400, + "rewards_row_1": [ + [ + 565, + 1, + 5 + ], + [ + 110, + 1, + 15 + ], + [ + 111, + 2, + 10 + ], + [ + 440, + 1, + 14 + ], + [ + 441, + 1, + 5 + ], + [ + 571, + 1, + 8 + ], + [ + 570, + 1, + 18 + ], + [ + 569, + 1, + 25 + ] + ], + "rewards_row_2": [ + [ + 565, + 1, + 5 + ], + [ + 110, + 1, + 15 + ], + [ + 111, + 2, + 10 + ], + [ + 440, + 1, + 14 + ], + [ + 441, + 1, + 5 + ], + [ + 571, + 1, + 8 + ], + [ + 570, + 1, + 18 + ], + [ + 569, + 1, + 25 + ] + ], + "objective_type": 139, + "zenny_reward": 30000, + "type": 2 + }, + "subquest_1": { + "objective_num": 2, + "hrp_reward": 80, + "rewards_row_1": [ + [ + 565, + 1, + 5 + ], + [ + 110, + 1, + 15 + ], + [ + 111, + 2, + 10 + ], + [ + 440, + 1, + 14 + ], + [ + 441, + 1, + 5 + ], + [ + 571, + 1, + 8 + ], + [ + 570, + 1, + 18 + ], + [ + 569, + 1, + 25 + ] + ], + "description": "Deliver 2 Wyvern Tears", + "objective_type": 280, + "zenny_reward": 3200, + "type": 2 + } + }, + "small_monsters": [ + [], + [ + { + "variant": 3, + "unk1": 1, + "unk2": 255, + "pos_z": -5940.68, + "pos_x": -5057.57, + "pos_y": -2.26, + "room": 1, + "rot_z": 0, + "rot_y": -68, + "rot_x": 0, + "type": 40, + "quantity": 1 + }, + { + "variant": 3, + "unk1": 1, + "unk2": 255, + "pos_z": -6502.93, + "pos_x": -4811.71, + "pos_y": -66.91, + "room": 1, + "rot_z": 0, + "rot_y": -28, + "rot_x": 0, + "type": 40, + "quantity": 1 + } + ], + [ + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 117.64, + "pos_x": -6654.1, + "pos_y": 23.12, + "room": 2, + "rot_z": 0, + "rot_y": 455, + "rot_x": 0, + "type": 33, + "quantity": 3 + }, + { + "variant": 3, + "unk1": 1, + "unk2": 255, + "pos_z": 3585.26, + "pos_x": -4409.86, + "pos_y": 160.61, + "room": 2, + "rot_z": 0, + "rot_y": -164, + "rot_x": 0, + "type": 40, + "quantity": 1 + }, + { + "variant": 3, + "unk1": 1, + "unk2": 255, + "pos_z": 2758.35, + "pos_x": -2714.98, + "pos_y": 150.44, + "room": 2, + "rot_z": 0, + "rot_y": -244, + "rot_x": 0, + "type": 40, + "quantity": 1 + }, + { + "variant": 3, + "unk1": 1, + "unk2": 255, + "pos_z": 2717.77, + "pos_x": -3714.37, + "pos_y": 77.64, + "room": 2, + "rot_z": 0, + "rot_y": -56, + "rot_x": 0, + "type": 40, + "quantity": 1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -843.3, + "pos_x": 2690.34, + "pos_y": 20.0, + "room": 3, + "rot_z": 0, + "rot_y": -45, + "rot_x": 0, + "type": 34, + "quantity": 4 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 933.94, + "pos_x": 1508.85, + "pos_y": 0.71, + "room": 3, + "rot_z": 0, + "rot_y": 250, + "rot_x": 0, + "type": 34, + "quantity": 3 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -894.84, + "pos_x": 948.5, + "pos_y": -19.0, + "room": 3, + "rot_z": 0, + "rot_y": -307, + "rot_x": 0, + "type": 34, + "quantity": 2 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 468.25, + "pos_x": -671.47, + "pos_y": -14.07, + "room": 3, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 34, + "quantity": 2 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 1397.25, + "pos_x": -877.96, + "pos_y": 2.0, + "room": 4, + "rot_z": 0, + "rot_y": -125, + "rot_x": 0, + "type": 34, + "quantity": 1 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 704.8, + "pos_x": -1213.07, + "pos_y": 2.0, + "room": 4, + "rot_z": 0, + "rot_y": 312, + "rot_x": 0, + "type": 34, + "quantity": 5 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 1759.45, + "pos_x": -1976.37, + "pos_y": 2.0, + "room": 4, + "rot_z": 0, + "rot_y": -301, + "rot_x": 0, + "type": 34, + "quantity": 3 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 2294.16, + "pos_x": -2320.33, + "pos_y": 2.0, + "room": 4, + "rot_z": 0, + "rot_y": 119, + "rot_x": 0, + "type": 34, + "quantity": 2 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 3073.44, + "pos_x": -5671.42, + "pos_y": 466.03, + "room": 4, + "rot_z": 0, + "rot_y": 304, + "rot_x": 273, + "type": 36, + "quantity": -1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 734.6, + "pos_x": -442.09, + "pos_y": 16.0, + "room": 5, + "rot_z": 0, + "rot_y": 119, + "rot_x": 0, + "type": 30, + "quantity": 3 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 548.27, + "pos_x": -1122.44, + "pos_y": 16.0, + "room": 5, + "rot_z": 0, + "rot_y": 182, + "rot_x": 0, + "type": 30, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 1238.55, + "pos_x": -1077.87, + "pos_y": 16.0, + "room": 5, + "rot_z": 0, + "rot_y": 307, + "rot_x": 0, + "type": 30, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 1474.43, + "pos_x": -573.41, + "pos_y": 16.0, + "room": 5, + "rot_z": 0, + "rot_y": 392, + "rot_x": 0, + "type": 30, + "quantity": 1 + } + ], + [], + [ + { + "variant": 4, + "unk1": 1, + "unk2": 255, + "pos_z": 1586.48, + "pos_x": 2237.04, + "pos_y": -1090.0, + "room": 7, + "rot_z": 0, + "rot_y": 96, + "rot_x": 0, + "type": 32, + "quantity": 4 + }, + { + "variant": 4, + "unk1": 1, + "unk2": 255, + "pos_z": 2832.58, + "pos_x": 2469.26, + "pos_y": -1330.0, + "room": 7, + "rot_z": 0, + "rot_y": -108, + "rot_x": 0, + "type": 32, + "quantity": 2 + }, + { + "variant": 4, + "unk1": 1, + "unk2": 255, + "pos_z": -1429.32, + "pos_x": 1103.05, + "pos_y": -2050.0, + "room": 7, + "rot_z": 0, + "rot_y": -108, + "rot_x": 0, + "type": 32, + "quantity": 2 + }, + { + "variant": 4, + "unk1": 1, + "unk2": 255, + "pos_z": 3126.22, + "pos_x": -3054.79, + "pos_y": -3047.85, + "room": 7, + "rot_z": 0, + "rot_y": -62, + "rot_x": 0, + "type": 32, + "quantity": 1 + }, + { + "variant": 4, + "unk1": 1, + "unk2": 255, + "pos_z": -557.22, + "pos_x": 1268.03, + "pos_y": -2470.0, + "room": 7, + "rot_z": 0, + "rot_y": -108, + "rot_x": 0, + "type": 32, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -1993.49, + "pos_x": 1742.13, + "pos_y": -3820.0, + "room": 7, + "rot_z": 0, + "rot_y": -108, + "rot_x": 0, + "type": 32, + "quantity": 3 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -4462.32, + "pos_x": 1732.89, + "pos_y": -3580.0, + "room": 7, + "rot_z": 0, + "rot_y": -278, + "rot_x": 0, + "type": 32, + "quantity": 2 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -523.41, + "pos_x": 80.95, + "pos_y": 35.81, + "room": 8, + "rot_z": 0, + "rot_y": -420, + "rot_x": 0, + "type": 17, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 465.56, + "pos_x": -1342.36, + "pos_y": -18.0, + "room": 8, + "rot_z": 0, + "rot_y": -324, + "rot_x": 0, + "type": 17, + "quantity": 1 + } + ], + [ + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": 892.53, + "pos_x": 965.46, + "pos_y": 27.06, + "room": 9, + "rot_z": 0, + "rot_y": 563, + "rot_x": 0, + "type": 10, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": 1123.58, + "pos_x": 732.0, + "pos_y": 24.88, + "room": 9, + "rot_z": 0, + "rot_y": 637, + "rot_x": 0, + "type": 10, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -149.63, + "pos_x": 962.01, + "pos_y": 19.44, + "room": 9, + "rot_z": 0, + "rot_y": 540, + "rot_x": 0, + "type": 11, + "quantity": 6 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -417.64, + "pos_x": 220.21, + "pos_y": 20.45, + "room": 9, + "rot_z": 0, + "rot_y": 557, + "rot_x": 0, + "type": 11, + "quantity": 4 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 98.15, + "pos_x": -439.6, + "pos_y": 13.03, + "room": 9, + "rot_z": 0, + "rot_y": 631, + "rot_x": 0, + "type": 11, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 803.55, + "pos_x": -237.23, + "pos_y": 2.0, + "room": 9, + "rot_z": 0, + "rot_y": 648, + "rot_x": 0, + "type": 11, + "quantity": 1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 1193.7, + "pos_x": -2085.64, + "pos_y": -283.99, + "room": 10, + "rot_z": 0, + "rot_y": -204, + "rot_x": 0, + "type": 10, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -207.68, + "pos_x": -2525.41, + "pos_y": -190.61, + "room": 10, + "rot_z": 0, + "rot_y": -51, + "rot_x": 0, + "type": 10, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 505.61, + "pos_x": -2950.76, + "pos_y": -249.78, + "room": 10, + "rot_z": 0, + "rot_y": 204, + "rot_x": 0, + "type": 10, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 889.95, + "pos_x": -1914.32, + "pos_y": -281.12, + "room": 10, + "rot_z": 0, + "rot_y": 329, + "rot_x": 0, + "type": 10, + "quantity": 2 + } + ], + [ + { + "variant": 6, + "unk1": 1, + "unk2": 255, + "pos_z": 2253.55, + "pos_x": -453.62, + "pos_y": 705.5, + "room": 11, + "rot_z": 0, + "rot_y": -5, + "rot_x": 0, + "type": 26, + "quantity": 2 + }, + { + "variant": 6, + "unk1": 1, + "unk2": 255, + "pos_z": 3677.44, + "pos_x": 142.14, + "pos_y": 336.98, + "room": 11, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 26, + "quantity": 4 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 5818.19, + "pos_x": 4363.26, + "pos_y": 426.27, + "room": 11, + "rot_z": 0, + "rot_y": 171, + "rot_x": 0, + "type": 30, + "quantity": 1 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 5556.53, + "pos_x": 4782.14, + "pos_y": 426.27, + "room": 11, + "rot_z": 0, + "rot_y": 164, + "rot_x": 0, + "type": 30, + "quantity": 1 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 6208.15, + "pos_x": 4617.08, + "pos_y": 426.27, + "room": 11, + "rot_z": 0, + "rot_y": 284, + "rot_x": 0, + "type": 30, + "quantity": 1 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 5456.15, + "pos_x": 5099.46, + "pos_y": 426.27, + "room": 11, + "rot_z": 0, + "rot_y": 161, + "rot_x": 0, + "type": 30, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 4297.09, + "pos_x": 2767.15, + "pos_y": 611.59, + "room": 11, + "rot_z": 0, + "rot_y": -301, + "rot_x": 0, + "type": 36, + "quantity": 4 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 5908.79, + "pos_x": 2793.18, + "pos_y": 1205.81, + "room": 11, + "rot_z": 0, + "rot_y": -295, + "rot_x": 0, + "type": 36, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 5369.26, + "pos_x": 3210.49, + "pos_y": 845.81, + "room": 11, + "rot_z": 0, + "rot_y": -398, + "rot_x": 0, + "type": 36, + "quantity": 1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -2648.11, + "pos_x": 572.89, + "pos_y": -618.12, + "room": 12, + "rot_z": 0, + "rot_y": -142, + "rot_x": 0, + "type": 23, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -3356.64, + "pos_x": -501.62, + "pos_y": -210.0, + "room": 12, + "rot_z": 0, + "rot_y": 45, + "rot_x": 0, + "type": 23, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -2880.06, + "pos_x": -1624.63, + "pos_y": -888.12, + "room": 12, + "rot_z": 0, + "rot_y": 113, + "rot_x": 0, + "type": 23, + "quantity": -1 + }, + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": -7478.2, + "pos_x": -2352.88, + "pos_y": -523.55, + "room": 12, + "rot_z": 0, + "rot_y": -91, + "rot_x": 0, + "type": 32, + "quantity": -1 + }, + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": -7734.46, + "pos_x": -1957.86, + "pos_y": -1228.41, + "room": 12, + "rot_z": 0, + "rot_y": -91, + "rot_x": 0, + "type": 32, + "quantity": -1 + }, + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": -8174.07, + "pos_x": -2821.8, + "pos_y": -988.41, + "room": 12, + "rot_z": 0, + "rot_y": -91, + "rot_x": 0, + "type": 32, + "quantity": -1 + }, + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": -7780.24, + "pos_x": -2435.99, + "pos_y": -988.41, + "room": 12, + "rot_z": 0, + "rot_y": -91, + "rot_x": 0, + "type": 32, + "quantity": -1 + } + ], + [], + [ + { + "variant": 3, + "unk1": 1, + "unk2": 255, + "pos_z": -5940.68, + "pos_x": -5057.57, + "pos_y": -2.26, + "room": 1, + "rot_z": 0, + "rot_y": -68, + "rot_x": 0, + "type": 40, + "quantity": 1 + }, + { + "variant": 3, + "unk1": 1, + "unk2": 255, + "pos_z": -6502.93, + "pos_x": -4811.71, + "pos_y": -66.91, + "room": 1, + "rot_z": 0, + "rot_y": -28, + "rot_x": 0, + "type": 40, + "quantity": 1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -305.99, + "pos_x": -6114.99, + "pos_y": 1.01, + "room": 2, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 31, + "quantity": 3 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 89.46, + "pos_x": -5573.24, + "pos_y": 28.24, + "room": 2, + "rot_z": 0, + "rot_y": 62, + "rot_x": 0, + "type": 31, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -366.28, + "pos_x": -5266.61, + "pos_y": 18.27, + "room": 2, + "rot_z": 0, + "rot_y": 324, + "rot_x": 0, + "type": 31, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 118.41, + "pos_x": -4974.18, + "pos_y": 24.04, + "room": 2, + "rot_z": 0, + "rot_y": 39, + "rot_x": 0, + "type": 31, + "quantity": 1 + }, + { + "variant": 3, + "unk1": 1, + "unk2": 255, + "pos_z": 3585.26, + "pos_x": -4409.86, + "pos_y": 160.61, + "room": 2, + "rot_z": 0, + "rot_y": -164, + "rot_x": 0, + "type": 40, + "quantity": 1 + }, + { + "variant": 3, + "unk1": 1, + "unk2": 255, + "pos_z": 2758.35, + "pos_x": -2714.98, + "pos_y": 150.44, + "room": 2, + "rot_z": 0, + "rot_y": -244, + "rot_x": 0, + "type": 40, + "quantity": 1 + }, + { + "variant": 3, + "unk1": 1, + "unk2": 255, + "pos_z": 2717.77, + "pos_x": -3714.37, + "pos_y": 77.64, + "room": 2, + "rot_z": 0, + "rot_y": -56, + "rot_x": 0, + "type": 40, + "quantity": 1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 207.6, + "pos_x": -2866.17, + "pos_y": 4.0, + "room": 3, + "rot_z": 0, + "rot_y": -22, + "rot_x": 0, + "type": 10, + "quantity": 4 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 1054.53, + "pos_x": -3281.49, + "pos_y": 5.72, + "room": 3, + "rot_z": 0, + "rot_y": -119, + "rot_x": 0, + "type": 10, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 614.59, + "pos_x": -2077.49, + "pos_y": -0.82, + "room": 3, + "rot_z": 0, + "rot_y": -113, + "rot_x": 0, + "type": 10, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -1285.39, + "pos_x": 1844.04, + "pos_y": 13.37, + "room": 3, + "rot_z": 0, + "rot_y": 238, + "rot_x": 0, + "type": 10, + "quantity": 3 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -1490.38, + "pos_x": 2591.03, + "pos_y": -11.64, + "room": 3, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 10, + "quantity": 1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 1899.19, + "pos_x": -3806.09, + "pos_y": 2.0, + "room": 4, + "rot_z": 0, + "rot_y": 324, + "rot_x": 0, + "type": 10, + "quantity": 4 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 2084.72, + "pos_x": -2228.14, + "pos_y": 2.0, + "room": 4, + "rot_z": 0, + "rot_y": 278, + "rot_x": 0, + "type": 10, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 2687.36, + "pos_x": -3075.68, + "pos_y": 2.0, + "room": 4, + "rot_z": 0, + "rot_y": 244, + "rot_x": 0, + "type": 10, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 2924.56, + "pos_x": -4162.06, + "pos_y": 2.0, + "room": 4, + "rot_z": 0, + "rot_y": 221, + "rot_x": 0, + "type": 10, + "quantity": 1 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 3073.44, + "pos_x": -5671.42, + "pos_y": 466.03, + "room": 4, + "rot_z": 0, + "rot_y": 304, + "rot_x": 273, + "type": 36, + "quantity": -1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -355.64, + "pos_x": -2138.97, + "pos_y": 18.0, + "room": 5, + "rot_z": 0, + "rot_y": 432, + "rot_x": 0, + "type": 11, + "quantity": 6 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -875.79, + "pos_x": -1641.2, + "pos_y": 17.36, + "room": 5, + "rot_z": 0, + "rot_y": 472, + "rot_x": 0, + "type": 11, + "quantity": 4 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -1441.74, + "pos_x": -1951.09, + "pos_y": 18.0, + "room": 5, + "rot_z": 0, + "rot_y": 506, + "rot_x": 0, + "type": 11, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -1423.47, + "pos_x": -2578.55, + "pos_y": 25.21, + "room": 5, + "rot_z": 0, + "rot_y": 540, + "rot_x": 0, + "type": 11, + "quantity": 1 + } + ], + [], + [ + { + "variant": 4, + "unk1": 1, + "unk2": 255, + "pos_z": 1586.48, + "pos_x": 2237.04, + "pos_y": -1090.0, + "room": 7, + "rot_z": 0, + "rot_y": 96, + "rot_x": 0, + "type": 32, + "quantity": 4 + }, + { + "variant": 4, + "unk1": 1, + "unk2": 255, + "pos_z": 2832.58, + "pos_x": 2469.26, + "pos_y": -1330.0, + "room": 7, + "rot_z": 0, + "rot_y": -108, + "rot_x": 0, + "type": 32, + "quantity": 2 + }, + { + "variant": 4, + "unk1": 1, + "unk2": 255, + "pos_z": -1429.32, + "pos_x": 1103.05, + "pos_y": -2050.0, + "room": 7, + "rot_z": 0, + "rot_y": -108, + "rot_x": 0, + "type": 32, + "quantity": 2 + }, + { + "variant": 4, + "unk1": 1, + "unk2": 255, + "pos_z": 3126.22, + "pos_x": -3054.79, + "pos_y": -3047.85, + "room": 7, + "rot_z": 0, + "rot_y": -62, + "rot_x": 0, + "type": 32, + "quantity": 1 + }, + { + "variant": 4, + "unk1": 1, + "unk2": 255, + "pos_z": -557.22, + "pos_x": 1268.03, + "pos_y": -2470.0, + "room": 7, + "rot_z": 0, + "rot_y": -108, + "rot_x": 0, + "type": 32, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -1993.49, + "pos_x": 1742.13, + "pos_y": -3820.0, + "room": 7, + "rot_z": 0, + "rot_y": -108, + "rot_x": 0, + "type": 32, + "quantity": 3 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -4462.32, + "pos_x": 1732.89, + "pos_y": -3580.0, + "room": 7, + "rot_z": 0, + "rot_y": -278, + "rot_x": 0, + "type": 32, + "quantity": 2 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -523.41, + "pos_x": 80.95, + "pos_y": 35.81, + "room": 8, + "rot_z": 0, + "rot_y": -420, + "rot_x": 0, + "type": 17, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 465.56, + "pos_x": -1342.36, + "pos_y": -18.0, + "room": 8, + "rot_z": 0, + "rot_y": -324, + "rot_x": 0, + "type": 17, + "quantity": 1 + } + ], + [ + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": 892.53, + "pos_x": 965.46, + "pos_y": 27.06, + "room": 9, + "rot_z": 0, + "rot_y": 563, + "rot_x": 0, + "type": 10, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": 1123.58, + "pos_x": 732.0, + "pos_y": 24.88, + "room": 9, + "rot_z": 0, + "rot_y": 637, + "rot_x": 0, + "type": 10, + "quantity": -1 + }, + { + "variant": 3, + "unk1": 1, + "unk2": 255, + "pos_z": -385.05, + "pos_x": -2618.42, + "pos_y": 168.02, + "room": 9, + "rot_z": 0, + "rot_y": 625, + "rot_x": 0, + "type": 26, + "quantity": 6 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 276.54, + "pos_x": -3005.7, + "pos_y": 19.0, + "room": 9, + "rot_z": 0, + "rot_y": 961, + "rot_x": 0, + "type": 26, + "quantity": 3 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -1327.15, + "pos_x": -659.6, + "pos_y": 21.89, + "room": 9, + "rot_z": 0, + "rot_y": 369, + "rot_x": 0, + "type": 26, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -103.05, + "pos_x": -549.09, + "pos_y": 15.82, + "room": 9, + "rot_z": 0, + "rot_y": -79, + "rot_x": 0, + "type": 26, + "quantity": 1 + } + ], + [], + [ + { + "variant": 6, + "unk1": 1, + "unk2": 255, + "pos_z": 2253.55, + "pos_x": -453.62, + "pos_y": 705.5, + "room": 11, + "rot_z": 0, + "rot_y": -5, + "rot_x": 0, + "type": 26, + "quantity": 2 + }, + { + "variant": 6, + "unk1": 1, + "unk2": 255, + "pos_z": 3677.44, + "pos_x": 142.14, + "pos_y": 336.98, + "room": 11, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 26, + "quantity": 4 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 5818.19, + "pos_x": 4363.26, + "pos_y": 426.27, + "room": 11, + "rot_z": 0, + "rot_y": 171, + "rot_x": 0, + "type": 30, + "quantity": 1 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 5556.53, + "pos_x": 4782.14, + "pos_y": 426.27, + "room": 11, + "rot_z": 0, + "rot_y": 164, + "rot_x": 0, + "type": 30, + "quantity": 1 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 6208.15, + "pos_x": 4617.08, + "pos_y": 426.27, + "room": 11, + "rot_z": 0, + "rot_y": 284, + "rot_x": 0, + "type": 30, + "quantity": 1 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 5456.15, + "pos_x": 5099.46, + "pos_y": 426.27, + "room": 11, + "rot_z": 0, + "rot_y": 161, + "rot_x": 0, + "type": 30, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 4297.09, + "pos_x": 2767.15, + "pos_y": 611.59, + "room": 11, + "rot_z": 0, + "rot_y": -301, + "rot_x": 0, + "type": 36, + "quantity": 4 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 5908.79, + "pos_x": 2793.18, + "pos_y": 1205.81, + "room": 11, + "rot_z": 0, + "rot_y": -295, + "rot_x": 0, + "type": 36, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 5369.26, + "pos_x": 3210.49, + "pos_y": 845.81, + "room": 11, + "rot_z": 0, + "rot_y": -398, + "rot_x": 0, + "type": 36, + "quantity": 1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -2648.11, + "pos_x": 572.89, + "pos_y": -618.12, + "room": 12, + "rot_z": 0, + "rot_y": -142, + "rot_x": 0, + "type": 23, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -3356.64, + "pos_x": -501.62, + "pos_y": -210.0, + "room": 12, + "rot_z": 0, + "rot_y": 45, + "rot_x": 0, + "type": 23, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -2880.06, + "pos_x": -1624.63, + "pos_y": -888.12, + "room": 12, + "rot_z": 0, + "rot_y": 113, + "rot_x": 0, + "type": 23, + "quantity": -1 + }, + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": -7478.2, + "pos_x": -2352.88, + "pos_y": -523.55, + "room": 12, + "rot_z": 0, + "rot_y": -91, + "rot_x": 0, + "type": 32, + "quantity": -1 + }, + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": -7734.46, + "pos_x": -1957.86, + "pos_y": -1228.41, + "room": 12, + "rot_z": 0, + "rot_y": -91, + "rot_x": 0, + "type": 32, + "quantity": -1 + }, + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": -8174.07, + "pos_x": -2821.8, + "pos_y": -988.41, + "room": 12, + "rot_z": 0, + "rot_y": -91, + "rot_x": 0, + "type": 32, + "quantity": -1 + }, + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": -7780.24, + "pos_x": -2435.99, + "pos_y": -988.41, + "room": 12, + "rot_z": 0, + "rot_y": -91, + "rot_x": 0, + "type": 32, + "quantity": -1 + } + ] + ], + "quest_info": { + "wave_1_transition_type": 2, + "time_limit": 15, + "wave_1_transition_quantity": 1, + "starting_position": 1, + "quest_rank": 4, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 42, + "wave_2_transition_type": 0, + "location": 1, + "penalty_per_cart": 10000, + "resources": 1, + "details": "Why, hellooo! I mean to hold\na dinner party, but I've\ndiscovered the most dreadful\nnews -- I don't have enough\neggs for my recipe! I simply\nmustn't disappoint my guests,\nso please save this supper!", + "description": "Deliver 9 Wyvern Eggs", + "wave_1_transition_target": 139, + "hrp_restriction": 9, + "quest_fee": 1200, + "quest_id": 61011, + "name": "Poached Wyvern Eggs", + "main_monster_2": 0, + "main_monster_1": 0, + "supply_set_number": 31, + "summon": 1677787433, + "client": "The Lady Gourmet", + "flags": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 1 + ] + ], + "success_message": "Complete the Main Quest." + }, + "large_monsters": { + "monster_2": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_1": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + } + } +} \ No newline at end of file diff --git a/event/Rage Match.json b/event/Rage Match.json new file mode 100644 index 0000000..202b321 --- /dev/null +++ b/event/Rage Match.json @@ -0,0 +1,215 @@ +{ + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "objective_details": { + "subquest_2": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + }, + "main_quest": { + "objective_num": 2, + "hrp_reward": 2880, + "rewards_row_1": [ + [ + 486, + 1, + 6 + ], + [ + 485, + 1, + 13 + ], + [ + 484, + 1, + 26 + ], + [ + 483, + 1, + 20 + ], + [ + 441, + 1, + 6 + ], + [ + 487, + 1, + 4 + ], + [ + 185, + 1, + 25 + ] + ], + "rewards_row_2": [ + [ + 486, + 1, + 6 + ], + [ + 485, + 1, + 13 + ], + [ + 484, + 1, + 26 + ], + [ + 483, + 1, + 20 + ], + [ + 441, + 1, + 6 + ], + [ + 487, + 1, + 4 + ], + [ + 185, + 1, + 25 + ] + ], + "objective_type": 7, + "zenny_reward": 36000, + "type": 1 + }, + "subquest_1": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + } + }, + "small_monsters": [ + [], + [] + ], + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 0, + "quest_rank": 6, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 244, + "wave_2_transition_type": 0, + "location": 8, + "penalty_per_cart": 13000, + "resources": 1, + "details": "We've all heard of that\noutrageous dragon of rage,\nthe Deviljho! Now, we've got\nnot one -- but two -- stalking\nthe Arena! What hunter has the\ncojones to challenge these\npernicious predators? Not me.", + "description": "Hunt 2 Deviljho", + "wave_1_transition_target": 0, + "hrp_restriction": 11, + "quest_fee": 3600, + "quest_id": 61018, + "name": "Rage Match", + "main_monster_2": 0, + "main_monster_1": 0, + "supply_set_number": 43, + "summon": 0, + "client": "Arena Manager", + "flags": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 1, + 1 + ] + ], + "success_message": "Complete the Main Quest." + }, + "large_monsters": { + "monster_2": { + "size_spread": 10, + "hp_spread": 0, + "level": 60, + "boss_id": 2, + "type": 7, + "starting_area": 1, + "spawn_count": 1, + "size": 90 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_1": { + "size_spread": 10, + "hp_spread": 0, + "level": 60, + "boss_id": 1, + "type": 7, + "starting_area": 1, + "spawn_count": 1, + "size": 100 + } + } +} \ No newline at end of file diff --git a/event/Red Hot Party!.json b/event/Red Hot Party!.json new file mode 100644 index 0000000..6ab866f --- /dev/null +++ b/event/Red Hot Party!.json @@ -0,0 +1,871 @@ +{ + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "objective_details": { + "subquest_2": { + "objective_num": 1, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 19, + "zenny_reward": 0, + "type": 1 + }, + "main_quest": { + "objective_num": 1, + "hrp_reward": 3870, + "rewards_row_1": [ + [ + 177, + 1, + 8 + ], + [ + 176, + 1, + 8 + ], + [ + 171, + 1, + 8 + ], + [ + 507, + 1, + 10 + ], + [ + 505, + 1, + 10 + ], + [ + 412, + 1, + 10 + ], + [ + 482, + 1, + 10 + ], + [ + 111, + 1, + 10 + ], + [ + 285, + 1, + 8 + ], + [ + 481, + 1, + 6 + ], + [ + 174, + 1, + 6 + ], + [ + 183, + 1, + 6 + ] + ], + "rewards_row_2": [ + [ + 177, + 1, + 8 + ], + [ + 176, + 1, + 8 + ], + [ + 171, + 1, + 8 + ], + [ + 507, + 1, + 10 + ], + [ + 505, + 1, + 10 + ], + [ + 412, + 1, + 10 + ], + [ + 482, + 1, + 10 + ], + [ + 111, + 1, + 10 + ], + [ + 285, + 1, + 8 + ], + [ + 481, + 1, + 6 + ], + [ + 174, + 1, + 6 + ], + [ + 183, + 1, + 6 + ] + ], + "objective_type": 2, + "zenny_reward": 41000, + "type": 1 + }, + "subquest_1": { + "objective_num": 1, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 9, + "zenny_reward": 0, + "type": 1 + } + }, + "small_monsters": [ + [], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -947.91, + "pos_x": -494.25, + "pos_y": 47.01, + "room": 1, + "rot_z": 0, + "rot_y": 112147, + "rot_x": 0, + "type": 34, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -712.51, + "pos_x": -1361.42, + "pos_y": 20.6, + "room": 1, + "rot_z": 0, + "rot_y": 79456, + "rot_x": 0, + "type": 34, + "quantity": 1 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": -1406.32, + "pos_x": 1031.98, + "pos_y": 26.73, + "room": 1, + "rot_z": 0, + "rot_y": 152977, + "rot_x": 0, + "type": 34, + "quantity": 1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 1809.58, + "pos_x": 3139.21, + "pos_y": -16.41, + "room": 2, + "rot_z": 0, + "rot_y": 14105, + "rot_x": 0, + "type": 33, + "quantity": 4 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 2280.01, + "pos_x": 2598.0, + "pos_y": 64.57, + "room": 2, + "rot_z": 0, + "rot_y": 14478, + "rot_x": 0, + "type": 33, + "quantity": 3 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 2453.7, + "pos_x": 2184.05, + "pos_y": 66.73, + "room": 2, + "rot_z": 0, + "rot_y": 11582, + "rot_x": 0, + "type": 33, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 1680.05, + "pos_x": 2741.8, + "pos_y": -53.82, + "room": 2, + "rot_z": 0, + "rot_y": 14128, + "rot_x": 0, + "type": 33, + "quantity": 1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 4494.92, + "pos_x": 6982.8, + "pos_y": 73.73, + "room": 3, + "rot_z": 0, + "rot_y": 5856, + "rot_x": 0, + "type": 27, + "quantity": -1 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 4957.68, + "pos_x": 7778.32, + "pos_y": 66.41, + "room": 3, + "rot_z": 0, + "rot_y": 2872, + "rot_x": 0, + "type": 27, + "quantity": -1 + }, + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": 5160.52, + "pos_x": 8087.79, + "pos_y": 83.54, + "room": 3, + "rot_z": 0, + "rot_y": 5774, + "rot_x": 0, + "type": 27, + "quantity": -1 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 2473.3, + "pos_x": 8676.94, + "pos_y": 515.74, + "room": 3, + "rot_z": 0, + "rot_y": 6351, + "rot_x": 273, + "type": 39, + "quantity": -1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 639.95, + "pos_x": 672.08, + "pos_y": 25.43, + "room": 4, + "rot_z": 0, + "rot_y": 2264, + "rot_x": 0, + "type": 29, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 0, + "unk2": 255, + "pos_z": 2402.83, + "pos_x": -1151.12, + "pos_y": -43.31, + "room": 4, + "rot_z": 0, + "rot_y": -39, + "rot_x": 0, + "type": 29, + "quantity": 3 + }, + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": 3042.75, + "pos_x": 1580.62, + "pos_y": 129.42, + "room": 4, + "rot_z": 0, + "rot_y": 0, + "rot_x": 0, + "type": 39, + "quantity": 3 + }, + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": 2633.18, + "pos_x": 1743.0, + "pos_y": 339.42, + "room": 4, + "rot_z": 0, + "rot_y": 91, + "rot_x": 0, + "type": 39, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 2724.68, + "pos_x": 1303.26, + "pos_y": 189.42, + "room": 4, + "rot_z": 0, + "rot_y": -28, + "rot_x": 0, + "type": 39, + "quantity": 1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": 104.92, + "pos_x": -1485.68, + "pos_y": 36.65, + "room": 4, + "rot_z": 0, + "rot_y": 3032, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -27.96, + "pos_x": 897.01, + "pos_y": 25.14, + "room": 4, + "rot_z": 0, + "rot_y": 56, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": 1861.15, + "pos_x": 2948.85, + "pos_y": 7.51, + "room": 4, + "rot_z": 0, + "rot_y": 20656, + "rot_x": 0, + "type": 40, + "quantity": -1 + } + ], + [ + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": 542.2, + "pos_x": -775.56, + "pos_y": 73.07, + "room": 5, + "rot_z": 0, + "rot_y": 1828, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -1218.55, + "pos_x": -3498.99, + "pos_y": 67.5, + "room": 5, + "rot_z": 0, + "rot_y": 4835, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -422.06, + "pos_x": 486.74, + "pos_y": 38.66, + "room": 5, + "rot_z": 0, + "rot_y": 1331, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -1059.79, + "pos_x": 2864.76, + "pos_y": 49.34, + "room": 5, + "rot_z": 0, + "rot_y": 7296, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -1571.42, + "pos_x": 1202.49, + "pos_y": 57.63, + "room": 5, + "rot_z": 0, + "rot_y": 0, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -1510.18, + "pos_x": -1733.55, + "pos_y": 56.88, + "room": 5, + "rot_z": 0, + "rot_y": 0, + "rot_x": 0, + "type": 40, + "quantity": -1 + } + ], + [ + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": 1076.53, + "pos_x": 393.15, + "pos_y": -35.75, + "room": 6, + "rot_z": 0, + "rot_y": -85, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": 447.51, + "pos_x": -1170.83, + "pos_y": -30.77, + "room": 6, + "rot_z": 0, + "rot_y": 0, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -202.83, + "pos_x": 1020.1, + "pos_y": 4.72, + "room": 6, + "rot_z": 0, + "rot_y": 0, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -1280.39, + "pos_x": -435.28, + "pos_y": -28.37, + "room": 6, + "rot_z": 0, + "rot_y": 0, + "rot_x": 0, + "type": 40, + "quantity": -1 + } + ], + [ + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 228.22, + "pos_x": 95.05, + "pos_y": -6.35, + "room": 7, + "rot_z": 0, + "rot_y": 1399, + "rot_x": 0, + "type": 21, + "quantity": 3 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 268.38, + "pos_x": -2114.33, + "pos_y": 17.37, + "room": 7, + "rot_z": 0, + "rot_y": 19692, + "rot_x": 0, + "type": 21, + "quantity": 2 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 1532.47, + "pos_x": -1877.72, + "pos_y": -22.42, + "room": 7, + "rot_z": 0, + "rot_y": 32312, + "rot_x": 0, + "type": 21, + "quantity": 1 + }, + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": -496.28, + "pos_x": 625.43, + "pos_y": 3.37, + "room": 7, + "rot_z": 0, + "rot_y": 6283, + "rot_x": 0, + "type": 21, + "quantity": 1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": 61.89, + "pos_x": -1447.72, + "pos_y": 21.43, + "room": 7, + "rot_z": 0, + "rot_y": 0, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": -1209.27, + "pos_x": 316.55, + "pos_y": -3.36, + "room": 7, + "rot_z": 0, + "rot_y": 0, + "rot_x": 0, + "type": 40, + "quantity": -1 + }, + { + "variant": 8, + "unk1": 3, + "unk2": 255, + "pos_z": 1099.8, + "pos_x": 1008.65, + "pos_y": -9.18, + "room": 7, + "rot_z": 0, + "rot_y": 0, + "rot_x": 0, + "type": 40, + "quantity": -1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 1581.6, + "pos_x": 728.75, + "pos_y": -19.44, + "room": 8, + "rot_z": 0, + "rot_y": 1581.6, + "rot_x": 0, + "type": 30, + "quantity": 4 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 301.92, + "pos_x": -375.43, + "pos_y": 6.66, + "room": 8, + "rot_z": 0, + "rot_y": 40860, + "rot_x": 0, + "type": 30, + "quantity": 3 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -50.4, + "pos_x": 479.45, + "pos_y": 30.53, + "room": 8, + "rot_z": 0, + "rot_y": 59178, + "rot_x": 0, + "type": 30, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 1552.73, + "pos_x": 2190.05, + "pos_y": -6.53, + "room": 8, + "rot_z": 0, + "rot_y": 24814, + "rot_x": 0, + "type": 30, + "quantity": 1 + } + ], + [ + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": -971.03, + "pos_x": 1226.78, + "pos_y": 14.44, + "room": 9, + "rot_z": 0, + "rot_y": 49126, + "rot_x": 0, + "type": 21, + "quantity": 2 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": -556.52, + "pos_x": 30.91, + "pos_y": 11.0, + "room": 9, + "rot_z": 0, + "rot_y": 19871, + "rot_x": 0, + "type": 21, + "quantity": 3 + } + ], + [] + ], + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 1, + "quest_rank": 5, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 52, + "wave_2_transition_type": 0, + "location": 5, + "penalty_per_cart": 15000, + "resources": 1, + "details": "You're back! While you were\naway, three wyverns moved into\nthe volcano and are reeking\nhavoc throughout the area!\nWe haven't a moment to spare!\nPlease get rid of all three\nof them for me and my people!", + "description": "Hunt a Ratha., Urag. & Agnak.", + "wave_1_transition_target": 0, + "hrp_restriction": 10, + "quest_fee": 4050, + "quest_id": 61022, + "name": "Red Hot Party!", + "main_monster_2": 30, + "main_monster_1": 36, + "supply_set_number": 27, + "summon": 0, + "client": "Deserted Island Chief", + "flags": [ + [ + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 1, + 1 + ] + ], + "success_message": "Complete the Main Quest." + }, + "large_monsters": { + "monster_2": { + "size_spread": 1, + "hp_spread": 1, + "level": 56, + "boss_id": 1, + "type": 9, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + }, + "monster_3": { + "size_spread": 1, + "hp_spread": 1, + "level": 56, + "boss_id": 2, + "type": 19, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + }, + "monster_1": { + "size_spread": 1, + "hp_spread": 0, + "level": 56, + "boss_id": 0, + "type": 2, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + } + } +} \ No newline at end of file diff --git a/event/Sea Power.json b/event/Sea Power.json new file mode 100644 index 0000000..ac0b49f --- /dev/null +++ b/event/Sea Power.json @@ -0,0 +1,266 @@ +{ + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "objective_details": { + "subquest_2": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + }, + "main_quest": { + "objective_num": 2, + "hrp_reward": 1100, + "rewards_row_1": [ + [ + 501, + 1, + 5 + ], + [ + 499, + 1, + 16 + ], + [ + 500, + 1, + 22 + ], + [ + 313, + 1, + 8 + ], + [ + 595, + 1, + 14 + ], + [ + 315, + 1, + 10 + ], + [ + 503, + 1, + 2 + ], + [ + 540, + 1, + 23 + ] + ], + "rewards_row_2": [ + [ + 501, + 1, + 5 + ], + [ + 499, + 1, + 16 + ], + [ + 500, + 1, + 22 + ], + [ + 313, + 1, + 8 + ], + [ + 595, + 1, + 14 + ], + [ + 315, + 1, + 10 + ], + [ + 503, + 1, + 2 + ], + [ + 540, + 1, + 23 + ] + ], + "objective_type": 15, + "zenny_reward": 11400, + "type": 1 + }, + "subquest_1": { + "objective_num": 1, + "hrp_reward": 1100, + "rewards_row_1": [ + [ + 501, + 1, + 5 + ], + [ + 499, + 1, + 16 + ], + [ + 500, + 1, + 22 + ], + [ + 313, + 1, + 8 + ], + [ + 595, + 1, + 14 + ], + [ + 315, + 1, + 10 + ], + [ + 503, + 1, + 2 + ], + [ + 540, + 1, + 23 + ] + ], + "description": "Hunt a Lagiacrus", + "objective_type": 15, + "zenny_reward": 11400, + "type": 1 + } + }, + "small_monsters": [ + [], + [] + ], + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 0, + "quest_rank": 5, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 54, + "wave_2_transition_type": 0, + "location": 12, + "penalty_per_cart": 3800, + "resources": 1, + "details": "I once knew a fool of a hunter\nwho found a legendary clue --\nbut paid for it with his life.\nHe left those plans behind.\nThey're useless to a retired\nhunter like me, so I figured\nI'd pass them to another fool.", + "description": "Hunt 2 Lagiacrus\n", + "wave_1_transition_target": 0, + "hrp_restriction": 10, + "quest_fee": 2250, + "quest_id": 61016, + "name": "Sea Power", + "main_monster_2": 0, + "main_monster_1": 0, + "supply_set_number": 48, + "summon": 0, + "client": "Retired Hunter", + "flags": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 1, + 1 + ] + ], + "success_message": "Complete the Main Quest." + }, + "large_monsters": { + "monster_2": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_1": { + "size_spread": 3, + "hp_spread": 0, + "level": 59, + "boss_id": 0, + "type": 15, + "starting_area": 0, + "spawn_count": 2, + "size": 100 + } + } +} \ No newline at end of file diff --git a/event/Shut Up and Fish!.json b/event/Shut Up and Fish!.json new file mode 100644 index 0000000..6efc70e --- /dev/null +++ b/event/Shut Up and Fish!.json @@ -0,0 +1,765 @@ +{ + "small_monsters": [ + [], + [ + { + "type": 17, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 1, + "quantity": 1, + "pos_x": -1169.23, + "pos_y": -50.0, + "pos_z": -423.3, + "rot_x": 0, + "rot_y": -25600, + "rot_z": 0 + }, + { + "type": 17, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 1, + "quantity": 3, + "pos_x": 1367.09, + "pos_y": -50.0, + "pos_z": -1500.72, + "rot_x": 0, + "rot_y": 59392, + "rot_z": 0 + }, + { + "type": 36, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 1, + "quantity": -1, + "pos_x": 1019.5, + "pos_y": 120.0, + "pos_z": -3357.52, + "rot_x": 49152, + "rot_y": 32768, + "rot_z": 0 + } + ], + [ + { + "type": 23, + "unk1": 1, + "unk2": 2, + "variant": 0, + "room": 2, + "quantity": -1, + "pos_x": -2518.64, + "pos_y": -470.0, + "pos_z": 620.06, + "rot_x": 0, + "rot_y": 27648, + "rot_z": 0 + }, + { + "type": 23, + "unk1": 1, + "unk2": 2, + "variant": 0, + "room": 2, + "quantity": -1, + "pos_x": -1786.72, + "pos_y": -230.0, + "pos_z": 24.74, + "rot_x": 0, + "rot_y": 51200, + "rot_z": 0 + }, + { + "type": 32, + "unk1": 1, + "unk2": 2, + "variant": 6, + "room": 2, + "quantity": -1, + "pos_x": -2127.59, + "pos_y": -479.91, + "pos_z": -1175.97, + "rot_x": 0, + "rot_y": -7168, + "rot_z": 0 + }, + { + "type": 32, + "unk1": 1, + "unk2": 2, + "variant": 6, + "room": 2, + "quantity": -1, + "pos_x": -2231.54, + "pos_y": -751.13, + "pos_z": -1060.03, + "rot_x": 0, + "rot_y": -7168, + "rot_z": 0 + }, + { + "type": 32, + "unk1": 1, + "unk2": 2, + "variant": 6, + "room": 2, + "quantity": -1, + "pos_x": -2037.48, + "pos_y": -628.68, + "pos_z": -957.11, + "rot_x": 0, + "rot_y": -7168, + "rot_z": 0 + } + ], + [ + { + "type": 36, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 3, + "quantity": 3, + "pos_x": -1084.83, + "pos_y": 283.44, + "pos_z": -815.51, + "rot_x": 0, + "rot_y": -9216, + "rot_z": 0 + }, + { + "type": 36, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 3, + "quantity": 2, + "pos_x": -737.17, + "pos_y": 163.44, + "pos_z": -1328.84, + "rot_x": 0, + "rot_y": -39936, + "rot_z": 0 + } + ], + [ + { + "type": 32, + "unk1": 4, + "unk2": 255, + "variant": 5, + "room": 4, + "quantity": 3, + "pos_x": 1295.68, + "pos_y": -1334.54, + "pos_z": -1102.45, + "rot_x": 0, + "rot_y": -22528, + "rot_z": 0 + }, + { + "type": 32, + "unk1": 4, + "unk2": 255, + "variant": 5, + "room": 4, + "quantity": 1, + "pos_x": 2116.25, + "pos_y": -1371.63, + "pos_z": 1500.92, + "rot_x": 0, + "rot_y": -38912, + "rot_z": 0 + } + ], + [ + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 5, + "quantity": 3, + "pos_x": 2381.23, + "pos_y": 3.57, + "pos_z": 5454.15, + "rot_x": 0, + "rot_y": 14336, + "rot_z": 0 + }, + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 5, + "quantity": 2, + "pos_x": 2530.36, + "pos_y": 5.0, + "pos_z": 4637.36, + "rot_x": 0, + "rot_y": 27648, + "rot_z": 0 + }, + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 5, + "quantity": 1, + "pos_x": -399.12, + "pos_y": 0.87, + "pos_z": -1183.24, + "rot_x": 0, + "rot_y": 63488, + "rot_z": 0 + }, + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 5, + "quantity": 1, + "pos_x": -941.2, + "pos_y": 9.76, + "pos_z": -1589.08, + "rot_x": 0, + "rot_y": 26624, + "rot_z": 0 + } + ], + [ + { + "type": 17, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 6, + "quantity": 1, + "pos_x": 2376.71, + "pos_y": -1090.0, + "pos_z": 74.87, + "rot_x": 0, + "rot_y": -38912, + "rot_z": 0 + }, + { + "type": 17, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 6, + "quantity": 3, + "pos_x": 341.73, + "pos_y": -453.9, + "pos_z": 722.12, + "rot_x": 0, + "rot_y": -120832, + "rot_z": 0 + } + ], + [ + { + "type": 34, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 7, + "quantity": 4, + "pos_x": 1787.81, + "pos_y": 71.74, + "pos_z": -65.12, + "rot_x": 0, + "rot_y": 132096, + "rot_z": 0 + }, + { + "type": 34, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 7, + "quantity": 2, + "pos_x": 1060.48, + "pos_y": 50.13, + "pos_z": 805.32, + "rot_x": 0, + "rot_y": 137216, + "rot_z": 0 + }, + { + "type": 34, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 7, + "quantity": 2, + "pos_x": 700.34, + "pos_y": 50.0, + "pos_z": -197.27, + "rot_x": 0, + "rot_y": 155648, + "rot_z": 0 + }, + { + "type": 34, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 7, + "quantity": 1, + "pos_x": 2239.39, + "pos_y": 71.92, + "pos_z": 647.27, + "rot_x": 0, + "rot_y": 120832, + "rot_z": 0 + } + ], + [ + { + "type": 23, + "unk1": 1, + "unk2": 8, + "variant": 0, + "room": 8, + "quantity": -1, + "pos_x": 561.24, + "pos_y": -355.07, + "pos_z": -2312.24, + "rot_x": 0, + "rot_y": 125952, + "rot_z": 0 + }, + { + "type": 23, + "unk1": 0, + "unk2": 8, + "variant": 0, + "room": 8, + "quantity": -1, + "pos_x": -112.72, + "pos_y": -655.07, + "pos_z": -2436.54, + "rot_x": 0, + "rot_y": 137216, + "rot_z": 0 + } + ], + [ + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 9, + "quantity": 5, + "pos_x": 1578.47, + "pos_y": 0.56, + "pos_z": -1719.01, + "rot_x": 0, + "rot_y": -2048, + "rot_z": 0 + }, + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 9, + "quantity": 4, + "pos_x": 1820.89, + "pos_y": 1.5, + "pos_z": -1833.48, + "rot_x": 0, + "rot_y": 12288, + "rot_z": 0 + }, + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 9, + "quantity": 2, + "pos_x": 1800.76, + "pos_y": 0.0, + "pos_z": -2222.79, + "rot_x": 0, + "rot_y": 25600, + "rot_z": 0 + }, + { + "type": 36, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 9, + "quantity": -1, + "pos_x": 1072.78, + "pos_y": 191.26, + "pos_z": -4962.6, + "rot_x": 49152, + "rot_y": -31744, + "rot_z": 0 + } + ], + [ + { + "type": 30, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 10, + "quantity": 3, + "pos_x": -3822.84, + "pos_y": 153.28, + "pos_z": -436.94, + "rot_x": 0, + "rot_y": -26624, + "rot_z": 0 + }, + { + "type": 30, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 10, + "quantity": 2, + "pos_x": -3609.85, + "pos_y": 151.4, + "pos_z": -233.0, + "rot_x": 0, + "rot_y": -46080, + "rot_z": 0 + }, + { + "type": 30, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 10, + "quantity": 2, + "pos_x": -4182.17, + "pos_y": 167.72, + "pos_z": -152.06, + "rot_x": 0, + "rot_y": -22528, + "rot_z": 0 + }, + { + "type": 30, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 10, + "quantity": 1, + "pos_x": -3677.0, + "pos_y": 201.89, + "pos_z": 290.37, + "rot_x": 0, + "rot_y": 5120, + "rot_z": 0 + } + ] + ], + "quest_info": { + "quest_id": 61004, + "name": "Shut Up and Fish!", + "client": "MH3SP Dev Team", + "description": "Hunt a Gobul", + "details": "Wanted:\nThe description for this\nquest! If you can find\nit, please let us know!\nThanks!", + "success_message": "Complete the Main Quest\nand both Subquests.", + "failure_message": "Reward hits 0, or time\nexpires.", + "flags": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ] + ], + "penalty_per_cart": 1900, + "quest_fee": 550, + "time_limit": 25, + "main_monster_1": 17, + "main_monster_2": 34, + "location": 3, + "quest_rank": 2, + "hrp_restriction": 7, + "resources": 0, + "supply_set_number": 35, + "starting_position": 0, + "general_enemy_level": 25, + "summon": 0, + "wave_1_transition_type": 0, + "wave_1_transition_target": 0, + "wave_1_transition_quantity": 0, + "wave_2_transition_type": 0, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0 + }, + "large_monsters": { + "monster_1": { + "type": 18, + "starting_area": 0, + "boss_id": 0, + "spawn_count": 1, + "level": 25, + "size": 100, + "hp_spread": 1, + "size_spread": 1 + }, + "monster_2": { + "type": 0, + "starting_area": 0, + "boss_id": 0, + "spawn_count": 0, + "level": 0, + "size": 0, + "hp_spread": 0, + "size_spread": 0 + }, + "monster_3": { + "type": 0, + "starting_area": 0, + "boss_id": 0, + "spawn_count": 0, + "level": 0, + "size": 0, + "hp_spread": 0, + "size_spread": 0 + } + }, + "objective_details": { + "main_quest": { + "type": 1, + "objective_type": 18, + "objective_num": 1, + "zenny_reward": 5600, + "hrp_reward": 820, + "rewards_row_1": [ + [ + 149, + 3, + 15 + ], + [ + 150, + 1, + 5 + ], + [ + 214, + 2, + 10 + ], + [ + 210, + 3, + 20 + ], + [ + 212, + 2, + 7 + ], + [ + 213, + 2, + 10 + ], + [ + 215, + 2, + 13 + ], + [ + 216, + 1, + 20 + ] + ], + "rewards_row_2": [ + [ + 440, + 1, + 35 + ], + [ + 447, + 1, + 5 + ], + [ + 441, + 1, + 15 + ], + [ + 327, + 1, + 20 + ], + [ + 328, + 1, + 25 + ] + ] + }, + "subquest_1": { + "description": "Deliver 4 Goldenfish", + "type": 2, + "objective_type": 217, + "objective_num": 4, + "zenny_reward": 2400, + "hrp_reward": 70, + "rewards_row_1": [ + [ + 440, + 1, + 35 + ], + [ + 447, + 1, + 5 + ], + [ + 441, + 1, + 15 + ], + [ + 327, + 1, + 20 + ], + [ + 328, + 1, + 25 + ] + ] + }, + "subquest_2": { + "description": "Fish out Gobul once", + "type": 4096, + "objective_type": 18, + "objective_num": 2, + "zenny_reward": 1200, + "hrp_reward": 60, + "rewards_row_1": [ + [ + 149, + 3, + 15 + ], + [ + 150, + 1, + 5 + ], + [ + 214, + 2, + 10 + ], + [ + 210, + 3, + 20 + ], + [ + 212, + 2, + 7 + ], + [ + 213, + 2, + 10 + ], + [ + 215, + 2, + 13 + ], + [ + 216, + 1, + 20 + ] + ] + } + }, + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0, + "unkInt0": 0, + "unkShort0": 0, + "unkByte0": 0, + "unkBytes0_0": 0, + "unkBytes0_1": 0, + "unkBytes0_2": 0, + "unkBytes1_0": 0, + "unkBytes1_1": 0, + "unkBytes1_2": 0, + "unkBytes2_0": 0, + "unkBytes2_1": 0, + "unkUintAlways15": 15, + "unkShort1": 0, + "unkShort2": 0, + "unkByte1": 0, + "unkByte2": 0, + "unkByte3": 0, + "unkByte4": 0, + "unkByte7": 0, + "unkByte8": 0 + } +} \ No newline at end of file diff --git a/event/Speak of the Deviljho.json b/event/Speak of the Deviljho.json new file mode 100644 index 0000000..1bdab2a --- /dev/null +++ b/event/Speak of the Deviljho.json @@ -0,0 +1,703 @@ +{ + "small_monsters": [ + [], + [ + { + "type": 17, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 1, + "quantity": 1, + "pos_x": -1169.23, + "pos_y": -50.0, + "pos_z": -423.3, + "rot_x": 0, + "rot_y": -25600, + "rot_z": 0 + }, + { + "type": 17, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 1, + "quantity": 3, + "pos_x": 1367.09, + "pos_y": -50.0, + "pos_z": -1500.72, + "rot_x": 0, + "rot_y": 59392, + "rot_z": 0 + }, + { + "type": 36, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 1, + "quantity": -1, + "pos_x": 1019.5, + "pos_y": 120.0, + "pos_z": -3357.52, + "rot_x": 49152, + "rot_y": 32768, + "rot_z": 0 + } + ], + [ + { + "type": 23, + "unk1": 1, + "unk2": 2, + "variant": 0, + "room": 2, + "quantity": -1, + "pos_x": -2518.64, + "pos_y": -470.0, + "pos_z": 620.06, + "rot_x": 0, + "rot_y": 27648, + "rot_z": 0 + }, + { + "type": 23, + "unk1": 1, + "unk2": 2, + "variant": 0, + "room": 2, + "quantity": -1, + "pos_x": -1786.72, + "pos_y": -230.0, + "pos_z": 24.74, + "rot_x": 0, + "rot_y": 51200, + "rot_z": 0 + }, + { + "type": 32, + "unk1": 1, + "unk2": 2, + "variant": 6, + "room": 2, + "quantity": -1, + "pos_x": -2127.59, + "pos_y": -479.91, + "pos_z": -1175.97, + "rot_x": 0, + "rot_y": -7168, + "rot_z": 0 + }, + { + "type": 32, + "unk1": 1, + "unk2": 2, + "variant": 6, + "room": 2, + "quantity": -1, + "pos_x": -2231.54, + "pos_y": -751.13, + "pos_z": -1060.03, + "rot_x": 0, + "rot_y": -7168, + "rot_z": 0 + }, + { + "type": 32, + "unk1": 1, + "unk2": 2, + "variant": 6, + "room": 2, + "quantity": -1, + "pos_x": -2037.48, + "pos_y": -628.68, + "pos_z": -957.11, + "rot_x": 0, + "rot_y": -7168, + "rot_z": 0 + } + ], + [ + { + "type": 36, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 3, + "quantity": 3, + "pos_x": -1084.83, + "pos_y": 283.44, + "pos_z": -815.51, + "rot_x": 0, + "rot_y": -9216, + "rot_z": 0 + }, + { + "type": 36, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 3, + "quantity": 2, + "pos_x": -737.17, + "pos_y": 163.44, + "pos_z": -1328.84, + "rot_x": 0, + "rot_y": -39936, + "rot_z": 0 + } + ], + [ + { + "type": 32, + "unk1": 4, + "unk2": 255, + "variant": 5, + "room": 4, + "quantity": 3, + "pos_x": 1295.68, + "pos_y": -1334.54, + "pos_z": -1102.45, + "rot_x": 0, + "rot_y": -22528, + "rot_z": 0 + }, + { + "type": 32, + "unk1": 4, + "unk2": 255, + "variant": 5, + "room": 4, + "quantity": 1, + "pos_x": 2116.25, + "pos_y": -1371.63, + "pos_z": 1500.92, + "rot_x": 0, + "rot_y": -38912, + "rot_z": 0 + } + ], + [ + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 5, + "quantity": 3, + "pos_x": 2381.23, + "pos_y": 3.57, + "pos_z": 5454.15, + "rot_x": 0, + "rot_y": 14336, + "rot_z": 0 + }, + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 5, + "quantity": 2, + "pos_x": 2530.36, + "pos_y": 5.0, + "pos_z": 4637.36, + "rot_x": 0, + "rot_y": 27648, + "rot_z": 0 + }, + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 5, + "quantity": 1, + "pos_x": -399.12, + "pos_y": 0.87, + "pos_z": -1183.24, + "rot_x": 0, + "rot_y": 63488, + "rot_z": 0 + }, + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 5, + "quantity": 1, + "pos_x": -941.2, + "pos_y": 9.76, + "pos_z": -1589.08, + "rot_x": 0, + "rot_y": 26624, + "rot_z": 0 + } + ], + [ + { + "type": 17, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 6, + "quantity": 1, + "pos_x": 2376.71, + "pos_y": -1090.0, + "pos_z": 74.87, + "rot_x": 0, + "rot_y": -38912, + "rot_z": 0 + }, + { + "type": 17, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 6, + "quantity": 3, + "pos_x": 341.73, + "pos_y": -453.9, + "pos_z": 722.12, + "rot_x": 0, + "rot_y": -120832, + "rot_z": 0 + } + ], + [ + { + "type": 34, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 7, + "quantity": 4, + "pos_x": 1787.81, + "pos_y": 71.74, + "pos_z": -65.12, + "rot_x": 0, + "rot_y": 132096, + "rot_z": 0 + }, + { + "type": 34, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 7, + "quantity": 2, + "pos_x": 1060.48, + "pos_y": 50.13, + "pos_z": 805.32, + "rot_x": 0, + "rot_y": 137216, + "rot_z": 0 + }, + { + "type": 34, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 7, + "quantity": 2, + "pos_x": 700.34, + "pos_y": 50.0, + "pos_z": -197.27, + "rot_x": 0, + "rot_y": 155648, + "rot_z": 0 + }, + { + "type": 34, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 7, + "quantity": 1, + "pos_x": 2239.39, + "pos_y": 71.92, + "pos_z": 647.27, + "rot_x": 0, + "rot_y": 120832, + "rot_z": 0 + } + ], + [ + { + "type": 23, + "unk1": 1, + "unk2": 8, + "variant": 0, + "room": 8, + "quantity": -1, + "pos_x": 561.24, + "pos_y": -355.07, + "pos_z": -2312.24, + "rot_x": 0, + "rot_y": 125952, + "rot_z": 0 + }, + { + "type": 23, + "unk1": 0, + "unk2": 8, + "variant": 0, + "room": 8, + "quantity": -1, + "pos_x": -112.72, + "pos_y": -655.07, + "pos_z": -2436.54, + "rot_x": 0, + "rot_y": 137216, + "rot_z": 0 + } + ], + [ + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 9, + "quantity": 5, + "pos_x": 1578.47, + "pos_y": 0.56, + "pos_z": -1719.01, + "rot_x": 0, + "rot_y": -2048, + "rot_z": 0 + }, + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 9, + "quantity": 4, + "pos_x": 1820.89, + "pos_y": 1.5, + "pos_z": -1833.48, + "rot_x": 0, + "rot_y": 12288, + "rot_z": 0 + }, + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 9, + "quantity": 2, + "pos_x": 1800.76, + "pos_y": 0.0, + "pos_z": -2222.79, + "rot_x": 0, + "rot_y": 25600, + "rot_z": 0 + }, + { + "type": 36, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 9, + "quantity": -1, + "pos_x": 1072.78, + "pos_y": 191.26, + "pos_z": -4962.6, + "rot_x": 49152, + "rot_y": -31744, + "rot_z": 0 + } + ], + [ + { + "type": 30, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 10, + "quantity": 3, + "pos_x": -3822.84, + "pos_y": 153.28, + "pos_z": -436.94, + "rot_x": 0, + "rot_y": -26624, + "rot_z": 0 + }, + { + "type": 30, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 10, + "quantity": 2, + "pos_x": -3609.85, + "pos_y": 151.4, + "pos_z": -233.0, + "rot_x": 0, + "rot_y": -46080, + "rot_z": 0 + }, + { + "type": 30, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 10, + "quantity": 2, + "pos_x": -4182.17, + "pos_y": 167.72, + "pos_z": -152.06, + "rot_x": 0, + "rot_y": -22528, + "rot_z": 0 + }, + { + "type": 30, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 10, + "quantity": 1, + "pos_x": -3677.0, + "pos_y": 201.89, + "pos_z": 290.37, + "rot_x": 0, + "rot_y": 5120, + "rot_z": 0 + } + ] + ], + "quest_info": { + "quest_id": 61012, + "name": "Speak of the Deviljho", + "client": "Eccentric Aristocrat", + "description": "Capture a Deviljho", + "details": "Some wyvern named Deviljho has\nLoc Lac hunters fouling their\narmor. I hear it has a taste\nfor captured animals. I simply\nmust have one! What will I do\nwith it? That's for me to know\nand you to NEVER find out!", + "success_message": "Complete the Main Quest.", + "failure_message": "Reward hits 0, time expires,\nor accidentally slay the target.", + "flags": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 1 + ] + ], + "penalty_per_cart": 7500, + "quest_fee": 1800, + "time_limit": 50, + "main_monster_1": 32, + "main_monster_2": 33, + "location": 3, + "quest_rank": 4, + "hrp_restriction": 9, + "resources": 1, + "supply_set_number": 18, + "starting_position": 1, + "general_enemy_level": 52, + "summon": 0, + "wave_1_transition_type": 0, + "wave_1_transition_target": 0, + "wave_1_transition_quantity": 0, + "wave_2_transition_type": 0, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0 + }, + "large_monsters": { + "monster_1": { + "type": 7, + "starting_area": 0, + "boss_id": 0, + "spawn_count": 1, + "level": 52, + "size": 100, + "hp_spread": 0, + "size_spread": 3 + }, + "monster_2": { + "type": 0, + "starting_area": 0, + "boss_id": 0, + "spawn_count": 0, + "level": 0, + "size": 0, + "hp_spread": 0, + "size_spread": 0 + }, + "monster_3": { + "type": 0, + "starting_area": 0, + "boss_id": 0, + "spawn_count": 0, + "level": 0, + "size": 0, + "hp_spread": 0, + "size_spread": 0 + } + }, + "objective_details": { + "main_quest": { + "type": 129, + "objective_type": 7, + "objective_num": 1, + "zenny_reward": 22000, + "hrp_reward": 1820, + "rewards_row_1": [ + [ + 445, + 1, + 3 + ], + [ + 485, + 1, + 16 + ], + [ + 484, + 1, + 23 + ], + [ + 483, + 1, + 20 + ], + [ + 486, + 1, + 10 + ], + [ + 487, + 1, + 3 + ], + [ + 593, + 1, + 25 + ] + ], + "rewards_row_2": [ + [ + 445, + 1, + 3 + ], + [ + 485, + 1, + 16 + ], + [ + 484, + 1, + 23 + ], + [ + 483, + 1, + 20 + ], + [ + 486, + 1, + 10 + ], + [ + 487, + 1, + 3 + ], + [ + 593, + 1, + 25 + ] + ] + }, + "subquest_1": { + "description": "None", + "type": 0, + "objective_type": 0, + "objective_num": 0, + "zenny_reward": 0, + "hrp_reward": 0, + "rewards_row_1": [] + }, + "subquest_2": { + "description": "None", + "type": 0, + "objective_type": 0, + "objective_num": 0, + "zenny_reward": 0, + "hrp_reward": 0, + "rewards_row_1": [] + } + }, + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0, + "unkInt0": 0, + "unkShort0": 0, + "unkByte0": 0, + "unkBytes0_0": 0, + "unkBytes0_1": 0, + "unkBytes0_2": 0, + "unkBytes1_0": 0, + "unkBytes1_1": 0, + "unkBytes1_2": 0, + "unkBytes2_0": 0, + "unkBytes2_1": 0, + "unkUintAlways15": 15, + "unkShort1": 0, + "unkShort2": 0, + "unkByte1": 0, + "unkByte2": 0, + "unkByte3": 0, + "unkByte4": 0, + "unkByte7": 0, + "unkByte8": 0 + } +} \ No newline at end of file diff --git a/event/The Motley Mission.json b/event/The Motley Mission.json new file mode 100644 index 0000000..361d4f8 --- /dev/null +++ b/event/The Motley Mission.json @@ -0,0 +1,230 @@ +{ + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "objective_details": { + "subquest_2": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + }, + "main_quest": { + "objective_num": 2, + "hrp_reward": 960, + "rewards_row_1": [ + [ + 149, + 1, + 20 + ], + [ + 150, + 1, + 8 + ], + [ + 490, + 1, + 14 + ], + [ + 318, + 1, + 24 + ], + [ + 317, + 1, + 17 + ], + [ + 316, + 8, + 10 + ], + [ + 403, + 1, + 7 + ] + ], + "rewards_row_2": [ + [ + 149, + 1, + 20 + ], + [ + 150, + 1, + 8 + ], + [ + 490, + 1, + 14 + ], + [ + 318, + 1, + 24 + ], + [ + 317, + 1, + 17 + ], + [ + 316, + 8, + 10 + ], + [ + 403, + 1, + 7 + ] + ], + "objective_type": 16, + "zenny_reward": 8000, + "type": 1 + }, + "subquest_1": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + } + }, + "small_monsters": [ + [], + [ + { + "variant": 3, + "unk1": 1, + "unk2": 255, + "pos_z": -3042.7, + "pos_x": -0.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 40, + "quantity": -1 + } + ] + ], + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 0, + "quest_rank": 2, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 29, + "wave_2_transition_type": 0, + "location": 12, + "penalty_per_cart": 3000, + "resources": 0, + "details": "Wanna hear the Hunting Fleet's\nlatest shanty? No? Too bad:\n\"Bow, port, starboard, stern,\nfishin' stinks at every turn.\nOur motley crew has one wish:\nhey, monsters, QUIT SCARIN'\nDA FISH!\" Catchy, aye?", + "description": "Hunt 2 Royal Ludroth\n", + "wave_1_transition_target": 0, + "hrp_restriction": 7, + "quest_fee": 800, + "quest_id": 61005, + "name": "The Motley Mission", + "main_monster_2": 0, + "main_monster_1": 0, + "supply_set_number": 48, + "summon": 0, + "client": "Deserted Island Sailor", + "flags": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 1, + 1 + ] + ], + "success_message": "Complete the Main Quest." + }, + "large_monsters": { + "monster_2": { + "size_spread": 3, + "hp_spread": 0, + "level": 39, + "boss_id": 1, + "type": 16, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_1": { + "size_spread": 3, + "hp_spread": 0, + "level": 39, + "boss_id": 0, + "type": 16, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + } + } +} \ No newline at end of file diff --git a/event/The Phantom Uragaan.json b/event/The Phantom Uragaan.json new file mode 100644 index 0000000..ac5529b --- /dev/null +++ b/event/The Phantom Uragaan.json @@ -0,0 +1,880 @@ +{ + "small_monsters": [ + [], + [ + { + "type": 34, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 1, + "quantity": 3, + "pos_x": -494.25, + "pos_y": 47.01, + "pos_z": -947.91, + "rot_x": 0, + "rot_y": 20186, + "rot_z": 0 + }, + { + "type": 34, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 1, + "quantity": 2, + "pos_x": -1361.42, + "pos_y": 20.6, + "pos_z": -712.51, + "rot_x": 0, + "rot_y": 14302, + "rot_z": 0 + }, + { + "type": 34, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 1, + "quantity": 1, + "pos_x": 1031.98, + "pos_y": 26.73, + "pos_z": -1406.32, + "rot_x": 0, + "rot_y": 27535, + "rot_z": 0 + } + ], + [ + { + "type": 27, + "unk1": 1, + "unk2": 2, + "variant": 0, + "room": 2, + "quantity": -1, + "pos_x": -1219.73, + "pos_y": 52.23, + "pos_z": 1102.22, + "rot_x": 0, + "rot_y": 3873, + "rot_z": 0 + }, + { + "type": 27, + "unk1": 0, + "unk2": 2, + "variant": 1, + "room": 2, + "quantity": -1, + "pos_x": -830.32, + "pos_y": 39.56, + "pos_z": 1065.16, + "rot_x": 0, + "rot_y": 1246, + "rot_z": 0 + }, + { + "type": 27, + "unk1": 1, + "unk2": 2, + "variant": 2, + "room": 2, + "quantity": -1, + "pos_x": -682.64, + "pos_y": 60.8, + "pos_z": 1535.78, + "rot_x": 0, + "rot_y": 7451, + "rot_z": 0 + } + ], + [ + { + "type": 31, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 3, + "quantity": 3, + "pos_x": 8039.85, + "pos_y": 47.82, + "pos_z": 3794.23, + "rot_x": 0, + "rot_y": 0, + "rot_z": 0 + }, + { + "type": 31, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 3, + "quantity": 2, + "pos_x": 8331.77, + "pos_y": 77.59, + "pos_z": 4271.11, + "rot_x": 0, + "rot_y": -1024, + "rot_z": 0 + }, + { + "type": 31, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 3, + "quantity": 1, + "pos_x": 7572.76, + "pos_y": 52.89, + "pos_z": 4356.53, + "rot_x": 0, + "rot_y": 21, + "rot_z": 0 + }, + { + "type": 39, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 3, + "quantity": -1, + "pos_x": 8572.88, + "pos_y": 655.41, + "pos_z": 2454.55, + "rot_x": 49152, + "rot_y": -3379, + "rot_z": 0 + } + ], + [ + { + "type": 21, + "unk1": 1, + "unk2": 255, + "variant": 2, + "room": 4, + "quantity": 3, + "pos_x": -436.87, + "pos_y": 19.31, + "pos_z": 2521.63, + "rot_x": 0, + "rot_y": 9128, + "rot_z": 0 + }, + { + "type": 21, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 4, + "quantity": 2, + "pos_x": 360.05, + "pos_y": 38.55, + "pos_z": -800.35, + "rot_x": 0, + "rot_y": 4909, + "rot_z": 0 + }, + { + "type": 40, + "unk1": 3, + "unk2": 255, + "variant": 8, + "room": 4, + "quantity": -1, + "pos_x": -214.61, + "pos_y": 28.25, + "pos_z": 268.69, + "rot_x": 0, + "rot_y": 5120, + "rot_z": 0 + }, + { + "type": 40, + "unk1": 3, + "unk2": 255, + "variant": 8, + "room": 4, + "quantity": -1, + "pos_x": 1350.31, + "pos_y": 23.18, + "pos_z": 3610.13, + "rot_x": 0, + "rot_y": 5120, + "rot_z": 0 + }, + { + "type": 40, + "unk1": 3, + "unk2": 255, + "variant": 8, + "room": 4, + "quantity": -1, + "pos_x": 1800.4, + "pos_y": 1.84, + "pos_z": 1993.37, + "rot_x": 0, + "rot_y": 0, + "rot_z": 0 + }, + { + "type": 40, + "unk1": 3, + "unk2": 255, + "variant": 8, + "room": 4, + "quantity": -1, + "pos_x": -1425.29, + "pos_y": -2.37, + "pos_z": 2930.67, + "rot_x": 0, + "rot_y": 0, + "rot_z": 0 + }, + { + "type": 40, + "unk1": 3, + "unk2": 255, + "variant": 8, + "room": 4, + "quantity": -1, + "pos_x": 3000.62, + "pos_y": -0.47, + "pos_z": 2984.86, + "rot_x": 0, + "rot_y": 0, + "rot_z": 0 + }, + { + "type": 40, + "unk1": 3, + "unk2": 255, + "variant": 8, + "room": 4, + "quantity": -1, + "pos_x": -1057.0, + "pos_y": 6.53, + "pos_z": 1521.1, + "rot_x": 0, + "rot_y": 0, + "rot_z": 0 + } + ], + [ + { + "type": 39, + "unk1": 1, + "unk2": 255, + "variant": 2, + "room": 5, + "quantity": 2, + "pos_x": 39.52, + "pos_y": 285.05, + "pos_z": -1288.28, + "rot_x": 0, + "rot_y": 1577, + "rot_z": 0 + }, + { + "type": 39, + "unk1": 1, + "unk2": 255, + "variant": 2, + "room": 5, + "quantity": 5, + "pos_x": 458.1, + "pos_y": 260.19, + "pos_z": -1249.2, + "rot_x": 0, + "rot_y": 10340, + "rot_z": 0 + }, + { + "type": 40, + "unk1": 3, + "unk2": 255, + "variant": 8, + "room": 5, + "quantity": -1, + "pos_x": 2045.92, + "pos_y": 82.8, + "pos_z": -3002.76, + "rot_x": 0, + "rot_y": 1630, + "rot_z": 0 + }, + { + "type": 40, + "unk1": 3, + "unk2": 255, + "variant": 8, + "room": 5, + "quantity": -1, + "pos_x": -875.85, + "pos_y": 74.14, + "pos_z": 555.11, + "rot_x": 0, + "rot_y": 0, + "rot_z": 0 + }, + { + "type": 40, + "unk1": 3, + "unk2": 255, + "variant": 8, + "room": 5, + "quantity": -1, + "pos_x": 2418.12, + "pos_y": 83.55, + "pos_z": -184.33, + "rot_x": 0, + "rot_y": 1294, + "rot_z": 0 + }, + { + "type": 40, + "unk1": 3, + "unk2": 255, + "variant": 8, + "room": 5, + "quantity": -1, + "pos_x": -3313.92, + "pos_y": 65.96, + "pos_z": -1106.93, + "rot_x": 0, + "rot_y": 0, + "rot_z": 0 + }, + { + "type": 40, + "unk1": 3, + "unk2": 255, + "variant": 8, + "room": 5, + "quantity": -1, + "pos_x": -2297.87, + "pos_y": 59.38, + "pos_z": -2214.42, + "rot_x": 0, + "rot_y": 0, + "rot_z": 0 + }, + { + "type": 40, + "unk1": 3, + "unk2": 255, + "variant": 8, + "room": 5, + "quantity": -1, + "pos_x": 1184.39, + "pos_y": 56.88, + "pos_z": -71.72, + "rot_x": 0, + "rot_y": 0, + "rot_z": 0 + } + ], + [ + { + "type": 40, + "unk1": 3, + "unk2": 255, + "variant": 8, + "room": 6, + "quantity": -1, + "pos_x": 393.15, + "pos_y": -35.75, + "pos_z": 1076.53, + "rot_x": 0, + "rot_y": -1536, + "rot_z": 0 + }, + { + "type": 40, + "unk1": 3, + "unk2": 255, + "variant": 8, + "room": 6, + "quantity": -1, + "pos_x": -1170.83, + "pos_y": -30.77, + "pos_z": 447.51, + "rot_x": 0, + "rot_y": 0, + "rot_z": 0 + }, + { + "type": 40, + "unk1": 3, + "unk2": 255, + "variant": 8, + "room": 6, + "quantity": -1, + "pos_x": 1020.1, + "pos_y": 4.72, + "pos_z": -202.83, + "rot_x": 0, + "rot_y": 0, + "rot_z": 0 + }, + { + "type": 40, + "unk1": 3, + "unk2": 255, + "variant": 8, + "room": 6, + "quantity": -1, + "pos_x": -435.28, + "pos_y": -28.37, + "pos_z": -1280.39, + "rot_x": 0, + "rot_y": 0, + "rot_z": 0 + } + ], + [ + { + "type": 40, + "unk1": 1, + "unk2": 255, + "variant": 4, + "room": 7, + "quantity": 1, + "pos_x": -208.7, + "pos_y": 15.76, + "pos_z": 1154.55, + "rot_x": 0, + "rot_y": 0, + "rot_z": 0 + }, + { + "type": 40, + "unk1": 1, + "unk2": 255, + "variant": 4, + "room": 7, + "quantity": 1, + "pos_x": -1469.04, + "pos_y": 23.53, + "pos_z": -284.28, + "rot_x": 0, + "rot_y": 0, + "rot_z": 0 + }, + { + "type": 40, + "unk1": 3, + "unk2": 255, + "variant": 8, + "room": 7, + "quantity": -1, + "pos_x": -290.52, + "pos_y": 8.16, + "pos_z": -1374.79, + "rot_x": 0, + "rot_y": 0, + "rot_z": 0 + }, + { + "type": 40, + "unk1": 3, + "unk2": 255, + "variant": 8, + "room": 7, + "quantity": -1, + "pos_x": 2503.26, + "pos_y": 19.35, + "pos_z": 429.29, + "rot_x": 0, + "rot_y": 0, + "rot_z": 0 + }, + { + "type": 40, + "unk1": 3, + "unk2": 255, + "variant": 8, + "room": 7, + "quantity": -1, + "pos_x": 651.25, + "pos_y": -9.45, + "pos_z": 761.42, + "rot_x": 0, + "rot_y": 0, + "rot_z": 0 + }, + { + "type": 40, + "unk1": 3, + "unk2": 255, + "variant": 8, + "room": 7, + "quantity": -1, + "pos_x": -948.43, + "pos_y": 25.56, + "pos_z": -516.55, + "rot_x": 0, + "rot_y": 0, + "rot_z": 0 + }, + { + "type": 40, + "unk1": 3, + "unk2": 255, + "variant": 8, + "room": 7, + "quantity": -1, + "pos_x": -2485.25, + "pos_y": 25.6, + "pos_z": 268.96, + "rot_x": 0, + "rot_y": 0, + "rot_z": 0 + }, + { + "type": 40, + "unk1": 3, + "unk2": 255, + "variant": 8, + "room": 7, + "quantity": -1, + "pos_x": -37.88, + "pos_y": 12.46, + "pos_z": -2799.27, + "rot_x": 0, + "rot_y": 0, + "rot_z": 0 + } + ], + [ + { + "type": 30, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 8, + "quantity": 4, + "pos_x": -1064.65, + "pos_y": 0.19, + "pos_z": 133.11, + "rot_x": 0, + "rot_y": 8277, + "rot_z": 0 + }, + { + "type": 30, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 8, + "quantity": 3, + "pos_x": -1816.16, + "pos_y": 43.38, + "pos_z": -316.74, + "rot_x": 0, + "rot_y": 7354, + "rot_z": 0 + }, + { + "type": 30, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 8, + "quantity": 2, + "pos_x": -834.16, + "pos_y": 51.62, + "pos_z": -1062.45, + "rot_x": 0, + "rot_y": 1069, + "rot_z": 0 + }, + { + "type": 30, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 8, + "quantity": 1, + "pos_x": -818.82, + "pos_y": 32.27, + "pos_z": -671.25, + "rot_x": 0, + "rot_y": 4459, + "rot_z": 0 + } + ], + [ + { + "type": 21, + "unk1": 1, + "unk2": 255, + "variant": 2, + "room": 9, + "quantity": 2, + "pos_x": 1226.78, + "pos_y": 14.44, + "pos_z": -971.03, + "rot_x": 0, + "rot_y": 8842, + "rot_z": 0 + }, + { + "type": 21, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 9, + "quantity": 4, + "pos_x": 30.91, + "pos_y": 11.0, + "pos_z": -556.52, + "rot_x": 0, + "rot_y": 3576, + "rot_z": 0 + } + ], + [] + ], + "quest_info": { + "quest_id": 61007, + "name": "The Phantom Uragaan", + "client": "Spoiled Princess", + "description": "Hunt an Uragaan", + "details": "Oooh, I just heard they've\nspotted the cutest, tiniest,\nmost adorable little Uragaan\non the Volcano. Hunt me one\nthis instant or I will get\nvery angry. And if I'm angry,\nDaddy's angry. Now go!", + "success_message": "Complete the Main Quest.", + "failure_message": "Reward hits 0, or time\nexpires.", + "flags": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 1, + 1 + ] + ], + "penalty_per_cart": 3000, + "quest_fee": 850, + "time_limit": 50, + "main_monster_1": 21, + "main_monster_2": 27, + "location": 5, + "quest_rank": 3, + "hrp_restriction": 8, + "resources": 0, + "supply_set_number": 15, + "starting_position": 0, + "general_enemy_level": 29, + "summon": 0, + "wave_1_transition_type": 0, + "wave_1_transition_target": 0, + "wave_1_transition_quantity": 0, + "wave_2_transition_type": 0, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0 + }, + "large_monsters": { + "monster_1": { + "type": 9, + "starting_area": 0, + "boss_id": 0, + "spawn_count": 1, + "level": 29, + "size": 19, + "hp_spread": 0, + "size_spread": 0 + }, + "monster_2": { + "type": 0, + "starting_area": 0, + "boss_id": 0, + "spawn_count": 0, + "level": 0, + "size": 0, + "hp_spread": 0, + "size_spread": 0 + }, + "monster_3": { + "type": 0, + "starting_area": 0, + "boss_id": 0, + "spawn_count": 0, + "level": 0, + "size": 0, + "hp_spread": 0, + "size_spread": 0 + } + }, + "objective_details": { + "main_quest": { + "type": 1, + "objective_type": 9, + "objective_num": 1, + "zenny_reward": 8800, + "hrp_reward": 1100, + "rewards_row_1": [ + [ + 440, + 1, + 1 + ], + [ + 410, + 1, + 16 + ], + [ + 479, + 1, + 20 + ], + [ + 412, + 1, + 10 + ], + [ + 155, + 1, + 10 + ], + [ + 343, + 15, + 13 + ], + [ + 441, + 1, + 5 + ], + [ + 110, + 1, + 25 + ] + ], + "rewards_row_2": [ + [ + 440, + 1, + 1 + ], + [ + 410, + 1, + 16 + ], + [ + 479, + 1, + 20 + ], + [ + 412, + 1, + 10 + ], + [ + 155, + 1, + 10 + ], + [ + 343, + 15, + 13 + ], + [ + 441, + 1, + 5 + ], + [ + 110, + 1, + 25 + ] + ] + }, + "subquest_1": { + "description": "None", + "type": 0, + "objective_type": 0, + "objective_num": 0, + "zenny_reward": 0, + "hrp_reward": 0, + "rewards_row_1": [] + }, + "subquest_2": { + "description": "None", + "type": 0, + "objective_type": 0, + "objective_num": 0, + "zenny_reward": 0, + "hrp_reward": 0, + "rewards_row_1": [] + } + }, + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0, + "unkInt0": 0, + "unkShort0": 0, + "unkByte0": 0, + "unkBytes0_0": 0, + "unkBytes0_1": 0, + "unkBytes0_2": 0, + "unkBytes1_0": 0, + "unkBytes1_1": 0, + "unkBytes1_2": 0, + "unkBytes2_0": 0, + "unkBytes2_1": 0, + "unkUintAlways15": 15, + "unkShort1": 0, + "unkShort2": 0, + "unkByte1": 0, + "unkByte2": 0, + "unkByte3": 0, + "unkByte4": 0, + "unkByte7": 0, + "unkByte8": 0 + } +} \ No newline at end of file diff --git a/event/Where Gods Fear to Tread.json b/event/Where Gods Fear to Tread.json new file mode 100644 index 0000000..aabbdf7 --- /dev/null +++ b/event/Where Gods Fear to Tread.json @@ -0,0 +1,205 @@ +{ + "unknown": { + "unk_12": 5, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "objective_details": { + "subquest_2": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + }, + "main_quest": { + "objective_num": 1, + "hrp_reward": 4200, + "rewards_row_1": [ + [ + 433, + 1, + 40 + ], + [ + 510, + 1, + 30 + ], + [ + 435, + 1, + 10 + ], + [ + 434, + 1, + 10 + ], + [ + 437, + 1, + 5 + ], + [ + 436, + 1, + 5 + ] + ], + "rewards_row_2": [ + [ + 434, + 1, + 11 + ], + [ + 510, + 1, + 34 + ], + [ + 435, + 1, + 39 + ], + [ + 466, + 1, + 6 + ], + [ + 437, + 1, + 5 + ], + [ + 436, + 1, + 5 + ] + ], + "objective_type": 24, + "zenny_reward": 42000, + "type": 257 + }, + "subquest_1": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + } + }, + "small_monsters": [ + [], + [] + ], + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 2, + "quest_rank": 6, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 64, + "wave_2_transition_type": 0, + "location": 11, + "penalty_per_cart": 14000, + "resources": 1, + "details": "I've been waiting, hunter. Now\ncomes your final challenge:\nAlatreon, a dragon of darkness\nand light. Can mere mortals\nfell an elder dragon feared\neven by the gods? Don't even\nbother saying your prayers...", + "description": "Slay the Alatreon", + "wave_1_transition_target": 0, + "hrp_restriction": 11, + "quest_fee": 4200, + "quest_id": 61021, + "name": "Where Gods Fear to Tread", + "main_monster_2": 0, + "main_monster_1": 0, + "supply_set_number": 0, + "summon": 0, + "client": "Scarlet Mystery Man", + "flags": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 0 + ] + ], + "success_message": "Complete the Main Quest." + }, + "large_monsters": { + "monster_2": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_1": { + "size_spread": 0, + "hp_spread": 0, + "level": 64, + "boss_id": 0, + "type": 24, + "starting_area": 0, + "spawn_count": 1, + "size": 125 + } + } +} \ No newline at end of file diff --git a/event/World Eater.json b/event/World Eater.json new file mode 100644 index 0000000..09a2da9 --- /dev/null +++ b/event/World Eater.json @@ -0,0 +1,880 @@ +{ + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "objective_details": { + "subquest_2": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + }, + "main_quest": { + "objective_num": 1, + "hrp_reward": 1800, + "rewards_row_1": [ + [ + 442, + 1, + 33 + ], + [ + 487, + 1, + 4 + ], + [ + 488, + 1, + 8 + ], + [ + 483, + 1, + 17 + ], + [ + 446, + 1, + 11 + ], + [ + 441, + 1, + 19 + ], + [ + 486, + 1, + 8 + ] + ], + "rewards_row_2": [ + [ + 488, + 1, + 20 + ], + [ + 442, + 1, + 34 + ], + [ + 486, + 1, + 6 + ], + [ + 483, + 1, + 17 + ], + [ + 487, + 1, + 3 + ], + [ + 441, + 1, + 11 + ], + [ + 446, + 1, + 9 + ] + ], + "objective_type": 7, + "zenny_reward": 18000, + "type": 1 + }, + "subquest_1": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + } + }, + "small_monsters": [ + [], + [ + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": -3613.8, + "pos_x": 247.42, + "pos_y": 560.37, + "room": 1, + "rot_z": 0, + "rot_y": -119, + "rot_x": 0, + "type": 34, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -3857.25, + "pos_x": -474.9, + "pos_y": 491.91, + "room": 1, + "rot_z": 0, + "rot_y": -267, + "rot_x": 0, + "type": 34, + "quantity": 3 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": -4931.83, + "pos_x": 897.01, + "pos_y": 418.6, + "room": 1, + "rot_z": 0, + "rot_y": -284, + "rot_x": 0, + "type": 34, + "quantity": 3 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -4449.25, + "pos_x": 219.95, + "pos_y": 402.97, + "room": 1, + "rot_z": 0, + "rot_y": 244, + "rot_x": 0, + "type": 34, + "quantity": 2 + } + ], + [ + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 117.64, + "pos_x": -6654.1, + "pos_y": 23.12, + "room": 2, + "rot_z": 0, + "rot_y": 455, + "rot_x": 0, + "type": 33, + "quantity": 3 + } + ], + [ + { + "variant": 0, + "unk1": 0, + "unk2": 255, + "pos_z": -1280.44, + "pos_x": 2567.38, + "pos_y": -4.58, + "room": 3, + "rot_z": 0, + "rot_y": 352, + "rot_x": 0, + "type": 27, + "quantity": -1 + }, + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": -787.0, + "pos_x": 2119.14, + "pos_y": -14.21, + "room": 3, + "rot_z": 0, + "rot_y": 335, + "rot_x": 0, + "type": 27, + "quantity": -1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 2631.32, + "pos_x": 39.65, + "pos_y": 2.0, + "room": 4, + "rot_z": 0, + "rot_y": 113, + "rot_x": 0, + "type": 30, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 2165.99, + "pos_x": -538.14, + "pos_y": 2.0, + "room": 4, + "rot_z": 0, + "rot_y": -91, + "rot_x": 0, + "type": 30, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 820.71, + "pos_x": 360.98, + "pos_y": 2.0, + "room": 4, + "rot_z": 0, + "rot_y": -187, + "rot_x": 0, + "type": 30, + "quantity": 1 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 3071.35, + "pos_x": -5671.42, + "pos_y": 466.03, + "room": 4, + "rot_z": 0, + "rot_y": 304, + "rot_x": 273, + "type": 36, + "quantity": -1 + } + ], + [], + [], + [ + { + "variant": 4, + "unk1": 1, + "unk2": 255, + "pos_z": 1586.48, + "pos_x": 2237.04, + "pos_y": -1090.0, + "room": 7, + "rot_z": 0, + "rot_y": 96, + "rot_x": 0, + "type": 32, + "quantity": 4 + }, + { + "variant": 4, + "unk1": 1, + "unk2": 255, + "pos_z": 2832.58, + "pos_x": 2469.26, + "pos_y": -1330.0, + "room": 7, + "rot_z": 0, + "rot_y": -108, + "rot_x": 0, + "type": 32, + "quantity": 2 + }, + { + "variant": 4, + "unk1": 1, + "unk2": 255, + "pos_z": -1429.32, + "pos_x": 1103.05, + "pos_y": -2050.0, + "room": 7, + "rot_z": 0, + "rot_y": -108, + "rot_x": 0, + "type": 32, + "quantity": 2 + }, + { + "variant": 4, + "unk1": 1, + "unk2": 255, + "pos_z": 3126.22, + "pos_x": -3054.79, + "pos_y": -3047.85, + "room": 7, + "rot_z": 0, + "rot_y": -62, + "rot_x": 0, + "type": 32, + "quantity": 1 + }, + { + "variant": 4, + "unk1": 1, + "unk2": 255, + "pos_z": -557.22, + "pos_x": 1268.03, + "pos_y": -2470.0, + "room": 7, + "rot_z": 0, + "rot_y": -108, + "rot_x": 0, + "type": 32, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -1993.49, + "pos_x": 1742.13, + "pos_y": -3820.0, + "room": 7, + "rot_z": 0, + "rot_y": -108, + "rot_x": 0, + "type": 32, + "quantity": 3 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -4462.32, + "pos_x": 1732.89, + "pos_y": -3580.0, + "room": 7, + "rot_z": 0, + "rot_y": -278, + "rot_x": 0, + "type": 32, + "quantity": 2 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -523.41, + "pos_x": 80.95, + "pos_y": 35.81, + "room": 8, + "rot_z": 0, + "rot_y": -420, + "rot_x": 0, + "type": 17, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 465.56, + "pos_x": -1342.36, + "pos_y": -18.0, + "room": 8, + "rot_z": 0, + "rot_y": -324, + "rot_x": 0, + "type": 17, + "quantity": 1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -3228.47, + "pos_x": 1059.13, + "pos_y": 5.78, + "room": 9, + "rot_z": 0, + "rot_y": -261, + "rot_x": 0, + "type": 10, + "quantity": 3 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -746.07, + "pos_x": 390.83, + "pos_y": 20.44, + "room": 9, + "rot_z": 0, + "rot_y": -176, + "rot_x": 0, + "type": 11, + "quantity": 4 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 5.01, + "pos_x": -482.31, + "pos_y": 16.39, + "room": 9, + "rot_z": 0, + "rot_y": 250, + "rot_x": 0, + "type": 11, + "quantity": 2 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 931.19, + "pos_x": -1846.87, + "pos_y": -263.0, + "room": 10, + "rot_z": 0, + "rot_y": -5, + "rot_x": 0, + "type": 10, + "quantity": 5 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -355.73, + "pos_x": -3160.63, + "pos_y": -206.32, + "room": 10, + "rot_z": 0, + "rot_y": 307, + "rot_x": 0, + "type": 10, + "quantity": 3 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 1228.73, + "pos_x": -1949.45, + "pos_y": -276.13, + "room": 10, + "rot_z": 0, + "rot_y": 216, + "rot_x": 0, + "type": 10, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": 1504.3, + "pos_x": -1552.64, + "pos_y": -186.42, + "room": 10, + "rot_z": 0, + "rot_y": -28, + "rot_x": 0, + "type": 31, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": 1441.92, + "pos_x": -1352.11, + "pos_y": -174.8, + "room": 10, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 31, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 2295.24, + "pos_x": -653.75, + "pos_y": 306.58, + "room": 10, + "rot_z": 0, + "rot_y": 221, + "rot_x": 0, + "type": 36, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 2086.81, + "pos_x": -615.28, + "pos_y": 96.58, + "room": 10, + "rot_z": 0, + "rot_y": 119, + "rot_x": 0, + "type": 36, + "quantity": 4 + } + ], + [ + { + "variant": 6, + "unk1": 1, + "unk2": 255, + "pos_z": 2253.55, + "pos_x": -453.62, + "pos_y": 705.5, + "room": 11, + "rot_z": 0, + "rot_y": -5, + "rot_x": 0, + "type": 26, + "quantity": 2 + }, + { + "variant": 6, + "unk1": 1, + "unk2": 255, + "pos_z": 3677.44, + "pos_x": 142.14, + "pos_y": 336.98, + "room": 11, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 26, + "quantity": 4 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 5818.19, + "pos_x": 4363.26, + "pos_y": 426.27, + "room": 11, + "rot_z": 0, + "rot_y": 171, + "rot_x": 0, + "type": 30, + "quantity": 1 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 5556.53, + "pos_x": 4782.14, + "pos_y": 426.27, + "room": 11, + "rot_z": 0, + "rot_y": 164, + "rot_x": 0, + "type": 30, + "quantity": 1 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 6208.15, + "pos_x": 4617.08, + "pos_y": 426.27, + "room": 11, + "rot_z": 0, + "rot_y": 284, + "rot_x": 0, + "type": 30, + "quantity": 1 + }, + { + "variant": 1, + "unk1": 1, + "unk2": 255, + "pos_z": 5456.15, + "pos_x": 5099.46, + "pos_y": 426.27, + "room": 11, + "rot_z": 0, + "rot_y": 161, + "rot_x": 0, + "type": 30, + "quantity": 1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 4297.09, + "pos_x": 2767.15, + "pos_y": 611.59, + "room": 11, + "rot_z": 0, + "rot_y": -301, + "rot_x": 0, + "type": 36, + "quantity": 4 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 5908.79, + "pos_x": 2793.18, + "pos_y": 1205.81, + "room": 11, + "rot_z": 0, + "rot_y": -295, + "rot_x": 0, + "type": 36, + "quantity": 2 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": 5369.26, + "pos_x": 3210.49, + "pos_y": 845.81, + "room": 11, + "rot_z": 0, + "rot_y": -398, + "rot_x": 0, + "type": 36, + "quantity": 1 + } + ], + [ + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -2648.11, + "pos_x": 572.89, + "pos_y": -618.12, + "room": 12, + "rot_z": 0, + "rot_y": -142, + "rot_x": 0, + "type": 23, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -3356.64, + "pos_x": -501.62, + "pos_y": -210.0, + "room": 12, + "rot_z": 0, + "rot_y": 45, + "rot_x": 0, + "type": 23, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 1, + "unk2": 255, + "pos_z": -2880.06, + "pos_x": -1624.63, + "pos_y": -888.12, + "room": 12, + "rot_z": 0, + "rot_y": 113, + "rot_x": 0, + "type": 23, + "quantity": -1 + }, + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": -7478.2, + "pos_x": -2352.88, + "pos_y": -523.55, + "room": 12, + "rot_z": 0, + "rot_y": -91, + "rot_x": 0, + "type": 32, + "quantity": -1 + }, + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": -7734.46, + "pos_x": -1957.86, + "pos_y": -1228.41, + "room": 12, + "rot_z": 0, + "rot_y": -91, + "rot_x": 0, + "type": 32, + "quantity": -1 + }, + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": -8174.07, + "pos_x": -2821.8, + "pos_y": -988.41, + "room": 12, + "rot_z": 0, + "rot_y": -91, + "rot_x": 0, + "type": 32, + "quantity": -1 + }, + { + "variant": 2, + "unk1": 1, + "unk2": 255, + "pos_z": -7780.24, + "pos_x": -2435.99, + "pos_y": -988.41, + "room": 12, + "rot_z": 0, + "rot_y": -91, + "rot_x": 0, + "type": 32, + "quantity": -1 + } + ] + ], + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 1, + "quest_rank": 6, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 52, + "wave_2_transition_type": 0, + "location": 1, + "penalty_per_cart": 6000, + "resources": 1, + "details": "Emergency! A huge Deviljho has\nappeared. It's twice as big as\na normal one and it's eating\neverything in sight! Go get\nit! And now, a haiku: A huge\nDeviljho/with no food in its\nstomach/eats the whole island.", + "description": "Hunt a Deviljho", + "wave_1_transition_target": 0, + "hrp_restriction": 11, + "quest_fee": 1800, + "quest_id": 61020, + "name": "World Eater", + "main_monster_2": 11, + "main_monster_1": 10, + "supply_set_number": 31, + "summon": 1677787700, + "client": "Guildmaster", + "flags": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 1, + 1 + ] + ], + "success_message": "Complete the Main Quest." + }, + "large_monsters": { + "monster_2": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_1": { + "size_spread": 0, + "hp_spread": 0, + "level": 64, + "boss_id": 0, + "type": 7, + "starting_area": 0, + "spawn_count": 1, + "size": 200 + } + } +} \ No newline at end of file diff --git a/event/[MH3SP] Dark Side of the Moon.json b/event/[MH3SP] Dark Side of the Moon.json new file mode 100644 index 0000000..b3f82d9 --- /dev/null +++ b/event/[MH3SP] Dark Side of the Moon.json @@ -0,0 +1,202 @@ +{ + "unknown": { + "unk_12": 5, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "objective_details": { + "subquest_2": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + }, + "main_quest": { + "objective_num": 1, + "hrp_reward": 1500, + "rewards_row_1": [ + [ + 463, + 1, + 15 + ], + [ + 459, + 1, + 25 + ], + [ + 460, + 1, + 14 + ], + [ + 464, + 1, + 15 + ], + [ + 461, + 1, + 18 + ], + [ + 466, + 1, + 13 + ] + ], + "rewards_row_2": [ + [ + 448, + 1, + 12 + ], + [ + 459, + 1, + 18 + ], + [ + 460, + 1, + 30 + ], + [ + 155, + 1, + 15 + ], + [ + 447, + 1, + 25 + ] + ], + "objective_type": 20, + "zenny_reward": 30000, + "type": 257 + }, + "subquest_1": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 1, + "zenny_reward": 0, + "type": 8192 + } + }, + "small_monsters": [ + [], + [], + [], + [] + ], + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 15, + "wave_1_transition_quantity": 0, + "starting_position": 0, + "quest_rank": 6, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 16, + "wave_2_transition_type": 0, + "location": 7, + "penalty_per_cart": 10000, + "resources": 0, + "details": "Gambala! The sea drake has\nreturned! Moga is barely clinging\nto the island after its last\nappearance -- we need this taken\ncare of FAST! Get a group of your\npeers from Loc Lac and get your\ntail back here! PRONTO!", + "description": "Slay a Ceadeus", + "wave_1_transition_target": 0, + "hrp_restriction": 11, + "quest_fee": 3100, + "quest_id": 61008, + "name": "[MH3SP] Dark Side of the Moon", + "main_monster_2": 0, + "main_monster_1": 0, + "supply_set_number": 48, + "summon": 0, + "client": "Moga Village Chief", + "flags": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 1 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + ], + "success_message": "Complete the Main Quest." + }, + "large_monsters": { + "monster_2": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 0, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_1": { + "size_spread": 0, + "hp_spread": 0, + "level": 60, + "boss_id": 0, + "type": 20, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + } + } +} \ No newline at end of file diff --git a/event/[MH3SP] Green Eggs and....json b/event/[MH3SP] Green Eggs and....json new file mode 100644 index 0000000..7a42826 --- /dev/null +++ b/event/[MH3SP] Green Eggs and....json @@ -0,0 +1,353 @@ +{ + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0 + }, + "objective_details": { + "subquest_2": { + "objective_num": 0, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 0, + "zenny_reward": 0, + "type": 0 + }, + "main_quest": { + "objective_num": 1, + "hrp_reward": 950, + "rewards_row_1": [ + [ + 291, + 1, + 18 + ], + [ + 292, + 1, + 6 + ], + [ + 294, + 1, + 11 + ], + [ + 293, + 1, + 15 + ], + [ + 414, + 1, + 10 + ], + [ + 418, + 1, + 16 + ], + [ + 415, + 1, + 13 + ], + [ + 416, + 1, + 6 + ], + [ + 419, + 1, + 5 + ] + ], + "rewards_row_2": [ + [ + 291, + 1, + 13 + ], + [ + 292, + 1, + 6 + ], + [ + 294, + 1, + 11 + ], + [ + 293, + 1, + 10 + ], + [ + 414, + 1, + 9 + ], + [ + 418, + 1, + 10 + ], + [ + 415, + 1, + 10 + ], + [ + 416, + 1, + 6 + ], + [ + 419, + 1, + 5 + ], + [ + 565, + 1, + 20 + ] + ], + "objective_type": 4, + "zenny_reward": 7000, + "type": 1 + }, + "subquest_1": { + "objective_num": 1, + "hrp_reward": 0, + "rewards_row_1": [], + "description": "None", + "objective_type": 19, + "zenny_reward": 0, + "type": 1 + } + }, + "small_monsters": [ + [], + [ + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -3042.7, + "pos_x": -0.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 26, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -3042.7, + "pos_x": -0.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 26, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -3042.7, + "pos_x": -0.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 26, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -3042.7, + "pos_x": -0.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 26, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -3042.7, + "pos_x": -0.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 26, + "quantity": -1 + }, + { + "variant": 0, + "unk1": 3, + "unk2": 255, + "pos_z": -3042.7, + "pos_x": -0.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 26, + "quantity": -1 + }, + { + "variant": 1, + "unk1": 3, + "unk2": 255, + "pos_z": -3042.7, + "pos_x": -0.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 35, + "quantity": -1 + }, + { + "variant": 1, + "unk1": 3, + "unk2": 255, + "pos_z": -3042.7, + "pos_x": -0.5, + "pos_y": -5038.5, + "room": 1, + "rot_z": 0, + "rot_y": 170, + "rot_x": 0, + "type": 35, + "quantity": -1 + } + ] + ], + "quest_info": { + "wave_1_transition_type": 0, + "time_limit": 50, + "wave_1_transition_quantity": 0, + "starting_position": 0, + "quest_rank": 3, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0, + "general_enemy_level": 27, + "wave_2_transition_type": 0, + "location": 8, + "penalty_per_cart": 2400, + "resources": 0, + "details": "Why do we live, only to suffer?\nOnly slayers of pig meat know\nthese things. Take care, Hunter,\nfor those who look to antidote\nherbs may find their breath\nstolen away.", + "description": "Hunt a Gigginox\nand an Agnaktor", + "wave_1_transition_target": 0, + "hrp_restriction": 8, + "quest_fee": 200, + "quest_id": 61050, + "name": "[MH3SP] Green Eggs and...", + "main_monster_2": 19, + "main_monster_1": 4, + "supply_set_number": 43, + "summon": 0, + "client": "Ze SpyRo", + "flags": [ + [ + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0 + ] + ], + "success_message": "Complete the Main Quest." + }, + "large_monsters": { + "monster_2": { + "size_spread": 3, + "hp_spread": 0, + "level": 27, + "boss_id": 1, + "type": 19, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + }, + "monster_3": { + "size_spread": 0, + "hp_spread": 0, + "level": 0, + "boss_id": 2, + "type": 0, + "starting_area": 0, + "spawn_count": 0, + "size": 0 + }, + "monster_1": { + "size_spread": 3, + "hp_spread": 0, + "level": 27, + "boss_id": 0, + "type": 4, + "starting_area": 0, + "spawn_count": 1, + "size": 100 + } + } +} \ No newline at end of file diff --git a/event/[MH3SP] Skirting the Rules.json b/event/[MH3SP] Skirting the Rules.json new file mode 100644 index 0000000..091a681 --- /dev/null +++ b/event/[MH3SP] Skirting the Rules.json @@ -0,0 +1,787 @@ +{ + "small_monsters": [ + [], + [ + { + "type": 27, + "unk1": 0, + "unk2": 1, + "variant": 0, + "room": 1, + "quantity": -1, + "pos_x": 1138.86, + "pos_y": -22.25, + "pos_z": 210.14, + "rot_x": 0, + "rot_y": -9216, + "rot_z": 0 + }, + { + "type": 27, + "unk1": 1, + "unk2": 1, + "variant": 2, + "room": 1, + "quantity": -1, + "pos_x": 1292.04, + "pos_y": -32.97, + "pos_z": 831.06, + "rot_x": 0, + "rot_y": -7168, + "rot_z": 0 + }, + { + "type": 29, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 1, + "quantity": 1, + "pos_x": -484.98, + "pos_y": -101.57, + "pos_z": 854.19, + "rot_x": 0, + "rot_y": -43008, + "rot_z": 0 + }, + { + "type": 29, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 1, + "quantity": 1, + "pos_x": -973.62, + "pos_y": -175.59, + "pos_z": 217.88, + "rot_x": 0, + "rot_y": 1024, + "rot_z": 0 + } + ], + [ + { + "type": 30, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 2, + "quantity": 1, + "pos_x": -1195.98, + "pos_y": 7.82, + "pos_z": -605.82, + "rot_x": 0, + "rot_y": -27648, + "rot_z": 0 + }, + { + "type": 30, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 2, + "quantity": 2, + "pos_x": -441.58, + "pos_y": -6.83, + "pos_z": 209.66, + "rot_x": 0, + "rot_y": -64512, + "rot_z": 0 + }, + { + "type": 30, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 2, + "quantity": 3, + "pos_x": -1634.51, + "pos_y": -4.74, + "pos_z": 1046.63, + "rot_x": 0, + "rot_y": -63488, + "rot_z": 0 + } + ], + [ + { + "type": 37, + "unk1": 1, + "unk2": 255, + "variant": 2, + "room": 3, + "quantity": 2, + "pos_x": 177.92, + "pos_y": 450.7, + "pos_z": -32.21, + "rot_x": 0, + "rot_y": -43008, + "rot_z": 0 + }, + { + "type": 37, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 3, + "quantity": 2, + "pos_x": -78.66, + "pos_y": 330.7, + "pos_z": 362.86, + "rot_x": 0, + "rot_y": -14336, + "rot_z": 0 + }, + { + "type": 37, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 3, + "quantity": 1, + "pos_x": 261.82, + "pos_y": 150.7, + "pos_z": 105.95, + "rot_x": 0, + "rot_y": -1024, + "rot_z": 0 + } + ], + [], + [ + { + "type": 10, + "unk1": 3, + "unk2": 5, + "variant": 0, + "room": 5, + "quantity": -1, + "pos_x": 300.4, + "pos_y": 4.0, + "pos_z": -211.14, + "rot_x": 0, + "rot_y": 0, + "rot_z": 0 + }, + { + "type": 10, + "unk1": 3, + "unk2": 5, + "variant": 0, + "room": 5, + "quantity": -1, + "pos_x": 458.16, + "pos_y": 1.49, + "pos_z": -918.94, + "rot_x": 0, + "rot_y": 9216, + "rot_z": 0 + }, + { + "type": 11, + "unk1": 1, + "unk2": 5, + "variant": 0, + "room": 5, + "quantity": 5, + "pos_x": -943.71, + "pos_y": 4.0, + "pos_z": -5.71, + "rot_x": 0, + "rot_y": 59392, + "rot_z": 0 + }, + { + "type": 11, + "unk1": 1, + "unk2": 5, + "variant": 0, + "room": 5, + "quantity": 2, + "pos_x": -504.37, + "pos_y": 2.52, + "pos_z": -757.3, + "rot_x": 0, + "rot_y": 121856, + "rot_z": 0 + }, + { + "type": 11, + "unk1": 1, + "unk2": 5, + "variant": 0, + "room": 5, + "quantity": 2, + "pos_x": 1118.48, + "pos_y": 4.0, + "pos_z": -420.89, + "rot_x": 0, + "rot_y": 65536, + "rot_z": 0 + }, + { + "type": 11, + "unk1": 1, + "unk2": 5, + "variant": 0, + "room": 5, + "quantity": 1, + "pos_x": 2658.84, + "pos_y": 2.53, + "pos_z": 222.99, + "rot_x": 0, + "rot_y": 136192, + "rot_z": 0 + }, + { + "type": 11, + "unk1": 1, + "unk2": 5, + "variant": 0, + "room": 5, + "quantity": 3, + "pos_x": 1287.42, + "pos_y": 2.0, + "pos_z": 1134.52, + "rot_x": 0, + "rot_y": 39936, + "rot_z": 0 + } + ], + [ + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 6, + "quantity": 4, + "pos_x": -161.74, + "pos_y": 4.8, + "pos_z": -416.52, + "rot_x": 0, + "rot_y": 84992, + "rot_z": 0 + }, + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 6, + "quantity": 2, + "pos_x": -481.05, + "pos_y": 15.34, + "pos_z": -643.19, + "rot_x": 0, + "rot_y": 102400, + "rot_z": 0 + }, + { + "type": 33, + "unk1": 3, + "unk2": 255, + "variant": 0, + "room": 6, + "quantity": -1, + "pos_x": -692.26, + "pos_y": -11.02, + "pos_z": -235.13, + "rot_x": 0, + "rot_y": 109568, + "rot_z": 0 + }, + { + "type": 33, + "unk1": 1, + "unk2": 255, + "variant": 1, + "room": 6, + "quantity": 2, + "pos_x": -96.09, + "pos_y": -10.02, + "pos_z": -67.59, + "rot_x": 0, + "rot_y": 12288, + "rot_z": 0 + } + ], + [], + [ + { + "type": 22, + "unk1": 1, + "unk2": 7, + "variant": 0, + "room": 8, + "quantity": 6, + "pos_x": 293.99, + "pos_y": -170.31, + "pos_z": 4049.95, + "rot_x": 0, + "rot_y": 147456, + "rot_z": 0 + }, + { + "type": 22, + "unk1": 1, + "unk2": 7, + "variant": 0, + "room": 8, + "quantity": 4, + "pos_x": 124.95, + "pos_y": -186.54, + "pos_z": 3440.16, + "rot_x": 0, + "rot_y": 147456, + "rot_z": 0 + }, + { + "type": 22, + "unk1": 1, + "unk2": 7, + "variant": 0, + "room": 8, + "quantity": 3, + "pos_x": -714.48, + "pos_y": -183.78, + "pos_z": 4108.5, + "rot_x": 0, + "rot_y": 147456, + "rot_z": 0 + }, + { + "type": 22, + "unk1": 1, + "unk2": 7, + "variant": 0, + "room": 8, + "quantity": 2, + "pos_x": -1021.27, + "pos_y": -215.48, + "pos_z": 3726.09, + "rot_x": 0, + "rot_y": 147456, + "rot_z": 0 + } + ], + [ + { + "type": 29, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 9, + "quantity": 2, + "pos_x": 3048.78, + "pos_y": 10.22, + "pos_z": 876.07, + "rot_x": 0, + "rot_y": -18432, + "rot_z": 0 + }, + { + "type": 37, + "unk1": 1, + "unk2": 255, + "variant": 2, + "room": 9, + "quantity": -1, + "pos_x": -1791.99, + "pos_y": 1623.87, + "pos_z": 1867.26, + "rot_x": 0, + "rot_y": 13312, + "rot_z": 0 + }, + { + "type": 37, + "unk1": 1, + "unk2": 255, + "variant": 2, + "room": 9, + "quantity": -1, + "pos_x": -1947.91, + "pos_y": 1683.87, + "pos_z": 1824.15, + "rot_x": 0, + "rot_y": 30720, + "rot_z": 0 + } + ], + [ + { + "type": 10, + "unk1": 1, + "unk2": 10, + "variant": 0, + "room": 10, + "quantity": 5, + "pos_x": -1198.33, + "pos_y": -93.69, + "pos_z": -612.44, + "rot_x": 0, + "rot_y": 26624, + "rot_z": 0 + }, + { + "type": 10, + "unk1": 1, + "unk2": 10, + "variant": 0, + "room": 10, + "quantity": 3, + "pos_x": -167.54, + "pos_y": -127.09, + "pos_z": -28.67, + "rot_x": 0, + "rot_y": 51200, + "rot_z": 0 + }, + { + "type": 10, + "unk1": 1, + "unk2": 10, + "variant": 0, + "room": 10, + "quantity": 2, + "pos_x": -649.88, + "pos_y": -7.3, + "pos_z": 1520.39, + "rot_x": 0, + "rot_y": 11264, + "rot_z": 0 + }, + { + "type": 10, + "unk1": 1, + "unk2": 10, + "variant": 0, + "room": 10, + "quantity": 1, + "pos_x": 53.17, + "pos_y": -48.62, + "pos_z": 1195.9, + "rot_x": 0, + "rot_y": 54272, + "rot_z": 0 + } + ], + [ + { + "type": 26, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 11, + "quantity": 2, + "pos_x": 2195.89, + "pos_y": 73.7, + "pos_z": -720.92, + "rot_x": 0, + "rot_y": 7168, + "rot_z": 0 + }, + { + "type": 26, + "unk1": 1, + "unk2": 255, + "variant": 6, + "room": 11, + "quantity": 1, + "pos_x": -535.73, + "pos_y": 1212.59, + "pos_z": 896.44, + "rot_x": 0, + "rot_y": 30547, + "rot_z": 0 + }, + { + "type": 37, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 11, + "quantity": 2, + "pos_x": -434.0, + "pos_y": 198.96, + "pos_z": 289.52, + "rot_x": 0, + "rot_y": -48128, + "rot_z": 0 + }, + { + "type": 37, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 11, + "quantity": 2, + "pos_x": -802.69, + "pos_y": 198.96, + "pos_z": 66.62, + "rot_x": 0, + "rot_y": -38912, + "rot_z": 0 + }, + { + "type": 37, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 11, + "quantity": 2, + "pos_x": -645.14, + "pos_y": 288.96, + "pos_z": -371.21, + "rot_x": 0, + "rot_y": -40960, + "rot_z": 0 + }, + { + "type": 37, + "unk1": 1, + "unk2": 255, + "variant": 0, + "room": 11, + "quantity": 1, + "pos_x": -473.33, + "pos_y": 168.96, + "pos_z": -166.43, + "rot_x": 0, + "rot_y": -37888, + "rot_z": 0 + } + ] + ], + "quest_info": { + "quest_id": 61018, + "name": "[MH3SP] Skirting the Rules", + "client": "Low-Rank Hunter", + "description": "Hunt 3 Deviljho", + "details": "There I was, reaching the end\nof my limit on an ordinary hunt\nin the Sandy Plains. The Guild\nfelynes picked me up in their\ncart... only to tell me that the\nhunting ground is closed! Slip in\nthere and find out why, will you?", + "success_message": "Complete the Main Quest.", + "failure_message": "Reward hits 0, or time\nexpires.", + "flags": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 0, + 1, + 0, + 0, + 0, + 1, + 0 + ] + ], + "penalty_per_cart": 8500, + "quest_fee": 2500, + "time_limit": 50, + "main_monster_1": 37, + "main_monster_2": 11, + "location": 2, + "quest_rank": 6, + "hrp_restriction": 11, + "resources": 1, + "supply_set_number": 44, + "starting_position": 1, + "general_enemy_level": 52, + "summon": 0, + "wave_1_transition_type": 0, + "wave_1_transition_target": 0, + "wave_1_transition_quantity": 0, + "wave_2_transition_type": 0, + "wave_2_transition_target": 0, + "wave_2_transition_quantity": 0 + }, + "large_monsters": { + "monster_1": { + "type": 7, + "starting_area": 0, + "boss_id": 0, + "spawn_count": 1, + "level": 50, + "size": 100, + "hp_spread": 1, + "size_spread": 13 + }, + "monster_2": { + "type": 7, + "starting_area": 1, + "boss_id": 0, + "spawn_count": 1, + "level": 50, + "size": 100, + "hp_spread": 1, + "size_spread": 13 + }, + "monster_3": { + "type": 7, + "starting_area": 2, + "boss_id": 0, + "spawn_count": 1, + "level": 50, + "size": 100, + "hp_spread": 1, + "size_spread": 13 + } + }, + "objective_details": { + "main_quest": { + "type": 1, + "objective_type": 7, + "objective_num": 3, + "zenny_reward": 25000, + "hrp_reward": 2500, + "rewards_row_1": [ + [ + 485, + 1, + 16 + ], + [ + 484, + 1, + 28 + ], + [ + 483, + 1, + 20 + ], + [ + 486, + 1, + 10 + ], + [ + 487, + 1, + 8 + ], + [ + 446, + 1, + 8 + ], + [ + 442, + 1, + 10 + ] + ], + "rewards_row_2": [ + [ + 393, + 2, + 27 + ], + [ + 111, + 1, + 5 + ], + [ + 441, + 1, + 8 + ], + [ + 140, + 1, + 18 + ], + [ + 119, + 1, + 20 + ], + [ + 448, + 1, + 12 + ], + [ + 444, + 1, + 10 + ] + ] + }, + "subquest_1": { + "description": "None", + "type": 0, + "objective_type": 0, + "objective_num": 0, + "zenny_reward": 0, + "hrp_reward": 0, + "rewards_row_1": [] + }, + "subquest_2": { + "description": "None", + "type": 0, + "objective_type": 0, + "objective_num": 0, + "zenny_reward": 0, + "hrp_reward": 0, + "rewards_row_1": [] + } + }, + "unknown": { + "unk_12": 2, + "unk_4": 0, + "unk_5": 0, + "unk_6": 0, + "unk_7": 0, + "unkInt0": 0, + "unkShort0": 0, + "unkByte0": 0, + "unkBytes0_0": 0, + "unkBytes0_1": 0, + "unkBytes0_2": 0, + "unkBytes1_0": 0, + "unkBytes1_1": 0, + "unkBytes1_2": 0, + "unkBytes2_0": 0, + "unkBytes2_1": 0, + "unkUintAlways15": 15, + "unkShort1": 0, + "unkShort2": 1, + "unkByte1": 0, + "unkByte2": 0, + "unkByte3": 0, + "unkByte4": 0, + "unkByte7": 0, + "unkByte8": 0 + } +} \ No newline at end of file diff --git a/event/quest_rotation.json b/event/quest_rotation.json new file mode 100644 index 0000000..2285608 --- /dev/null +++ b/event/quest_rotation.json @@ -0,0 +1,13 @@ +[ + [ + "event/The Phantom Uragaan.json", + "event/Mercy Mission.json", + "event/Speak of the Deviljho.json", + "event/The Motley Mission.json", + "event/Grudge Match Qurupeco.json", + "event/Grudge Match Lagiacrus.json", + "event/Grudge Match Uragaan.json", + "event/Grudge Match Wyvern Trio.json", + "event/Grudge Match Royal Ludroth.json" + ] +] \ No newline at end of file diff --git a/event/trading_post.json b/event/trading_post.json new file mode 100644 index 0000000..4f1078d --- /dev/null +++ b/event/trading_post.json @@ -0,0 +1,6998 @@ +[ + [ + [ + [ + 210, + 8 + ], + [ + 101, + 2 + ], + [ + 610, + 2 + ] + ], + [ + [ + 392, + 3 + ], + [ + 196, + 4 + ], + [ + 607, + 1 + ] + ], + [ + [ + 342, + 10 + ], + [ + 196, + 2 + ], + [ + 608, + 2 + ] + ], + [ + [ + 197, + 5 + ], + [ + 341, + 1 + ], + [ + 609, + 1 + ] + ], + [ + [ + 562, + 5 + ], + [ + 321, + 2 + ], + [ + 609, + 2 + ] + ], + [ + [ + 344, + 5 + ], + [ + 562, + 1 + ], + [ + 607, + 1 + ] + ], + [ + [ + 97, + 10 + ], + [ + 154, + 1 + ], + [ + 606, + 1 + ] + ], + [ + [ + 198, + 5 + ], + [ + 341, + 1 + ], + [ + 608, + 1 + ] + ], + [ + [ + 352, + 10 + ], + [ + 560, + 3 + ], + [ + 609, + 2 + ] + ], + [ + [ + 393, + 3 + ], + [ + 270, + 4 + ], + [ + 609, + 1 + ] + ], + [ + [ + 274, + 1 + ], + [ + 610, + 3 + ], + [ + 615, + 2 + ] + ], + [ + [ + 359, + 8 + ], + [ + 541, + 1 + ], + [ + 610, + 1 + ] + ], + [ + [ + 605, + 1 + ], + [ + 611, + 15 + ], + [ + 615, + 8 + ] + ], + [ + [ + 404, + 1 + ], + [ + 586, + 3 + ], + [ + 615, + 2 + ] + ], + [ + [ + 443, + 3 + ], + [ + 589, + 1 + ], + [ + 615, + 1 + ] + ] + ], + [ + [ + [ + 116, + 10 + ], + [ + 305, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 207, + 10 + ], + [ + 564, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 388, + 5 + ], + [ + 322, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 142, + 10 + ], + [ + 304, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 123, + 10 + ], + [ + 564, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 141, + 5 + ], + [ + 562, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 147, + 10 + ], + [ + 305, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 350, + 10 + ], + [ + 562, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 134, + 3 + ], + [ + 322, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 127, + 10 + ], + [ + 337, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 215, + 2 + ], + [ + 101, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 274, + 1 + ], + [ + 610, + 3 + ], + [ + 615, + 2 + ] + ], + [ + [ + 26, + 5 + ], + [ + 99, + 5 + ], + [ + 0, + 0 + ] + ], + [ + [ + 299, + 1 + ], + [ + 608, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 359, + 8 + ], + [ + 541, + 1 + ], + [ + 610, + 1 + ] + ] + ], + [ + [ + [ + 562, + 5 + ], + [ + 321, + 2 + ], + [ + 609, + 2 + ] + ], + [ + [ + 352, + 10 + ], + [ + 560, + 3 + ], + [ + 609, + 2 + ] + ], + [ + [ + 123, + 10 + ], + [ + 564, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 154, + 5 + ], + [ + 276, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 391, + 3 + ], + [ + 270, + 4 + ], + [ + 0, + 0 + ] + ], + [ + [ + 342, + 10 + ], + [ + 196, + 2 + ], + [ + 608, + 2 + ] + ], + [ + [ + 212, + 10 + ], + [ + 100, + 5 + ], + [ + 0, + 0 + ] + ], + [ + [ + 142, + 10 + ], + [ + 304, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 350, + 10 + ], + [ + 562, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 211, + 8 + ], + [ + 99, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 26, + 5 + ], + [ + 99, + 5 + ], + [ + 0, + 0 + ] + ], + [ + [ + 213, + 3 + ], + [ + 99, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 343, + 2 + ], + [ + 541, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 310, + 1 + ], + [ + 611, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 333, + 5 + ], + [ + 291, + 2 + ], + [ + 0, + 0 + ] + ] + ], + [ + [ + [ + 128, + 10 + ], + [ + 340, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 209, + 10 + ], + [ + 99, + 4 + ], + [ + 0, + 0 + ] + ], + [ + [ + 123, + 10 + ], + [ + 564, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 354, + 5 + ], + [ + 545, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 342, + 10 + ], + [ + 196, + 2 + ], + [ + 608, + 2 + ] + ], + [ + [ + 146, + 5 + ], + [ + 562, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 154, + 5 + ], + [ + 276, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 391, + 3 + ], + [ + 270, + 4 + ], + [ + 0, + 0 + ] + ], + [ + [ + 142, + 10 + ], + [ + 304, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 197, + 5 + ], + [ + 341, + 1 + ], + [ + 609, + 1 + ] + ], + [ + [ + 274, + 1 + ], + [ + 610, + 3 + ], + [ + 615, + 2 + ] + ], + [ + [ + 359, + 8 + ], + [ + 541, + 1 + ], + [ + 610, + 1 + ] + ], + [ + [ + 605, + 1 + ], + [ + 611, + 15 + ], + [ + 615, + 8 + ] + ], + [ + [ + 404, + 1 + ], + [ + 586, + 3 + ], + [ + 615, + 2 + ] + ], + [ + [ + 443, + 3 + ], + [ + 589, + 1 + ], + [ + 615, + 1 + ] + ] + ], + [ + [ + [ + 197, + 5 + ], + [ + 341, + 1 + ], + [ + 609, + 1 + ] + ], + [ + [ + 209, + 10 + ], + [ + 99, + 4 + ], + [ + 0, + 0 + ] + ], + [ + [ + 388, + 5 + ], + [ + 322, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 125, + 10 + ], + [ + 563, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 212, + 10 + ], + [ + 100, + 5 + ], + [ + 0, + 0 + ] + ], + [ + [ + 117, + 5 + ], + [ + 545, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 154, + 5 + ], + [ + 276, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 393, + 3 + ], + [ + 270, + 4 + ], + [ + 609, + 1 + ] + ], + [ + [ + 125, + 10 + ], + [ + 563, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 126, + 10 + ], + [ + 154, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 215, + 2 + ], + [ + 101, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 287, + 1 + ], + [ + 607, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 333, + 5 + ], + [ + 291, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 605, + 1 + ], + [ + 611, + 15 + ], + [ + 615, + 8 + ] + ], + [ + [ + 404, + 1 + ], + [ + 586, + 3 + ], + [ + 615, + 2 + ] + ] + ], + [ + [ + [ + 117, + 5 + ], + [ + 545, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 123, + 10 + ], + [ + 564, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 209, + 10 + ], + [ + 99, + 4 + ], + [ + 0, + 0 + ] + ], + [ + [ + 146, + 5 + ], + [ + 562, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 197, + 5 + ], + [ + 341, + 1 + ], + [ + 609, + 1 + ] + ], + [ + [ + 145, + 5 + ], + [ + 322, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 207, + 10 + ], + [ + 564, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 154, + 5 + ], + [ + 276, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 97, + 10 + ], + [ + 154, + 1 + ], + [ + 606, + 1 + ] + ], + [ + [ + 198, + 5 + ], + [ + 341, + 1 + ], + [ + 608, + 1 + ] + ], + [ + [ + 287, + 1 + ], + [ + 607, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 309, + 3 + ], + [ + 317, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 324, + 1 + ], + [ + 585, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 368, + 4 + ], + [ + 118, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 296, + 1 + ], + [ + 588, + 3 + ], + [ + 0, + 0 + ] + ] + ], + [ + [ + [ + 352, + 10 + ], + [ + 560, + 3 + ], + [ + 609, + 2 + ] + ], + [ + [ + 207, + 10 + ], + [ + 564, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 209, + 10 + ], + [ + 99, + 4 + ], + [ + 0, + 0 + ] + ], + [ + [ + 210, + 8 + ], + [ + 101, + 2 + ], + [ + 610, + 2 + ] + ], + [ + [ + 146, + 5 + ], + [ + 562, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 562, + 5 + ], + [ + 321, + 2 + ], + [ + 609, + 2 + ] + ], + [ + [ + 354, + 5 + ], + [ + 545, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 133, + 10 + ], + [ + 337, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 211, + 8 + ], + [ + 99, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 126, + 10 + ], + [ + 154, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 215, + 2 + ], + [ + 101, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 274, + 1 + ], + [ + 610, + 3 + ], + [ + 615, + 2 + ] + ], + [ + [ + 26, + 5 + ], + [ + 99, + 5 + ], + [ + 0, + 0 + ] + ], + [ + [ + 299, + 1 + ], + [ + 608, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 359, + 8 + ], + [ + 541, + 1 + ], + [ + 610, + 1 + ] + ] + ], + [ + [ + [ + 207, + 10 + ], + [ + 564, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 134, + 3 + ], + [ + 322, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 116, + 10 + ], + [ + 305, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 562, + 5 + ], + [ + 321, + 2 + ], + [ + 609, + 2 + ] + ], + [ + [ + 198, + 5 + ], + [ + 341, + 1 + ], + [ + 608, + 1 + ] + ], + [ + [ + 154, + 5 + ], + [ + 276, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 133, + 10 + ], + [ + 337, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 393, + 3 + ], + [ + 270, + 4 + ], + [ + 609, + 1 + ] + ], + [ + [ + 141, + 5 + ], + [ + 562, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 97, + 10 + ], + [ + 154, + 1 + ], + [ + 606, + 1 + ] + ], + [ + [ + 357, + 8 + ], + [ + 287, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 605, + 1 + ], + [ + 611, + 15 + ], + [ + 615, + 8 + ] + ], + [ + [ + 287, + 1 + ], + [ + 607, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 274, + 1 + ], + [ + 610, + 3 + ], + [ + 615, + 2 + ] + ], + [ + [ + 281, + 1 + ], + [ + 584, + 3 + ], + [ + 0, + 0 + ] + ] + ], + [ + [ + [ + 154, + 5 + ], + [ + 276, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 147, + 10 + ], + [ + 305, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 388, + 5 + ], + [ + 322, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 197, + 5 + ], + [ + 341, + 1 + ], + [ + 609, + 1 + ] + ], + [ + [ + 117, + 5 + ], + [ + 545, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 354, + 5 + ], + [ + 545, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 123, + 10 + ], + [ + 564, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 394, + 3 + ], + [ + 196, + 4 + ], + [ + 0, + 0 + ] + ], + [ + [ + 145, + 5 + ], + [ + 322, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 344, + 5 + ], + [ + 562, + 1 + ], + [ + 607, + 1 + ] + ], + [ + [ + 359, + 8 + ], + [ + 541, + 1 + ], + [ + 610, + 1 + ] + ], + [ + [ + 281, + 1 + ], + [ + 584, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 404, + 1 + ], + [ + 586, + 3 + ], + [ + 615, + 2 + ] + ], + [ + [ + 26, + 5 + ], + [ + 99, + 5 + ], + [ + 0, + 0 + ] + ], + [ + [ + 605, + 1 + ], + [ + 611, + 15 + ], + [ + 615, + 8 + ] + ] + ], + [ + [ + [ + 135, + 3 + ], + [ + 322, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 394, + 3 + ], + [ + 196, + 4 + ], + [ + 0, + 0 + ] + ], + [ + [ + 344, + 5 + ], + [ + 562, + 1 + ], + [ + 607, + 1 + ] + ], + [ + [ + 354, + 5 + ], + [ + 545, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 154, + 5 + ], + [ + 276, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 123, + 10 + ], + [ + 564, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 141, + 5 + ], + [ + 562, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 208, + 10 + ], + [ + 564, + 5 + ], + [ + 0, + 0 + ] + ], + [ + [ + 116, + 10 + ], + [ + 305, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 142, + 10 + ], + [ + 304, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 274, + 1 + ], + [ + 610, + 3 + ], + [ + 615, + 2 + ] + ], + [ + [ + 359, + 8 + ], + [ + 541, + 1 + ], + [ + 610, + 1 + ] + ], + [ + [ + 605, + 1 + ], + [ + 611, + 15 + ], + [ + 615, + 8 + ] + ], + [ + [ + 404, + 1 + ], + [ + 586, + 3 + ], + [ + 615, + 2 + ] + ], + [ + [ + 443, + 3 + ], + [ + 589, + 1 + ], + [ + 615, + 1 + ] + ] + ], + [ + [ + [ + 142, + 10 + ], + [ + 304, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 134, + 3 + ], + [ + 322, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 197, + 5 + ], + [ + 341, + 1 + ], + [ + 609, + 1 + ] + ], + [ + [ + 198, + 5 + ], + [ + 341, + 1 + ], + [ + 608, + 1 + ] + ], + [ + [ + 393, + 3 + ], + [ + 270, + 4 + ], + [ + 609, + 1 + ] + ], + [ + [ + 212, + 10 + ], + [ + 100, + 5 + ], + [ + 0, + 0 + ] + ], + [ + [ + 117, + 5 + ], + [ + 545, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 126, + 10 + ], + [ + 154, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 207, + 10 + ], + [ + 564, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 208, + 10 + ], + [ + 564, + 5 + ], + [ + 0, + 0 + ] + ], + [ + [ + 605, + 1 + ], + [ + 611, + 15 + ], + [ + 615, + 8 + ] + ], + [ + [ + 368, + 4 + ], + [ + 118, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 281, + 1 + ], + [ + 584, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 357, + 8 + ], + [ + 287, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 287, + 1 + ], + [ + 607, + 3 + ], + [ + 0, + 0 + ] + ] + ], + [ + [ + [ + 107, + 5 + ], + [ + 562, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 146, + 5 + ], + [ + 562, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 141, + 5 + ], + [ + 562, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 350, + 10 + ], + [ + 562, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 127, + 10 + ], + [ + 337, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 115, + 5 + ], + [ + 338, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 123, + 10 + ], + [ + 564, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 142, + 10 + ], + [ + 304, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 126, + 10 + ], + [ + 154, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 116, + 10 + ], + [ + 305, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 357, + 8 + ], + [ + 287, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 605, + 1 + ], + [ + 611, + 15 + ], + [ + 615, + 8 + ] + ], + [ + [ + 287, + 1 + ], + [ + 607, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 274, + 1 + ], + [ + 610, + 3 + ], + [ + 615, + 2 + ] + ], + [ + [ + 281, + 1 + ], + [ + 584, + 3 + ], + [ + 0, + 0 + ] + ] + ], + [ + [ + [ + 115, + 5 + ], + [ + 338, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 210, + 8 + ], + [ + 101, + 2 + ], + [ + 610, + 2 + ] + ], + [ + [ + 97, + 10 + ], + [ + 154, + 1 + ], + [ + 606, + 1 + ] + ], + [ + [ + 116, + 10 + ], + [ + 305, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 211, + 8 + ], + [ + 99, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 128, + 10 + ], + [ + 340, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 393, + 3 + ], + [ + 270, + 4 + ], + [ + 609, + 1 + ] + ], + [ + [ + 147, + 10 + ], + [ + 305, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 153, + 5 + ], + [ + 338, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 197, + 5 + ], + [ + 341, + 1 + ], + [ + 609, + 1 + ] + ], + [ + [ + 357, + 8 + ], + [ + 287, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 605, + 1 + ], + [ + 611, + 15 + ], + [ + 615, + 8 + ] + ], + [ + [ + 287, + 1 + ], + [ + 607, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 274, + 1 + ], + [ + 610, + 3 + ], + [ + 615, + 2 + ] + ], + [ + [ + 281, + 1 + ], + [ + 584, + 3 + ], + [ + 0, + 0 + ] + ] + ], + [ + [ + [ + 146, + 5 + ], + [ + 562, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 342, + 10 + ], + [ + 196, + 2 + ], + [ + 608, + 2 + ] + ], + [ + [ + 344, + 5 + ], + [ + 562, + 1 + ], + [ + 607, + 1 + ] + ], + [ + [ + 354, + 5 + ], + [ + 545, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 135, + 3 + ], + [ + 322, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 153, + 5 + ], + [ + 338, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 134, + 3 + ], + [ + 322, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 197, + 5 + ], + [ + 341, + 1 + ], + [ + 609, + 1 + ] + ], + [ + [ + 127, + 10 + ], + [ + 337, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 123, + 10 + ], + [ + 564, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 215, + 2 + ], + [ + 101, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 287, + 1 + ], + [ + 607, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 333, + 5 + ], + [ + 291, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 605, + 1 + ], + [ + 611, + 15 + ], + [ + 615, + 8 + ] + ], + [ + [ + 404, + 1 + ], + [ + 586, + 3 + ], + [ + 615, + 2 + ] + ] + ], + [ + [ + [ + 146, + 5 + ], + [ + 562, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 342, + 10 + ], + [ + 196, + 2 + ], + [ + 608, + 2 + ] + ], + [ + [ + 344, + 5 + ], + [ + 562, + 1 + ], + [ + 607, + 1 + ] + ], + [ + [ + 354, + 5 + ], + [ + 545, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 135, + 3 + ], + [ + 322, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 153, + 5 + ], + [ + 338, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 134, + 3 + ], + [ + 322, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 197, + 5 + ], + [ + 341, + 1 + ], + [ + 609, + 1 + ] + ], + [ + [ + 127, + 10 + ], + [ + 337, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 123, + 10 + ], + [ + 564, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 215, + 2 + ], + [ + 101, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 287, + 1 + ], + [ + 607, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 333, + 5 + ], + [ + 291, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 605, + 1 + ], + [ + 611, + 15 + ], + [ + 615, + 8 + ] + ], + [ + [ + 404, + 1 + ], + [ + 586, + 3 + ], + [ + 615, + 2 + ] + ] + ], + [ + [ + [ + 146, + 5 + ], + [ + 562, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 342, + 10 + ], + [ + 196, + 2 + ], + [ + 608, + 2 + ] + ], + [ + [ + 352, + 10 + ], + [ + 560, + 3 + ], + [ + 609, + 2 + ] + ], + [ + [ + 198, + 5 + ], + [ + 341, + 1 + ], + [ + 608, + 1 + ] + ], + [ + [ + 197, + 5 + ], + [ + 341, + 1 + ], + [ + 609, + 1 + ] + ], + [ + [ + 141, + 5 + ], + [ + 562, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 128, + 10 + ], + [ + 340, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 115, + 5 + ], + [ + 338, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 350, + 10 + ], + [ + 562, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 125, + 10 + ], + [ + 563, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 368, + 4 + ], + [ + 118, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 605, + 1 + ], + [ + 611, + 15 + ], + [ + 615, + 8 + ] + ], + [ + [ + 281, + 1 + ], + [ + 584, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 26, + 5 + ], + [ + 99, + 5 + ], + [ + 0, + 0 + ] + ], + [ + [ + 324, + 1 + ], + [ + 585, + 3 + ], + [ + 0, + 0 + ] + ] + ], + [ + [ + [ + 198, + 5 + ], + [ + 341, + 1 + ], + [ + 608, + 1 + ] + ], + [ + [ + 117, + 5 + ], + [ + 545, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 342, + 10 + ], + [ + 196, + 2 + ], + [ + 608, + 2 + ] + ], + [ + [ + 126, + 10 + ], + [ + 154, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 210, + 8 + ], + [ + 101, + 2 + ], + [ + 610, + 2 + ] + ], + [ + [ + 133, + 10 + ], + [ + 337, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 123, + 10 + ], + [ + 564, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 128, + 10 + ], + [ + 340, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 142, + 10 + ], + [ + 304, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 393, + 3 + ], + [ + 270, + 4 + ], + [ + 609, + 1 + ] + ], + [ + [ + 299, + 1 + ], + [ + 608, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 359, + 8 + ], + [ + 541, + 1 + ], + [ + 610, + 1 + ] + ], + [ + [ + 368, + 4 + ], + [ + 118, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 309, + 3 + ], + [ + 317, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 357, + 8 + ], + [ + 287, + 1 + ], + [ + 0, + 0 + ] + ] + ], + [ + [ + [ + 393, + 3 + ], + [ + 270, + 4 + ], + [ + 609, + 1 + ] + ], + [ + [ + 116, + 10 + ], + [ + 305, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 350, + 10 + ], + [ + 562, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 388, + 5 + ], + [ + 322, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 117, + 5 + ], + [ + 545, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 145, + 5 + ], + [ + 322, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 210, + 8 + ], + [ + 101, + 2 + ], + [ + 610, + 2 + ] + ], + [ + [ + 97, + 10 + ], + [ + 154, + 1 + ], + [ + 606, + 1 + ] + ], + [ + [ + 352, + 10 + ], + [ + 560, + 3 + ], + [ + 609, + 2 + ] + ], + [ + [ + 197, + 5 + ], + [ + 341, + 1 + ], + [ + 609, + 1 + ] + ], + [ + [ + 404, + 1 + ], + [ + 586, + 3 + ], + [ + 615, + 2 + ] + ], + [ + [ + 324, + 1 + ], + [ + 585, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 308, + 1 + ], + [ + 606, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 299, + 1 + ], + [ + 608, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 605, + 1 + ], + [ + 611, + 15 + ], + [ + 615, + 8 + ] + ] + ], + [ + [ + [ + 142, + 10 + ], + [ + 304, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 354, + 5 + ], + [ + 545, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 128, + 10 + ], + [ + 340, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 393, + 3 + ], + [ + 270, + 4 + ], + [ + 609, + 1 + ] + ], + [ + [ + 342, + 10 + ], + [ + 196, + 2 + ], + [ + 608, + 2 + ] + ], + [ + [ + 210, + 8 + ], + [ + 101, + 2 + ], + [ + 610, + 2 + ] + ], + [ + [ + 212, + 10 + ], + [ + 100, + 5 + ], + [ + 0, + 0 + ] + ], + [ + [ + 209, + 10 + ], + [ + 99, + 4 + ], + [ + 0, + 0 + ] + ], + [ + [ + 117, + 5 + ], + [ + 545, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 198, + 5 + ], + [ + 341, + 1 + ], + [ + 608, + 1 + ] + ], + [ + [ + 605, + 1 + ], + [ + 611, + 15 + ], + [ + 615, + 8 + ] + ], + [ + [ + 310, + 1 + ], + [ + 611, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 287, + 1 + ], + [ + 607, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 26, + 5 + ], + [ + 99, + 5 + ], + [ + 0, + 0 + ] + ], + [ + [ + 215, + 2 + ], + [ + 101, + 2 + ], + [ + 0, + 0 + ] + ] + ], + [ + [ + [ + 197, + 5 + ], + [ + 341, + 1 + ], + [ + 609, + 1 + ] + ], + [ + [ + 212, + 10 + ], + [ + 100, + 5 + ], + [ + 0, + 0 + ] + ], + [ + [ + 107, + 5 + ], + [ + 562, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 123, + 10 + ], + [ + 564, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 208, + 10 + ], + [ + 564, + 5 + ], + [ + 0, + 0 + ] + ], + [ + [ + 209, + 10 + ], + [ + 99, + 4 + ], + [ + 0, + 0 + ] + ], + [ + [ + 117, + 5 + ], + [ + 545, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 354, + 5 + ], + [ + 545, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 133, + 10 + ], + [ + 337, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 393, + 3 + ], + [ + 270, + 4 + ], + [ + 609, + 1 + ] + ], + [ + [ + 299, + 1 + ], + [ + 608, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 359, + 8 + ], + [ + 541, + 1 + ], + [ + 610, + 1 + ] + ], + [ + [ + 368, + 4 + ], + [ + 118, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 309, + 3 + ], + [ + 317, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 357, + 8 + ], + [ + 287, + 1 + ], + [ + 0, + 0 + ] + ] + ], + [ + [ + [ + 135, + 3 + ], + [ + 322, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 142, + 10 + ], + [ + 304, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 117, + 5 + ], + [ + 545, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 97, + 10 + ], + [ + 154, + 1 + ], + [ + 606, + 1 + ] + ], + [ + [ + 145, + 5 + ], + [ + 322, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 197, + 5 + ], + [ + 341, + 1 + ], + [ + 609, + 1 + ] + ], + [ + [ + 147, + 10 + ], + [ + 305, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 132, + 10 + ], + [ + 289, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 212, + 10 + ], + [ + 100, + 5 + ], + [ + 0, + 0 + ] + ], + [ + [ + 391, + 3 + ], + [ + 270, + 4 + ], + [ + 0, + 0 + ] + ], + [ + [ + 404, + 1 + ], + [ + 586, + 3 + ], + [ + 615, + 2 + ] + ], + [ + [ + 324, + 1 + ], + [ + 585, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 308, + 1 + ], + [ + 606, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 299, + 1 + ], + [ + 608, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 605, + 1 + ], + [ + 611, + 15 + ], + [ + 615, + 8 + ] + ] + ], + [ + [ + [ + 141, + 5 + ], + [ + 562, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 352, + 10 + ], + [ + 560, + 3 + ], + [ + 609, + 2 + ] + ], + [ + [ + 342, + 10 + ], + [ + 196, + 2 + ], + [ + 608, + 2 + ] + ], + [ + [ + 207, + 10 + ], + [ + 564, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 208, + 10 + ], + [ + 564, + 5 + ], + [ + 0, + 0 + ] + ], + [ + [ + 123, + 10 + ], + [ + 564, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 127, + 10 + ], + [ + 337, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 97, + 10 + ], + [ + 154, + 1 + ], + [ + 606, + 1 + ] + ], + [ + [ + 126, + 10 + ], + [ + 154, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 391, + 3 + ], + [ + 270, + 4 + ], + [ + 0, + 0 + ] + ], + [ + [ + 299, + 1 + ], + [ + 608, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 359, + 8 + ], + [ + 541, + 1 + ], + [ + 610, + 1 + ] + ], + [ + [ + 368, + 4 + ], + [ + 118, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 309, + 3 + ], + [ + 317, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 357, + 8 + ], + [ + 287, + 1 + ], + [ + 0, + 0 + ] + ] + ], + [ + [ + [ + 117, + 5 + ], + [ + 545, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 115, + 5 + ], + [ + 338, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 127, + 10 + ], + [ + 337, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 146, + 5 + ], + [ + 562, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 123, + 10 + ], + [ + 564, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 212, + 10 + ], + [ + 100, + 5 + ], + [ + 0, + 0 + ] + ], + [ + [ + 209, + 10 + ], + [ + 99, + 4 + ], + [ + 0, + 0 + ] + ], + [ + [ + 342, + 10 + ], + [ + 196, + 2 + ], + [ + 608, + 2 + ] + ], + [ + [ + 133, + 10 + ], + [ + 337, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 141, + 5 + ], + [ + 562, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 287, + 1 + ], + [ + 607, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 309, + 3 + ], + [ + 317, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 324, + 1 + ], + [ + 585, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 368, + 4 + ], + [ + 118, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 296, + 1 + ], + [ + 588, + 3 + ], + [ + 0, + 0 + ] + ] + ], + [ + [ + [ + 142, + 10 + ], + [ + 304, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 125, + 10 + ], + [ + 563, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 342, + 10 + ], + [ + 196, + 2 + ], + [ + 608, + 2 + ] + ], + [ + [ + 123, + 10 + ], + [ + 564, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 344, + 5 + ], + [ + 562, + 1 + ], + [ + 607, + 1 + ] + ], + [ + [ + 208, + 10 + ], + [ + 564, + 5 + ], + [ + 0, + 0 + ] + ], + [ + [ + 134, + 3 + ], + [ + 322, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 393, + 3 + ], + [ + 270, + 4 + ], + [ + 609, + 1 + ] + ], + [ + [ + 133, + 10 + ], + [ + 337, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 354, + 5 + ], + [ + 545, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 404, + 1 + ], + [ + 586, + 3 + ], + [ + 615, + 2 + ] + ], + [ + [ + 213, + 3 + ], + [ + 99, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 343, + 2 + ], + [ + 541, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 309, + 3 + ], + [ + 317, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 359, + 8 + ], + [ + 541, + 1 + ], + [ + 610, + 1 + ] + ] + ], + [ + [ + [ + 123, + 10 + ], + [ + 564, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 198, + 5 + ], + [ + 341, + 1 + ], + [ + 608, + 1 + ] + ], + [ + [ + 342, + 10 + ], + [ + 196, + 2 + ], + [ + 608, + 2 + ] + ], + [ + [ + 132, + 10 + ], + [ + 289, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 197, + 5 + ], + [ + 341, + 1 + ], + [ + 609, + 1 + ] + ], + [ + [ + 116, + 10 + ], + [ + 305, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 391, + 3 + ], + [ + 270, + 4 + ], + [ + 0, + 0 + ] + ], + [ + [ + 350, + 10 + ], + [ + 562, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 142, + 10 + ], + [ + 304, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 210, + 8 + ], + [ + 101, + 2 + ], + [ + 610, + 2 + ] + ], + [ + [ + 287, + 1 + ], + [ + 607, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 309, + 3 + ], + [ + 317, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 324, + 1 + ], + [ + 585, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 368, + 4 + ], + [ + 118, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 296, + 1 + ], + [ + 588, + 3 + ], + [ + 0, + 0 + ] + ] + ], + [ + [ + [ + 142, + 10 + ], + [ + 304, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 207, + 10 + ], + [ + 564, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 97, + 10 + ], + [ + 154, + 1 + ], + [ + 606, + 1 + ] + ], + [ + [ + 350, + 10 + ], + [ + 562, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 117, + 5 + ], + [ + 545, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 388, + 5 + ], + [ + 322, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 128, + 10 + ], + [ + 340, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 141, + 5 + ], + [ + 562, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 212, + 10 + ], + [ + 100, + 5 + ], + [ + 0, + 0 + ] + ], + [ + [ + 135, + 3 + ], + [ + 322, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 404, + 1 + ], + [ + 586, + 3 + ], + [ + 615, + 2 + ] + ], + [ + [ + 213, + 3 + ], + [ + 99, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 343, + 2 + ], + [ + 541, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 309, + 3 + ], + [ + 317, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 359, + 8 + ], + [ + 541, + 1 + ], + [ + 610, + 1 + ] + ] + ], + [ + [ + [ + 134, + 3 + ], + [ + 322, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 344, + 5 + ], + [ + 562, + 1 + ], + [ + 607, + 1 + ] + ], + [ + [ + 107, + 5 + ], + [ + 562, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 117, + 5 + ], + [ + 545, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 350, + 10 + ], + [ + 562, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 344, + 5 + ], + [ + 562, + 1 + ], + [ + 607, + 1 + ] + ], + [ + [ + 391, + 3 + ], + [ + 270, + 4 + ], + [ + 0, + 0 + ] + ], + [ + [ + 116, + 10 + ], + [ + 305, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 126, + 10 + ], + [ + 154, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 134, + 3 + ], + [ + 322, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 605, + 1 + ], + [ + 611, + 15 + ], + [ + 615, + 8 + ] + ], + [ + [ + 310, + 1 + ], + [ + 611, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 287, + 1 + ], + [ + 607, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 26, + 5 + ], + [ + 99, + 5 + ], + [ + 0, + 0 + ] + ], + [ + [ + 215, + 2 + ], + [ + 101, + 2 + ], + [ + 0, + 0 + ] + ] + ], + [ + [ + [ + 342, + 10 + ], + [ + 196, + 2 + ], + [ + 608, + 2 + ] + ], + [ + [ + 145, + 5 + ], + [ + 322, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 153, + 5 + ], + [ + 338, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 133, + 10 + ], + [ + 337, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 117, + 5 + ], + [ + 545, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 391, + 3 + ], + [ + 270, + 4 + ], + [ + 0, + 0 + ] + ], + [ + [ + 128, + 10 + ], + [ + 340, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 198, + 5 + ], + [ + 341, + 1 + ], + [ + 608, + 1 + ] + ], + [ + [ + 393, + 3 + ], + [ + 270, + 4 + ], + [ + 609, + 1 + ] + ], + [ + [ + 154, + 5 + ], + [ + 276, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 404, + 1 + ], + [ + 586, + 3 + ], + [ + 615, + 2 + ] + ], + [ + [ + 213, + 3 + ], + [ + 99, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 343, + 2 + ], + [ + 541, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 309, + 3 + ], + [ + 317, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 359, + 8 + ], + [ + 541, + 1 + ], + [ + 610, + 1 + ] + ] + ], + [ + [ + [ + 354, + 5 + ], + [ + 545, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 115, + 5 + ], + [ + 338, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 352, + 10 + ], + [ + 560, + 3 + ], + [ + 609, + 2 + ] + ], + [ + [ + 126, + 10 + ], + [ + 154, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 141, + 5 + ], + [ + 562, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 342, + 10 + ], + [ + 196, + 2 + ], + [ + 608, + 2 + ] + ], + [ + [ + 210, + 8 + ], + [ + 101, + 2 + ], + [ + 610, + 2 + ] + ], + [ + [ + 197, + 5 + ], + [ + 341, + 1 + ], + [ + 609, + 1 + ] + ], + [ + [ + 198, + 5 + ], + [ + 341, + 1 + ], + [ + 608, + 1 + ] + ], + [ + [ + 107, + 5 + ], + [ + 562, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 605, + 1 + ], + [ + 611, + 15 + ], + [ + 615, + 8 + ] + ], + [ + [ + 310, + 1 + ], + [ + 611, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 287, + 1 + ], + [ + 607, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 26, + 5 + ], + [ + 99, + 5 + ], + [ + 0, + 0 + ] + ], + [ + [ + 215, + 2 + ], + [ + 101, + 2 + ], + [ + 0, + 0 + ] + ] + ], + [ + [ + [ + 208, + 10 + ], + [ + 564, + 5 + ], + [ + 0, + 0 + ] + ], + [ + [ + 117, + 5 + ], + [ + 545, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 350, + 10 + ], + [ + 562, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 352, + 10 + ], + [ + 560, + 3 + ], + [ + 609, + 2 + ] + ], + [ + [ + 132, + 10 + ], + [ + 289, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 210, + 8 + ], + [ + 101, + 2 + ], + [ + 610, + 2 + ] + ], + [ + [ + 142, + 10 + ], + [ + 304, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 133, + 10 + ], + [ + 337, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 123, + 10 + ], + [ + 564, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 116, + 10 + ], + [ + 305, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 404, + 1 + ], + [ + 586, + 3 + ], + [ + 615, + 2 + ] + ], + [ + [ + 324, + 1 + ], + [ + 585, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 308, + 1 + ], + [ + 606, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 299, + 1 + ], + [ + 608, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 605, + 1 + ], + [ + 611, + 15 + ], + [ + 615, + 8 + ] + ] + ], + [ + [ + [ + 141, + 5 + ], + [ + 562, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 197, + 5 + ], + [ + 341, + 1 + ], + [ + 609, + 1 + ] + ], + [ + [ + 116, + 10 + ], + [ + 305, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 123, + 10 + ], + [ + 564, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 391, + 3 + ], + [ + 270, + 4 + ], + [ + 0, + 0 + ] + ], + [ + [ + 388, + 5 + ], + [ + 322, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 562, + 5 + ], + [ + 321, + 2 + ], + [ + 609, + 2 + ] + ], + [ + [ + 344, + 5 + ], + [ + 562, + 1 + ], + [ + 607, + 1 + ] + ], + [ + [ + 352, + 10 + ], + [ + 560, + 3 + ], + [ + 609, + 2 + ] + ], + [ + [ + 342, + 10 + ], + [ + 196, + 2 + ], + [ + 608, + 2 + ] + ], + [ + [ + 404, + 1 + ], + [ + 586, + 3 + ], + [ + 615, + 2 + ] + ], + [ + [ + 213, + 3 + ], + [ + 99, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 343, + 2 + ], + [ + 541, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 309, + 3 + ], + [ + 317, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 359, + 8 + ], + [ + 541, + 1 + ], + [ + 610, + 1 + ] + ] + ], + [ + [ + [ + 146, + 5 + ], + [ + 562, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 133, + 10 + ], + [ + 337, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 127, + 10 + ], + [ + 337, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 211, + 8 + ], + [ + 99, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 142, + 10 + ], + [ + 304, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 115, + 5 + ], + [ + 338, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 147, + 10 + ], + [ + 305, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 128, + 10 + ], + [ + 340, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 145, + 5 + ], + [ + 322, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 391, + 3 + ], + [ + 270, + 4 + ], + [ + 0, + 0 + ] + ], + [ + [ + 357, + 8 + ], + [ + 287, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 605, + 1 + ], + [ + 611, + 15 + ], + [ + 615, + 8 + ] + ], + [ + [ + 287, + 1 + ], + [ + 607, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 274, + 1 + ], + [ + 610, + 3 + ], + [ + 615, + 2 + ] + ], + [ + [ + 281, + 1 + ], + [ + 584, + 3 + ], + [ + 0, + 0 + ] + ] + ], + [ + [ + [ + 392, + 3 + ], + [ + 196, + 4 + ], + [ + 607, + 1 + ] + ], + [ + [ + 127, + 10 + ], + [ + 337, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 198, + 5 + ], + [ + 341, + 1 + ], + [ + 608, + 1 + ] + ], + [ + [ + 128, + 10 + ], + [ + 340, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 123, + 10 + ], + [ + 564, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 115, + 5 + ], + [ + 338, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 133, + 10 + ], + [ + 337, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 153, + 5 + ], + [ + 338, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 142, + 10 + ], + [ + 304, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 354, + 5 + ], + [ + 545, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 215, + 2 + ], + [ + 101, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 287, + 1 + ], + [ + 607, + 3 + ], + [ + 0, + 0 + ] + ], + [ + [ + 333, + 5 + ], + [ + 291, + 2 + ], + [ + 0, + 0 + ] + ], + [ + [ + 605, + 1 + ], + [ + 611, + 15 + ], + [ + 615, + 8 + ] + ], + [ + [ + 404, + 1 + ], + [ + 586, + 3 + ], + [ + 615, + 2 + ] + ] + ] +] \ No newline at end of file diff --git a/fmp_server.py b/fmp_server.py index c7efd3b..c179f05 100644 --- a/fmp_server.py +++ b/fmp_server.py @@ -1,6 +1,6 @@ #! /usr/bin/env python # -*- coding: utf-8 -*- -# SPDX-FileCopyrightText: Copyright (C) 2021-2023 MH3SP Server Project +# SPDX-FileCopyrightText: Copyright (C) 2021-2025 MH3SP Server Project # SPDX-License-Identifier: AGPL-3.0-or-later """Monster Hunter FMP server.""" @@ -14,6 +14,7 @@ class FmpServer(PatServer): """Basic FMP server class.""" + # TODO: Backport close cache logic pass @@ -24,6 +25,7 @@ def recvAnsConnection(self, packet_id, data, seq): """AnsConnection packet.""" connection_data = pati.ConnectionData.unpack(data) self.server.debug("Connection: {!r}".format(connection_data)) + # TODO: Backport loaded_session logic self.sendNtcLogin(3, connection_data, seq) def sendAnsLayerDown(self, layer_id, layer_set, seq): @@ -263,6 +265,7 @@ def recvReqLayerUp(self, packet_id, data, seq): Sent by the game when leaving the gate via the entrance: - Relocate > Select Server """ + # TODO: Backport notify_layer_departure if needed self.sendAnsLayerUp(data, seq) def recvReqUserSearchInfoMine(self, packet_id, data, seq): diff --git a/master_server.py b/master_server.py index 472e9f4..dbe650d 100644 --- a/master_server.py +++ b/master_server.py @@ -1,6 +1,6 @@ #! /usr/bin/env python # -*- coding: utf-8 -*- -# SPDX-FileCopyrightText: Copyright (C) 2021-2024 MH3SP Server Project +# SPDX-FileCopyrightText: Copyright (C) 2021-2025 MH3SP Server Project # SPDX-License-Identifier: AGPL-3.0-or-later """Monster Hunter master server.""" @@ -40,6 +40,7 @@ def main(args): ) for server in servers ] + # TODO: Backport cache's logic (i.e. new thread, maintain_connection) for thread in threads: thread.start() @@ -92,6 +93,8 @@ def interactive_mode(local=locals()): parser.add_argument("--dry-run", action="store_true", dest="dry_run", help="dry run to test the server") + # TODO: Backport central/cache parameters (server_id, no_timeout) + # - no_timeout is currently available as a server argument as follows: parser.add_argument("args", nargs='*', help="arguments forwarded to all servers") args = parser.parse_args() diff --git a/mh/arena_utils.py b/mh/arena_utils.py deleted file mode 100644 index aedaa84..0000000 --- a/mh/arena_utils.py +++ /dev/null @@ -1,769 +0,0 @@ -#! /usr/bin/env python -# -*- coding: utf-8 -*- -# SPDX-FileCopyrightText: Copyright (C) 2023 MH3SP Server Project -# SPDX-License-Identifier: AGPL-3.0-or-later -"""Arena utils module. - -Arena Quest ID List: -EA60 -EA61 -EA62 -EA63 -EA64 -EA65 -EA66 -EA67 -EA68 -EA69 -EA6A -EA6B - -bird and brute bowgun: -rathling gun + barrel, poison stinger frame, light bowgun stock - -sea power bowgun: -rathling gun barrel, rathling gun + frame, rathling gun + stock - -land lords bowgun: -jho barrel, diablos frame, barioth stock - -two flames bowgun: -lagiacrus barrel, lagiacrus frame, barioth stock - -https://web.archive.org/web/20111012085906/ -http://divinewh.im/q/c/Grudge_Match:_Royal_Ludroth - -https://web.archive.org/web/20111012085901/ -http://divinewh.im/q/c/Grudge_Match:_Rathian - -https://web.archive.org/web/20111012090656/ -http://divinewh.im/q/c/Grudge_Match:_Uragaan - -https://web.archive.org/web/20111012090915/ -http://divinewh.im/q/c/Grudge_Match:_Bird_and_Brute -""" - -from mh.quest_utils import \ - generate_flags, Monster, LocationType,\ - QuestRankType, QuestRestrictionType, ResourcesType,\ - StartingPositionType, ItemsType -from mh.equipment_utils import Chestpiece, Gauntlets, Faulds,\ - Leggings, Helmet, EquipmentClasses, Greatsword,\ - SnS, Hammer, Longsword, Switchaxe, Lance,\ - BowgunFrame, BowgunStock, BowgunBarrel - - -GRUDGE_MATCH_ROYAL_LUDROTH = { - 'quest_info': { - 'quest_id': 0xEA61, - 'name': "Grudge Match: Royal Ludroth", - 'client': "Announcer/Receptionist", - 'description': "Slay a Royal Ludroth", - 'details': - "Ahoy, adrenaline junkies!\n" - "Next up is the regally maned\n" - "Royal Ludroth! Will the pressure\n" - "of facing this sea dragon on\n" - "its home surf with a strict\n" - "time limit leave the hunters\n" - "all washed up?", - 'success_message': "Complete the Main Quest.", - 'flags': generate_flags( - (0, 0, 0, 0, 0, 1, 0, 0), - (1, 0, 0, 0, 1, 0, 0, 0), - (0, 0, 0, 0, 0, 0, 0, 0), - (1, 0, 0, 0, 1, 0, 1, 0) - ), - 'penalty_per_cart': 350, - 'quest_fee': 0, - 'time_limit': 50, - 'main_monster_1': Monster.none, - 'main_monster_2': Monster.none, - 'location': LocationType.QUEST_LOCATION_WATER_ARENA_2, - 'quest_rank': QuestRankType.star_1, - 'hrp_restriction': QuestRestrictionType.RESTRICTION_NONE, - 'resources': ResourcesType.arena, - 'supply_set_number': 0, - 'starting_position': StartingPositionType.camp, - 'general_enemy_level': 0x0017, - 'summon': 0x00000000, - 'smallmonster_data_file': 'sm_underwaterarenarock.dat', - }, - 'large_monsters': { - 'monster_1': { - 'type': Monster.royal_ludroth, - 'boss_id': 0x0000, - 'enabled': True, - 'level': 0x17, # 0x01 through 0x3c - 'size': 0x64, - 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x00 - }, - 'monster_2': { - 'type': Monster.none, - 'boss_id': 0x0000, - 'enabled': False, - 'level': 0x00, # 0x01 through 0x3c - 'size': 0x00, - 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x00 - }, - 'monster_3': { - 'type': Monster.none, - 'boss_id': 0x0000, - 'enabled': False, - 'level': 0x00, # 0x01 through 0x3c - 'size': 0x00, - 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x00 - } - }, - 'objective_details': { - 'main_quest': { - 'type': 0x00000101, - 'objective_type': Monster.royal_ludroth, - 'objective_num': 0x01, - 'zenny_reward': 1000, - 'hrp_reward': 0, - 'rewards_row_1': [ - (ItemsType.r_ludroth_coin, 1, 24), - (ItemsType.r_ludroth_coin, 2, 8), - (ItemsType.voucher, 1, 10), - (ItemsType.armor_sphere, 1, 24), - (ItemsType.steel_eg, 1, 18), - (ItemsType.pinnacle_coin, 1, 16) - ], - 'rewards_row_2': [], - }, - 'subquest_1': { - 'description': "None", - 'type': 0x00000000, - 'objective_type': Monster.none, - 'objective_num': 0x00, - 'zenny_reward': 0, - 'hrp_reward': 0x00000000, - 'rewards_row_1': [], - }, - 'subquest_2': { - 'description': "None", - 'type': 0x00000000, - 'objective_type': Monster.none, - 'objective_num': 0x00, - 'zenny_reward': 0, - 'hrp_reward': 0x00000000, - 'rewards_row_1': [], - }, - }, - 'unknown': { - # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala - 'unk_12': 0x00000002, - 'unk_4': 0x00, - 'unk_5': 0x00, - 'unk_6': 0x00, - 'unk_7': 0x00000000, - 'unk_9': 0x00000000, - 'unk_10': 0x00000000, - 'unk_11': 0x00000000, - }, - 'arena_equipment': ( - ( - (EquipmentClasses.SnS, SnS.HydraKnife), - None, None, - Helmet.QurupecoHelm, Chestpiece.QurupecoMail, - Gauntlets.BlastBracelet, Faulds.SteelFaulds, - Leggings.IngotGreaves, - ((ItemsType.whetstone, 20), (ItemsType.potion, 10), - (ItemsType.ration, 10), (ItemsType.oxygen_supply, 10), - (ItemsType.lifepowder, 2), (ItemsType.barrel_bomb_l, 3), - (ItemsType.barrel_bomb_s, 10)), - () - ), - ( - (EquipmentClasses.Greatsword, Greatsword.ChieftainsGrtSwd), - None, None, - Helmet.DrawEarring, Chestpiece.SteelMail, - Gauntlets.GobulVambraces, Faulds.GobulFaulds, - Leggings.HuntersGreaves, - ((ItemsType.whetstone, 20), (ItemsType.potion, 10), - (ItemsType.ration, 10), (ItemsType.oxygen_supply, 10), - (ItemsType.might_pill, 2), (ItemsType.shock_trap, 1), - (ItemsType.ez_flash_bomb, 1)), - () - ), - ( - (EquipmentClasses.Hammer, Hammer.BoneBludgeon), - None, None, - Helmet.BarrothHelm, Chestpiece.BarrothMail, - Gauntlets.AlloyVambraces, Faulds.BarrothFaulds, - Leggings.BarrothGreaves, - ((ItemsType.whetstone, 20), (ItemsType.potion, 10), - (ItemsType.ration, 10), (ItemsType.oxygen_supply, 10), - (ItemsType.paralysis_knife, 5), (ItemsType.ez_flash_bomb, 1)), - () - ), - ( - (EquipmentClasses.BowgunFrame, BowgunFrame.RoyalLauncher), - (EquipmentClasses.BowgunBarrel, BowgunBarrel.JaggidFire), - (EquipmentClasses.BowgunStock, BowgunStock.LightBowgun), - Helmet.AlloyCap, Chestpiece.AlloyVest, - Gauntlets.LagiacrusGuards, Faulds.AlloyCoat, - Leggings.PiscineLeggings, - ((ItemsType.potion, 10), (ItemsType.ration, 10), - (ItemsType.oxygen_supply, 10), (ItemsType.lifepowder, 2), - (ItemsType.shock_trap, 1), (ItemsType.barrel_bomb_l_plus, 2), - (ItemsType.barrel_bomb_l, 2)), - ((ItemsType.normal_s_lv2, 99), (ItemsType.pierce_s_lv1, 60), - (ItemsType.pierce_s_lv2, 50), (ItemsType.clust_s_lv1, 5), - (ItemsType.poison_s_lv1, 12), (ItemsType.para_s_lv1, 12)) - ) - ) -} - -GRUDGE_MATCH_BIRD_BRUTE = { - 'quest_info': { - 'quest_id': 0xEA66, - 'name': "Grudge Match: Bird and Brute", - 'client': "Announcer/Receptionist", - 'description': - "Slay a Qurupeco\n" - "and a Barroth", - 'details': - "Double trouble! It's the\n" - "dirty-bird Qurupeco and the\n" - "land dragon Barroth -- heaven\n" - "and earth, laughter and tears,\n" - "in an ultimate contest! When\n" - "the dust clears, will it\n" - "reveal victory? Or tragedy?", - 'success_message': "Complete the Main Quest.", - 'flags': generate_flags( - (0, 1, 0, 0, 0, 1, 0, 0), - (1, 0, 0, 0, 1, 0, 0, 0), - (0, 0, 0, 0, 0, 0, 0, 0), - (1, 0, 0, 0, 1, 0, 1, 0) - ), - 'penalty_per_cart': 350, - 'quest_fee': 0, - 'time_limit': 50, - 'main_monster_1': Monster.none, - 'main_monster_2': Monster.none, - 'location': LocationType.QUEST_LOCATION_LAND_ARENA_1, - 'quest_rank': QuestRankType.star_4, - 'hrp_restriction': QuestRestrictionType.RESTRICTION_31_INITJOIN, - 'resources': ResourcesType.arena, - 'supply_set_number': 0, - 'starting_position': StartingPositionType.camp, - 'general_enemy_level': 0x0017, - 'summon': 0x00000000, - 'smallmonster_data_file': 'sm_bloodsport.dat', - }, - 'large_monsters': { - 'monster_1': { - 'type': Monster.qurupeco, - 'boss_id': 0x0000, - 'enabled': True, - 'level': 0x17, # 0x01 through 0x3c - 'size': 0x64, - 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x00 - }, - 'monster_2': { - 'type': Monster.barroth, - 'boss_id': 0x0001, - 'enabled': True, - 'level': 0x17, # 0x01 through 0x3c - 'size': 0x64, - 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x00 - }, - 'monster_3': { - 'type': Monster.none, - 'boss_id': 0x0000, - 'enabled': False, - 'level': 0x00, # 0x01 through 0x3c - 'size': 0x00, - 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x00 - } - }, - 'objective_details': { - 'main_quest': { - 'type': 0x00000101, - 'objective_type': Monster.qurupeco, - 'objective_num': 0x01, - 'zenny_reward': 1000, - 'hrp_reward': 0, - 'rewards_row_1': [ - (ItemsType.qurupeco_coin, 1, 16), - (ItemsType.barroth_coin, 1, 20), - (ItemsType.voucher, 1, 14), - (ItemsType.armor_sphere_plus, 1, 10), - (ItemsType.adv_armor_sphere, 1, 5), - (ItemsType.steel_eg, 1, 15), - (ItemsType.silver_eg, 1, 5), - (ItemsType.hunter_king_coin, 1, 15) - ], - 'rewards_row_2': [], - }, - 'subquest_1': { - 'description': "None", - 'type': 0x00000101, - 'objective_type': Monster.barroth, - 'objective_num': 0x01, - 'zenny_reward': 0, - 'hrp_reward': 0x00000000, - 'rewards_row_1': [], - }, - 'subquest_2': { - 'description': "None", - 'type': 0x00000000, - 'objective_type': Monster.none, - 'objective_num': 0x00, - 'zenny_reward': 0, - 'hrp_reward': 0x00000000, - 'rewards_row_1': [], - }, - }, - 'unknown': { - # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala - 'unk_12': 0x00000002, - 'unk_4': 0x00, - 'unk_5': 0x00, - 'unk_6': 0x00, - 'unk_7': 0x00000000, - 'unk_9': 0x00000000, - 'unk_10': 0x00000000, - 'unk_11': 0x00000000, - }, - 'arena_equipment': ( - ( - (EquipmentClasses.Switchaxe, Switchaxe.AssaultAxePlus), - None, None, - Helmet.GigginoxCapPlus, Chestpiece.AlloyMail, - Gauntlets.BaggiVambracesPlus, Faulds.GigginoxFauldsPlus, - Leggings.GigginoxGreaves, - ((ItemsType.potion, 10), (ItemsType.mega_potion, 10), - (ItemsType.whetstone, 20), (ItemsType.ration, 10), - (ItemsType.cleanser, 5), (ItemsType.barrel_bomb_l, 2), - (ItemsType.lifepowder, 1), (ItemsType.ez_shock_trap, 1), - (ItemsType.ez_flash_bomb, 2)), - () - ), - ( - (EquipmentClasses.Greatsword, Greatsword.CataclysmSword), - None, None, - Helmet.DrawEarring, Chestpiece.JaggiMailPlus, - Gauntlets.JaggiVambracesPlus, Faulds.JaggiFauldsPlus, - Leggings.BoneGreavesPlus, - ((ItemsType.potion, 10), (ItemsType.mega_potion, 10), - (ItemsType.whetstone, 20), (ItemsType.ration, 10), - (ItemsType.cleanser, 5), (ItemsType.barrel_bomb_l, 3), - (ItemsType.barrel_bomb_s, 2), (ItemsType.pitfall_trap, 1), - (ItemsType.ez_flash_bomb, 2)), - () - ), - ( - (EquipmentClasses.Lance, Lance.Undertaker), - None, None, - Helmet.DiablosCap, Chestpiece.AgnaktorMailPlus, - Gauntlets.SteelVambracesPlus, Faulds.SteelCoilPlus, - Leggings.AlloyGreaves, - ((ItemsType.potion, 10), (ItemsType.mega_potion, 10), - (ItemsType.whetstone, 20), (ItemsType.ration, 10), - (ItemsType.cleanser, 5), (ItemsType.barrel_bomb_l, 2), - (ItemsType.ez_flash_bomb, 1)), - () - ), - ( - (EquipmentClasses.BowgunFrame, BowgunFrame.PoisonStinger), - (EquipmentClasses.BowgunBarrel, BowgunBarrel.RathlingGunPlus), - (EquipmentClasses.BowgunStock, BowgunStock.LightBowgun), - Helmet.AgnaktorCapPlus, Chestpiece.AgnaktorVestPlus, - Gauntlets.AgnaktorGuardsPlus, Faulds.AgnaktorCoatPlus, - Leggings.RathalosLeggingsPlus, - ((ItemsType.potion, 10), (ItemsType.mega_potion, 10), - (ItemsType.ration, 10), (ItemsType.cleanser, 5), - (ItemsType.lifepowder, 2), (ItemsType.ez_flash_bomb, 1), - (ItemsType.sonic_bomb, 2)), - ((ItemsType.normal_s_lv2, 99), (ItemsType.normal_s_lv3, 99), - (ItemsType.pierce_s_lv2, 50), (ItemsType.clust_s_lv2, 5), - (ItemsType.crag_s_lv2, 9), (ItemsType.poison_s_lv1, 12), - (ItemsType.para_s_lv1, 12), (ItemsType.sleep_s_lv1, 12)) - ) - ) -} - -GRUDGE_MATCH_TWO_FLAMES = { - 'quest_info': { - 'quest_id': 0xEA68, - 'name': "Grudge Match: The Two Flames", - 'client': "Announcer/Receptionist", - 'description': - "Slay a Rathalos\n" - "and a Rathian", - 'details': - "Wanted:\n" - "The description for this\n" - "quest! If you can find\n" - "it, please let us know!\n" - "Thanks!", - 'success_message': "Complete the Main Quest.", - 'flags': generate_flags( - (0, 1, 0, 0, 0, 1, 0, 0), - (1, 0, 0, 0, 1, 0, 0, 0), - (0, 0, 0, 0, 0, 0, 0, 0), - (1, 0, 0, 0, 1, 0, 1, 0) - ), - 'penalty_per_cart': 350, - 'quest_fee': 0, - 'time_limit': 50, - 'main_monster_1': Monster.none, - 'main_monster_2': Monster.none, - 'location': LocationType.QUEST_LOCATION_LAND_ARENA_1, - 'quest_rank': QuestRankType.star_5, - 'hrp_restriction': QuestRestrictionType.RESTRICTION_31_INITJOIN, - 'resources': ResourcesType.arena, - 'supply_set_number': 0, - 'starting_position': StartingPositionType.camp, - 'general_enemy_level': 0x0017, - 'summon': 0x00000000, - 'smallmonster_data_file': 'sm_bloodsport.dat', - }, - 'large_monsters': { - 'monster_1': { - 'type': Monster.rathalos, - 'boss_id': 0x0000, - 'enabled': True, - 'level': 0x17, # 0x01 through 0x3c - 'size': 0x64, - 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x00 - }, - 'monster_2': { - 'type': Monster.rathian, - 'boss_id': 0x0001, - 'enabled': True, - 'level': 0x17, # 0x01 through 0x3c - 'size': 0x64, - 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x00 - }, - 'monster_3': { - 'type': Monster.none, - 'boss_id': 0x0000, - 'enabled': False, - 'level': 0x00, # 0x01 through 0x3c - 'size': 0x00, - 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x00 - } - }, - 'objective_details': { - 'main_quest': { - 'type': 0x00000101, - 'objective_type': Monster.rathalos, - 'objective_num': 0x01, - 'zenny_reward': 1000, - 'hrp_reward': 0, - 'rewards_row_1': [ - (ItemsType.rathalos_coin, 1, 10), - (ItemsType.rathian_coin, 1, 24), - (ItemsType.voucher, 1, 14), - (ItemsType.armor_sphere_plus, 1, 10), - (ItemsType.adv_armor_sphere, 1, 5), - (ItemsType.steel_eg, 1, 15), - (ItemsType.silver_eg, 1, 5), - (ItemsType.hunter_king_coin, 1, 17) - ], - 'rewards_row_2': [], - }, - 'subquest_1': { - 'description': "None", - 'type': 0x00000101, - 'objective_type': Monster.rathian, - 'objective_num': 0x01, - 'zenny_reward': 0, - 'hrp_reward': 0x00000000, - 'rewards_row_1': [], - }, - 'subquest_2': { - 'description': "None", - 'type': 0x00000000, - 'objective_type': Monster.none, - 'objective_num': 0x00, - 'zenny_reward': 0, - 'hrp_reward': 0x00000000, - 'rewards_row_1': [], - }, - }, - 'unknown': { - # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala - 'unk_12': 0x00000002, - 'unk_4': 0x00, - 'unk_5': 0x00, - 'unk_6': 0x00, - 'unk_7': 0x00000000, - 'unk_9': 0x00000000, - 'unk_10': 0x00000000, - 'unk_11': 0x00000000, - }, - 'arena_equipment': ( - ( - (EquipmentClasses.SnS, SnS.IcicleSpikePlus), - None, None, - Helmet.QurupecoHelmPlus, Chestpiece.QurupecoMailPlus, - Gauntlets.QurupecoVambracesPlus, Faulds.QurupecoCoilPlus, - Leggings.QurupecoGreavesPlus, - ((ItemsType.potion, 10), (ItemsType.mega_potion, 10), - (ItemsType.whetstone, 20), (ItemsType.ration, 10), - (ItemsType.might_pill, 2), (ItemsType.antidote, 2), - (ItemsType.lifepowder, 1), (ItemsType.dung_bomb, 1), - (ItemsType.paralysis_knife, 5), (ItemsType.pitfall_trap, 1), - (ItemsType.ez_flash_bomb, 5), (ItemsType.barrel_bomb_l_plus, 1), - (ItemsType.barrel_bomb_s, 1)), - () - ), - ( - (EquipmentClasses.Longsword, Longsword.Thunderclap), - None, None, - Helmet.SilenceEarring, Chestpiece.AlloyMailPlus, - Gauntlets.SteelVambracesPlus, Faulds.SteelCoilPlus, - Leggings.VangisGreaves, - ((ItemsType.potion, 10), (ItemsType.mega_potion, 10), - (ItemsType.whetstone, 20), (ItemsType.ration, 10), - (ItemsType.antidote, 2), (ItemsType.lifepowder, 1), - (ItemsType.dung_bomb, 1), (ItemsType.ez_flash_bomb, 2)), - () - ), - ( - (EquipmentClasses.Lance, Lance.SpiralLancePlus), - None, None, - Helmet.DemonEdgeEarring, Chestpiece.IngotMailPlus, - Gauntlets.AgnaktorVambracesPlus, Faulds.RhenoplosCoilPlus, - Leggings.IngotGreavesPlus, - ((ItemsType.potion, 10), (ItemsType.mega_potion, 10), - (ItemsType.whetstone, 20), (ItemsType.well_done_steak, 10), - (ItemsType.antidote, 2), (ItemsType.lifepowder, 1), - (ItemsType.dung_bomb, 1), (ItemsType.poison_knife, 5), - (ItemsType.shock_trap, 1), (ItemsType.ez_flash_bomb, 1)), - () - ), - ( - (EquipmentClasses.BowgunFrame, BowgunFrame.ThundacrusRex), - (EquipmentClasses.BowgunBarrel, BowgunBarrel.ThundacrusRex), - (EquipmentClasses.BowgunStock, BowgunStock.BlizzardCannon), - Helmet.EarringofFate, Chestpiece.UragaanVestPlus, - Gauntlets.BlastBracelet, Faulds.UragaanCoatPlus, - Leggings.UragaanLeggingsPlus, - ((ItemsType.potion, 10), (ItemsType.mega_potion, 10), - (ItemsType.ration, 10), (ItemsType.antidote, 2), - (ItemsType.lifepowder, 2), (ItemsType.dung_bomb, 1), - (ItemsType.shock_trap, 1), (ItemsType.ez_shock_trap, 1), - (ItemsType.pitfall_trap, 1), (ItemsType.ez_barrel_bomb_l, 1), - (ItemsType.barrel_bomb_l, 3), (ItemsType.barrel_bomb_s, 10)), - ((ItemsType.normal_s_lv2, 99), (ItemsType.normal_s_lv3, 99), - (ItemsType.pierce_s_lv3, 40), (ItemsType.demon_s_ii, 5), - (ItemsType.thunder_s, 60)) - ) - ) -} - -GRUDGE_MATCH_LAND_LORDS = { - 'quest_info': { - 'quest_id': 0xEA6B, - 'name': "Grudge Match: Land Lords", - 'client': "Announcer/Receptionist", - 'description': "Slay all 3 monsters", - 'details': - "Wanted:\n" - "The description for this\n" - "quest! If you can find\n" - "it, please let us know!\n" - "Thanks!", - 'success_message': "Complete the Main Quest.", - 'flags': generate_flags( - (0, 0, 1, 0, 0, 1, 0, 0), - (1, 0, 0, 0, 1, 0, 0, 0), - (0, 0, 0, 0, 0, 0, 0, 0), - (1, 0, 0, 0, 1, 0, 1, 0) - ), - 'penalty_per_cart': 1150, - 'quest_fee': 0, - 'time_limit': 50, - 'main_monster_1': Monster.none, - 'main_monster_2': Monster.none, - 'location': LocationType.QUEST_LOCATION_LAND_ARENA_1, - 'quest_rank': QuestRankType.urgent, - 'hrp_restriction': QuestRestrictionType.RESTRICTION_31_INITJOIN, - 'resources': ResourcesType.arena, - 'supply_set_number': 0, - 'starting_position': StartingPositionType.camp, - 'general_enemy_level': 0x0017, - 'summon': 0x00000000, - 'smallmonster_data_file': 'sm_bloodsport.dat', - }, - 'large_monsters': { - 'monster_1': { - 'type': Monster.barroth, - 'boss_id': 0x0000, - 'enabled': True, - 'level': 0x17, - 'size': 0x64, - 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x00 - }, - 'monster_2': { - 'type': Monster.uragaan, - 'boss_id': 0x0001, - 'enabled': True, - 'level': 0x17, - 'size': 0x64, - 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x00 - }, - 'monster_3': { - 'type': Monster.deviljho, - 'boss_id': 0x0002, - 'enabled': True, - 'level': 0x12, # 0x01 through 0x3c - 'size': 0x64, - 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x00 - } - }, - 'objective_details': { - 'main_quest': { - 'type': 0x00020101, - 'objective_type': Monster.barroth, - 'objective_num': 0x01, - 'zenny_reward': 3000, - 'hrp_reward': 0, - 'rewards_row_1': [ - (ItemsType.deviljho_coin, 1, 10), - (ItemsType.barroth_coin, 1, 10), - (ItemsType.uragaan_coin, 1, 15), - (ItemsType.voucher, 1, 14), - (ItemsType.adv_armor_sphere, 1, 10), - (ItemsType.hrd_armor_sphere, 1, 7), - (ItemsType.silver_eg, 1, 10), - (ItemsType.hunter_king_coin, 1, 24) - ], - 'rewards_row_2': [], - }, - 'subquest_1': { - 'description': "None", - 'type': 0x00020101, - 'objective_type': Monster.uragaan, - 'objective_num': 0x01, - 'zenny_reward': 0, - 'hrp_reward': 0x00000000, - 'rewards_row_1': [], - }, - 'subquest_2': { - 'description': "None", - 'type': 0x00020101, - 'objective_type': Monster.deviljho, - 'objective_num': 0x01, - 'zenny_reward': 0, - 'hrp_reward': 0x00000000, - 'rewards_row_1': [], - }, - }, - 'unknown': { - # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala - 'unk_12': 0x00000002, - 'unk_4': 0x00, - 'unk_5': 0x00, - 'unk_6': 0x00, - 'unk_7': 0x00000000, - 'unk_9': 0x00000000, - 'unk_10': 0x00000000, - 'unk_11': 0x00000000, - }, - 'arena_equipment': ( - ( - (EquipmentClasses.SnS, SnS.PlagueTabar), - None, None, - Helmet.UragaanHelmPlus, Chestpiece.UragaanMailPlus, - Gauntlets.UragaanVambracesPlus, Faulds.UragaanFauldsPlus, - Leggings.UragaanGreavesPlus, - ((ItemsType.whetstone, 20), (ItemsType.potion, 10), - (ItemsType.mega_potion, 10), (ItemsType.energy_drink, 5), - (ItemsType.lifepowder, 3), (ItemsType.paralysis_knife, 5), - (ItemsType.sleep_knife, 5), (ItemsType.poison_knife, 5), - (ItemsType.tinged_meat, 5), (ItemsType.druged_meat, 5), - (ItemsType.poisoned_meat, 5), (ItemsType.pitfall_trap, 1), - (ItemsType.shock_trap, 1), (ItemsType.ez_shock_trap, 1), - (ItemsType.ez_flash_bomb, 5), (ItemsType.barrel_bomb_l_plus, 2), - (ItemsType.barrel_bomb_l, 3), (ItemsType.barrel_bomb_s, 10), - (ItemsType.max_potion, 2), (ItemsType.ancient_potion, 1), - (ItemsType.powercharm, 1), (ItemsType.armorcharm, 1), - (ItemsType.powertalon, 1), (ItemsType.armortalon, 1)), - () - ), - ( - (EquipmentClasses.Switchaxe, Switchaxe.GreatDemonbindG), - None, None, - Helmet.RathalosHelmPlus, Chestpiece.RathalosMailPlus, - Gauntlets.RathalosVambracesPlus, Faulds.RathalosFauldsPlus, - Leggings.RathalosGreavesPlus, - ((ItemsType.whetstone, 20), (ItemsType.potion, 10), - (ItemsType.mega_potion, 10), (ItemsType.energy_drink, 5), - (ItemsType.lifepowder, 3), (ItemsType.dung_bomb, 5), - (ItemsType.paralysis_knife, 5), (ItemsType.sleep_knife, 5), - (ItemsType.poison_knife, 5), (ItemsType.tinged_meat, 5), - (ItemsType.druged_meat, 5), (ItemsType.poisoned_meat, 5), - (ItemsType.pitfall_trap, 1), (ItemsType.shock_trap, 1), - (ItemsType.ez_flash_bomb, 5), (ItemsType.barrel_bomb_l_plus, 1), - (ItemsType.max_potion, 2), (ItemsType.ancient_potion, 1), - (ItemsType.powercharm, 1), (ItemsType.armorcharm, 1), - (ItemsType.powertalon, 1), (ItemsType.armortalon, 1)), - () - ), - ( - (EquipmentClasses.Longsword, Longsword.ReaverCalamity), - None, None, - Helmet.StimulusEarring, Chestpiece.VangisMail, - Gauntlets.DoberVambraces, Faulds.DoberCoil, - Leggings.DamascusGreaves, - ((ItemsType.whetstone, 20), (ItemsType.potion, 10), - (ItemsType.mega_potion, 10), (ItemsType.energy_drink, 5), - (ItemsType.cleanser, 5), (ItemsType.lifepowder, 5), - (ItemsType.paralysis_knife, 5), (ItemsType.sleep_knife, 5), - (ItemsType.poison_knife, 5), (ItemsType.tinged_meat, 5), - (ItemsType.druged_meat, 5), (ItemsType.poisoned_meat, 5), - (ItemsType.pitfall_trap, 1), (ItemsType.shock_trap, 1), - (ItemsType.ez_shock_trap, 1), (ItemsType.ez_flash_bomb, 5), - (ItemsType.barrel_bomb_l_plus, 2), (ItemsType.barrel_bomb_l, 3), - (ItemsType.barrel_bomb_s, 10), (ItemsType.max_potion, 2), - (ItemsType.ancient_potion, 1), (ItemsType.powercharm, 1), - (ItemsType.armorcharm, 1), (ItemsType.armortalon, 1)), - () - ), - ( - (EquipmentClasses.BowgunFrame, BowgunFrame.Diablazooka), - (EquipmentClasses.BowgunBarrel, BowgunBarrel.DevilsGrin), - (EquipmentClasses.BowgunStock, BowgunStock.BlizzardCannon), - Helmet.BarrageEarring, Chestpiece.DamascusVest, - Gauntlets.DamascusGuards, Faulds.DamascusCoat, - Leggings.DamascusLeggings, - ((ItemsType.potion, 10), (ItemsType.mega_potion, 10), - (ItemsType.energy_drink, 5), (ItemsType.lifepowder, 3), - (ItemsType.paralysis_knife, 5), (ItemsType.sleep_knife, 5), - (ItemsType.poison_knife, 5), (ItemsType.tinged_meat, 5), - (ItemsType.druged_meat, 5), (ItemsType.pitfall_trap, 1), - (ItemsType.shock_trap, 1), (ItemsType.ez_shock_trap, 1), - (ItemsType.ez_flash_bomb, 5), (ItemsType.ez_barrel_bomb_l, 2), - (ItemsType.barrel_bomb_l_plus, 2), (ItemsType.barrel_bomb_l, 3), - (ItemsType.barrel_bomb_s, 10), (ItemsType.max_potion, 2), - (ItemsType.ancient_potion, 1), (ItemsType.powercharm, 1), - (ItemsType.armorcharm, 1), (ItemsType.powertalon, 1), - (ItemsType.armortalon, 1)), - ((ItemsType.normal_s_lv2, 99), (ItemsType.pierce_s_lv3, 40), - (ItemsType.crag_s_lv2, 9), (ItemsType.crag_s_lv3, 9), - (ItemsType.wyvernfire_lv1, 10), (ItemsType.water_s, 60), - (ItemsType.sleep_s_lv2, 8), (ItemsType.dragon_s, 20), - (ItemsType.demon_s_ii, 5)) - ) - ) -} diff --git a/mh/constants.py b/mh/constants.py index c5d2ec3..b3efc77 100644 --- a/mh/constants.py +++ b/mh/constants.py @@ -1,28 +1,41 @@ #! /usr/bin/env python # -*- coding: utf-8 -*- -# SPDX-FileCopyrightText: Copyright (C) 2021-2023 MH3SP Server Project +# SPDX-FileCopyrightText: Copyright (C) 2021-2025 MH3SP Server Project # SPDX-License-Identifier: AGPL-3.0-or-later """Monster Hunter constants.""" import struct from other.utils import pad from mh.time_utils import current_server_time, TICKS_PER_CYCLE, \ - get_jhen_event_times, is_jhen_active -from mh.quest_utils import \ - QUEST_EVENT_JUMP_FOUR_JAGGI, QUEST_EVENT_BLOOD_SPORT, \ - QUEST_EVENT_MERCY_MISSION, QUEST_EVENT_THE_PHANTOM_URAGAAN, \ - QUEST_EVENT_WORLD_EATER, QUEST_EVENT_WHERE_GODS_FEAR_TO_TREAD, \ - make_binary_event_quest -from mh.arena_utils import \ - GRUDGE_MATCH_ROYAL_LUDROTH, GRUDGE_MATCH_BIRD_BRUTE, \ - GRUDGE_MATCH_TWO_FLAMES, GRUDGE_MATCH_LAND_LORDS + get_jhen_event_times, is_jhen_active, current_event_time_slot, \ + current_trading_post_time_slot +from mh.quest_utils import make_binary_event_quest from res.trading_post import CURRENT_TRADES +try: + from collections.abc import Callable # noqa: F401 + from typing import ParamSpec + QuestLoader = ParamSpec("QuestLoader", bound="mh.quest_utils.QuestLoader") +except ImportError: + pass -def make_binary_type_time_events(): + +def make_binary_type_time_events(binary_loader): return struct.pack(">III", *get_jhen_event_times()) +def make_event_slot(event): + return (make_binary_event_quest(event), event) + + +def get_event_slot(slot_num, temporal_slot): + return \ + lambda quest_loader, slot_num=slot_num, temporal_slot=temporal_slot: \ + quest_loader[temporal_slot][slot_num] \ + if slot_num < len(quest_loader[temporal_slot]) \ + else b'\0' * 0x4B4 + + def make_binary_server_type_list(is_jap=False): data = bytearray() PROPERTIES = [ @@ -149,7 +162,7 @@ def make_binary_server_type_list(is_jap=False): return data -def make_binary_npc_greeters(is_jap=False): +def make_binary_npc_greeters(binary_loader, is_jap=False, temporal_slot=None): """Binary with NPC City Greeter. Data offset: @@ -171,6 +184,8 @@ def make_binary_npc_greeters(is_jap=False): US_OFFSET = 0x180 JP_OFFSET = 0x100 offset = JP_OFFSET if is_jap else US_OFFSET + if temporal_slot is None: + temporal_slot = current_event_time_slot(binary_loader) if is_jhen_active(): tool_shop = b"Half-off sale!" @@ -181,30 +196,17 @@ def make_binary_npc_greeters(is_jap=False): material_shop = b"Prices are normal." event_quests = b"" - QUEST_LIST = ( - QUEST_EVENT_JUMP_FOUR_JAGGI, - QUEST_EVENT_BLOOD_SPORT, - QUEST_EVENT_MERCY_MISSION, - QUEST_EVENT_THE_PHANTOM_URAGAAN, - QUEST_EVENT_WORLD_EATER, - QUEST_EVENT_WHERE_GODS_FEAR_TO_TREAD - ) - - ARENA_LIST = ( - GRUDGE_MATCH_ROYAL_LUDROTH, - GRUDGE_MATCH_BIRD_BRUTE, - GRUDGE_MATCH_TWO_FLAMES, - GRUDGE_MATCH_LAND_LORDS - ) + quest_list, arena_list = \ + binary_loader.get_separated_quest_dicts(temporal_slot) event_quests += b"\n".join([ - quest['quest_info']['name'].encode("ascii") - for quest in QUEST_LIST + quest['quest_info']['name'] + for quest in quest_list ]) arena_quests = b"\n".join([ - quest['quest_info']['name'].encode("ascii") - for quest in ARENA_LIST + quest['quest_info']['name'] + for quest in arena_list ]) guildmaster_str = ( @@ -258,14 +260,50 @@ def make_binary_trading_post(): b"Roadmap for a list of features we are working on.", b"
Welcome to Loc Lac!" ]) +MAINTENANCE = b"
".join([ + b"
Monster Hunter 3 (Tri) Server Project", + b"
MH3SP is currently down for maintenance.", + b"
Please check back later!" +]) +UNPATCHED = b"
".join([ + b"
Monster Hunter 3 (Tri) Server Project", + b"

NEW PATCH ARRIVED", + b"
Please see the discord server for the new patch.", + b"New patch is required in order to play with the other", + b"hunters.", + b"
{}", + b"" +]) CHARGE = b"""
MH3 Server Project - No charge.""" # VULGARITY_INFO = b"""MH3 Server Project - Vulgarity info (low).""" VULGARITY_INFO = b"" FMP_VERSION = 1 +# TODO: Backport central and NATNEG constants TIME_STATE = 0 IS_JAP = False + +def get_binary_loader_assisted_version(binary_loader): + return current_event_time_slot(binary_loader) + \ + 1 + binary_loader.version + + +def get_binary_quest_content_from_quest_slot(quest_slot): + return lambda temporal_slot, quest_slot=quest_slot: \ + get_event_slot(quest_slot, temporal_slot) + + +def get_binary_loader_assisted_trading_post_version(binary_loader): + return current_trading_post_time_slot(binary_loader) + \ + 1 + binary_loader.trading_post_version + + +def get_binary_trading_post(temporal_slot): + return lambda binary_loader, temporal_slot=temporal_slot: \ + binary_loader.get_trading_post_day(temporal_slot) + + # Dummy PAT_BINARY PAT_BINARIES = { 0x01: { @@ -277,12 +315,16 @@ def make_binary_trading_post(): "content": make_binary_type_time_events }, 0x03: { - "version": 1, - "content": lambda: make_binary_npc_greeters(is_jap=IS_JAP) + "version": + lambda binary_loader: current_event_time_slot(binary_loader) + 1, + "content": + lambda temporal_slot: lambda binary_loader: + make_binary_npc_greeters(binary_loader, is_jap=IS_JAP, + temporal_slot=temporal_slot) }, 0x04: { - "version": 1, - "content": make_binary_trading_post() + "version": get_binary_loader_assisted_trading_post_version, + "content": get_binary_trading_post # make_binary_trading_post() }, 0x05: { # English "version": 1, @@ -291,46 +333,44 @@ def make_binary_trading_post(): # "content": b"TEST_BINARY" }, 0x06: { # English - "version": 1, - "content": make_binary_event_quest(QUEST_EVENT_JUMP_FOUR_JAGGI) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(0) }, 0x07: { # English - "version": 1, - "content": make_binary_event_quest(QUEST_EVENT_BLOOD_SPORT) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(1) }, 0x08: { # English - "version": 1, - "content": make_binary_event_quest(QUEST_EVENT_MERCY_MISSION) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(2) }, 0x09: { # English - "version": 1, - "content": make_binary_event_quest(QUEST_EVENT_THE_PHANTOM_URAGAAN) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(3) }, 0x0a: { # Japanese(?)English - "version": 1, - "content": make_binary_event_quest(QUEST_EVENT_WORLD_EATER) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(4) }, 0x0b: { # Japanese(?)English - "version": 1, - "content": make_binary_event_quest( - QUEST_EVENT_WHERE_GODS_FEAR_TO_TREAD - ) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(5) }, 0x0c: { # Japanese(?)English - "version": 1, - "content": make_binary_event_quest(GRUDGE_MATCH_ROYAL_LUDROTH) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(6) }, 0x0d: { # Japanese(?)English - "version": 1, - "content": make_binary_event_quest(GRUDGE_MATCH_BIRD_BRUTE) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(7) }, 0x0e: { # Japanese(?)English - "version": 1, - "content": make_binary_event_quest(GRUDGE_MATCH_TWO_FLAMES) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(8) }, 0x0f: { # Japanese(?)English - "version": 1, - "content": make_binary_event_quest(GRUDGE_MATCH_LAND_LORDS) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(9) }, 0x10: { # French "version": 1, @@ -341,58 +381,60 @@ def make_binary_trading_post(): "content": make_binary_type_time_events }, 0x12: { # French - "version": 1, - "content": make_binary_npc_greeters + "version": + lambda binary_loader: current_event_time_slot(binary_loader) + 1, + "content": + lambda temporal_slot: lambda binary_loader: + make_binary_npc_greeters(binary_loader, + temporal_slot=temporal_slot) }, 0x13: { # French - "version": 1, - "content": make_binary_trading_post() + "version": get_binary_loader_assisted_trading_post_version, + "content": get_binary_trading_post # make_binary_trading_post() }, 0x14: { # French "version": 1, "content": b"dummy_14\0" }, 0x15: { # French - "version": 1, - "content": make_binary_event_quest(QUEST_EVENT_JUMP_FOUR_JAGGI) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(0) }, 0x16: { # French - "version": 1, - "content": make_binary_event_quest(QUEST_EVENT_BLOOD_SPORT) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(1) }, 0x17: { # French - "version": 1, - "content": make_binary_event_quest(QUEST_EVENT_MERCY_MISSION) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(2) }, 0x18: { # French - "version": 1, - "content": make_binary_event_quest(QUEST_EVENT_THE_PHANTOM_URAGAAN) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(3) }, 0x19: { # French - "version": 1, - "content": make_binary_event_quest(QUEST_EVENT_WORLD_EATER) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(4) }, 0x1a: { # French - "version": 1, - "content": make_binary_event_quest( - QUEST_EVENT_WHERE_GODS_FEAR_TO_TREAD - ) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(5) }, 0x1b: { # French - "version": 1, - "content": make_binary_event_quest(GRUDGE_MATCH_ROYAL_LUDROTH) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(6) }, 0x1c: { # French - "version": 1, - "content": make_binary_event_quest(GRUDGE_MATCH_BIRD_BRUTE) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(7) }, 0x1d: { # French - "version": 1, - "content": make_binary_event_quest(GRUDGE_MATCH_TWO_FLAMES) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(8) }, 0x1e: { # French - "version": 1, - "content": make_binary_event_quest(GRUDGE_MATCH_LAND_LORDS) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(9) }, 0x1f: { # German "version": 1, @@ -403,58 +445,60 @@ def make_binary_trading_post(): "content": make_binary_type_time_events }, 0x21: { # German - "version": 1, - "content": make_binary_npc_greeters + "version": + lambda binary_loader: current_event_time_slot(binary_loader) + 1, + "content": + lambda temporal_slot: lambda binary_loader: + make_binary_npc_greeters(binary_loader, + temporal_slot=temporal_slot) }, 0x22: { # German - "version": 1, - "content": make_binary_trading_post() + "version": get_binary_loader_assisted_trading_post_version, + "content": get_binary_trading_post # make_binary_trading_post() }, 0x23: { # German "version": 1, "content": b"dummy_23\0" }, 0x24: { # German - "version": 1, - "content": make_binary_event_quest(QUEST_EVENT_JUMP_FOUR_JAGGI) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(0) }, 0x25: { # German - "version": 1, - "content": make_binary_event_quest(QUEST_EVENT_BLOOD_SPORT) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(1) }, 0x26: { # German - "version": 1, - "content": make_binary_event_quest(QUEST_EVENT_MERCY_MISSION) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(2) }, 0x27: { # German - "version": 1, - "content": make_binary_event_quest(QUEST_EVENT_THE_PHANTOM_URAGAAN) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(3) }, 0x28: { # German - "version": 1, - "content": make_binary_event_quest(QUEST_EVENT_WORLD_EATER) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(4) }, 0x29: { # German - "version": 1, - "content": make_binary_event_quest( - QUEST_EVENT_WHERE_GODS_FEAR_TO_TREAD - ) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(5) }, 0x2a: { # German - "version": 1, - "content": make_binary_event_quest(GRUDGE_MATCH_ROYAL_LUDROTH) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(6) }, 0x2b: { # German - "version": 1, - "content": make_binary_event_quest(GRUDGE_MATCH_BIRD_BRUTE) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(7) }, 0x2c: { # German - "version": 1, - "content": make_binary_event_quest(GRUDGE_MATCH_TWO_FLAMES) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(8) }, 0x2d: { # German - "version": 1, - "content": make_binary_event_quest(GRUDGE_MATCH_LAND_LORDS) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(9) }, 0x2e: { # Italian "version": 1, @@ -465,58 +509,60 @@ def make_binary_trading_post(): "content": make_binary_type_time_events }, 0x30: { # Italian - "version": 1, - "content": make_binary_npc_greeters + "version": + lambda binary_loader: current_event_time_slot(binary_loader) + 1, + "content": + lambda temporal_slot: lambda binary_loader: + make_binary_npc_greeters(binary_loader, + temporal_slot=temporal_slot) }, 0x31: { # Italian - "version": 1, - "content": make_binary_trading_post() + "version": get_binary_loader_assisted_trading_post_version, + "content": get_binary_trading_post # make_binary_trading_post() }, 0x32: { # Italian "version": 1, "content": b"dummy_32\0" }, 0x33: { # Italian - "version": 1, - "content": make_binary_event_quest(QUEST_EVENT_JUMP_FOUR_JAGGI) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(0) }, 0x34: { # Italian - "version": 1, - "content": make_binary_event_quest(QUEST_EVENT_BLOOD_SPORT) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(1) }, 0x35: { # Italian - "version": 1, - "content": make_binary_event_quest(QUEST_EVENT_MERCY_MISSION) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(2) }, 0x36: { # Italian - "version": 1, - "content": make_binary_event_quest(QUEST_EVENT_THE_PHANTOM_URAGAAN) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(3) }, 0x37: { # Italian - "version": 1, - "content": make_binary_event_quest(QUEST_EVENT_WORLD_EATER) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(4) }, 0x38: { # Italian - "version": 1, - "content": make_binary_event_quest( - QUEST_EVENT_WHERE_GODS_FEAR_TO_TREAD - ) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(5) }, 0x39: { # Italian - "version": 1, - "content": make_binary_event_quest(GRUDGE_MATCH_ROYAL_LUDROTH) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(6) }, 0x3a: { # Italian - "version": 1, - "content": make_binary_event_quest(GRUDGE_MATCH_BIRD_BRUTE) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(7) }, 0x3b: { # Italian - "version": 1, - "content": make_binary_event_quest(GRUDGE_MATCH_TWO_FLAMES) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(8) }, 0x3c: { # Italian - "version": 1, - "content": make_binary_event_quest(GRUDGE_MATCH_LAND_LORDS) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(9) }, 0x3d: { # Spanish "version": 1, @@ -527,61 +573,84 @@ def make_binary_trading_post(): "content": make_binary_type_time_events }, 0x3f: { # Spanish - "version": 1, - "content": make_binary_npc_greeters + "version": + lambda binary_loader: current_event_time_slot(binary_loader) + 1, + "content": + lambda temporal_slot: lambda binary_loader: + make_binary_npc_greeters(binary_loader, + temporal_slot=temporal_slot) }, 0x40: { # Spanish - "version": 1, - "content": make_binary_trading_post() + "version": get_binary_loader_assisted_trading_post_version, + "content": get_binary_trading_post # make_binary_trading_post() }, 0x41: { # Spanish "version": 1, "content": b"dummy_41\0" }, 0x42: { # Spanish - "version": 1, - "content": make_binary_event_quest(QUEST_EVENT_JUMP_FOUR_JAGGI) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(0) }, 0x43: { # Spanish - "version": 1, - "content": make_binary_event_quest(QUEST_EVENT_BLOOD_SPORT) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(1) }, 0x44: { # Spanish - "version": 1, - "content": make_binary_event_quest(QUEST_EVENT_MERCY_MISSION) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(2) }, 0x45: { # Spanish - "version": 1, - "content": make_binary_event_quest(QUEST_EVENT_THE_PHANTOM_URAGAAN) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(3) }, 0x46: { # Spanish - "version": 1, - "content": make_binary_event_quest(QUEST_EVENT_WORLD_EATER) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(4) }, 0x47: { # Spanish - "version": 1, - "content": make_binary_event_quest( - QUEST_EVENT_WHERE_GODS_FEAR_TO_TREAD - ) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(5) }, 0x48: { # Spanish - "version": 1, - "content": make_binary_event_quest(GRUDGE_MATCH_ROYAL_LUDROTH) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(6) }, 0x49: { # Spanish - "version": 1, - "content": make_binary_event_quest(GRUDGE_MATCH_BIRD_BRUTE) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(7) }, 0x4a: { # Spanish - "version": 1, - "content": make_binary_event_quest(GRUDGE_MATCH_TWO_FLAMES) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(8) }, 0x4b: { # Spanish - "version": 1, - "content": make_binary_event_quest(GRUDGE_MATCH_LAND_LORDS) + "version": get_binary_loader_assisted_version, + "content": get_binary_quest_content_from_quest_slot(9) }, } + +def get_pat_binary_from_version(binary_type, version): + # type: (int, int) -> bytes|Callable[QuestLoader, bytes] + """Helper to retrieve binary data. + + Used by the following packets: + - BinaryHead + - BinaryData + + TODO: Refactor this and the get_binary_* functions. + """ + static_binaries = ( + 0x01, 0x02, 0x05, 0x10, 0x11, + 0x14, 0x1f, 0x20, 0x23, 0x2e, 0x2f, + 0x32, 0x3d, 0x3e, 0x41 + ) + if binary_type in static_binaries: + return PAT_BINARIES[binary_type]["content"] + return PAT_BINARIES[binary_type]["content"](version) + + PAT_CATEGORIES = { 0x60: "Opn", 0x61: "Rfp", diff --git a/mh/database.py b/mh/database.py index 468686f..ad63058 100644 --- a/mh/database.py +++ b/mh/database.py @@ -1,6 +1,6 @@ #! /usr/bin/env python # -*- coding: utf-8 -*- -# SPDX-FileCopyrightText: Copyright (C) 2021-2023 MH3SP Server Project +# SPDX-FileCopyrightText: Copyright (C) 2021-2025 MH3SP Server Project # SPDX-License-Identifier: AGPL-3.0-or-later """Monster Hunter database module.""" @@ -242,7 +242,7 @@ def get_capacity(self): def get_state(self): if self.reserved: return LayerState.FULL - + size = self.get_population() if size == 0: return LayerState.EMPTY @@ -885,6 +885,9 @@ def delete_friend(self, capcom_id, friend_id): return self.parent.delete_friend(capcom_id, friend_id) +# TODO: Backport MySQLDatabase + + class DebugDatabase(TempSQLiteDatabase): """For testing purpose.""" def __init__(self, *args, **kwargs): diff --git a/mh/equipment_utils.py b/mh/equipment_utils.py index 19de8e3..c1b02d5 100644 --- a/mh/equipment_utils.py +++ b/mh/equipment_utils.py @@ -1,6 +1,6 @@ #! /usr/bin/env python # -*- coding: utf-8 -*- -# SPDX-FileCopyrightText: Copyright (C) 2023 MH3SP Server Project +# SPDX-FileCopyrightText: Copyright (C) 2023-2025 MH3SP Server Project # SPDX-License-Identifier: AGPL-3.0-or-later """Equipment utils module.""" @@ -24,7 +24,7 @@ def item_slot(item_id, quantity): def create_arena_equipment_set(sets): arena_equipment_set = b"" for set_num in range(4): - weapon1, weapon2, weapon3, helm, chestpiece, gauntlets,\ + weapon1, weapon2, weapon3, helm, chestpiece, gauntlets, \ faulds, leggings, items, gunner_pouch = sets[set_num] # Weapon arena_equipment_set += slot(*weapon1) diff --git a/mh/pat.py b/mh/pat.py index 3ee4537..6bf7b47 100644 --- a/mh/pat.py +++ b/mh/pat.py @@ -1,6 +1,6 @@ #! /usr/bin/env python # -*- coding: utf-8 -*- -# SPDX-FileCopyrightText: Copyright (C) 2021-2023 MH3SP Server Project +# SPDX-FileCopyrightText: Copyright (C) 2021-2025 MH3SP Server Project # SPDX-License-Identifier: AGPL-3.0-or-later """Monster Hunter PAT module.""" @@ -9,32 +9,39 @@ from datetime import timedelta from other.utils import Logger, get_config, get_external_ip, hexdump, to_str +from mh.quest_utils import QuestLoader import mh.pat_item as pati import mh.server as server import mh.time_utils as time_utils from mh.constants import \ LAYER_CHAT_COLORS, TERMS_VERSION, TERMS, SUBTERMS, ANNOUNCE, \ - CHARGE, VULGARITY_INFO, FMP_VERSION, PAT_BINARIES, PAT_NAMES, PatID4 + CHARGE, VULGARITY_INFO, FMP_VERSION, PAT_BINARIES, PAT_NAMES, \ + MAINTENANCE, UNPATCHED, \ + PatID4, get_pat_binary_from_version from mh.session import Session import mh.database as db try: - from typing import Literal, List, Union, Optional # noqa: F401 + from typing import Literal - LayerUserNumUpdate = Literal[1,2,3,4,5] + LayerUserNumUpdate = Literal[1, 2, 3, 4, 5] except ImportError: pass g_circle = None g_circle_info_set = None +# TODO: Refactor it, possible point of failure without fallback +g_binary_loader = QuestLoader("event/quest_rotation.json") + class PatServer(server.BasicPatServer, Logger): """Generic PAT server class.""" def __init__(self, address, handler_class, max_thread_count=0, - logger=None, debug_mode=False, ssl_cert=None, ssl_key=None): + logger=None, debug_mode=False, ssl_cert=None, ssl_key=None, + no_timeout=False): server.BasicPatServer.__init__( self, address, handler_class, max_thread_count, ssl_cert=ssl_cert, ssl_key=ssl_key @@ -45,6 +52,8 @@ def __init__(self, address, handler_class, max_thread_count=0, self.info("Running on {} port {}".format(*address)) self.debug_con = [] self.debug_mode = debug_mode + self.binary_loader = g_binary_loader + self.no_timeout = no_timeout def add_to_debug(self, con): """Add connection to the debug connection list.""" @@ -69,6 +78,8 @@ def get_pat_handler(self, session): return None + # TODO: Backport broadcasting refactoring if needed + def broadcast(self, players, packet_id, data, seq, to_exclude=None): # type: (db.Players, int, bytes, int, Session|None) -> None handlers = [] @@ -86,14 +97,14 @@ def broadcast(self, players, packet_id, data, seq, to_exclude=None): def layer_broadcast(self, session, packet_id, data, seq, exclude_self=True): # type: (Session, int, bytes, int, bool) -> None - self.broadcast(session.get_layer_players(), packet_id, data, seq, + self.broadcast(session.get_layer_players(), packet_id, data, seq, session if exclude_self else None) def circle_broadcast(self, circle, packet_id, data, seq, session=None): # type: (db.Circle, int, bytes, int, Session|None) -> None - self.broadcast(circle.players, packet_id, data, seq, session) - + with circle.lock(): + self.broadcast(circle.players, packet_id, data, seq, session) class PatRequestHandler(server.BasicPatHandler): @@ -118,6 +129,10 @@ def on_init(self): self.ping_timer = time_utils.Timer() self.requested_connection = False self.line_check = True + # TODO: Backport remaining patch check (see OPN server code) + self.game_id = None + self.natneg_url = b"natneg1.gs.nintendowifi.net" + self.game_patched = True def try_send_packet(self, packet_id=0, data=b'', seq=0): """Send PAT packet and catch exceptions.""" @@ -268,6 +283,9 @@ def recvAnsConnection(self, packet_id, data, seq): The games sends the PAT environment properties. """ + BANNED_ONLINE_SUPPORT_CODES = ( + b"EXAMPLEEXAM", + ) settings = pati.ConnectionData.unpack(data) self.server.debug("Connection: {!r}".format(settings)) pat_ticket = b"" @@ -277,7 +295,17 @@ def recvAnsConnection(self, packet_id, data, seq): _, pat_ticket = pati.unpack_any(settings.online_support_code) self.server.info("Client {} Ticket `{}`".format(self.client_address, pat_ticket)) - self.sendNtcLogin(5, settings, seq) + + if not self.game_patched: + self.sendNtcLogin(2, settings, seq) + return + + has_ban = "online_support_code" in settings and \ + pat_ticket in BANNED_ONLINE_SUPPORT_CODES + if has_ban or len(self.session.get_servers()) == 0: + self.sendNtcLogin(2, settings, seq) + else: + self.sendNtcLogin(5, settings, seq) def sendNtcLogin(self, server_status, connection_data, seq): """NtcLogin packet. @@ -292,6 +320,41 @@ def sendNtcLogin(self, server_status, connection_data, seq): self.session = self.session.get(connection_data) self.send_packet(PatID4.NtcLogin, data, seq) + def sendReqMemoryCheck(self, addr, size): + """ReqMemoryCheck packet. + + ID: 60810100 + JP: メモリ内容要求 + TR: Memory content request + """ + data = pati.MemoryData.pack_from(False, False) + data += struct.pack(">II", addr, size) + self.send_packet(PatID4.ReqMemoryCheck, data, 0) + + def recvReqMaintenance(self, packet_id, data, seq): + """ReqMaintenance packet. + + ID: 62200100 + JP: メンテナンス情報要求 + TR: Maintenance information request + """ + if self.game_patched: + self.sendAnsMaintenance(MAINTENANCE, seq) + else: + self.sendAnsMaintenance(UNPATCHED.format(self.natneg_url), seq) + + def sendAnsMaintenance(self, maintenance, seq): + """AnsMaintenance packet. + + ID: 62200200 + JP: メンテナンス情報通知 + TR: Maintenance information notification + + The server replies with the maintenance information text. + """ + data = pati.lp2_string(maintenance) + self.send_packet(PatID4.AnsMaintenance, data, seq) + def recvReqAuthenticationToken(self, packet_id, data, seq): """ReqAuthenticationToken packet. @@ -885,7 +948,7 @@ def sendAnsFmpListVersion(self, seq): JP: FMPリストバージョン確認応答 TR: FMP list version acknowledgment """ - data = struct.pack(">I", FMP_VERSION) + data = struct.pack(">I", FMP_VERSION) # TODO: Backport central code self.send_packet(PatID4.AnsFmpListVersion, data, seq) def sendAnsFmpListVersion2(self, seq): @@ -895,7 +958,7 @@ def sendAnsFmpListVersion2(self, seq): JP: FMPリストバージョン確認応答 TR: FMP list version acknowledgment """ - data = struct.pack(">I", FMP_VERSION) + data = struct.pack(">I", FMP_VERSION) # TODO: Backport central code self.send_packet(PatID4.AnsFmpListVersion2, data, seq) def recvReqFmpListHead(self, packet_id, data, seq): @@ -907,6 +970,7 @@ def recvReqFmpListHead(self, packet_id, data, seq): """ # TODO: Might be worth investigating these parameters as # they might be useful when using multiple FMP servers. + # TODO: Backport preserve server ids logic version, first_index, count = struct.unpack_from( ">III", data ) # noqa: F841 @@ -1045,12 +1109,14 @@ def packNtcLayerUserNum(update_type, layer_data): ID: NtcLayerUserNum JP: レイヤ人数通知 TR: Layer number notification - + UPDATE TYPE: 1 - Update numbers in the current layer - 2 - Update numbers in the current layer plus fire an event (unknown) + 2 - Update numbers in the current layer + plus fire an event (unknown) 3 - Update numbers in an unknown struct in an array - 4 - Update numbers to the current layer's child (child_id=layer_path) + 4 - Update numbers to the current layer's child + (child_id=layer_path) 5 - Update numbers in unk fields in the NetworkLayerPat struct """ @@ -1077,6 +1143,7 @@ def recvReqFmpInfo(self, packet_id, data, seq): fmp_data.server_address = pati.String(server.addr or fmp_addr) fmp_data.server_port = pati.Word(server.port or fmp_port) fmp_data.assert_fields(fields) + # TODO: Backport central logic if packet_id == PatID4.ReqFmpInfo: self.sendAnsFmpInfo(fmp_data, fields, seq) elif packet_id == PatID4.ReqFmpInfo2: @@ -1133,10 +1200,13 @@ def sendAnsBinaryHead(self, binary_type, seq): - Spanish: 0x41, 0x3d, 0x41, 0x3e, 0x3f, 0x40 """ binary = PAT_BINARIES[binary_type] - content = binary["content"] + version = binary["version"] + if callable(version): + version = version(self.server.binary_loader) + content = get_pat_binary_from_version(binary_type, version) if callable(content): - content = content() - data = struct.pack(">II", binary["version"], len(content)) + content = content(self.server.binary_loader) + data = struct.pack(">II", version, len(content)) self.send_packet(PatID4.AnsBinaryHead, data, seq) def recvReqBinaryData(self, packet_id, data, seq): @@ -1149,10 +1219,9 @@ def recvReqBinaryData(self, packet_id, data, seq): TODO: Handle multiple versions of a binary """ binary_type, version, offset, size = struct.unpack(">BIII", data) - binary = PAT_BINARIES[binary_type] - content = binary["content"] + content = get_pat_binary_from_version(binary_type, version) if callable(content): - content = content() + content = content(self.server.binary_loader) self.sendAnsBinaryData(version, offset, size, content, seq) def sendAnsBinaryData(self, version, offset, size, binary, seq): @@ -1438,10 +1507,10 @@ def recvReqBinaryVersion(self, packet_id, data, seq): JP: バイナリバージョン確認 TR: Binary version check """ - unk, = struct.unpack(">B", data) - self.sendAnsBinaryVersion(unk, seq) + binary_type, = struct.unpack(">B", data) + self.sendAnsBinaryVersion(binary_type, seq) - def sendAnsBinaryVersion(self, unk, seq): + def sendAnsBinaryVersion(self, binary_type, seq): """AnsBinaryVersion packet. ID: 63010200 @@ -1449,7 +1518,10 @@ def sendAnsBinaryVersion(self, unk, seq): TR: Binary version acknowledgment """ unused = 0 - version = 1 # The game might send binary requests for this version + binary = PAT_BINARIES[binary_type] + version = binary["version"] + if callable(version): + version = version(self.server.binary_loader) data = struct.pack(">BI", unused, version) self.send_packet(PatID4.AnsBinaryVersion, data, seq) @@ -2399,10 +2471,11 @@ def sendAnsLayerCreateHead(self, number, seq): seq) return self.send_packet(PatID4.AnsLayerCreateHead, data, seq) + + # TODO: Backport layer refactoring if needed path = self.session.get_layer_path() path.city_id = number self.notify_city_info_set(path) - def recvReqLayerCreateSet(self, packet_id, data, seq): """ReqLayerCreateSet packet. @@ -2430,9 +2503,10 @@ def sendAnsLayerCreateSet(self, number, layer_set, extra, seq): self.session.layer_create(number, layer_set, extra) self.send_packet(PatID4.AnsLayerCreateSet, data, seq) + # TODO: Backport layer refactoring if needed path = self.session.get_layer_path() self.notify_city_number_set(path) - + def recvReqLayerCreateFoot(self, packet_id, data, seq): """ReqLayerCreateFoot packet. @@ -2454,6 +2528,7 @@ def sendAnsLayerCreateFoot(self, number, unk, seq): data = struct.pack(">H", number) self.send_packet(PatID4.AnsLayerCreateFoot, data, seq) + # TODO: Backport layer refactoring if needed path = self.session.get_layer_path() path.city_id = number self.notify_city_info_set(path) @@ -2477,12 +2552,13 @@ def sendAnsLayerUp(self, data, seq): JP: レイヤアップ返答 TR: Layer up response """ + # TODO: Backport layer refactoring if needed self.notify_layer_departure(False) self.send_packet(PatID4.AnsLayerUp, b"", seq) @staticmethod def packNtcLayerInfoSet(layer_path, layer_data, optional_fields): - # type: (pati.LayerPath, pati.LayerData, List[int]) -> bytes + # type: (pati.LayerPath, pati.LayerData, list[int]) -> bytes """NtcLayerInfoSet packet. ID: 64201000 @@ -2494,7 +2570,6 @@ def packNtcLayerInfoSet(layer_path, layer_data, optional_fields): data += pati.pack_optional_fields(optional_fields) return data - def recvReqLayerMediationList(self, packet_id, data, seq): """ReqLayerMediationList packet. @@ -2657,6 +2732,8 @@ def sendNtcCircleHost(self, circle, new_leader, new_leader_index, seq): self.server.circle_broadcast(circle, PatID4.NtcCircleHost, data, seq, self.session) + # TODO: Backport notify_city change when needed + def notify_city_info_set(self, path): # type: (pati.LayerPath) -> None city = self.get_layer(path) @@ -2666,9 +2743,9 @@ def notify_city_info_set(self, path): layer_data = pati.LayerData.create_from(path.city_id, city, path) info_set = self.packNtcLayerInfoSet(path, layer_data, city.optional_fields) - self.server.broadcast(gate.players, PatID4.NtcLayerInfoSet, info_set, 0, - self.session) - + self.server.broadcast(gate.players, PatID4.NtcLayerInfoSet, + info_set, 0, self.session) + def notify_city_number_set(self, path): # type: (pati.LayerPath) -> None city = self.get_layer(path) @@ -2677,15 +2754,16 @@ def notify_city_number_set(self, path): gate = city.parent layer_data = pati.LayerData.create_from(path.city_id, city, path) number_set = self.packNtcLayerUserNum(4, layer_data) - self.server.broadcast(gate.players, PatID4.NtcLayerUserNum, number_set, 0, - self.session) - + self.server.broadcast(gate.players, PatID4.NtcLayerUserNum, + number_set, 0, self.session) + @staticmethod def get_layer(path): - # type: (pati.LayerPath) -> Optional[db.Server | db.Gate | db.City] + # type: (pati.LayerPath) -> db.Server | db.Gate | db.City | None database = db.get_instance() if path.city_id > 0: - return database.get_city(path.server_id, path.gate_id, path.city_id) + return database.get_city(path.server_id, path.gate_id, + path.city_id) elif path.gate_id > 0: return database.get_gate(path.server_id, path.gate_id) elif path.server_id > 0: @@ -2706,6 +2784,8 @@ def notify_layer_departure(self, end): if self.session.local_info['circle_id'] is not None: self.notify_circle_leave(self.session.local_info['circle_id'] + 1, seq=0) + + # TODO: Backport refactoring with session_layer_end if end: self.session.layer_end() else: @@ -2719,7 +2799,6 @@ def notify_layer_departure(self, end): if city.leader is None: self.notify_city_info_set(path) - def notify_circle_leave(self, circle_index, seq): circle = self.session.get_circle() with circle.lock(): @@ -2744,6 +2823,7 @@ def on_exception(self, e): def on_finish(self): self.notify_layer_departure(True) + # TODO: Backport session_layer_end self.session.disconnect() self.session.delete() @@ -2798,7 +2878,7 @@ def on_tick(self): # Send a ping with 30 seconds interval if self.ping_timer.elapsed() >= 30: - if not self.server.debug_enabled() and not self.line_check: + if not self.server.no_timeout and not self.line_check: raise Exception("Client timed out.") self.line_check = False self.sendReqLineCheck() diff --git a/mh/pat_item.py b/mh/pat_item.py index d4eb3b3..c1676d4 100644 --- a/mh/pat_item.py +++ b/mh/pat_item.py @@ -1,6 +1,6 @@ #! /usr/bin/env python # -*- coding: utf-8 -*- -# SPDX-FileCopyrightText: Copyright (C) 2021-2023 MH3SP Server Project +# SPDX-FileCopyrightText: Copyright (C) 2021-2025 MH3SP Server Project # SPDX-License-Identifier: AGPL-3.0-or-later """Monster Hunter PAT item module.""" @@ -587,6 +587,7 @@ class UserSearchInfo(PatData): (0x10, "info_mine_0x10"), ) + class LayerPath(object): STRUCT = struct.Struct(">IIHHH") @@ -595,7 +596,7 @@ def __init__(self, server_id=None, gate_id=None, city_id=None): self.server_id = server_id or 0 self.gate_id = gate_id or 0 self.city_id = city_id or 0 - + def get_depth(self): # type: () -> int if self.city_id > 0: @@ -611,8 +612,8 @@ def pack(self): depth = self.get_depth() unk = 1 return self.STRUCT.pack(depth, self.server_id, unk, self.gate_id, - self.city_id) - + self.city_id) + @staticmethod def unpack(data): # type: (bytes) -> LayerPath @@ -624,7 +625,7 @@ def unpack(data): gate_id = 0 city_id = 0 for i in range(field_count): - if i == 0: + if i == 0: _ = unpacker.struct(">H") elif i == 1: gate_id = unpacker.struct(">H") @@ -648,7 +649,7 @@ class LayerData(PatData): (0x0c, "unk_long_0x0c"), (0x0d, "unk_word_0x0d"), (0x10, "state"), # 0 = Joinable / 1 = Empty / 2 = Full - (0x11, "positionInterval"), # player position synchronization timer + (0x11, "positionInterval"), # player position synchronization timer (0x12, "unk_byte_0x12"), (0x15, "layer_depth"), (0x16, "layer_pathname"), @@ -689,7 +690,7 @@ def create_from(index, layer, path=None): data.size2 = Long(layer.get_population()) data.capacity = Long(layer.get_capacity()) data.child_population = Long(layer.in_quest_players()) - data.unk_long_0x0c = Long(0xc) # TODO: Reverse + data.unk_long_0x0c = Long(0xc) # TODO: Reverse data.state = Byte(layer.get_state()) data.layer_depth = Byte(layer.LAYER_DEPTH) data.layer_pathname = String(layer.get_pathname()) @@ -704,6 +705,20 @@ def create_from(index, layer, path=None): return data +class MemoryData(PatData): + FIELDS = ( + (0x01, "unk_byte_0x01"), + (0x02, "unk_byte_0x02"), + ) + + @staticmethod + def pack_from(unk1, unk2): + data = MemoryData() + data.unk_byte_0x01 = Byte(int(bool(unk1))) + data.unk_byte_0x01 = Byte(int(bool(unk2))) + return data.pack() + + class FriendData(PatData): FIELDS = ( (0x01, "index"), @@ -868,6 +883,7 @@ class LayerBinaryInfo(PatData): (0x03, "hunter_name") ) + class LayerUserNum(PatData): FIELDS = ( (0x01, "path"), @@ -895,7 +911,6 @@ def pack_from(layer_data): return data.pack() - def patdata_extender(unpacker): """PatData classes must be defined above this function.""" for name, value in globals().items(): @@ -969,6 +984,7 @@ def get_fmp_servers(session, first_index, count): start = first_index - 1 end = start + count servers = session.get_servers()[start:end] + # TODO: Backport the central logic for i, server in enumerate(servers, first_index): fmp_data = FmpData() fmp_data.index = Long(i) # The server might be full, if zero @@ -989,6 +1005,9 @@ def get_fmp_servers(session, first_index, count): return data +# TODO: Backport get_fmp_central_servers + + def get_layer_children(session, first_index, count, sibling=False): assert first_index > 0, "Invalid list index" diff --git a/mh/quest_utils.py b/mh/quest_utils.py index 66edcc3..06ed192 100644 --- a/mh/quest_utils.py +++ b/mh/quest_utils.py @@ -1,14 +1,30 @@ #! /usr/bin/env python # -*- coding: utf-8 -*- -# SPDX-FileCopyrightText: Copyright (C) 2022-2023 MH3SP Server Project +# SPDX-FileCopyrightText: Copyright (C) 2022-2025 MH3SP Server Project # SPDX-License-Identifier: AGPL-3.0-or-later """Quest utils module.""" from os import path +import json import struct from other.utils import pad from mh.equipment_utils import create_arena_equipment_set +try: + # Python 2 + basestring # str, unicode +except NameError: + # Python 3 + basestring = str + from typing import Any # noqa: F401 + + +class WaveType: + none = 0 + monster = 1 + item = 2 + unknown = 3 + class LocationType: QUEST_LOCATION_NONE = 0 @@ -26,6 +42,23 @@ class LocationType: QUEST_LOCATION_WATER_ARENA_2 = 12 +LOCATION_SIZE = { + LocationType.QUEST_LOCATION_NONE: 0, + LocationType.QUEST_LOCATION_D_ISLAND: 13, + LocationType.QUEST_LOCATION_SANDY_PLAINS: 12, + LocationType.QUEST_LOCATION_FLOODED_FOR: 11, + LocationType.QUEST_LOCATION_TUNDRA: 10, + LocationType.QUEST_LOCATION_VOLCANO: 11, + LocationType.QUEST_LOCATION_GRT_DESERT: 3, + LocationType.QUEST_LOCATION_UW_RUIN: 4, + LocationType.QUEST_LOCATION_LAND_ARENA_1: 2, + LocationType.QUEST_LOCATION_LAND_ARENA_2: 2, + LocationType.QUEST_LOCATION_WATER_ARENA_1: 2, + LocationType.QUEST_LOCATION_SACRED_LAND: 2, + LocationType.QUEST_LOCATION_WATER_ARENA_2: 2, +} + + class Monster: none = 0 rathian = 1 @@ -62,20 +95,20 @@ class Monster: fish = 32 altaroth = 33 kelbi = 34 - bnahabra1 = 35 - bnahabra2 = 36 - bnahabra3 = 37 - bnahabra4 = 38 - brd_wyv = 39 - fly_wyv = 40 - brt_wyv = 41 - psc_wyv = 42 - levthn = 43 - elddrg = 44 - lynian = 45 - herbvr = 46 - nptron = 47 - fish = 48 + bnahabra1 = 35 # Gigginox Egg + bnahabra2 = 36 # Bnahabra (Blue Wing) + bnahabra3 = 37 # Bnahabra (Orange Wing) + bnahabra4 = 38 # Bnahabra (Green Wing) + brd_wyv = 39 # Bnahabra (Red Wing) + fly_wyv = 40 # ---- INVALID AS AN IN-QUEST MONSTER --- + brt_wyv = 41 # ---- INVALID AS AN IN-QUEST MONSTER --- + psc_wyv = 42 # ---- INVALID AS AN IN-QUEST MONSTER --- + levthn = 43 # ---- INVALID AS AN IN-QUEST MONSTER --- + elddrg = 44 # ---- INVALID AS AN IN-QUEST MONSTER --- + lynian = 45 # ---- INVALID AS AN IN-QUEST MONSTER --- + herbvr = 46 # ---- INVALID AS AN IN-QUEST MONSTER --- + nptron = 47 # ---- INVALID AS AN IN-QUEST MONSTER --- + unk = 48 # ---- INVALID AS AN IN-QUEST MONSTER --- class QuestRankType: @@ -880,8 +913,8 @@ class QuestRestrictionType: RESTRICTION_46_JOIN = 26 -def make_monster_quest_type(monster_type, boss_id, enabled, level, - min, size, max): +def make_monster_quest_type(monster_type, starting_area, boss_id, spawn_count, + level, min, size, max): data = b"" # - id: monster_type # type: u1 @@ -890,14 +923,12 @@ def make_monster_quest_type(monster_type, boss_id, enabled, level, # - id: boss_id # type: u2 - data += struct.pack(">h", boss_id) + data += struct.pack(">B", starting_area) + data += struct.pack(">B", boss_id) - # - id: enabled + # - id: spawn_count # type: u1 - if enabled: - data += struct.pack(">B", 0x01) - else: - data += struct.pack(">B", 0x00) + data += struct.pack(">B", spawn_count) # - id: level # type: u1 @@ -988,7 +1019,13 @@ def make_binary_event_quest(quest_data): 'starting_position': starting_position, 'general_enemy_level': general_enemy_level, 'summon': summon, - 'smallmonster_data_file': smallmonster_data, + 'wave_1_transition_type': wave_1_transition_type, + 'wave_1_transition_target': wave_1_transition_target, + 'wave_1_transition_quantity': wave_1_transition_quantity, + 'wave_2_transition_type': wave_2_transition_type, + 'wave_2_transition_target': wave_2_transition_target, + 'wave_2_transition_quantity': wave_2_transition_quantity, + 'smallmonster_data_file': smallmonster_data (or None), }, """ quest_info = quest_data['quest_info'] @@ -1085,95 +1122,130 @@ def make_binary_event_quest(quest_data): """ unknown = quest_data['unknown'] - # TOOO: Remove encode("ascii") and use bytes instead data = b"" # - id: name # type: str # size: 44 - data += pad(quest_info['name'].encode("ascii"), 40) # Size 0x28 + # offset: 0x0000 + data += pad(quest_info['name'], 40) # Size 0x28 data += struct.pack(">I", 0x00000000) # - id: quest_id # type: u2 + # offset: 0x002C data += struct.pack(">H", quest_info['quest_id']) # - id: description # type: str # size: 92 - data += pad(quest_info['description'].encode("ascii"), 80) + # offset: 0x002E + data += pad(quest_info['description'], 80) data += b'\0' * 0xC # Padding # - id: quest_rank # type: u1 # enum: QuestRankType + # offset: 0x008A data += struct.pack(">B", quest_info['quest_rank']) # - id: location # type: u1 # enum: LocationType + # offset: 0x008B data += struct.pack(">B", quest_info['location']) # Offset 0x8C # - id: sub_quest_1_title # type: str # size: 41 + # offset: 0x008C data += pad( - objective_details['subquest_1']['description'].encode("ascii"), + objective_details['subquest_1']['description'], 0x29 ) # - id: sub_quest_2_title # type: str # size: 41 + # offset: 0x00B5 data += pad( - objective_details['subquest_2']['description'].encode("ascii"), + objective_details['subquest_2']['description'], 0x29 ) - # - id: sucess_message + # - id: success_message # type: str # size: 92 - data += pad(quest_info['success_message'].encode("ascii"), 0x5C) + # offset: 0x00DE + data += pad(quest_info['success_message'], 0x5C) # - id: time_limit # type: u2 - data += struct.pack(">h", quest_info['time_limit']) # Offset 0x13A + # offset: 0x013A + data += struct.pack(">h", quest_info['time_limit']) # - id: failure_message # type: str # size: 92 # Presently hardcoded - data += pad(b"Reward hits 0, or time\nexpires.", 0x5C) + # offset: 0x013C + data += pad( + quest_info.get('failure_message', b"Reward hits 0, or time\nexpires."), + 0x5C + ) # - id: hunter_rank_point_restriction # type: u2 + # offset: 0x0198 data += struct.pack(">h", quest_info['hrp_restriction']) # - id: client # type: str - # size: 41 - data += pad(quest_info['client'].encode("ascii"), 0x29) + # size: 40 + # offset: 0x019A + data += pad(quest_info['client'], 0x28) + + # - id: unkInt0 + # size: u4 + # offset: 0x1C2 + data += struct.pack(">I", unknown.get('unkInt0', 0)) + + # - id: unkShort0 + # size: u2 + # offset: 0x1C6 + data += struct.pack(">H", unknown.get('unkShort0', 0)) - # - id: unk2 - # size: 6 - data += b'\0' * 0x06 + # - id: unkByte0 + # size: u1 + # offset: 0x1C8 + data += struct.pack(">B", unknown.get('unkByte0', 0)) # - id: details # type: str # size: 256 - data += pad(quest_info['details'].encode("ascii"), 0x100) # b'\0' * 0x100 + # offset: 0x01C9 + data += pad(quest_info['details'], 0x100) # b'\0' * 0x100 # - id: unk1 # size: 61 + # offset: 0x02C9 data += b'\0' * 0x3D # - id: minion_unsure # size: 3 - data += b'\0' * 0x03 + # offset: 0x0306 + # data += b'\0' * 0x03 + data += struct.pack(">B", unknown.get('unkBytes0_0', 0)) + data += struct.pack(">B", unknown.get('unkBytes0_1', 0)) + data += struct.pack(">B", unknown.get('unkBytes0_2', 0)) # - id: quest_flags_unsure # size: 3 - data += b'\0' * 0x03 + # offset: 0x0309 + # data += b'\0' * 0x03 + data += struct.pack(">B", unknown.get('unkBytes1_0', 0)) + data += struct.pack(">B", unknown.get('unkBytes1_1', 0)) + data += struct.pack(">B", unknown.get('unkBytes1_2', 0)) # - id: monster_1 # type: u1 @@ -1189,22 +1261,27 @@ def make_binary_event_quest(quest_data): # - id: unk3 # size: 2 - data += b'\0' * 0x02 # Padding + # offset: 0x030E + # data += b'\0' * 0x02 # Padding + data += struct.pack(">B", unknown.get('unkBytes2_0', 0)) + data += struct.pack(">B", unknown.get('unkBytes2_1', 0)) # - id: flags # type: u4 - data += struct.pack(">I", quest_info['flags']) # Offset 0x310 + # offset: 0x0310 + data += struct.pack(">I", generate_flags(*(quest_info['flags']))) # - id: monsters # type: monster_quest_type # repeat: expr # repeat-expr: 3 - + # # offset: 0x0314 if monster_1['type'] != 0: data += make_monster_quest_type( monster_type=monster_1['type'], + starting_area=monster_1['starting_area'], boss_id=monster_1['boss_id'], - enabled=monster_1['enabled'], + spawn_count=monster_1['spawn_count'], level=monster_1['level'], min=monster_1['hp_spread'], size=monster_1['size'], @@ -1213,11 +1290,13 @@ def make_binary_event_quest(quest_data): else: data += b'\0' * 0x08 + # offset: 0x031C if monster_2['type'] != 0: data += make_monster_quest_type( monster_type=monster_2['type'], + starting_area=monster_2['starting_area'], boss_id=monster_2['boss_id'], - enabled=monster_2['enabled'], + spawn_count=monster_2['spawn_count'], level=monster_2['level'], min=monster_2['hp_spread'], size=monster_2['size'], @@ -1226,11 +1305,13 @@ def make_binary_event_quest(quest_data): else: data += b'\0' * 0x08 + # offset: 0x0324 if monster_3['type'] != 0: data += make_monster_quest_type( monster_type=monster_3['type'], + starting_area=monster_3['starting_area'], boss_id=monster_3['boss_id'], - enabled=monster_3['enabled'], + spawn_count=monster_3['spawn_count'], level=monster_3['level'], min=monster_3['hp_spread'], size=monster_3['size'], @@ -1242,6 +1323,7 @@ def make_binary_event_quest(quest_data): # SUMMON / (INVADER?) # - id: unk5 # type: u4 + # offset: 0x032C data += struct.pack(">I", quest_info['summon']) # - id: quests_properties @@ -1274,12 +1356,14 @@ def make_binary_event_quest(quest_data): # quest_objectivetype=0x000c, # quest_objectivecount=0x0003 + # offset: 0x0330 data += make_quest_properties_type( main_quest['type'], main_quest['objective_type'], main_quest['objective_num'] ) + # offset: 0x0338 if subquest_1['type'] is not None: data += make_quest_properties_type( subquest_1['type'], @@ -1289,6 +1373,7 @@ def make_binary_event_quest(quest_data): else: data += b"\0" * 0x08 + # offset: 0x0340 if subquest_2['type'] is not None: data += make_quest_properties_type( subquest_2['type'], @@ -1300,116 +1385,185 @@ def make_binary_event_quest(quest_data): # - id: contract_fee # type: u4 - data += struct.pack(">I", quest_info['quest_fee']) # Offset 0x348 + # offset: 0x0348 + data += struct.pack(">I", quest_info['quest_fee']) # - id: main_objective_reward # type: u4 + # offset: 0x034C data += struct.pack(">I", main_quest['zenny_reward']) # - id: sub_objective_a_reward # type: u4 + # offset: 0x0350 data += struct.pack(">I", subquest_1['zenny_reward']) # - id: sub_objective_b_reward # type: u4 + # offset: 0x0354 data += struct.pack(">I", subquest_2['zenny_reward']) # - id: death_reduction # type: u4 + # offset: 0x0358 data += struct.pack(">I", quest_info['penalty_per_cart']) # - id: hunter_rank_points # type: u4 + # offset: 0x035C data += struct.pack(">I", main_quest['hrp_reward']) # - id: unk7 # type: u4 # 0x0000000f for the great jaggi quest/(all quests?) - data += struct.pack(">I", 0x0000000f) + # offset: 0x0360 + data += struct.pack(">I", unknown.get('unkUintAlways15', 0x0000000f)) # - id: unk8 # type: u1 - data += b'\0' * 0x01 + # offset: 0x0364 + # data += b'\0' * 0x01 # - id: gather_rank (wrong) # type: u1 - data += b'\0' * 0x01 + # offset: 0x0365 + # data += b'\0' * 0x01 # - id: unk9 # type: u1 - data += b'\0' * 0x01 + # offset: 0x0366 + # data += b'\0' * 0x01 # - id: unk10 # type: u1 - data += struct.pack(">B", subquest_1['hrp_reward']) + # offset: 0x0367 + # data += struct.pack(">B", subquest_1['hrp_reward']) + data += struct.pack(">I", subquest_1['hrp_reward']) # - id: supply_set (wrong) # type: u4 + # offset: 0x0368 data += struct.pack(">I", subquest_2['hrp_reward']) # - id: Unknown 4 # type: u1 + # offset: 0x036C data += struct.pack(">B", unknown['unk_4']) # - id: supply_type (0x00: low rank, 0x01: high rank, 0x02: arena) # type: u1 + # offset: 0x036D data += struct.pack(">B", quest_info['resources']) # - id: unk11 # size: 2 # type: u1 + # offset: 0x036E data += struct.pack(">B", unknown['unk_5']) # type: u1 + # offset: 0x036F data += struct.pack(">B", unknown['unk_6']) - # - id: start_pos (SUPPLY SET NUMBER) - # type: u4 + # - id: unkShort1 + # type: u2 # 0x00000011 for the great jaggi quest - data += struct.pack(">I", quest_info['supply_set_number']) + # offset: 0x0370 + data += struct.pack(">H", unknown.get('unkShort1', 0)) - # - id: unk12 - # type: u4 - data += struct.pack(">I", unknown['unk_7']) + # - id: supply_set_number + # type: u2 + # 0x00000011 for the great jaggi quest + # offset: 0x0372 + data += struct.pack(">H", quest_info['supply_set_number']) - # - id: unk13 + # - id: unkShort2 # type: u2 - data += b'\0' * 0x02 + # offset: 0x0374 + data += struct.pack(">H", unknown.get('unkShort2', 0)) + + # - id: unk_7 + # type: u2 + # offset: 0x0376 + data += struct.pack(">H", unknown['unk_7']) + + # - id: unkByte1 + # type: u1 + # offset: 0x0378 + data += struct.pack(">B", unknown.get('unkByte1', 0)) + + # - id: unkByte2 + # type: u1 + # offset: 0x0379 + data += struct.pack(">B", unknown.get('unkByte2', 0)) # - id: type_flag (STARTING POSITION, 0x0000: basecamp, # 0x0001:random, 0x0002: shrine) # type: u2 + # offset: 0x037A data += struct.pack(">h", quest_info['starting_position']) - # UNK - data += b'\0' * 0x02 + # - id: unkByte3 + # offset: 0x037C + data += struct.pack(">B", unknown.get('unkByte3', 0)) - # - id: type_code + # - id: unkByte4 + # offset: 0x037D + data += struct.pack(">B", unknown.get('unkByte4', 0)) + + # - id: small_monster_data_location # type: u2 + # offset: 0x037E data += struct.pack(">h", 0x04b8) - # - id: type_amount - # type: u2 - data += b'\0' * 0x02 + # - id: unkByte7 + # offset: 0x0380 + data += struct.pack(">B", unknown.get('unkByte7', 0)) + + # - id: unkByte8 + # offset: 0x0381 + data += struct.pack(">B", unknown.get('unkByte8', 0)) # - id: general_enemy_level # type: u2 + # offset: 0x0382 data += struct.pack(">h", quest_info['general_enemy_level']) - # - id: unk14 - # type: u4 - data += struct.pack(">I", unknown['unk_9']) + # - id: wave_1_transition_type + # type: u2 + # offset: 0x0384 + data += struct.pack(">h", quest_info['wave_1_transition_type']) - # - id: unk15 - # type: u4 - data += struct.pack(">I", unknown['unk_10']) + # - id: wave_1_transition_target + # type: u2 + # offset: 0x0386 + data += struct.pack(">h", quest_info['wave_1_transition_target']) + + # - id: wave_1_transition_quantity + # type: u2 + # offset: 0x0388 + data += struct.pack(">h", quest_info['wave_1_transition_quantity']) + + # - id: wave_2_transition_type + # type: u2 + # offset: 0x038A + data += struct.pack(">h", quest_info['wave_2_transition_type']) + + # - id: wave_2_transition_target + # type: u2 + # offset: 0x038C + data += struct.pack(">h", quest_info['wave_2_transition_target']) + + # - id: wave_2_transition_quantity + # type: u2 + # offset: 0x038E + data += struct.pack(">h", quest_info['wave_2_transition_quantity']) - # - id: unk16 - # size: 16 - data += struct.pack(">I", unknown['unk_11']) # Unknown 12 (0x00000002 for large monster hunting quests, # 0x00000003 for small monster & gathering quests, # 0x00000005 for Jhen & Alatreon) + # offset: 0x0390 data += struct.pack(">I", unknown['unk_12']) + # offset: 0x0394 data += make_quest_properties_type(main_quest['type'], main_quest['objective_type'], main_quest['objective_num']) @@ -1418,15 +1572,18 @@ def make_binary_event_quest(quest_data): # type: reward_type # repeat: expr # repeat-expr: 11 + # offset: 0x039C data += generate_rewards(main_quest['rewards_row_1']) # - id: main_objective_additional_rewards # type: reward_type # repeat: expr # repeat-expr: 11 + # offset: 0x03C8 data += generate_rewards(main_quest['rewards_row_2']) # SUBQUEST 1 REWARDS + # offset: 0x03F4 if subquest_1['type'] is not None: data += make_quest_properties_type(subquest_1['type'], subquest_1['objective_type'], @@ -1435,9 +1592,11 @@ def make_binary_event_quest(quest_data): else: data += b"\0" * 0x08 data += b'\0' * (4 * 11) + # offset: 0x0428 data += b'\0' * (4 * 11) # SUBQUEST 2 REWARDS + # offset: 0x0454 if subquest_2['type'] is not None: data += make_quest_properties_type(subquest_2['type'], subquest_2['objective_type'], @@ -1446,6 +1605,7 @@ def make_binary_event_quest(quest_data): else: data += b"\0" * 0x08 data += b'\0' * (4 * 11) + # offset: 0x0488 data += b'\0' * (4 * 11) assert len(data) == 0x4B4 @@ -1454,13 +1614,98 @@ def make_binary_event_quest(quest_data): # that describes how many bytes total the quest takes up before the # optional arena equipment data tail = 0x4B4 + 4 - sm_data = read_quest_sm_data(quest_info['smallmonster_data_file']) - if sm_data is not None: - tail += len(sm_data) - 4 - data += struct.pack(">I", tail) - data += sm_data[4:] + if 'smallmonster_data_file' in quest_info: + # Read small monster data from hex string file + sm_data = read_quest_sm_data(quest_info['smallmonster_data_file']) + if sm_data is not None: + tail += len(sm_data) - 4 + data += struct.pack(">I", tail) + data += sm_data[4:] + else: + data += struct.pack(">I", tail) else: + # Create new small monster data from parameters + """ + 'small_monsters': [ + [ + { + 'type': monsterType, + 'variant': variant, + 'room': room, + 'quantity': quantity, + 'unk1': unk1, + 'pos_x': pos_x, + 'pos_y': pos_y, + 'pos_z': pos_z, + 'rot_x': rot_x, + 'rot_y': rot_y, + 'rot_z': rot_z, + 'unk2': unk2, # Usually 0xFF + } + ] * number of waves * number of areas + ] + """ + sm_data = b"" + small_monsters = quest_data['small_monsters'] + location_size = LOCATION_SIZE[quest_info['location']] + assert len(small_monsters) % location_size == 0 + num_waves = int(len(small_monsters) / location_size) + assert num_waves <= 3 + # Pre-preamble: + # Establishing the locations of each of the waves' preambles + sm_data += struct.pack('>I', 0x0000000C) + sm_data += struct.pack('>I', 0x0000000C + 8*location_size) + if num_waves < 3: + sm_data += struct.pack('>I', 0xCCCCCCCC) + else: + sm_data += struct.pack('>I', 0x0000000C + 2*8*location_size) + + monster_data = b"" + # Preamble: + # Establishing the location and length of each of the small monster + # areas + current_sm_index = 0x0C + 8*len(small_monsters) + for entry, monster_list in enumerate(quest_data['small_monsters']): + sm_data += struct.pack(">I", current_sm_index) + area = entry % location_size + area_monster_data = b"" + for monster in monster_list: + assert monster['room'] == area + new_monster_data = b"" + new_monster_data += struct.pack(">I", monster['type']) + new_monster_data += 3 * b"\0" + new_monster_data += struct.pack(">b", monster['quantity']) + new_monster_data += struct.pack(">B", monster['unk2']) + new_monster_data += struct.pack(">B", monster['room']) + new_monster_data += struct.pack(">B", monster['unk1']) + new_monster_data += struct.pack(">B", monster['variant']) + new_monster_data += struct.pack(">I", 0x00000000) + new_monster_data += struct.pack(">f", monster['pos_x']) + new_monster_data += struct.pack(">f", monster['pos_y']) + new_monster_data += struct.pack(">f", monster['pos_z']) + new_monster_data += struct.pack( + '>i', int(180.05 * monster['rot_x']) + ) + new_monster_data += struct.pack( + '>i', int(180.05 * monster['rot_y']) + ) + new_monster_data += struct.pack( + '>i', int(180.05 * monster['rot_z']) + ) + new_monster_data += struct.pack('>I', 0xFF000000) + new_monster_data += struct.pack('>I', 0x00000000) + assert len(new_monster_data) == 0x30 + + area_monster_data += new_monster_data + area_monster_data += 0x30 * b'\0' + sm_data += struct.pack(">I", len(area_monster_data)) + current_sm_index += len(area_monster_data) + monster_data += area_monster_data + # Main small monster data + sm_data += monster_data + tail += len(sm_data) data += struct.pack(">I", tail) + data += sm_data # If there is arena equipment data, add it to the end of the quest binary if 'arena_equipment' in quest_data: @@ -1474,44 +1719,44 @@ def make_binary_event_quest(quest_data): # FLAGS INFO: # (Arena quests have bytes in "QUEST_FLAG_ARENA = 0b10000" set) # byte 1: Boss Order 1 ( -# +1: Unknown1 -# +2: All At Once(CombineSubquestsRequireMQAndFirstSubquest) -# +4: Marathon (CombineSubquestsRequireMQAndBothSubquests) -# +8: Unknown4 -# +16: Unknown5 -# +32: Unknown6 -# +64: Unknown7 -# +128: CombineMainAndSubquests +# +0x1000000: Unknown1 +# +0x2000000: All At Once(CombineSubquestsRequireMQAndFirstSubquest) +# +0x4000000: Marathon (CombineSubquestsRequireMQAndBothSubquests) +# +0x8000000: Unknown4 +# +0x10000000: Unknown5 +# +0x20000000: Unknown6 +# +0x40000000: Unknown7 +# +0x80000000: CombineMainAndSubquests # ) # byte 2: Boss Order 2 ( -# +1: Unknown1 -# +2: Unknown2 -# +4: RequireMQAndBothSubquests -# +8: Unknown4 -# +16: QualifyingTime -# +32: DontAnnounceSubquestCompletion -# +64: Unknown7 -# +128: ElderDragonLeftWounded +# +0x10000: Unknown1 +# +0x20000: Unknown2 +# +0x40000: RequireMQAndBothSubquests +# +0x80000: Unknown4 +# +0x100000: QualifyingTime +# +0x200000: DontAnnounceSubquestCompletion +# +0x400000: Unknown7 +# +0x800000: ElderDragonLeftWounded # ) # byte 3: Boss Order 3 ( -# +1: 2Mon_NoSubs_ReqSub1_Unstable -# +2: Unknown2 -# +4: Unknown3 -# +8: BanjoMusic -# +16: Unknown5 -# +32: Unknown6 -# +64: Unknown7 -# +128: Unknown8 +# +0x100(256): 2Mon_NoSubs_ReqSub1_Unstable +# +0x200(512): Unknown2 +# +0x400(1024): Unknown3 +# +0x800(2048): BanjoMusic +# +0x1000(4096): Unknown5 +# +0x2000(8192): Unknown6 +# +0x4000(16384): Unknown7 +# +0x8000(32768): Unknown8 # ) # byte 4: Quest Flags ( # +1: Slay # +2: Deliver # +4: Capture # +8: Defend -# +16: ArenaQuest -# +32: Unknown2 -# +64: Repel(EndAtMainQuest) -# +128: Unknown3 +# +0x10(16): ArenaQuest +# +0x20(32): Unknown2 +# +0x40(64): Repel(EndAtMainQuest) +# +0x80(128): Unknown3 # ) def generate_flags(byte1, byte2, byte3, byte4): res = 0x00000000 @@ -1540,7 +1785,9 @@ def generate_flags(byte1, byte2, byte3, byte4): def read_quest_sm_data(fname): - data_path = path.join("event", fname) + # type: (bytes) -> bytearray + # JSON data (including fname) was processed by byteify + data_path = path.join(b"event", fname) if not path.exists(data_path): return None with open(data_path, 'r') as f: @@ -1548,921 +1795,185 @@ def read_quest_sm_data(fname): return bytearray.fromhex(data.replace(" ", "").replace("\n", "")) -""" -EVENT QUEST 1: Jump Four Jaggi -(INCOMPLETE) Only 3 jaggi spawn, and all at once instead of sequentially. -Quest description/rewards/etc from https://www.youtube.com/watch?v=qyQt2Xmpt0g -Quest requirements altered to make it possible to win. -""" -QUEST_EVENT_JUMP_FOUR_JAGGI = { - 'quest_info': { - 'quest_id': 61001, - 'name': "Jump Three Jaggi", - 'client': "Guild Subcontractor", - 'description': "Hunt 3 Great Jaggi", - 'details': - "I'm gonna get so fired for\n" - "this... The Great Jaggi some\n" - "hunter brought in just\n" - "escaped. Mind going after\n" - "them? You better hurry,\n" - "though. Bet they've got some\n" - "incredible materials, too.", - 'success_message': "Complete the Main Quest.", - 'flags': generate_flags( - (0, 0, 0, 0, 0, 0, 0, 0), - (1, 1, 0, 0, 0, 0, 0, 0), - (0, 0, 0, 0, 0, 0, 0, 0), - (1, 0, 1, 0, 0, 0, 1, 1) - ), - 'penalty_per_cart': 1400, - 'quest_fee': 400, - 'time_limit': 50, - 'main_monster_1': Monster.bnahabra2, - 'main_monster_2': Monster.melynx, - 'location': LocationType.QUEST_LOCATION_SANDY_PLAINS, - 'quest_rank': QuestRankType.star_1, - 'hrp_restriction': QuestRestrictionType.RESTRICTION_NONE, - 'resources': ResourcesType.low_rank, - 'supply_set_number': 19, - 'starting_position': StartingPositionType.camp, - 'general_enemy_level': 0x0017, - 'summon': 0x64050219, - 'smallmonster_data_file': 'sm_jumpfourjaggi.dat', - }, - 'large_monsters': { - 'monster_1': { - 'type': Monster.great_jaggi, - 'boss_id': 0x0000, - 'enabled': True, - 'level': 0x17, # 0x01 through 0x3c - 'size': 0x64, - 'hp_spread': 0x01, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x03 - }, - 'monster_2': { - 'type': Monster.great_jaggi, - 'boss_id': 0x0001, - 'enabled': True, - 'level': 0x17, # 0x01 through 0x3c - 'size': 0x64, - 'hp_spread': 0x01, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x03 - }, - 'monster_3': { - 'type': Monster.great_jaggi, - 'boss_id': 0x0002, - 'enabled': True, - 'level': 0x17, # 0x01 through 0x3c - 'size': 0x64, - 'hp_spread': 0x01, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x03 - } - }, - 'objective_details': { - 'main_quest': { - 'type': 0x00000001, - 'objective_type': Monster.great_jaggi, - 'objective_num': 0x03, - 'zenny_reward': 4000, - 'hrp_reward': 440, - 'rewards_row_1': [ - (ItemsType.great_jagi_claw, 1, 3), - (ItemsType.great_jagi_hide, 1, 12), - (ItemsType.jagi_scale, 1, 10), - (ItemsType.screamer, 1, 20), - (ItemsType.kings_frill, 1, 12), - (ItemsType.bone_husk_s, 8, 18), - (ItemsType.great_jagi_head, 1, 25) - ], - 'rewards_row_2': [ - (ItemsType.mystery_charm, 1, 1), - (ItemsType.aquaglow_jewel, 1, 1), - (ItemsType.shining_charm, 1, 1), - (ItemsType.armor_sphere, 1, 1), - (ItemsType.armor_sphere_plus, 1, 1) - ], - }, - 'subquest_1': { - 'description': "Hunt 2 Great Jaggi", - 'type': 0x00000001, - 'objective_type': Monster.great_jaggi, - 'objective_num': 0x02, - 'zenny_reward': 4000, - 'hrp_reward': 220, - 'rewards_row_1': [ - (ItemsType.great_jagi_claw, 1, 1), - (ItemsType.great_jagi_hide, 1, 1), - (ItemsType.jagi_scale, 1, 1), - (ItemsType.screamer, 1, 1), - (ItemsType.kings_frill, 1, 1), - (ItemsType.bone_husk_s, 8, 1), - (ItemsType.great_jagi_head, 1, 1) - ], - }, - 'subquest_2': { - 'description': "None", - 'type': 0, - 'objective_type': Monster.none, - 'objective_num': 0, - 'zenny_reward': 0, - 'hrp_reward': 0, - 'rewards_row_1': [], - } - }, - 'unknown': { - # (2 for large mon quest, 3 for small/delivery, 5 for jhen/ala) - 'unk_12': 0x00000002, - 'unk_4': 0x00, - 'unk_5': 0x00, - 'unk_6': 0x00, - 'unk_7': 0x00000000, - 'unk_9': 0x0002018B, - 'unk_10': 0x00010000, - 'unk_11': 0x00000000, - } -} +def make_event_slot(event): + return (make_binary_event_quest(event), event) -""" -EVENT QUEST 7: The Phantom Uragaan -Quest description from https://www.youtube.com/watch?v=Py5PkCXhf6w -""" -QUEST_EVENT_THE_PHANTOM_URAGAAN = { - 'quest_info': { - 'quest_id': 61007, - 'name': "The Phantom Uragaan", - 'client': "Spoiled Princess", - 'description': "Hunt an Uragaan", - 'details': - "Oooh, I just heard they've\n" - "spotted the cutest, tiniest,\n" - "most adorable little Uragaan\n" - "on the Volcano. Hunt me one\n" - "this instant or I will get\n" - "very angry. And if I'm angry,\n" - "Daddy's angry. Now go!", - 'success_message': "Complete the Main Quest.", - 'flags': generate_flags( - (0, 0, 0, 0, 0, 0, 0, 0), - (1, 1, 0, 0, 0, 0, 0, 0), - (0, 0, 0, 1, 0, 0, 0, 0), - (1, 0, 1, 0, 0, 0, 1, 1) - ), - 'penalty_per_cart': 3000, - 'quest_fee': 850, - 'time_limit': 50, - 'main_monster_1': Monster.uroktor, - 'main_monster_2': Monster.aptonoth, - 'location': LocationType.QUEST_LOCATION_VOLCANO, - 'quest_rank': QuestRankType.star_3, - 'hrp_restriction': QuestRestrictionType.RESTRICTION_18_INITJOIN, - 'resources': ResourcesType.low_rank, - 'supply_set_number': 15, - 'starting_position': StartingPositionType.camp, - 'general_enemy_level': 0x1D, - 'summon': 0x00000000, - 'smallmonster_data_file': 'sm_phantomuragaan.dat', - }, - 'large_monsters': { - 'monster_1': { - 'type': Monster.uragaan, - 'boss_id': 0x0000, - 'enabled': True, - 'level': 0x1D, # 0x01 through 0x3c - 'size': 0x13, - 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x00 - }, - 'monster_2': { - 'type': Monster.none, - 'boss_id': 0x0000, - 'enabled': False, - 'level': 0x00, # 0x01 through 0x3c - 'size': 0x00, - 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x00 - }, - 'monster_3': { - 'type': Monster.none, - 'boss_id': 0x0000, - 'enabled': False, - 'level': 0x00, # 0x01 through 0x3c - 'size': 0x00, - 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x00 - } - }, - 'objective_details': { - 'main_quest': { - 'type': 0x00000001, - 'objective_type': Monster.uragaan, - 'objective_num': 0x01, - 'zenny_reward': 8800, - 'hrp_reward': 1100, - 'rewards_row_1': [ - (ItemsType.mystery_charm, 1, 1), - (ItemsType.uragaan_shell, 1, 16), - (ItemsType.uragaan_scale, 1, 20), - (ItemsType.uragaan_marrow, 1, 10), - (ItemsType.monster_bone_l, 1, 10), - (ItemsType.bone_husk_l, 15, 13), - (ItemsType.shining_charm, 1, 5), - (ItemsType.rustshard, 1, 25) - ], - 'rewards_row_2': [ - (ItemsType.mystery_charm, 1, 1), - (ItemsType.uragaan_shell, 1, 16), - (ItemsType.uragaan_scale, 1, 20), - (ItemsType.uragaan_marrow, 1, 10), - (ItemsType.monster_bone_l, 1, 10), - (ItemsType.bone_husk_l, 15, 13), - (ItemsType.shining_charm, 1, 5), - (ItemsType.rustshard, 1, 25) - ], - }, - 'subquest_1': { - 'description': "None", - 'type': 0x00000000, - 'objective_type': Monster.none, - 'objective_num': 0x00, - 'zenny_reward': 0, - 'hrp_reward': 0x00000000, - 'rewards_row_1': [], - }, - 'subquest_2': { - 'description': "None", - 'type': 0x00000000, - 'objective_type': Monster.none, - 'objective_num': 0x00, - 'zenny_reward': 0, - 'hrp_reward': 0x00000000, - 'rewards_row_1': [], - }, - }, - 'unknown': { - # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala - 'unk_12': 0x00000002, - 'unk_4': 0x00, - 'unk_5': 0x00, - 'unk_6': 0x00, - 'unk_7': 0x00000000, - 'unk_9': 0x00000000, - 'unk_10': 0x00000000, - 'unk_11': 0x00000000, - } -} -""" -EVENT QUEST 8: Blood Sport -Quest description from https://www.youtube.com/watch?v=tuRSdC_mlO4 -""" -QUEST_EVENT_BLOOD_SPORT = { - 'quest_info': { - 'quest_id': 61008, - 'name': "Blood Sport", - 'client': "Spoiled Princess", - 'description': - "Hunt an Uragaan\n" - "and a Diablos", - 'details': - "Oh, boo! I'm tired of watching\n" - "run-of-the-mill hunts. The\n" - "Diablos and the Uragaan are\n" - "supposed to be the ultimate\n" - "monster duo. I'd love to watch\n" - "them maim some foolish hunter!\n" - "Do put on a good show...", - 'success_message': "Complete the Main Quest.", - 'flags': generate_flags( - (0, 1, 0, 0, 0, 0, 0, 0), - (1, 1, 0, 0, 0, 0, 0, 0), - (0, 0, 0, 0, 0, 0, 0, 0), - (1, 0, 1, 0, 0, 0, 0, 0) - ), - 'penalty_per_cart': 6000, - 'quest_fee': 1750, - 'time_limit': 50, - 'main_monster_1': Monster.uragaan, - 'main_monster_2': Monster.diablos, - 'location': LocationType.QUEST_LOCATION_LAND_ARENA_1, - 'quest_rank': QuestRankType.star_3, - 'hrp_restriction': QuestRestrictionType.RESTRICTION_18_INITJOIN, - 'resources': ResourcesType.low_rank, - 'supply_set_number': 43, - 'starting_position': StartingPositionType.camp, - 'general_enemy_level': 0x001D, - 'summon': 0x00000000, - 'smallmonster_data_file': 'sm_bloodsport.dat', - }, - 'large_monsters': { - 'monster_1': { - 'type': Monster.uragaan, - 'boss_id': 0x0000, - 'enabled': True, - 'level': 0x1D, # 0x01 through 0x3c - 'size': 0x64, - 'hp_spread': 0x01, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x03 - }, - 'monster_2': { - 'type': Monster.diablos, - 'boss_id': 0x0001, - 'enabled': True, - 'level': 0x1D, # 0x01 through 0x3c - 'size': 0x64, - 'hp_spread': 0x01, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x03 - }, - 'monster_3': { - 'type': Monster.none, - 'boss_id': 0x0000, - 'enabled': False, - 'level': 0x00, # 0x01 through 0x3c - 'size': 0x00, - 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x00 - } - }, - 'objective_details': { - 'main_quest': { - 'type': 0x00000001, - 'objective_type': Monster.uragaan, - 'objective_num': 0x01, - 'zenny_reward': 17600, - 'hrp_reward': 1760, - 'rewards_row_1': [ - (ItemsType.uragaan_scale, 1, 1), - (ItemsType.diablos_ridge, 1, 14), - (ItemsType.uragaan_shell, 1, 10), - (ItemsType.diablos_shell, 1, 20), - (ItemsType.twisted_horn, 1, 12), - (ItemsType.diablos_marrow, 8, 9), - (ItemsType.uragaan_marrow, 1, 9), - (ItemsType.incomplete_plans, 1, 25) - ], - 'rewards_row_2': [ - (ItemsType.uragaan_scale, 1, 1), - (ItemsType.diablos_ridge, 1, 14), - (ItemsType.uragaan_shell, 1, 10), - (ItemsType.diablos_shell, 1, 20), - (ItemsType.twisted_horn, 1, 12), - (ItemsType.diablos_marrow, 1, 9), - (ItemsType.uragaan_marrow, 1, 9), - (ItemsType.incomplete_plans, 1, 25) - ], - }, - 'subquest_1': { - 'description': "None", - 'type': 0x00000001, - 'objective_type': Monster.diablos, - 'objective_num': 0x01, - 'zenny_reward': 0, - 'hrp_reward': 0x00000000, - 'rewards_row_1': [], - }, - 'subquest_2': { - 'description': "None", - 'type': 0, - 'objective_type': Monster.none, - 'objective_num': 0, - 'zenny_reward': 0, - 'hrp_reward': 0x00000000, - 'rewards_row_1': [], - }, - }, - 'unknown': { - # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala - 'unk_12': 0x00000002, - 'unk_4': 0x00, - 'unk_5': 0x00, - 'unk_6': 0x00, - 'unk_7': 0x00000000, - 'unk_9': 0x00000000, - 'unk_10': 0x00010000, - 'unk_11': 0x00000000, - } -} - -""" -EVENT QUEST 2: Mercy Mission -(INCOMPLETE) Invading monster is "faked" by hardcoding a Royal Ludroth -from the start. -""" -QUEST_EVENT_MERCY_MISSION = { - 'quest_info': { - 'quest_id': 61002, - 'name': "Mercy Mission", - 'client': "MH3SP Dev Team", - 'description': "Deliver 10 Monster Guts", - 'details': - "Wanted:\n" - "The description for this\n" - "quest! If you can find\n" - "it, please let us know!\n" - "Thanks!", - 'success_message': - "Complete the Main Quest\n" - "and both Subquests.", - 'flags': generate_flags( - (0, 0, 0, 0, 0, 0, 0, 0), - (1, 1, 1, 0, 0, 0, 0, 0), - (0, 0, 0, 0, 0, 0, 0, 0), - (0, 1, 0, 0, 0, 0, 0, 0) - ), - 'penalty_per_cart': 600, - 'quest_fee': 150, - 'time_limit': 15, - 'main_monster_1': Monster.ludroth, - 'main_monster_2': Monster.epioth, - 'location': LocationType.QUEST_LOCATION_D_ISLAND, - 'quest_rank': QuestRankType.star_1, - 'hrp_restriction': QuestRestrictionType.RESTRICTION_NONE, - 'resources': ResourcesType.low_rank, - 'supply_set_number': 35, - 'starting_position': StartingPositionType.camp, - 'general_enemy_level': 0x0017, - 'summon': 0x64030303, - 'smallmonster_data_file': 'sm_mercymission.dat', - }, - 'large_monsters': { - 'monster_1': { - 'type': Monster.royal_ludroth, - 'boss_id': 0x0000, - 'enabled': True, - 'level': 0x17, # 0x01 through 0x3c - 'size': 0x64, - 'hp_spread': 0x01, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x03 - }, - 'monster_2': { - 'type': Monster.none, - 'boss_id': 0x0000, - 'enabled': False, - 'level': 0x00, # 0x01 through 0x3c - 'size': 0x00, - 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x00 - }, - 'monster_3': { - 'type': Monster.none, - 'boss_id': 0x0000, - 'enabled': False, - 'level': 0x00, # 0x01 through 0x3c - 'size': 0x00, - 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x00 - } - }, - 'objective_details': { - 'main_quest': { - 'type': 0x00000002, - 'objective_type': ItemsType.monster_guts, - 'objective_num': 0x0A, - 'zenny_reward': 1500, - 'hrp_reward': 70, - 'rewards_row_1': [ - (ItemsType.mystery_charm, 1, 8), - (ItemsType.black_pearl, 1, 20), - (ItemsType.honey, 2, 20), - (ItemsType.armor_sphere, 1, 18), - (ItemsType.small_goldenfish, 1, 8), - (ItemsType.machalite_ore, 8, 14), - (ItemsType.steel_eg, 1, 12) - ], - 'rewards_row_2': [ - (ItemsType.mystery_charm, 1, 35), - (ItemsType.aquaglow_jewel, 1, 5), - (ItemsType.shining_charm, 1, 15), - (ItemsType.armor_sphere, 1, 20), - (ItemsType.armor_sphere_plus, 1, 25) - ], - }, - 'subquest_1': { - 'description': "Deliver 12 Red Coral Stones", - 'type': 0x00000002, - 'objective_type': ItemsType.red_coral_stone, - 'objective_num': 0x0C, - 'zenny_reward': 1200, - 'hrp_reward': 55, - 'rewards_row_1': [ - (ItemsType.mystery_charm, 1, 8), - (ItemsType.black_pearl, 1, 20), - (ItemsType.honey, 2, 20), - (ItemsType.armor_sphere, 1, 18), - (ItemsType.small_goldenfish, 1, 8), - (ItemsType.machalite_ore, 1, 14), - (ItemsType.steel_eg, 1, 12) - ], - }, - 'subquest_2': { - 'description': "Deliver 3 Goldenfish", - 'type': 0x00000002, - 'objective_type': ItemsType.goldenfish, - 'objective_num': 0x03, - 'zenny_reward': 2000, - 'hrp_reward': 70, - 'rewards_row_1': [ - (ItemsType.mystery_charm, 1, 35), - (ItemsType.aquaglow_jewel, 1, 5), - (ItemsType.shining_charm, 1, 15), - (ItemsType.armor_sphere, 1, 20), - (ItemsType.armor_sphere_plus, 1, 25) - ], - }, - }, - 'unknown': { - # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala - 'unk_12': 0x00000003, - 'unk_4': 0x00, - 'unk_5': 0x00, - 'unk_6': 0x00, - 'unk_7': 0x00000000, - 'unk_9': 0x00000000, - 'unk_10': 0x00010000, - 'unk_11': 0x00000000, - } -} - -""" -EVENT QUEST 20: World Eater -Quest description/rewards/etc from https://www.youtube.com/watch?v=Z6joazT8J78 -(INCOMPLETE) Needs invading queropeco -""" -QUEST_EVENT_WORLD_EATER = { - 'quest_info': { - 'quest_id': 61020, - 'name': "World Eater", - 'client': "Guildmaster", - 'description': "Hunt a Deviljho", - 'details': - "Emergency! A huge Deviljho has\n" - "appeared. It's twice as big as\n" - "a normal one and it's eating\n" - "everything in sight! Go get\n" - "it! And now, a haiku: A huge\n" - "Deviljho/with no food in its\n" - "stomach/eats the whole island.", - 'success_message': "Complete the Main Quest.", - 'flags': generate_flags( - (0, 0, 0, 0, 0, 0, 0, 0), - (1, 1, 0, 0, 0, 0, 0, 0), - (0, 0, 0, 0, 0, 0, 0, 0), - (1, 0, 1, 0, 0, 0, 1, 1) - ), - 'penalty_per_cart': 6000, - 'quest_fee': 1800, - 'time_limit': 50, - 'main_monster_1': Monster.jaggi, - 'main_monster_2': Monster.jaggia, - 'location': LocationType.QUEST_LOCATION_D_ISLAND, - 'quest_rank': QuestRankType.urgent, - 'hrp_restriction': QuestRestrictionType.RESTRICTION_51_INITJOIN, - 'resources': ResourcesType.high_rank, - 'supply_set_number': 31, - 'starting_position': StartingPositionType.random, - 'general_enemy_level': 0x0040, - 'summon': 0x00000000, - 'smallmonster_data_file': 'sm_worldeater.dat', - }, - 'large_monsters': { - 'monster_1': { - 'type': Monster.deviljho, - 'boss_id': 0x0000, - 'enabled': True, - 'level': 0x40, # 0x01 through 0x3c - 'size': 0xC8, - 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x00 - }, - 'monster_2': { - 'type': Monster.none, - 'boss_id': 0x0000, - 'enabled': False, - 'level': 0x00, # 0x01 through 0x3c - 'size': 0x00, - 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x00 - }, - 'monster_3': { - 'type': Monster.none, - 'boss_id': 0x0000, - 'enabled': False, - 'level': 0x00, # 0x01 through 0x3c - 'size': 0x00, - 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x00 - } - }, - 'objective_details': { - 'main_quest': { - 'type': 0x00000001, - 'objective_type': Monster.deviljho, - 'objective_num': 0x01, - 'zenny_reward': 18000, - 'hrp_reward': 1800, - 'rewards_row_1': [ - (ItemsType.timeworn_charm, 1, 33), - (ItemsType.deviljho_gem, 1, 4), - (ItemsType.deviljho_scalp, 1, 8), - (ItemsType.deviljho_hide, 1, 17), - (ItemsType.hvy_armor_sphere, 1, 11), - (ItemsType.shining_charm, 1, 19), - (ItemsType.deviljho_fang, 1, 8) - ], - 'rewards_row_2': [ - (ItemsType.deviljho_scalp, 1, 20), - (ItemsType.timeworn_charm, 1, 34), - (ItemsType.deviljho_fang, 1, 6), - (ItemsType.deviljho_hide, 1, 17), - (ItemsType.deviljho_gem, 1, 3), - (ItemsType.shining_charm, 1, 11), - (ItemsType.hvy_armor_sphere, 1, 9) - ], - }, - 'subquest_1': { - 'description': "None", - 'type': 0x00000000, - 'objective_type': Monster.none, - 'objective_num': 0x00, - 'zenny_reward': 0, - 'hrp_reward': 0x00000000, - 'rewards_row_1': [], - }, - 'subquest_2': { - 'description': "None", - 'type': 0x00000000, - 'objective_type': Monster.none, - 'objective_num': 0x00, - 'zenny_reward': 0, - 'hrp_reward': 0x00000000, - 'rewards_row_1': [], - }, - }, - 'unknown': { - # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala - 'unk_12': 0x00000002, - 'unk_4': 0x00, - 'unk_5': 0x00, - 'unk_6': 0x00, - 'unk_7': 0x00000000, - 'unk_9': 0x00000000, - 'unk_10': 0x00000000, - 'unk_11': 0x00000000, - } -} - -""" -EVENT QUEST 20: Where Gods Fear To Tread -Quest description from https://www.youtube.com/watch?v=mQHTdPRlD1w, - thanks to "soulmizute, emperor of the abyss#5094" - and "El Matiah#8904" -""" -QUEST_EVENT_WHERE_GODS_FEAR_TO_TREAD = { - 'quest_info': { - 'quest_id': 61021, - 'name': "Where Gods Fear to Tread", - 'client': "Scarlet Mystery Man", - 'description': "Slay the Alatreon", - 'details': - "I've been waiting, hunter. Now\n" - "comes your final challenge:\n" - "Alatreon, a dragon of darkness\n" - "and light. Can mere mortals\n" - "fell an elder dragon feared\n" - "even by the gods? Don't even\n" - "bother saying your prayers...", - 'success_message': "Complete the Main Quest.", - 'flags': generate_flags( - (0, 0, 0, 0, 0, 0, 0, 0), - (1, 1, 0, 0, 0, 0, 0, 0), - (0, 0, 0, 0, 0, 0, 0, 0), - (1, 0, 0, 0, 0, 0, 1, 0) - ), - 'penalty_per_cart': 14000, - 'quest_fee': 4200, - 'time_limit': 50, - 'main_monster_1': Monster.none, - 'main_monster_2': Monster.none, - 'location': LocationType.QUEST_LOCATION_SACRED_LAND, - 'quest_rank': QuestRankType.urgent, - 'hrp_restriction': QuestRestrictionType.RESTRICTION_51_INITJOIN, - 'resources': ResourcesType.high_rank, - 'supply_set_number': 0, - 'starting_position': StartingPositionType.shrine, - 'general_enemy_level': 0x0040, - 'summon': 0x00000000, - 'smallmonster_data_file': 'sm_wheregodsfeartotread.dat', - }, - 'large_monsters': { - 'monster_1': { - 'type': Monster.alatreon, - 'boss_id': 0x0000, - 'enabled': True, - 'level': 0x40, # 0x01 through 0x3c - 'size': 0x7D, - 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x00 - }, - 'monster_2': { - 'type': Monster.none, - 'boss_id': 0x0000, - 'enabled': False, - 'level': 0x00, # 0x01 through 0x3c - 'size': 0x00, - 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x00 - }, - 'monster_3': { - 'type': Monster.none, - 'boss_id': 0x0000, - 'enabled': False, - 'level': 0x00, # 0x01 through 0x3c - 'size': 0x00, - 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x00 - } - }, - 'objective_details': { - 'main_quest': { - 'type': 0x00000101, - 'objective_type': Monster.alatreon, - 'objective_num': 0x01, - 'zenny_reward': 42000, - 'hrp_reward': 4200, - 'rewards_row_1': [ - (ItemsType.alatreon_scute, 1, 40), - (ItemsType.brkn_skypiercer, 1, 30), - (ItemsType.alatreon_talon, 1, 10), - (ItemsType.alatreon_plate, 1, 10), - (ItemsType.skypiercer, 1, 5), - (ItemsType.azure_dragongem, 1, 5) - ], - 'rewards_row_2': [ - (ItemsType.alatreon_plate, 1, 11), - (ItemsType.brkn_skypiercer, 1, 34), - (ItemsType.alatreon_talon, 1, 39), - (ItemsType.elderdragonblood, 1, 6), - (ItemsType.skypiercer, 1, 5), - (ItemsType.azure_dragongem, 1, 5) - ], - }, - 'subquest_1': { - 'description': "None", - 'type': 0x00000000, - 'objective_type': Monster.none, - 'objective_num': 0x00, - 'zenny_reward': 0, - 'hrp_reward': 0x00000000, - 'rewards_row_1': [], - }, - 'subquest_2': { - 'description': "None", - 'type': 0x00000000, - 'objective_type': Monster.none, - 'objective_num': 0x00, - 'zenny_reward': 0, - 'hrp_reward': 0x00000000, - 'rewards_row_1': [], - }, - }, - 'unknown': { - # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala - 'unk_12': 0x00000005, - 'unk_4': 0x00, - 'unk_5': 0x00, - 'unk_6': 0x00, - 'unk_7': 0x00000000, - 'unk_9': 0x00000000, - 'unk_10': 0x00000000, - 'unk_11': 0x00000000, - } -} - -QUEST_EVENT_GREEN_EGGS = { - 'quest_info': { - 'quest_id': 61050, - 'name': "[MH3SP] Green Eggs and...", - 'client': "Ze SpyRo", - 'description': - "Hunt a Gigginox\n" - "and an Agnaktor", - 'details': - "Why do we live, only to suffer?\n" - "Only slayers of pig meat know\n" - "these things. Take care, Hunter,\n" - "for those who look to antidote\n" - "herbs may find their breath\n" - "stolen away.", - 'success_message': "Complete the Main Quest.", - 'flags': generate_flags( - (0, 1, 0, 0, 0, 0, 0, 0), - (1, 1, 0, 0, 0, 0, 0, 0), - (0, 0, 0, 0, 0, 0, 0, 0), - (1, 0, 1, 0, 0, 0, 0, 0) - ), - 'penalty_per_cart': 2400, - 'quest_fee': 200, - 'time_limit': 50, - 'main_monster_1': Monster.gigginox, - 'main_monster_2': Monster.agnaktor, - 'location': LocationType.QUEST_LOCATION_LAND_ARENA_1, - 'quest_rank': QuestRankType.star_3, - 'hrp_restriction': QuestRestrictionType.RESTRICTION_18_INITJOIN, - 'resources': ResourcesType.low_rank, - 'supply_set_number': 43, - 'starting_position': StartingPositionType.camp, - 'general_enemy_level': 0x001B, - 'summon': 0x00000000, - 'smallmonster_data_file': 'sm_emptylandarena.dat', - }, - 'large_monsters': { - 'monster_1': { - 'type': Monster.gigginox, - 'boss_id': 0x0000, - 'enabled': True, - 'level': 0x1B, # 0x01 through 0x3c - 'size': 0x64, - 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x03 - }, - 'monster_2': { - 'type': Monster.agnaktor, - 'boss_id': 0x0001, - 'enabled': True, - 'level': 0x1B, # 0x01 through 0x3c - 'size': 0x64, - 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x03 - }, - 'monster_3': { - 'type': Monster.none, - 'boss_id': 0x0002, - 'enabled': False, - 'level': 0x00, # 0x01 through 0x3c - 'size': 0x00, - 'hp_spread': 0x00, # 0: fixed, 1: spread of 5, 2: spread of 3 - 'size_spread': 0x00 - } - }, - 'objective_details': { - 'main_quest': { - 'type': 0x00000001, - 'objective_type': Monster.gigginox, - 'objective_num': 0x01, - 'zenny_reward': 7000, - 'hrp_reward': 950, - 'rewards_row_1': [ - (ItemsType.flabby_hide, 1, 18), - (ItemsType.uncanny_hide, 1, 6), - (ItemsType.pale_extract, 1, 11), - (ItemsType.poison_sac, 1, 15), - (ItemsType.agnaktor_shell, 1, 10), - (ItemsType.agnaktor_scale, 1, 16), - (ItemsType.agnaktor_hide, 1, 13), - (ItemsType.agnaktor_fin, 1, 6), - (ItemsType.agnaktor_beak, 1, 5) - ], - 'rewards_row_2': [ - (ItemsType.flabby_hide, 1, 13), - (ItemsType.uncanny_hide, 1, 6), - (ItemsType.pale_extract, 1, 11), - (ItemsType.poison_sac, 1, 10), - (ItemsType.agnaktor_shell, 1, 9), - (ItemsType.agnaktor_scale, 1, 10), - (ItemsType.agnaktor_hide, 1, 10), - (ItemsType.agnaktor_fin, 1, 6), - (ItemsType.agnaktor_beak, 1, 5), - (ItemsType.commendation, 1, 20) - ], - }, - 'subquest_1': { - 'description': "None", - 'type': 0x00000001, - 'objective_type': Monster.agnaktor, - 'objective_num': 0x01, - 'zenny_reward': 0, - 'hrp_reward': 0x00000000, - 'rewards_row_1': [], - }, - 'subquest_2': { - 'description': "None", - 'type': 0, - 'objective_type': Monster.none, - 'objective_num': 0x00, - 'zenny_reward': 0, - 'hrp_reward': 0x00000000, - 'rewards_row_1': [], - }, - }, - 'unknown': { - # 2 for large mon quest, 3 for small/delivery, 5 for jhen/ala - 'unk_12': 0x00000002, - 'unk_4': 0x00, - 'unk_5': 0x00, - 'unk_6': 0x00, - 'unk_7': 0x00000000, - 'unk_9': 0x00000000, - 'unk_10': 0x00000000, - 'unk_11': 0x00000000, - } -} +def byteify(obj): + # type: (Any) -> dict[Any, Any]|list[Any]|bytes + if isinstance(obj, dict): + return {key: byteify(value) + for key, value in obj.items()} + elif isinstance(obj, list): + return [byteify(element) for element in obj] + elif isinstance(obj, basestring): + return obj.encode('utf-8') + else: + return obj + + +def is_arena_quest(flags): + return ((1 * 2**4) * 16**0) & flags > 0 + + +class QuestLoader: + def __init__(self, file_loc='event/quest_rotation.json'): + # self.version_incrementer = 28 + self.file_loc = file_loc + self.version = 0 + self.trading_post_version = 0 + self.quests = [] + self.trading_post = [] + self.prev_quest_json = b"" + self.prev_trading_post_json = b"" + self.load_quests() + self.load_trading_post() + + def load_trading_post(self): + trading_post_list = [] + with open('event/trading_post.json', 'r') as f: + trading_post_json = byteify(json.load(f)) + self.prev_trading_post_json = trading_post_json + + def slot(item, qty): + return struct.pack(">HH", item, qty) + + for day in trading_post_json: + day_encoded = b"" + for entry in day: + offered, offered_quantity = entry[0] + price1, price1_quantity = entry[1] + price2, price2_quantity = entry[2] + day_encoded += slot(offered, offered_quantity) + \ + slot(price1, price1_quantity) + \ + slot(price2, price2_quantity) + \ + slot(0, 0) + trading_post_list.append(day_encoded) + self.trading_post_version += len(self.trading_post) + self.trading_post = trading_post_list + + def load_quests(self): + quest_list = [] + with open(self.file_loc, 'r') as f: + quests_json = byteify(json.load(f)) + self.prev_quest_json = quests_json + idx = 0 + for day in quests_json: + idx += 1 + curr_quest_list = [] + for quest_file in day: + with open(quest_file, 'r') as ff: + curr_quest = byteify(json.load(ff)) + curr_quest = make_event_slot(curr_quest) + curr_quest_list.append(curr_quest) + quest_list.append(curr_quest_list) + self.version += len(self) # self.version_incrementer + self.quests = quest_list + + def dump_trading_post_to_bytes(self): + """TODO: Used by the cache.""" + trading_post_list = [] + with open('event/trading_post.json', 'r') as f: + trading_post_json = byteify(json.load(f)) + self.prev_trading_post_json = trading_post_json + for day in trading_post_json: + trading_post_list.append(day) + return json.dumps(trading_post_list).encode('utf-8') + + def dump_quest_to_bytes(self): + """TODO: Used by the cache.""" + quest_list = [] + with open(self.file_loc, 'r') as f: + quests_json = byteify(json.load(f)) + self.prev_quest_json = quests_json + for day in quests_json: + curr_quest_list = [] + for quest_file in day: + with open(quest_file, 'r') as ff: + curr_quest = byteify(json.load(ff)) + curr_quest_list.append(curr_quest) + quest_list.append(curr_quest_list) + return json.dumps(quest_list).encode('utf-8') + + def load_trading_post_from_bytes(self, bytedata): + """TODO: Used by the cache.""" + trading_post_list = json.loads(bytedata.decode('utf-8')) + new_trading_post_list = [] + try: + def slot(item, qty): + return struct.pack(">HH", item, qty) + for day in trading_post_list: + day_encoded = b"" + for entry in day: + offered, offered_quantity = entry[0] + price1, price1_quantity = entry[1] + price2, price2_quantity = entry[2] + day_encoded += slot(offered, offered_quantity) + \ + slot(price1, price1_quantity) + \ + slot(price2, price2_quantity) + \ + slot(0, 0) + new_trading_post_list.append(day_encoded) + if self.trading_post == new_trading_post_list: + return False, "" + else: + self.trading_post_version += self.get_trading_post_len() + self.trading_post = new_trading_post_list + return True, "" + except Exception as e: + return False, "Failed to update trading post: "+str(e) + + def load_quests_from_bytes(self, bytedata): + """TODO: Used by the cache.""" + quest_list = json.loads(bytedata.decode('utf-8')) + new_quest_list = [] + try: + for day in quest_list: + day_arr = [] + for curr_quest in day: + quest = make_event_slot(curr_quest) + day_arr.append(quest) + new_quest_list.append(day_arr) + if self.quests == new_quest_list: + return False, "" + else: + self.version += len(self) # self.version_incrementer + self.quests = new_quest_list + return True, "" + except Exception as e: + return False, "Failed to update quests: "+str(e) + + def get_quest_dicts(self, idx): + # Get quest dicts for the day + true_idx = idx - 1 + return [quest[1] for _, quest in enumerate(self.quests[true_idx])] + + def get_separated_quest_dicts(self, idx): + # Get quest dicts for the day separated by event and arena + quest_list = [] + arena_list = [] + for quest in self.get_quest_dicts(idx): + if quest is None: + continue + if is_arena_quest(generate_flags(*(quest['quest_info']['flags']))): + arena_list.append(quest) + else: + quest_list.append(quest) + return quest_list, arena_list + + def get_trading_post_len(self): + # Get the number of trading post days + return len(self.trading_post) + + def get_trading_post_day(self, idx): + # Get trading post offers for the day + true_idx = idx - self.trading_post_version - 1 + return self.trading_post[true_idx] + + def __len__(self): + # Get number of days + return len(self.quests) + + def __getitem__(self, idx): + # Get quests for the day + true_idx = idx - self.version - 1 + return [quest[0] for _, quest in enumerate(self.quests[true_idx])] diff --git a/mh/server.py b/mh/server.py index a7e6345..8ba056d 100644 --- a/mh/server.py +++ b/mh/server.py @@ -1,6 +1,6 @@ #! /usr/bin/env python # -*- coding: utf-8 -*- -# SPDX-FileCopyrightText: Copyright (C) 2022-2023 MH3SP Server Project +# SPDX-FileCopyrightText: Copyright (C) 2022-2025 MH3SP Server Project # SPDX-License-Identifier: AGPL-3.0-or-later """Monster Hunter PAT Server module.""" @@ -9,6 +9,7 @@ import socket import struct import threading +import traceback from mh.time_utils import Timer from other.utils import wii_ssl_wrap_socket @@ -23,15 +24,9 @@ import externals.selectors2 as selectors -try: - from typing import List, Tuple # noqa: F401 -except ImportError: - pass - - class BasicPatHandler(object): def __init__(self, socket, client_address, server): - # type: (socket.socket, Tuple[str, int], BasicPatServer) -> None + # type: (socket.socket, tuple[str, int], BasicPatServer) -> None self.socket = socket self.client_address = client_address self.server = server @@ -121,7 +116,7 @@ def finish(self): try: self.on_finish() except Exception: - pass + self.server.error(traceback.format_exc()) self.finished = True @@ -146,7 +141,7 @@ class BasicPatServer(object): def __init__(self, server_address, RequestHandlerClass, max_threads, bind_and_activate=True, ssl_cert=None, ssl_key=None): - # type: (Tuple[str, int], BasicPatHandler, int, bool, str|None, str|None) -> None + # type: (tuple[str, int], BasicPatHandler, int, bool, str|None, str|None) -> None # noqa: E501 """Constructor. May be extended, do not override.""" self.server_address = server_address self.RequestHandlerClass = RequestHandlerClass @@ -155,13 +150,14 @@ def __init__(self, server_address, RequestHandlerClass, max_threads, self.__shutdown_request = False self.socket = socket.socket(self.address_family, self.socket_type) self._random = random.SystemRandom() # type: random.SystemRandom - self.handlers = [] # type: List[BasicPatHandler] - self.worker_threads = [] # type: List[threading.Thread] + self.handlers = [] # type: list[BasicPatHandler] + self.worker_threads = [] # type: list[threading.Thread] self.worker_queues = [] # type: list[queue.queue] self.selector = selectors.DefaultSelector() self.max_threads = max_threads or multiprocessing.cpu_count() self.ssl_cert = ssl_cert self.ssl_key = ssl_key + # TODO: Backport change required by central/cache if any if bind_and_activate: try: @@ -218,24 +214,28 @@ def serve_forever(self): if self.__shutdown_request: break - for (key, event) in ready: - selected = key.fileobj - if selected == self: - self.accept_new_connection() - else: - assert event == selectors.EVENT_READ - try: - packet = selected.on_recv() - if packet is None: + try: + for (key, event) in ready: + selected = key.fileobj + if selected == self: + self.accept_new_connection() + else: + assert event == selectors.EVENT_READ + try: + packet = selected.on_recv() + if packet is None: + if selected.is_finished(): + self.remove_handler(selected) + continue + + self._queue_work(selected, packet, event) + except Exception as e: + selected.on_exception(e) if selected.is_finished(): self.remove_handler(selected) - continue + except Exception: + self.error(traceback.format_exc()) - self._queue_work(selected, packet, event) - except Exception as e: - selected.on_exception(e) - if selected.is_finished(): - self.remove_handler(selected) if write_watch.elapsed() >= write_timeout: try: for handler in self.handlers: @@ -246,8 +246,12 @@ def serve_forever(self): if handler.is_finished(): self.remove_handler(handler) + except Exception: + self.error(traceback.format_exc()) finally: write_watch.restart() + except Exception: + self.error(traceback.format_exc()) finally: self.__is_shut_down.set() @@ -269,12 +273,15 @@ def _worker_target(self, work_queue): assert event == selectors.EVENT_READ try: - handler.on_packet(packet) - except Exception as e: - handler.on_exception(e) + try: + handler.on_packet(packet) + except Exception as e: + handler.on_exception(e) - if handler.is_finished(): - self.remove_handler(handler) + if handler.is_finished(): + self.remove_handler(handler) + except Exception: + self.error(traceback.format_exc()) def accept_new_connection(self): # type: () -> None diff --git a/mh/session.py b/mh/session.py index d89e966..698c342 100644 --- a/mh/session.py +++ b/mh/session.py @@ -1,6 +1,6 @@ #! /usr/bin/env python # -*- coding: utf-8 -*- -# SPDX-FileCopyrightText: Copyright (C) 2021-2023 MH3SP Server Project +# SPDX-FileCopyrightText: Copyright (C) 2021-2025 MH3SP Server Project # SPDX-License-Identifier: AGPL-3.0-or-later """Monster Hunter session module.""" @@ -52,6 +52,7 @@ def __init__(self, connection_handler): self.state = SessionState.UNKNOWN self.binary_setting = b"" self.search_payload = None + # TODO: Backport the server_id and serialisation logic self.hunter_info = pati.HunterSettings() def get(self, connection_data): @@ -60,6 +61,7 @@ def get(self, connection_data): self.pat_ticket = to_str( pati.unpack_binary(connection_data.pat_ticket) ) + # TODO: Backport state change if hasattr(connection_data, "online_support_code"): self.online_support_code = to_str( pati.unpack_string(connection_data.online_support_code) @@ -78,6 +80,8 @@ def get(self, connection_data): "online_support_code" in connection_data) return session + # TODO: Backport session_ready logic + def get_support_code(self): """Return the online support code.""" return DB.get_support_code(self) @@ -114,6 +118,8 @@ def get_users(self, first_index, count): def use_user(self, index, name): DB.use_user(self, index, name) + # TODO: server_index and recall logic + def get_servers(self): return DB.get_servers() @@ -363,7 +369,8 @@ def get_layer_players(self): return self.get_layer().players def get_layer_path(self): - return pati.LayerPath(self.local_info['server_id'], self.local_info['gate_id'], + return pati.LayerPath(self.local_info['server_id'], + self.local_info['gate_id'], self.local_info['city_id']) def get_layer_host_data(self): diff --git a/mh/time_utils.py b/mh/time_utils.py index f2719de..56c92b0 100644 --- a/mh/time_utils.py +++ b/mh/time_utils.py @@ -1,6 +1,6 @@ #! /usr/bin/env python # -*- coding: utf-8 -*- -# SPDX-FileCopyrightText: Copyright (C) 2021-2022 MH3SP Server Project +# SPDX-FileCopyrightText: Copyright (C) 2021-2025 MH3SP Server Project # SPDX-License-Identifier: AGPL-3.0-or-later """Monster Hunter time utils module.""" @@ -48,6 +48,16 @@ def get_jhen_event_times(): int(cycle_start + JHEN_END*SECONDS_PER_DAY)) # sandstorm end +def current_event_time_slot(binary_loader): + """ + There are len(binary_loader) temporal event slots per data event slot. + Each one activates on a different day, counting up from 0. + """ + return int( + current_server_time() // SECONDS_PER_DAY + ) % len(binary_loader) # JHEN_EVENT_OFFSET + + def is_jhen_active(): day_in_cycle = int( current_server_time() // SECONDS_PER_DAY @@ -55,6 +65,16 @@ def is_jhen_active(): return JHEN_START <= day_in_cycle < JHEN_END +def current_trading_post_time_slot(binary_loader): + """ + There are len(binary_loader) temporal trading post slots. + Each one activates on a different day, counting up from 0. + """ + return int( + current_server_time() // SECONDS_PER_DAY + ) % binary_loader.get_trading_post_len() + + class Timer(object): def __init__(self): self.__start = time.time() diff --git a/opn_server.py b/opn_server.py index 431530b..11bea89 100644 --- a/opn_server.py +++ b/opn_server.py @@ -1,12 +1,13 @@ #! /usr/bin/env python # -*- coding: utf-8 -*- -# SPDX-FileCopyrightText: Copyright (C) 2021-2023 MH3SP Server Project +# SPDX-FileCopyrightText: Copyright (C) 2021-2025 MH3SP Server Project # SPDX-License-Identifier: AGPL-3.0-or-later """Monster Hunter OPN server.""" +import mh.pat_item as pati from mh.pat import PatServer, PatRequestHandler -from other.utils import server_base, server_main +from other.utils import server_base, server_main, to_str class OpnServer(PatServer): @@ -16,7 +17,35 @@ class OpnServer(PatServer): class OpnRequestHandler(PatRequestHandler): """Basic OPN server request handler class.""" - pass + # TODO: Backport wii_ssl_wrap_socket change if needed + + def sendReqConnection(self, unused=0, seq=0): + """Override default implementation to add security checks.""" + self.sendReqMemoryCheck(0x80000000, 6) # Request the game id + + def recvAnsMemoryCheck(self, packet_id, data, seq): + """AnsMemoryCheck packet. + + ID: 60810200 + JP: メモリ内容送信 + TR: Memory content transmission + """ + with pati.Unpacker(data) as unpacker: + unk = unpacker.MemoryData() # noqa: F841 + address, = unpacker.struct(">I") + data = unpacker.lp2_string() + + if address == 0x80000000: + self.game_id = to_str(data) # type: ignore + if self.game_id == 'RMHE08': + self.sendReqMemoryCheck(0x806308e8, 56) + elif self.game_id == 'RMHP08': + self.sendReqMemoryCheck(0x806311a8, 56) + else: + PatRequestHandler.sendReqConnection(self) + elif address in [0x806308e8, 0x806311a8]: + # TODO: Backport the patch checking logic + PatRequestHandler.sendReqConnection(self) BASE = server_base("OPN", OpnServer, OpnRequestHandler) diff --git a/other/utils.py b/other/utils.py index f6c3e3e..5fcd3ec 100644 --- a/other/utils.py +++ b/other/utils.py @@ -1,6 +1,6 @@ #! /usr/bin/env python # -*- coding: utf-8 -*- -# SPDX-FileCopyrightText: Copyright (C) 2021-2024 MH3SP Server Project +# SPDX-FileCopyrightText: Copyright (C) 2021-2025 MH3SP Server Project # SPDX-License-Identifier: AGPL-3.0-or-later """Utils helper module.""" @@ -240,6 +240,9 @@ def get_config(name, config_file=CONFIG_FILE): } +# TODO: Backport MySQL, latest_patch and central config code + + def get_default_ip(): # type: () -> str """Get the default IP address""" @@ -323,6 +326,9 @@ def typebool(s): parser.add_argument("--dry-run", action="store_true", dest="dry_run", help="dry run to test the server") + parser.add_argument("-t", "--no-timeout", action="store_true", + dest="no_timeout", + help="disable player timeouts") return parser @@ -366,7 +372,8 @@ def create_server(server_class, server_handler, address="0.0.0.0", port=8200, name="Server", max_thread=0, use_ssl=True, ssl_cert="server.crt", ssl_key="server.key", log_to_file=True, log_filename="server.log", - log_to_console=True, log_to_window=False, debug_mode=False): + log_to_console=True, log_to_window=False, legacy_ssl=False, + debug_mode=False, no_timeout=False): """Create a server, its logger and the SSL context if needed.""" logger = create_logger( name, level=logging.DEBUG if debug_mode else logging.INFO, @@ -377,7 +384,8 @@ def create_server(server_class, server_handler, ssl_cert = None ssl_key = None return server_class((address, port), server_handler, max_thread, logger, - debug_mode, ssl_cert=ssl_cert, ssl_key=ssl_key) + debug_mode, ssl_cert=ssl_cert, ssl_key=ssl_key, + no_timeout=no_timeout) server_base = namedtuple("ServerBase", ["name", "cls", "handler"]) @@ -389,6 +397,7 @@ def create_server_from_base(name, server_class, server_handler, args=None): If args is None, sys.argv is used (see ArgumentParser.parser_args). """ config = get_config(name) + # TODO: Backport central config code if needed parser = argparse_from_config(config) args = parser.parse_args(args) kwargs = { diff --git a/res/trading_post.py b/res/trading_post.py index e992068..045fa71 100644 --- a/res/trading_post.py +++ b/res/trading_post.py @@ -1,6 +1,6 @@ #! /usr/bin/env python # -*- coding: utf-8 -*- -# SPDX-FileCopyrightText: Copyright (C) 2021-2023 MH3SP Server Project +# SPDX-FileCopyrightText: Copyright (C) 2021-2025 MH3SP Server Project # SPDX-License-Identifier: AGPL-3.0-or-later """Trading post resources module. @@ -279,6 +279,12 @@ DRAGON_TOADSTOOL_X5, DIABLOS_SHELL_X1, BARROTH_SHELL_X1, PRIZE_GOLD_SWORD_X1, DRAGONFELL_BERRY_X4 # noqa ] +CUSTOM_TRADES = [ + POPFISH_X8, WATERBLOCK_SEED_X3, BONE_HUSK_S_X10, DUNG_X5, SHARPENED_FANG_X5, # noqa + TOADSTOOL_X5, STONE_X10, SPIDER_WEB_X5, BUGHOPPER_X10, ICETHAW_PELLET_X3, + RATHIAN_SCALE_X1, WYVERN_CLAW_X8, PRIZE_GOLD_SWORD_X1, BARROTH_SHELL_X1, ARMOR_STONE_X3 # noqa +] + # For testing purposes (TRADES has 60 entries) TRADES_SLICE_1 = list(islice(TRADES, 0, 15)) TRADES_SLICE_2 = list(islice(TRADES, 15, 30)) @@ -300,4 +306,4 @@ def pad(known_trade): ) -CURRENT_TRADES = pack_trades(KNOWN_TRADES_1) +CURRENT_TRADES = pack_trades(CUSTOM_TRADES)