new sse control commands, console direct control

This commit is contained in:
Ondřej Novák 2025-08-17 19:26:48 +02:00
parent 4211f044ed
commit bef06cd345
4 changed files with 72 additions and 27 deletions

View file

@ -162,6 +162,7 @@ extern char immortality;
extern char nohassle; extern char nohassle;
extern char dead_food; extern char dead_food;
extern char pass_all_mobs; extern char pass_all_mobs;
extern char force_levitate;
static char console_input_line[console_max_characters+1] = ""; static char console_input_line[console_max_characters+1] = "";
@ -316,6 +317,10 @@ static int process_on_off_command(const char *cmd, char on) {
nofloors = on; nofloors = on;
return 1; return 1;
} }
if (istrcmp(cmd, "levitation") == 0) {
force_levitate = on;
return 1;
}
if (istrcmp(cmd, "enemy-insight") == 0) { if (istrcmp(cmd, "enemy-insight") == 0) {
show_mob_info = on; show_mob_info = on;
return 1; return 1;
@ -724,16 +729,9 @@ static void console_keyboard(EVENT_MSG *msg, void **_) {
} }
msg->msg = -1; msg->msg = -1;
} else if (c == '\r') { } else if (c == '\r') {
console_command = console_input_line; if (console_exec(console_input_line)) {
PARSED_COMMAND cmd = parse_command(console_input_line);
char ok = process_command(cmd);
if (ok) {
flush_console_command();
console_top_line = 0;
console_input_line[0] = 0; console_input_line[0] = 0;
} }
console_command = NULL;
free(cmd.cmd_buffer);
msg->msg = -1; msg->msg = -1;
} else if (c == 3 && !get_shift_key_state()) { } else if (c == 3 && !get_shift_key_state()) {
console_copy_to_clipboard(); console_copy_to_clipboard();
@ -773,7 +771,18 @@ void console_show(char show) {
if (show) wire_console(); if (show) wire_console();
else unwire_console(); else unwire_console();
} }
}
char console_exec(const char *cmd_text) {
console_command = cmd_text;
PARSED_COMMAND cmd = parse_command(cmd_text);
char ok = process_command(cmd);
if (ok) {
flush_console_command();
console_top_line = 0;
}
console_command = NULL;
free(cmd.cmd_buffer);
return ok;
} }

View file

