diff --git a/include/maps.hrl b/include/maps.hrl index 4141554..2047e0f 100644 --- a/include/maps.hrl +++ b/include/maps.hrl @@ -125,6 +125,26 @@ %~ {1001223, [{type, mission}, {file, "data/missions/true-darkness.3.s.quest.nbl"}, {start, [0, 802, 0]}]}, {1001224, [{type, mission}, {file, "data/missions/true-darkness.3.s2.quest.nbl"}, {start, [0, 802, 0]}]}, + % The Black Nest + + {1003000, [{type, mission}, {file, "data/missions/black-nest.1.c.quest.nbl"}, {start, [0, 6301, 0]}]}, + {1003001, [{type, mission}, {file, "data/missions/black-nest.1.b.quest.nbl"}, {start, [0, 6301, 0]}]}, + {1003002, [{type, mission}, {file, "data/missions/black-nest.1.a.quest.nbl"}, {start, [0, 6301, 0]}]}, + {1003003, [{type, mission}, {file, "data/missions/black-nest.1.s.quest.nbl"}, {start, [0, 6301, 0]}]}, + {1003004, [{type, mission}, {file, "data/missions/black-nest.1.s2.quest.nbl"}, {start, [0, 6301, 0]}]}, + + {1003010, [{type, mission}, {file, "data/missions/black-nest.2.c.quest.nbl"}, {start, [0, 6303, 0]}]}, + %~ {1003011, [{type, mission}, {file, "data/missions/black-nest.2.b.quest.nbl"}, {start, [0, 6303, 0]}]}, + %~ {1003012, [{type, mission}, {file, "data/missions/black-nest.2.a.quest.nbl"}, {start, [0, 6303, 0]}]}, + %~ {1003013, [{type, mission}, {file, "data/missions/black-nest.2.s.quest.nbl"}, {start, [0, 6303, 0]}]}, + {1003014, [{type, mission}, {file, "data/missions/black-nest.2.s2.quest.nbl"}, {start, [0, 6303, 0]}]}, + + {1003020, [{type, mission}, {file, "data/missions/black-nest.3.c.quest.nbl"}, {start, [0, 6803, 0]}]}, + {1003021, [{type, mission}, {file, "data/missions/black-nest.3.b.quest.nbl"}, {start, [0, 6803, 0]}]}, + %~ {1003022, [{type, mission}, {file, "data/missions/black-nest.3.a.quest.nbl"}, {start, [0, 6803, 0]}]}, + {1003023, [{type, mission}, {file, "data/missions/black-nest.3.s.quest.nbl"}, {start, [0, 6803, 0]}]}, + %~ {1003024, [{type, mission}, {file, "data/missions/black-nest.3.s2.quest.nbl"}, {start, [0, 6803, 0]}]}, + % Phantom Ruins (Linear Line counter) %~ {1060300, [{type, mission}, {file, "data/missions/phantom-ruins.c.quest.nbl"}, {start, [0, 8002, 0]}]}, @@ -306,6 +326,26 @@ {[1001224, 0], [{file, "data/missions/true-darkness.3.s2.zone-0.nbl"}]}, {[1001224, 1], [{file, "data/missions/true-darkness.3.s2.zone-1.nbl"}]}, + % The Black Nest + + {[1003000, 0], [{file, "data/missions/black-nest.1.c.zone.nbl"}]}, + {[1003001, 0], [{file, "data/missions/black-nest.1.b.zone.nbl"}]}, + {[1003002, 0], [{file, "data/missions/black-nest.1.a.zone.nbl"}]}, + {[1003003, 0], [{file, "data/missions/black-nest.1.s.zone.nbl"}]}, + {[1003004, 0], [{file, "data/missions/black-nest.1.s2.zone.nbl"}]}, + + {[1003010, 0], [{file, "data/missions/black-nest.2.c.zone.nbl"}]}, + %~ {[1003011, 0], [{file, "data/missions/black-nest.2.b.zone.nbl"}]}, + %~ {[1003012, 0], [{file, "data/missions/black-nest.2.a.zone.nbl"}]}, + %~ {[1003013, 0], [{file, "data/missions/black-nest.2.s.zone.nbl"}]}, + {[1003014, 0], [{file, "data/missions/black-nest.2.s2.zone.nbl"}]}, + + {[1003020, 0], [{file, "data/missions/black-nest.3.c.zone.nbl"}]}, + {[1003021, 0], [{file, "data/missions/black-nest.3.b.zone.nbl"}]}, + %~ {[1003022, 0], [{file, "data/missions/black-nest.3.a.zone.nbl"}]}, + {[1003023, 0], [{file, "data/missions/black-nest.3.s.zone.nbl"}]}, + %~ {[1003024, 0], [{file, "data/missions/black-nest.3.s2.zone.nbl"}]}, + % Phantom Ruins (Linear Line counter) %~ {[1060300, 0], [{file, "data/missions/phantom-ruins.c-0.zone.nbl"}]}, @@ -667,8 +707,8 @@ { 25, [{quests, "data/counters/colony.dallgun.pack"}, {bg, 255}, {options, << 16#01003c00:32, 0, 3, 3, 0, 0, 0, 0, 0, 0, % Phantom Ruins C-S 3, 3, 3, 3, 3, 0, % The Black Nest C-S2 variant 1 - 3, 3, 3, 3, 3, 0, % The Black Nest C-S2 variant 2 - 3, 3, 3, 3, 3, 0, % The Black Nest C-S2 variant 3 + 3, 0, 0, 0, 3, 0, % The Black Nest C-S2 variant 2 + 3, 3, 0, 3, 0, 0, % The Black Nest C-S2 variant 3 0, 0, 0, 0, 0, % True Darkness C-S2 variant 1 3, 0, 3, 3, 0, % True Darkness C-S2 variant 2 3, 3, 3, 0, 3, % True Darkness C-S2 variant 3 diff --git a/src/egs_game.erl b/src/egs_game.erl index 73d1806..65ed5db 100644 --- a/src/egs_game.erl +++ b/src/egs_game.erl @@ -870,13 +870,13 @@ handle(16#0f0a, Data) -> [[EventID|_], BlockID] = psu_missions:key_event(User#users.instanceid, ObjectID), send_1205(EventID, BlockID, 0), send_1213(ObjectID, 1); - 13 -> % floor_button on + 13 -> % floor_button on (also sent when clearing a few of the rooms in black nest) % 1205 1213 ignore; 14 -> % floor_button off % 1205(same, with 1 as last value) 1213(same, with 0 as last value) ignore; - %~ 19 -> % @todo (somewhere in phantom ruins block 4) + %~ 19 -> % activate trap %~ ignore; 20 -> % enter counter/elevator/room/spaceport/pick key/use key ignore; diff --git a/src/psu_missions.erl b/src/psu_missions.erl index 9ed76ec..4586d56 100644 --- a/src/psu_missions.erl +++ b/src/psu_missions.erl @@ -56,6 +56,9 @@ object_init(InstanceID, BlockID, [floor_button|Tail], ListNb, ObjectNb, ObjectID %% @todo Apparently shoot_button has a TargetID. I'm sure why though. object_init(InstanceID, BlockID, [shoot_button|Tail], ListNb, ObjectNb, ObjectID, TargetID) -> object_init(InstanceID, BlockID, Tail, ListNb, ObjectNb + 1, ObjectID + 1, TargetID + 1); +%% @todo All kinds of traps have a TargetID, even if they're not targettable. +object_init(InstanceID, BlockID, [trap|Tail], ListNb, ObjectNb, ObjectID, TargetID) -> + object_init(InstanceID, BlockID, Tail, ListNb, ObjectNb + 1, ObjectID + 1, TargetID + 1); %% @todo Not sure why but it works that way in True Darkness. object_init(InstanceID, BlockID, [boss_gate|Tail], ListNb, ObjectNb, ObjectID, TargetID) -> object_init(InstanceID, BlockID, Tail, ListNb, ObjectNb + 1, ObjectID + 1, TargetID + 1); @@ -75,7 +78,7 @@ object_init(InstanceID, BlockID, [{'spawn', NbTargets, TrigEventID, _ReqEventID} object_init(InstanceID, BlockID, [{warp, DestX, DestY, DestZ, DestDir}|Tail], ListNb, ObjectNb, ObjectID, TargetID) -> egs_db:objects_insert(#objects{id=[InstanceID, {warp, BlockID, ListNb, ObjectNb}], instanceid=InstanceID, type=warp, blockid=BlockID, args={DestX, DestY, DestZ, DestDir}}), object_init(InstanceID, BlockID, Tail, ListNb, ObjectNb + 1, ObjectID, TargetID); -%% @todo Not sure where these 2 come from yet, assuming crystal but might not be that. +%% @todo Apparently crystal has 2 TargetIDs. Presumably because it has both on/off states. object_init(InstanceID, BlockID, [crystal|Tail], ListNb, ObjectNb, ObjectID, TargetID) -> object_init(InstanceID, BlockID, Tail, ListNb, ObjectNb + 1, ObjectID + 1, TargetID + 2); %% A few object types don't have an ObjectID nor a TargetID. Disregard them completely. diff --git a/src/psu_parser.erl b/src/psu_parser.erl index 15dfb63..3796db4 100644 --- a/src/psu_parser.erl +++ b/src/psu_parser.erl @@ -212,6 +212,8 @@ parse_object_args(35, _Params, _Data) -> parse_object_args(43, _Params, _Data) -> shoot_button; +%% @todo Seems to be a zonde turret "trap". + parse_object_args(44, _Params, _Data) -> trap; @@ -231,7 +233,17 @@ parse_object_args(62, _Params, _Data) -> pp_cube; parse_object_args(64, _Params, _Data) -> - hidden_minimap_section. + hidden_minimap_section; + +%% @todo Seems to be a megid turret "trap". + +parse_object_args(70, _Params, _Data) -> + trap; + +%% @todo Seems to be a ceiling fall-on-you-and-explode "trap". Possibly also poison room. + +parse_object_args(71, _Params, _Data) -> + trap. convert_eventid(16#ffff) -> false;