From 1297cccd70a915c2639e7a00a4d859c21bd3f422 Mon Sep 17 00:00:00 2001 From: Ondrej Novak Date: Sat, 8 Mar 2025 20:40:04 +0100 Subject: [PATCH] fix bug, controller info, remove old stuff --- game/builder.c | 7 +++--- game/clk_map.c | 1 - game/console.c | 4 ++++ game/dialogy.c | 2 -- game/gamesave.c | 6 +++++- game/globals.h | 1 - game/globmap.c | 1 - game/interfac.c | 3 +-- game/inv.c | 1 - game/kouzla.c | 15 +++++++++++-- game/macros.c | 1 - game/realgame.c | 8 ++----- game/setup.c | 2 -- game/skeldal.c | 38 ++++++++++++++++++++++++++++++-- game/souboje.c | 42 +++++++++++++----------------------- game/specproc.c | 1 - platform/platform.h | 3 ++- platform/sdl/input.cpp | 3 +++ platform/sdl/input.h | 1 + platform/sdl/sdl_context.cpp | 21 +++++++++--------- platform/sdl/sdl_context.h | 3 ++- 21 files changed, 98 insertions(+), 66 deletions(-) diff --git a/game/builder.c b/game/builder.c index d8831a0..478763a 100644 --- a/game/builder.c +++ b/game/builder.c @@ -56,7 +56,7 @@ unsigned int barvy_skupin[POCET_POSTAV+1]= char reverse_draw=0; int viewsector=1,viewdir=1; -char norefresh=0,cancel_render=0,map_state=0; +char norefresh=0,map_state=0; int cur_sector; //sektor aktualni pozice int back_color; char global_anim_counter=0; @@ -1234,7 +1234,7 @@ void render_scene(int sector, int smer) { int i,j,s; - cancel_render=0;see_monster=0; + see_monster=0; destroy_fly_map(); build_fly_map(); if (set_blind() && cur_mode!=MD_END_GAME && !folow_mode) @@ -1362,7 +1362,6 @@ void redraw_scene() if (norefresh) return; if (one_buffer) RedirectScreenBufferSecond(); render_scene(viewsector,viewdir); - if (cancel_render) return; if (running_anm) klicovani_anm(GetBuffer2nd()+SCREEN_OFFSET,anim_render_buffer,anim_mirror); update_mysky(); schovej_mysku(); @@ -1382,7 +1381,7 @@ void redraw_scene() void refresh_scene(THE_TIMER *t) { redraw_scene(); - if (!cancel_render && !norefresh) + if (!norefresh) { showview(0,0,0,0); calc_game(); diff --git a/game/clk_map.c b/game/clk_map.c index a6b3f1e..14e7fff 100644 --- a/game/clk_map.c +++ b/game/clk_map.c @@ -338,7 +338,6 @@ char clk_saveload(int id,int xa,int ya,int xr,int yr) return 1; if (cur_mode==MD_ANOTHER_MAP) unwire_proc(),wire_proc(); unwire_proc(); - cancel_render=1; wire_save_load(id); return 1; } diff --git a/game/console.c b/game/console.c index a57f411..de58efc 100644 --- a/game/console.c +++ b/game/console.c @@ -583,6 +583,10 @@ static int process_actions(const char *command) { return r; } + if (istrcmp(command, "save") == 0) { + do_autosave(); + return 1; + } if (istrcmp(command, "ascent") == 0) { int lev = postavy[0].level; for (int i = 0; i < POCET_POSTAV; ++i) { diff --git a/game/dialogy.c b/game/dialogy.c index 0472dd8..089b202 100644 --- a/game/dialogy.c +++ b/game/dialogy.c @@ -775,7 +775,6 @@ void unwire_dialog(void) void wire_dialog() { - cancel_render=1; send_message(E_ADD,E_KEYBOARD,key_check); change_click_map(clk_dialog,CLK_DIALOG); unwire_proc=unwire_dialog; @@ -1429,7 +1428,6 @@ void call_dialog(int entr,int mob) } local_pgf=0; poloz_vsechny_predmety(); - cancel_render=1; norefresh=1; history=create_list(256); his_line=0; diff --git a/game/gamesave.c b/game/gamesave.c index f2071e4..ab69277 100644 --- a/game/gamesave.c +++ b/game/gamesave.c @@ -664,6 +664,8 @@ int load_basic_info() { h->demon_save=New(THUMAN); temp_storage_read(h->demon_save,sizeof(THUMAN)*1,f);//obnova polozek s demony + h->demon_save->programovano = 0; + h->demon_save->provadena_akce=h->zvolene_akce=NULL; } } res|=load_dialog_info(f); @@ -1457,7 +1459,6 @@ for(id=0;idsektor=q->sektor; p->direction=q->direction; p->groupnum=q->groupnum; + p->inmaphash=q->inmaphash; + p->zvolene_akce=q->zvolene_akce; + q->zvolene_akce = NULL; + p->provadena_akce = q->provadena_akce; + q->provadena_akce = NULL; p->demon_save=q; } static void zmena_z_demona(int hrac) { + THUMAN *q=postavy+hrac; THUMAN *p=q->demon_save; p->sektor=q->sektor; p->direction=q->direction; p->groupnum=q->groupnum; + p->inmaphash=q->inmaphash; + p->zvolene_akce = p->provadena_akce = NULL; + p->programovano = 0; *q=*p; free(p); } @@ -677,13 +686,14 @@ static void unaffect_after_demon(int cil) { int i; char a; - TKOUZLO *spl; + SEND_LOG("(SPELLS) Unaffecting after demon..."); do { a=0; - for(i=0;spl=spell_table[i],icil==cil && spl->backfire==1) { if (spl->wait) @@ -698,6 +708,7 @@ static void unaffect_after_demon(int cil) } } } + } while(a); } diff --git a/game/macros.c b/game/macros.c index f683e22..e494bf7 100644 --- a/game/macros.c +++ b/game/macros.c @@ -649,7 +649,6 @@ static int ma_play_anim(const char *filename,char cls) showview(0,0,0,0); } mute_all_tracks(1); - cancel_render=0; cancel_pass=0; play_movie_seq(a,cls?60:SCREEN_OFFLINE); wire_main_functs(); diff --git a/game/realgame.c b/game/realgame.c index 964948b..52f22fd 100644 --- a/game/realgame.c +++ b/game/realgame.c @@ -1202,7 +1202,7 @@ void calc_game() calc_animations(); if (d_action!=NULL) do_delay_actions(); calc_mobs(); - if (force_start_dialog && !norefresh && !cancel_render) + if (force_start_dialog && !norefresh) { force_start_dialog=0; call_dialog(start_dialog_number,start_dialog_mob); @@ -1272,7 +1272,6 @@ void zmen_skupinu(THUMAN *p) ukaz_mysku(); showview(0,378,640,480); ukaz_mysku(); - cancel_render=1; } void sort_groups() @@ -1536,7 +1535,6 @@ void postavy_teleport_effect(int sector,int dir,int postava,char effect) delete_from_timer(-1); wire_proc(); wire_proc=c; - cancel_render=1; } else { @@ -1680,9 +1678,8 @@ void step_zoom(char smer) } update_mysky(); ukaz_mysku(); - if (!cancel_render) showview(0,0,0,0); + showview(0,0,0,0); norefresh=0; - cancel_render=1; mix_back_sound(0); viewsector=postavy_propadnout(viewsector); check_postavy_teleport(); @@ -1737,7 +1734,6 @@ void turn_zoom(int smer) { if (!battle) calc_game(); norefresh = 0; - cancel_render = 1; hold_timer(TM_BACK_MUSIC, 0); mix_back_sound(0); pass_zavora = 0; diff --git a/game/setup.c b/game/setup.c index 3105a08..49487a2 100644 --- a/game/setup.c +++ b/game/setup.c @@ -116,7 +116,6 @@ static void unwire_setup(void) mix_back_sound(32768); close_current(); send_message(E_DONE,E_KEYBOARD,setup_keyboard); - cancel_render=1; SEND_LOG("(GAME) Setup closed"); } @@ -256,7 +255,6 @@ void GamePause() outtext(texty[5]); ukaz_mysku(); showview(0,0,0,0); - cancel_render=1; } /*void user_setup() diff --git a/game/skeldal.c b/game/skeldal.c index b2088f4..7bda15b 100644 --- a/game/skeldal.c +++ b/game/skeldal.c @@ -76,7 +76,7 @@ int hl_ptr=H_FIRST_FREE; int debug_enabled=0; char sound_detection=1; int snd_devnum,snd_parm1,snd_parm2,snd_parm3,snd_mixing=22000; -char gamespeed=6; +char gamespeed=5; char gamespeedbattle=0; char level_preload=1; char *level_fname=NULL; @@ -805,6 +805,7 @@ void cti_texty(void) //patch stringtable if (!texty[98]) str_replace(&texty,98,"Ulo\x91it hru jako"); if (!texty[99]) str_replace(&texty,99,"CRT Filter (>720p)"); + str_replace(&texty,0,"Byl detekov\xA0n ovlada\x87\nPro aktivaci ovlada\x87""e stiskn\x88te kt\x82rekoliv tla\x87\xA1tko na ovlada\x87i"); lang_patch_stringtable(&texty, "ui.csv", ""); } @@ -940,6 +941,37 @@ void init_DDL_manager() { } +void show_joystick_info(void) { + + + curcolor = 0; + bar32(0,0,639,479); + set_font(H_FBOLD, NOSHADOW(RGB888(255,255,255))); + const char *prompt = texty[0]; + char *buff = (char *)alloca(strlen(prompt)+10); + int xs = 0; + int ys = 0; + zalamovani(prompt,buff,560, &xs, &ys); + int y = 320; + while (*buff) { + set_aligned_position(320,y,1,1,buff); + outtext(buff); + buff += strlen(buff)+1; + y = y + 20; + } + + showview(0,0,0,0); + for (int i = 0; i < 100; ++i) { + sleep_ms(100); + if (is_joystick_used()) break; + if (_bios_keybrd(_KEYBRD_READY)) { + _bios_keybrd(_KEYBRD_READ); + break; + } + } + +} + void init_skeldal(const INI_CONFIG *cfg) { @@ -976,6 +1008,9 @@ void init_skeldal(const INI_CONFIG *cfg) } install_gui(); + if (is_joystick_enabled()) { + show_joystick_info(); + } if (patch_file!=NULL) patch_error(add_patch_file(patch_file)); @@ -1035,7 +1070,6 @@ void unwire_main_functs(void) send_message(E_DONE,E_KROK,real_krok); console_show(0); disable_click_map(); - cancel_render=1; wire_proc=wire_main_functs; hide_boat(); } diff --git a/game/souboje.c b/game/souboje.c index fffbf33..525558f 100644 --- a/game/souboje.c +++ b/game/souboje.c @@ -454,8 +454,9 @@ int vypocet_zasahu(const short *utocnik,const short *obrance, int chaos,int zbr } } if (flg & SPL_SANC) { + int tmp = zasah; zasah/=2; - if (log_combat) wzprintf( "Physical resistance applied: %d - %d (half)= %d\n", ddostal,ddostal - zasah, zasah); + if (log_combat) wzprintf( "Physical resistance applied: %d - %d (half)= %d\n", tmp,tmp - zasah, zasah); ddostal = zasah; } int total_hit = zasah+dmzhit; @@ -469,10 +470,10 @@ int vypocet_zasahu(const short *utocnik,const short *obrance, int chaos,int zbr zasah, dmzhit, total_hit); } } - if (flg & SPL_HSANC) { - int tmp = total_hit; - total_hit/=2; - if (log_combat) wzprintf("Total resistance applied: %d - %d (half) = %d\n", tmp, total_hit - tmp, total_hit); + if ((flg & SPL_HSANC) && dmzhit) { + int tmp = dmzhit/2; + total_hit -= tmp; + if (log_combat) wzprintf("Spell resistance applied: %d - %d = %d\n", total_hit+tmp, tmp, total_hit); } if (flg & SPL_TVAR) { if (log_combat) wzprintf("Set Face spell applied: %d = -%d (heal)\n", total_hit, -total_hit); @@ -516,7 +517,7 @@ void hrat_souboj(THE_TIMER *_) char cond=ms_last_event.y>378 && ms_last_event.x>510 && cur_mode!=MD_PRESUN; if (cond) schovej_mysku(); redraw_scene(); - if (!cancel_render && !norefresh) + if (!norefresh) { if (cur_mode!=MD_PRESUN) { @@ -676,7 +677,7 @@ void zacatek_kola() zmen_skupinu(&postavy[select_player]); viewsector=postavy[select_player].sektor; viewdir=postavy[select_player].direction; - redraw_scene();cancel_render=1; + redraw_scene(); } char check_end_game() @@ -747,8 +748,7 @@ static void kbd_end_game(EVENT_MSG *msg,void *unused) delete_from_timer(TM_SCENE); delete_from_timer(TM_FLY); wire_save_load(2); - bott_draw(1); - cancel_render=1; + bott_draw(1); } } @@ -866,7 +866,6 @@ void wire_presun_postavy(void) add_to_timer(TM_SCENE,gamespeed,-1,hrat_souboj); showview(0,0,0,0); unwire_proc=unwire_presun_postavy; - cancel_render=1; } static uint32_t SPozdrzeno=0; @@ -907,8 +906,7 @@ void prejdi_na_pohled(THUMAN *p) viewdir=p->direction; pozdrz_akci(); hold_timer(TM_SCENE,1); - redraw_scene(); - cancel_render=1; + redraw_scene(); program_draw(); showview(0,0,0,0); hold_timer(TM_SCENE,0); @@ -1163,7 +1161,6 @@ static void play_weapon_anim(int anim_num,int hitpos) while (hitpos-- && running_anm); delete_from_timer(TM_SCENE2); hold_timer(TM_SCENE,0); - cancel_render=1; } void pouzij_zbran(THUMAN *p,int ruka) @@ -1282,7 +1279,7 @@ void jadro_souboje(EVENT_MSG *msg,void **unused) //!!!! Jadro souboje static char nowait=0; unused; - if (msg->msg==E_IDLE && (!neco_v_pohybu || !battle || nowait)&& !norefresh && !cancel_render) + if (msg->msg==E_IDLE && (!neco_v_pohybu || !battle || nowait)&& !norefresh) { short nxt; @@ -1292,7 +1289,6 @@ void jadro_souboje(EVENT_MSG *msg,void **unused) //!!!! Jadro souboje return; } vybrana_zbran=-1; - cancel_render=1; nxt=*prave_hraje++; anim_mirror=0; if (nxt) @@ -1336,8 +1332,7 @@ void jadro_souboje(EVENT_MSG *msg,void **unused) //!!!! Jadro souboje if (p->programovano && p->lives) { plr_switcher[select_player]=!plr_switcher[select_player]; - cur_group=p->groupnum; - cancel_render=1; + cur_group=p->groupnum; if (p->kondice || p->provadena_akce->action==AC_STAND) { if (p->vlastnosti[VLS_KOUZLA] & SPL_FEAR && StrachPostavy(p)) @@ -1524,7 +1519,7 @@ void display_rune_bar(THE_TIMER *_) void rune_bar_redrawing(THE_TIMER *_) { redraw_scene(); - if (!norefresh && !cancel_render) + if (!norefresh ) { schovej_mysku(); program_draw(); @@ -1536,7 +1531,7 @@ void rune_bar_redrawing(THE_TIMER *_) void power_bar_redrawing(THE_TIMER *_) { redraw_scene(); - if (!norefresh && !cancel_render) + if (!norefresh ) { schovej_mysku(); program_draw(); @@ -1745,7 +1740,6 @@ void unwire_select_rune(void) wire_proc=wire_select_rune; delete_from_timer(TM_DELAIER); delete_from_timer(TM_SCENE); - cancel_render=1; free(runebar);runebar=NULL; send_message(E_DONE,E_KEYBOARD, select_rune_kbd); } @@ -1767,7 +1761,6 @@ void wire_select_rune(void) add_to_timer(TM_SCENE,gamespeed,-1,rune_bar_redrawing); send_message(E_ADD,E_KEYBOARD, select_rune_kbd); unwire_proc=unwire_select_rune; - cancel_render=1; } void wire_select_rune_fly() @@ -1779,7 +1772,6 @@ void wire_select_rune_fly() add_to_timer(TM_SCENE,gamespeed,-1,rune_bar_redrawing); send_message(E_ADD,E_KEYBOARD, select_rune_kbd); unwire_proc=unwire_select_rune; - cancel_render=1; } void unwire_select_power(void) @@ -1894,7 +1886,7 @@ void souboje_redrawing(THE_TIMER *_) if (neco_v_pohybu) calc_mobs(); calc_animations(); redraw_scene(); - if (!norefresh && !cancel_render) + if (!norefresh) { schovej_mysku(); program_draw(); @@ -1914,7 +1906,6 @@ void souboje_stisknout(int d) put_8bit_clipped(ablock(H_BATTLE_CLICK),378*scr_linelen2+520+GetScreenAdr(),d,120,102); ukaz_mysku(); showview(520,378,120,102); - cancel_render=1; } static void souboje_dalsi() @@ -2211,7 +2202,6 @@ static void souboje_turn(int smer) CopyBuffer2nd(); ukaz_mysku(); norefresh=0; - cancel_render=1; hold_timer(TM_BACK_MUSIC,0); recalc_volumes(viewsector,viewdir); mix_back_sound(0); @@ -2281,7 +2271,6 @@ void unwire_programming(void) disable_click_map(); send_message(E_DONE,E_KEYBOARD,programming_keyboard); delete_from_timer(TM_SCENE); - cancel_render=1; wire_proc=wire_programming; } @@ -2315,7 +2304,6 @@ void wait_to_stop(EVENT_MSG *msg,void **unused) calc_mobs(); mouse_set_default(H_MS_DEFAULT); refresh_scene(0); - cancel_render=1; if (prekvapeni) zahajit_kolo(1);else wire_programming(); msg->msg=-2; } diff --git a/game/specproc.c b/game/specproc.c index f744045..4677b96 100644 --- a/game/specproc.c +++ b/game/specproc.c @@ -300,7 +300,6 @@ MAP_PROC(map_liana) } redraw_scene(); cancel_pass=1; - cancel_render=1; showview(0,0,0,0); wire_proc(); return 1; diff --git a/platform/platform.h b/platform/platform.h index beb893e..81182ec 100644 --- a/platform/platform.h +++ b/platform/platform.h @@ -44,7 +44,7 @@ extern "C" #define _KEYBRD_READY 0 #define _KEYBRD_READ 1 -#define TIMERSPEED 20 +#define TIMERSPEED 25 extern int timerspeed_val; uint32_t _bios_keybrd(int mode); @@ -132,6 +132,7 @@ int list_files(const char *directory, int type, LIST_FILES_CALLBACK cb, void *ct void init_joystick(const INI_CONFIG_SECTION *section); char is_joystick_used(); +char is_joystick_enabled(); #define WM_RELOADMAP (WM_APP+215) #define E_RELOADMAP 40 diff --git a/platform/sdl/input.cpp b/platform/sdl/input.cpp index 5108d9c..b4dd55e 100644 --- a/platform/sdl/input.cpp +++ b/platform/sdl/input.cpp @@ -104,3 +104,6 @@ void init_joystick(const INI_CONFIG_SECTION *section) { char is_joystick_used() { return get_sdl_global_context().is_joystick_used()?1:0; } +char is_joystick_enabled() { + return get_sdl_global_context().is_joystick_enabled()?1:0; +} diff --git a/platform/sdl/input.h b/platform/sdl/input.h index d50c0a9..fd9fc6d 100644 --- a/platform/sdl/input.h +++ b/platform/sdl/input.h @@ -29,6 +29,7 @@ void ShareCPU(); void init_joystick(const INI_CONFIG_SECTION *section); char is_joystick_used(); +char is_joystick_enabled(); #ifdef __cplusplus } diff --git a/platform/sdl/sdl_context.cpp b/platform/sdl/sdl_context.cpp index dbd22ab..c241c7a 100644 --- a/platform/sdl/sdl_context.cpp +++ b/platform/sdl/sdl_context.cpp @@ -349,24 +349,25 @@ void SDLContext::joystick_handle() { void SDLContext::configure_controller(const JoystickConfig &cfg) { _jcontrol_map = cfg; - if (_jcontrol_map.enabled) { - if (init_context.controller) { - SDL_AddTimer(25,[](Uint32 tm, void *ptr){ - SDLContext *me = reinterpret_cast(ptr); - me->joystick_handle(); - return tm; - }, this); - } - } } bool SDLContext::is_joystick_used() const { return _jcontrol_used; } + bool SDLContext::is_joystick_enabled() const { + return init_context.controller != 0 && _jcontrol_map.enabled; +} void SDLContext::generate_j_event(int button, char up) { if (_jcontrol_map.enabled && button >= 0 && button < static_cast(sizeof(_jcontrol_map.buttons)/sizeof(JoystickButton))) { - _jcontrol_used = true; + if (!_jcontrol_used) { + SDL_AddTimer(25,[](Uint32 tm, void *ptr){ + SDLContext *me = reinterpret_cast(ptr); + me->joystick_handle(); + return tm; + }, this); + _jcontrol_used = true; + } JoystickButton b = _jcontrol_mod_key?_jcontrol_map.buttons_mod[button]:_jcontrol_map.buttons[button]; SDL_Scancode cd = {}; switch (b) { diff --git a/platform/sdl/sdl_context.h b/platform/sdl/sdl_context.h index 1168715..dfc3ad7 100644 --- a/platform/sdl/sdl_context.h +++ b/platform/sdl/sdl_context.h @@ -160,6 +160,7 @@ public: bool is_joystick_used() const; + bool is_joystick_enabled() const; protected: struct SDL_Deleter { @@ -240,7 +241,7 @@ protected: std::jthread _render_thread; bool _fullscreen_mode = false; - bool _present = false; + bool _present = false; std::atomic _key_control = false; std::atomic _key_shift = false; std::atomic _key_capslock = false;