@ -1836,6 +1836,7 @@ static __inline int quit_request_as_escape(int c) {
void draw_console_window(void); void draw_console_window(void);
void console_show(char show); void console_show(char show);
char console_exec(const char *cmd);
char console_is_visible(void); char console_is_visible(void);
char *map_hash_to_string_impl(char *c, uint32_t h, int sz); char *map_hash_to_string_impl(char *c, uint32_t h, int sz);

View file

@ -74,6 +74,7 @@ char datapath;
D_ACTION *d_action={NULL}; D_ACTION *d_action={NULL};
int end_ptr; int end_ptr;
char pass_all_mobs = 0; //cheat make all mobs passable char pass_all_mobs = 0; //cheat make all mobs passable
char force_levitate = 0; //cheat
uint8_t cur_group=1; uint8_t cur_group=1;
uint8_t group_select=1; uint8_t group_select=1;
char cancel_pass=0; char cancel_pass=0;
@ -1143,7 +1144,7 @@ void check_players_place(char mode) {
int sect; int sect;
int u1; int u1;
levitat = (h->vlastnosti[VLS_KOUZLA] & SPL_LEVITATION) != 0; levitat = force_levitate || ((h->vlastnosti[VLS_KOUZLA] & SPL_LEVITATION) != 0);
sect = h->sektor; sect = h->sektor;
if (sect >= mapsize) if (sect >= mapsize)
continue; continue;

View file

@ -891,7 +891,7 @@ const void *boldcz;
void init_DDL_manager() { void init_DDL_manager() {
const char *ddlfile = build_pathname(2, gpathtable[SR_DATA],"SKELDAL.DDL"); const char *ddlfile = build_pathname(2, gpathtable[SR_DATA],"SKELDAL.DDL");
ddlfile = local_strdup(ddlfile); ddlfile = local_strdup(ddlfile);
init_manager(); init_manager();
if (!add_patch_file(ddlfile)) { if (!add_patch_file(ddlfile)) {
@ -1125,6 +1125,25 @@ void *map_keyboard(EVENT_MSG *msg,void **usr);
char doNotLoadMapState=0; char doNotLoadMapState=0;
static void reload_restart_map() {
unwire_proc();
if (battle) konec_kola();
battle=0;
running_battle=0;
doNotLoadMapState=1;
hl_ptr=ikon_libs;
destroy_fly_map();
load_items();
zneplatnit_block(H_ENEMY);
zneplatnit_block(H_SHOP_PIC);
zneplatnit_block(H_DIALOGY_DAT);
load_shops();
autosave_on_enter = 0;
game_display_focus();
send_message(E_CLOSE_MAP);
}
static int reload_map_handler(EVENT_MSG *msg,void **usr) static int reload_map_handler(EVENT_MSG *msg,void **usr)
{ {
extern char running_battle; extern char running_battle;
@ -1136,7 +1155,15 @@ extern char running_battle;
int side; int side;
int i; int i;
if (sscanf(m, "RELOAD %12s %d %d", fname, &sector, &side) == 3) { if (strcmp(m, "RELOAD") == 0) {
reload_ddls();
loadlevel.start_pos=viewsector;
loadlevel.dir=viewdir;
strcopy_n(loadlevel.name, level_fname, sizeof(loadlevel.name));
SEND_LOG("(WIZARD) Reload map");
reload_restart_map();
} else if (sscanf(m, "TELEPORT %12s %d %d", fname, &sector, &side) == 3) {
reload_ddls(); reload_ddls();
strcopy_n(loadlevel.name,fname,sizeof(loadlevel.name)); strcopy_n(loadlevel.name,fname,sizeof(loadlevel.name));
@ -1148,23 +1175,30 @@ extern char running_battle;
postavy[i].groupnum = 1; postavy[i].groupnum = 1;
} }
SEND_LOG("(WIZARD) Load map '%s' %d %d",loadlevel.name,loadlevel.start_pos, loadlevel.dir); SEND_LOG("(WIZARD) Load map '%s' %d %d",loadlevel.name,loadlevel.start_pos, loadlevel.dir);
unwire_proc(); reload_restart_map();
if (battle) konec_kola(); } else if (sscanf(m, "CONSOLE %d", &i) == 1) {
battle=0; console_show(i);
running_battle=0; game_display_focus();
doNotLoadMapState=1; } else if (strncmp(m, "CONSOLE_CMD ", 12) == 0) {
hl_ptr=ikon_libs; const char *cmd = m+12;
destroy_fly_map(); if (strchr(cmd, '~') == NULL) {
load_items(); console_exec(cmd);
zneplatnit_block(H_ENEMY); } else {
zneplatnit_block(H_SHOP_PIC); char *tmp = local_strdup(cmd);
zneplatnit_block(H_DIALOGY_DAT); char *x = strchr(tmp,'~');
load_shops(); while (x) {
autosave_on_enter = 0; *x = 0;
console_exec(tmp);
tmp = x+1;
x = strchr(tmp,'~');
}
if (*tmp) console_exec(tmp);
}
game_display_focus(); game_display_focus();
send_message(E_CLOSE_MAP);
} else if (strncmp(m, "MESSAGE ", 8) == 0) { } else if (strncmp(m, "MESSAGE ", 8) == 0) {
bott_disp_text(m+8); bott_disp_text(m+8);
game_display_focus();
} }
} }
@ -1191,7 +1225,7 @@ void enter_game(void)
send_message(E_ADD,E_RELOADMAP,reload_map_handler); send_message(E_ADD,E_RELOADMAP,reload_map_handler);
{ {
EVENT_MSG *msg = task_wait_event(E_CLOSE_MAP); EVENT_MSG *msg = task_wait_event(E_CLOSE_MAP);
end = msg != NULL?va_arg(msg->data, int):0; end = msg != NULL?va_arg(msg->data, int):0;
} }
send_message(E_DONE,E_RELOADMAP,reload_map_handler); send_message(E_DONE,E_RELOADMAP,reload_map_handler);