spawn/teleport dummy command

This commit is contained in:
jacob 2026-02-04 12:21:38 -06:00
parent 4b61ac219d
commit 5f8e701ac1
5 changed files with 41 additions and 24 deletions

View File

@ -1259,6 +1259,9 @@ P_Ent *P_NextEnt(P_Ent *e)
return result; return result;
} }
////////////////////////////////////////////////////////////
//~ List helpers
P_Ent *P_PushTempEnt(Arena *arena, P_EntList *list) P_Ent *P_PushTempEnt(Arena *arena, P_EntList *list)
{ {
P_EntListNode *n = PushStruct(arena, P_EntListNode); P_EntListNode *n = PushStruct(arena, P_EntListNode);
@ -2584,6 +2587,7 @@ void P_StepFrame(P_Frame *frame)
} }
} }
// TODO: Truncate bullet trail
if (!P_IsEntNil(victim)) if (!P_IsEntNil(victim))
{ {
bullet->has_hit = 1; bullet->has_hit = 1;

View File

@ -589,7 +589,6 @@ void S_TickForever(WaveLaneCtx *lane)
else if (MatchString(name, Lit("guy"))) else if (MatchString(name, Lit("guy")))
{ {
P_Ent *guy = P_PushTempEnt(frame_arena, &ents); P_Ent *guy = P_PushTempEnt(frame_arena, &ents);
*guy = P_NilEnt;
guy->key = msg->key; guy->key = msg->key;
guy->xf = msg->xf; guy->xf = msg->xf;
guy->is_guy = 1; guy->is_guy = 1;
@ -598,23 +597,28 @@ void S_TickForever(WaveLaneCtx *lane)
} }
else if (MatchString(name, Lit("dummy"))) else if (MatchString(name, Lit("dummy")))
{ {
P_Ent *guy = P_PushTempEnt(frame_arena, &ents); P_Ent *dummy = P_EntFromKey(world_frame, msg->key);
*guy = P_NilEnt; if (P_IsEntNil(dummy))
guy->key = P_RandKey(); {
guy->xf = msg->xf; dummy = P_PushTempEnt(frame_arena, &ents);
guy->is_guy = 1;
guy->has_weapon = 1;
guy->exists = 1;
P_Ent *dummy = P_PushTempEnt(frame_arena, &ents);
*dummy = P_NilEnt;
dummy->key = msg->key; dummy->key = msg->key;
dummy->is_player = 1; dummy->is_player = 1;
dummy->is_dummy = 1; dummy->is_dummy = 1;
dummy->exists = 1; dummy->exists = 1;
dummy->guy = guy->key;
P_SetEntString(dummy, Lit("Dummy")); P_SetEntString(dummy, Lit("Dummy"));
} }
P_Ent *guy = P_EntFromKey(world_frame, dummy->guy);
if (P_IsEntNil(guy))
{
guy = P_PushTempEnt(frame_arena, &ents);
guy->key = P_RandKey();
guy->is_guy = 1;
guy->has_weapon = 1;
guy->exists = 1;
dummy->guy = guy->key;
}
guy->xf = msg->xf;
}
P_SpawnEntsFromList(world_frame, ents); P_SpawnEntsFromList(world_frame, ents);
} break; } break;
//- Delete entity //- Delete entity

View File

