fix bug, controller info, remove old stuff

This commit is contained in:
Ondrej Novak 2025-03-08 20:40:04 +01:00
parent e2fb5b9910
commit 1297cccd70
21 changed files with 98 additions and 66 deletions

View file

@ -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();

View file

@ -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;
}

View file

@ -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) {

View file

@ -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;

View file

@ -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;id<mapsize;id++) map_coord[id].flags&=~MC_DPLAYER;
}
reg_grafiku_postav();
build_all_players();
cancel_render=1;
}
}
@ -1718,6 +1719,9 @@ void wire_save_load(char save) {
current_game_slot_list.count++;
str_insline(&current_game_slot_list.files, 0, NULL);
str_insline(&current_game_slot_list.names, 0, texty[75]);
free(current_game_slot_list.autosave_flags);
current_game_slot_list.autosave_flags = NewArr(char, current_game_slot_list.count);
memset(current_game_slot_list.autosave_flags,0,current_game_slot_list.count);
change_click_map(clk_save,CLK_SAVELOAD);
redraw_save();
send_message(E_ADD, E_KEYBOARD, saveload_keyboard);

View file

@ -578,7 +578,6 @@ extern void (*wire_proc)(void); //procedura zajistujici pripojeni drive u
extern char cur_mode; //cislo aktualni interakce
extern word minimap[VIEW3D_Z+1][VIEW3D_X*2+1]; //minimalizovana mapa s informacemi pro sestaveni vyhledu
extern char norefresh; //vypina refresh obrazovky
extern char cancel_render; //okamzite zrusi renderovani sceny na dobu jednoho frame - nastavit na 1 pri zmene interakce!!!
extern char cancel_pass; //okamzite zrusi plynuly prechod
extern char reverse_draw ; //kresba odpredu dozadu
extern char gamespeed; //rychlost hry

View file

@ -646,7 +646,6 @@ void wire_automap_file(char *mapfile)
noarrows=1;
cur_mode=MD_ANOTHER_MAP;
show_automap(1);
cancel_render=1;
}
char set_select_mode(char mode)

View file

@ -152,7 +152,7 @@ void zalamovani(const char *source,char *target,int maxxs,int *xs,int *ys)
char *ls,*ps,*cs;
int sum;
cs=ps=target;
cs=ps=x;
do
{
ls=NULL;
@ -175,7 +175,6 @@ void zalamovani(const char *source,char *target,int maxxs,int *xs,int *ys)
}
while (c[0]);
xs[0]=maxxs;
*ps=0;
}
else
{

View file

@ -3100,7 +3100,6 @@ void enter_shop(int shopid)
bott_draw(1);
shop_sector=viewsector;
wire_shop();
cancel_render=1;
cancel_pass=1;
norefresh=1;
cur_mode=MD_SHOP;

View file

@ -640,17 +640,26 @@ static void zmena_na_demona(int hrac,int demon)
p->sektor=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],i<MAX_SPELLS;i++)
for(i=0;i<MAX_SPELLS;i++) {
TKOUZLO *spl = spl=spell_table[i];
if (spl!=NULL && spl->cil==cil && spl->backfire==1)
{
if (spl->wait)
@ -698,6 +708,7 @@ static void unaffect_after_demon(int cil)
}
}
}
}
while(a);
}

View file

@ -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();

View file

@ -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;

View file

@ -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()

View file

@ -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();
}

View file

@ -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()
@ -748,7 +749,6 @@ static void kbd_end_game(EVENT_MSG *msg,void *unused)
delete_from_timer(TM_FLY);
wire_save_load(2);
bott_draw(1);
cancel_render=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;
@ -908,7 +907,6 @@ void prejdi_na_pohled(THUMAN *p)
pozdrz_akci();
hold_timer(TM_SCENE,1);
redraw_scene();
cancel_render=1;
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)
@ -1337,7 +1333,6 @@ void jadro_souboje(EVENT_MSG *msg,void **unused) //!!!! Jadro souboje
{
plr_switcher[select_player]=!plr_switcher[select_player];
cur_group=p->groupnum;
cancel_render=1;
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;
}

View file

@ -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;

View file

@ -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

View file

@ -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;
}

View file

@ -29,6 +29,7 @@ void ShareCPU();
void init_joystick(const INI_CONFIG_SECTION *section);
char is_joystick_used();
char is_joystick_enabled();
#ifdef __cplusplus
}

View file

@ -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<SDLContext *>(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<int>(sizeof(_jcontrol_map.buttons)/sizeof(JoystickButton))) {
if (!_jcontrol_used) {
SDL_AddTimer(25,[](Uint32 tm, void *ptr){
SDLContext *me = reinterpret_cast<SDLContext *>(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) {

View file

@ -160,6 +160,7 @@ public:
bool is_joystick_used() const;
bool is_joystick_enabled() const;
protected:
struct SDL_Deleter {