more object notes

This commit is contained in:
Martin Michelsen
2025-03-22 12:51:23 -07:00
parent 3e59f9a91e
commit cfea8a2712
3 changed files with 128 additions and 31 deletions
+4 -2
View File
@@ -4054,7 +4054,7 @@ struct G_AddStatusEffect_6x0C {
// 12 = Confuse (slot 1; 10 seconds)
// Anything else = command is ignored
le_uint32_t effect_type = 0;
le_uint32_t level = 0; // Only used for Shifta/Deband/Jellen/Zalure
le_float amount = 0; // Only used for Shifta/Deband/Jellen/Zalure
} __packed_ws__(G_AddStatusEffect_6x0C, 0x0C);
// 6x0D: Clear status effect slot (protected on V3/V4)
@@ -4783,7 +4783,9 @@ struct G_UseStarAtomizer_6x66 {
// 6x67: Trigger set event
struct G_TriggerSetEvent_6x67 {
G_UnusedHeader header;
// If this command is sent by a box that triggers a set event, the entity ID
// in the header is the box's object ID.
G_EntityIDHeader header;
le_uint32_t floor = 0;
le_uint32_t event_id = 0; // NOT event index
le_uint32_t client_id = 0;
+122 -27
View File
@@ -1432,11 +1432,11 @@ const char* MapFile::name_for_object_type(uint16_t type) {
// param4 = event number
{0x0091, "TObjContainerEnemy"},
// Large box (usually used for specialized drops). See TObjContainerBase2
// for parameters.
// Large box (usually used for specialized drops). Same parameters as
// 0x0088 (TObjContainerBase2)
{0x0092, "TObjContainerBase"},
// Large enemy box. See TObjContainerEnemy for parameters.
// Large enemy box. Same parameters as 0x0091 (TObjContainerEnemy).
{0x0093, "TObjContainerAbeEnemy"},
// Always-empty box.
@@ -1710,31 +1710,126 @@ const char* MapFile::name_for_object_type(uint16_t type) {
// param5 = color (clamped to [0, 3])
{0x014D, "TOKeyAncient01"},
// Ruins fence objects. Params:
// param4 = switch flag number (negative = always unlocked)
// param5 = color (clamped to [0, 3])
{0x014E, "TOFenceAncient01"}, // 4x2
{0x014F, "TOFenceAncient02"}, // 6x2
{0x0150, "TOFenceAncient03"}, // 4x4
{0x0151, "TOFenceAncient04"}, // 6x4
// Ruins poison-spewing blob. This object is technically an item box, and
// drops an item when destroyed. Unlike most other item boxes, it cannot
// be specialized (ignore_def is always true). Params:
// param1 = TODO (value used is param1 + 299)
// param2 = TODO (value used is param2 + 209)
// param3 = TODO (value used is param3 + 399)
// param6 = TODO (value used is param6 + 4)
{0x0152, "TContainerAncient01"},
// Ruins falling trap. Trap power seems to be scaled by difficulty
// (Normal = x1, Hard = x2, Very Hard = x3, Ultimate = x6). Params:
// param1 = trigger radius delta (value used is (param1 / 2) + 30)
// param2 = TODO (clamped below to 0)
// param3 = TODO (clamped below to 1)
// param4 = TODO (seems it only matters if this is negative or not in
// the base class (TOTrap), but TOTrapAncient01 clamps it below to 0)
// param5 = TODO (clamped to [0, 5]; calls player->vtable[0x19] on
// explode unless this is 5)
// param6 = TODO (value used is param6 + 30, multipled by 0.33 if
// offline)
{0x0153, "TOTrapAncient01"},
// Ruins pop-up trap. Params:
// param1 = trigger radius delta (value used is (param1 / 2) + 30)
// param4 = delay (value used is param4 + 30; clamped below to 0)
// angle.z = TODO (seems it only matters if angle.z is > 0 or not)
{0x0154, "TOTrapAncient02"},
// Ruins crystal monument. Same parameters as TOCapsuleAncient01.
{0x0155, "TOMonumentAncient01"},
// Non-Ruins monument. Sets a quest flag when activated. The quest flag
// depends on which area the object appears in:
// Mine 2 = 0x2E
// Cave 2 = 0x2D
// Any other area = 0x2C
// When all three of the above quest flags are active, this object also
// sets quest flag 0x2F.
// There appear to be no parameters.
{0x0156, "TOMonumentAncient02"},
// Ruins rocks. None of these take any parameters.
{0x0159, "TOWreckAncient01"},
{0x015A, "TOWreckAncient02"},
{0x015B, "TOWreckAncient03"},
{0x015C, "TOWreckAncient04"},
{0x015D, "TOWreckAncient05"},
{0x015E, "TOWreckAncient06"},
{0x015F, "TOWreckAncient07"},
// This ID constructs different objects depending on where it's used. On
// floor 0D (Vol Opt), it constructs TObjWarpBoss03; on other floors
// where it's valid, it constructs TObjFogCollisionPoison.
// TObjFogCollisionPoison creates a switchable, foggy area that's visible
// and hurts the player if the switch flag isn't on. Params:
// param1 = radius
// param2 = poison power (scaled by difficulty: Normal = x1, Hard = x2,
// Very Hard = x3, Ultimate = x6)
// param3 = if >= 1, fog is on when switch flag is on; otherwise, fog
// is on when switch flag is off
// param4 = fog entry number (TODO: the client handles this value being
// >= 0x1000 by subtracting 0x1000; what is this for?)
// param5 = transition type (0 = fade in, 1 = instantly switch)
// param6 = switch flag number
// TObjWarpBoss03 creates an invisible warp. This is used for the warp
// behind the door to Ruins. Params:
// param4 = destination floor
{0x0160, "TObjFogCollisionPoison/TObjWarpBoss03"},
// Ruins specialized box. Same parameters as 0x0088 (TObjContainerBase2).
{0x0161, "TOContainerAncientItemCommon"},
// Ruins random box. Same parameters as 0x0088 (TObjContainerBase2).
{0x0162, "TOContainerAncientItemRare"},
// Ruins enemy boxes, disguised as either of the above two objects.
// Params:
// param4 = event number
{0x0163, "TOContainerAncientEnemyCommon"},
{0x0164, "TOContainerAncientEnemyRare"},
// Ruins always-empty box. No parameters.
// Availability: v2+ only
{0x0165, "TOContainerAncientItemNone"},
// Ruins breakable rock. Params:
// param4 = switch flag number (when enabled, destroys this object)
// Availability: v2+ only
{0x0166, "TOWreckAncientBrakable05"},
// Ruins pop-up trap with techs. Params:
// param1 = trigger radius delta (value used is (param1 / 2) + 30)
// param2 = number of hits to destroy trap (clamped to [1, 256])
// param3 = tech level modifier:
// Normal: level = param3 + 1 (clamped to [0, 14])
// Hard: level = (param3 * 2) + 1 (clamped to [0, 14])
// Very Hard: level = (param3 * 4) + 1 (clamped to [0, 14])
// Ultimate: level = (param3 * 6) + 1 (clamped to [0, 29])
// (Note: level is offset by 1, so a value of 0 means tech level 1)
// param4 = delay (value used is param4 + 30; clamped below to 0)
// param5 = switch flag number (negative = always active)
// param6 = tech number:
// 0 = Foie
// 1 = Gizonde
// 2 = Gibarta
// 3 = Megid
// anything else = Gifoie
// angle.z = TODO (seems it only matters if angle.z is > 0 or not)
// Availability: v2+ only
{0x0167, "TOTrapAncient02R"},
// TODO: Describe the rest of the object types.
{0x014E, "TOFenceAncient01"}, // Constructor in 3OE1: 80166A4C
{0x014F, "TOFenceAncient02"}, // Constructor in 3OE1: 80166E2C
{0x0150, "TOFenceAncient03"}, // Constructor in 3OE1: 801671D0
{0x0151, "TOFenceAncient04"}, // Constructor in 3OE1: 80167574
{0x0152, "TContainerAncient01"}, // Constructor in 3OE1: 8018B9B0
{0x0153, "TOTrapAncient01"}, // Constructor in 3OE1: 80179C90
{0x0154, "TOTrapAncient02"}, // Constructor in 3OE1: 8017B348
{0x0155, "TOMonumentAncient01"}, // Constructor in 3OE1: 801725B4
{0x0156, "TOMonumentAncient02"}, // Constructor in 3OE1: 80172BAC
{0x0159, "TOWreckAncient01"}, // Constructor in 3OE1: 8017DA9C
{0x015A, "TOWreckAncient02"}, // Constructor in 3OE1: 8017DDF0
{0x015B, "TOWreckAncient03"}, // Constructor in 3OE1: 8017DF10
{0x015C, "TOWreckAncient04"}, // Constructor in 3OE1: 8017D978
{0x015D, "TOWreckAncient05"}, // Constructor in 3OE1: 8017D854
{0x015E, "TOWreckAncient06"}, // Constructor in 3OE1: 8017D730
{0x015F, "TOWreckAncient07"}, // Constructor in 3OE1: 8017D60C
{0x0160, "TObjFogCollisionPoison/TObjWarpBoss03"}, // Constructor in 3OE1: 80153768 OR 801A29C8
{0x0161, "TOContainerAncientItemCommon"}, // Constructor in 3OE1: 8015BFE8
{0x0162, "TOContainerAncientItemRare"}, // Constructor in 3OE1: 801A2A14
{0x0163, "TOContainerAncientEnemyCommon"}, // Constructor in 3OE1: 8015B69C
{0x0164, "TOContainerAncientEnemyRare"}, // Constructor in 3OE1: 801A2A5C
{0x0165, "TOContainerAncientItemNone"}, // Constructor in 3OE1: 8015BD78 (v2+ only)
{0x0166, "TOWreckAncientBrakable05"}, // Constructor in 3OE1: 8017D1DC (v2+ only)
{0x0167, "TOTrapAncient02R"}, // Constructor in 3OE1: 8017A96C (v2+ only)
{0x0170, "TOBoss4Bird"}, // Constructor in 3OE1: 8015982C
{0x0171, "TOBoss4Tower"}, // Constructor in 3OE1: 801592E0
{0x0172, "TOBoss4Rock"}, // Constructor in 3OE1: 80158D90
+2 -2
View File
@@ -2551,7 +2551,7 @@ void send_remove_negative_conditions(shared_ptr<Client> c) {
G_AddStatusEffect_6x0C cmd;
cmd.header = {0x0C, sizeof(G_AddStatusEffect_6x0C) >> 2, c->lobby_client_id};
cmd.effect_type = 7; // Healing ring
cmd.level = 0;
cmd.amount = 0;
send_protected_command(c, &cmd, sizeof(cmd), true);
}
@@ -2559,7 +2559,7 @@ void send_remove_negative_conditions(Channel& ch, uint16_t client_id) {
G_AddStatusEffect_6x0C cmd;
cmd.header = {0x0C, sizeof(G_AddStatusEffect_6x0C) >> 2, client_id};
cmd.effect_type = 7; // Healing ring
cmd.level = 0;
cmd.amount = 0;
ch.send(0x60, 0x00, &cmd, sizeof(cmd));
}