@ -4325,7 +4325,7 @@ void V_TickForever(WaveLaneCtx *lane)
// } break; // } break;
case V_CmdKind_reset_world: case V_CmdKind_reset_world:
case V_CmdKind_spawn: case V_CmdKind_spawn_tp_player:
{ {
// Reset world // Reset world
Vec2 guy_pos = VEC2(5, 0); Vec2 guy_pos = VEC2(5, 0);
@ -4346,11 +4346,23 @@ void V_TickForever(WaveLaneCtx *lane)
} }
} break; } break;
case V_CmdKind_spawn_tp_dummy:
case V_CmdKind_spawn_dummy: case V_CmdKind_spawn_dummy:
{ {
P_Msg *msg = P_PushMsg(P_MsgKind_EntEdit, Lit("dummy")); P_Msg *msg = P_PushMsg(P_MsgKind_EntEdit, Lit("dummy"));
msg->key = P_RandKey(); msg->key = P_RandKey();
msg->xf.t = frame->world_cursor; msg->xf.t = frame->world_cursor;
if (kind == V_CmdKind_spawn_tp_dummy)
{
for (P_Ent *ent = P_FirstEnt(local_frame); !P_IsEntNil(ent); ent = P_NextEnt(ent))
{
if (ent->is_dummy)
{
msg->key = ent->key;
break;
}
}
}
} break; } break;
case V_CmdKind_delete: case V_CmdKind_delete:

View File

@ -13,12 +13,13 @@
X(toggle_console, Toggle Developer Console, V_CmdDescFlag_None, V_HOTKEY( Button_GraveAccent ), ) \ X(toggle_console, Toggle Developer Console, V_CmdDescFlag_None, V_HOTKEY( Button_GraveAccent ), ) \
X(toggle_fullscreen, Toggle Fullscreen Mode, V_CmdDescFlag_None, V_HOTKEY( Button_Enter, .alt = 1 ) ) \ X(toggle_fullscreen, Toggle Fullscreen Mode, V_CmdDescFlag_None, V_HOTKEY( Button_Enter, .alt = 1 ) ) \
X(toggle_window_topmost, Toggle Window Topmost, V_CmdDescFlag_None, V_HOTKEY( Button_F4 ), ) \ X(toggle_window_topmost, Toggle Window Topmost, V_CmdDescFlag_None, V_HOTKEY( Button_F4 ), ) \
X(spawn, Spawn/Teleport Player, V_CmdDescFlag_None, V_HOTKEY( Button_Q ), ) \ X(spawn_tp_player, Spawn/Teleport Player, V_CmdDescFlag_None, V_HOTKEY( Button_Q ), ) \
X(spawn_dummy, Spawn Dummy, V_CmdDescFlag_None, V_HOTKEY( Button_T ), ) \ X(spawn_tp_dummy, Spawn/Teleport Dummy, V_CmdDescFlag_None, V_HOTKEY( Button_T ), ) \
X(spawn_dummy, Spawn Dummy, V_CmdDescFlag_None, V_HOTKEY( Button_T, .ctrl = 1 ), ) \
X(delete, Delete entity at cursor, V_CmdDescFlag_None, V_HOTKEY( Button_M2 ), ) \ X(delete, Delete entity at cursor, V_CmdDescFlag_None, V_HOTKEY( Button_M2 ), ) \
X(reset_world, Reset world, V_CmdDescFlag_None, V_HOTKEY( Button_R, .ctrl = 1, .alt = 1 ), ) \ X(reset_world, Reset world, V_CmdDescFlag_None, V_HOTKEY( Button_R, .ctrl = 1, .alt = 1 ), ) \
X(clear_particles, Clear particles, V_CmdDescFlag_None, V_HOTKEY( Button_C ), ) \ X(clear_particles, Clear particles, V_CmdDescFlag_None, V_HOTKEY( Button_C ), ) \
X(test, Test, V_CmdDescFlag_None, V_HOTKEY( Button_T, .ctrl = 1 ), ) \ X(test, Test, V_CmdDescFlag_None, V_HOTKEY( Button_Y ), ) \
/* -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- */
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////

View File

@ -284,10 +284,6 @@ LRESULT CALLBACK WND_W32_WindowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM l
event.button = WND_W32.vk_to_button[vk_code]; event.button = WND_W32.vk_to_button[vk_code];
} }
WND_W32_PushEvent(window, event); WND_W32_PushEvent(window, event);
if (msg == WM_SYSKEYUP || msg == WM_SYSKEYDOWN)
{
result = DefWindowProcW(hwnd, msg, wparam, lparam);
}
} break; } break;
//- Text //- Text