mirror of
https://github.com/ondra-novak/gates_of_skeldal.git
synced 2025-07-13 18:02:01 -04:00
Merge branch 'session_03052025' into main
This commit is contained in:
commit
9f7bdb64a5
13 changed files with 126 additions and 65 deletions
|
@ -327,14 +327,14 @@ static const void *bott_draw_normal(const void *pp, int32_t *s)
|
||||||
{
|
{
|
||||||
char c[]=" ";int z,lv,llv;
|
char c[]=" ";int z,lv,llv;
|
||||||
put_picture(x,0,ablock(H_OKNO));lv=p->lives;llv=p->vlastnosti[VLS_MAXHIT];
|
put_picture(x,0,ablock(H_OKNO));lv=p->lives;llv=p->vlastnosti[VLS_MAXHIT];
|
||||||
if (lv || p->used & 0x80 || p->kondice > 0)
|
if (lv || p->used & 0x80)
|
||||||
{
|
{
|
||||||
z=3-((lv-1)*4/llv);if (lv==llv) z=0;
|
z=3-((lv-1)*4/llv);if (lv==llv) z=0;
|
||||||
z*=75;
|
z*=75;
|
||||||
if (p->xicht>=0)put_8bit_clipped(ablock(H_XICHTY+i),bott_scr+PIC_X+x+PIC_Y*scr_linelen2,z,54,75);
|
if (p->xicht>=0)put_8bit_clipped(ablock(H_XICHTY+i),bott_scr+PIC_X+x+PIC_Y*scr_linelen2,z,54,75);
|
||||||
if (!lv && !(p->used & 0x80) && p->kondice>0) {
|
/* if (!lv && !(p->used & 0x80) && p->kondice>0) {
|
||||||
greyscale_rectangle(PIC_X+x,PIC_Y, 54, 75);
|
greyscale_rectangle(PIC_X+x,PIC_Y, 54, 75);
|
||||||
}
|
}*/
|
||||||
if (p->bonus) draw_small_icone(0,PIC_X+x+1,PIC_Y+1);
|
if (p->bonus) draw_small_icone(0,PIC_X+x+1,PIC_Y+1);
|
||||||
if (p->spell) draw_small_icone(1,PIC_X+x+1,PIC_Y+1);
|
if (p->spell) draw_small_icone(1,PIC_X+x+1,PIC_Y+1);
|
||||||
if (!p->voda) draw_small_icone(2,PIC_X+x+1,PIC_Y+1);
|
if (!p->voda) draw_small_icone(2,PIC_X+x+1,PIC_Y+1);
|
||||||
|
|
28
game/enemy.c
28
game/enemy.c
|
@ -1317,18 +1317,24 @@ void vymaz_zasahy(THE_TIMER *q)
|
||||||
bott_draw(0);
|
bott_draw(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int select_drop_inventory_place(TMOB *p) {
|
||||||
|
int x,y,pl;
|
||||||
|
if (p->locx>128) x=1;else if (p->locx<128) x=-1;else x=rnd(2)*2-1;
|
||||||
|
if (p->locy>128) y=1;else if (p->locy<128) y=-1;else y=rnd(2)*2-1;
|
||||||
|
pl=0;if (x>0) pl++;
|
||||||
|
if (y>0) pl=3-pl;
|
||||||
|
return pl;
|
||||||
|
}
|
||||||
|
|
||||||
static int drop_inventory(TMOB *p)
|
static int drop_inventory(TMOB *p)
|
||||||
{
|
{
|
||||||
int i,x,y,pl;
|
int i,pl;
|
||||||
short c[]={0,0};
|
short c[]={0,0};
|
||||||
|
|
||||||
for(i=-1;i<MOBS_INV;i++)
|
for(i=-1;i<MOBS_INV;i++) {
|
||||||
if (p->inv[i] || (i<0 && p->money))
|
if (p->inv[i] || (i<0 && p->money))
|
||||||
{
|
{
|
||||||
if (p->locx>128) x=1;else if (p->locx<128) x=-1;else x=rnd(2)*2-1;
|
pl = select_drop_inventory_place(p);
|
||||||
if (p->locy>128) y=1;else if (p->locy<128) y=-1;else y=rnd(2)*2-1;
|
|
||||||
pl=0;if (x>0) pl++;
|
|
||||||
if (y>0) pl=3-pl;
|
|
||||||
if (i<0)
|
if (i<0)
|
||||||
{
|
{
|
||||||
int z=(int)p->money+(int)(rnd(40)-20)*(int)p->money/(int)100;
|
int z=(int)p->money+(int)(rnd(40)-20)*(int)p->money/(int)100;
|
||||||
|
@ -1341,6 +1347,16 @@ static int drop_inventory(TMOB *p)
|
||||||
}
|
}
|
||||||
push_item(p->sector,pl,c);
|
push_item(p->sector,pl,c);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
if (destroyed_items) {
|
||||||
|
int cnt = count_items_total(destroyed_items);
|
||||||
|
if (cnt) {
|
||||||
|
int idx = cnt -1;
|
||||||
|
pl = select_drop_inventory_place(p);
|
||||||
|
push_item(p->sector,pl, destroyed_items+idx);
|
||||||
|
destroyed_items[idx] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,9 @@
|
||||||
#define SLOTS_MAX 10
|
#define SLOTS_MAX 10
|
||||||
|
|
||||||
#define GM_MAPENABLE 0x1
|
#define GM_MAPENABLE 0x1
|
||||||
|
#define GM_FASTBATTLES 0x2
|
||||||
|
#define GM_GAMESPEED_SHIFT 2
|
||||||
|
#define GM_GAMESPEED_MASK 0x1F
|
||||||
|
|
||||||
#define SAVE_SLOT_S 34
|
#define SAVE_SLOT_S 34
|
||||||
#define LOAD_SLOT_S (372+34)
|
#define LOAD_SLOT_S (372+34)
|
||||||
|
@ -583,6 +586,14 @@ int unpack_all_status(FILE *f)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void save_destroyed_items(TMPFILE_WR *f) {
|
||||||
|
short c = (short)count_items_total(destroyed_items);
|
||||||
|
temp_storage_write(&c,sizeof(c), f);
|
||||||
|
if (c) {
|
||||||
|
temp_storage_write(destroyed_items,sizeof(short)*c, f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int save_basic_info()
|
int save_basic_info()
|
||||||
{
|
{
|
||||||
TMPFILE_WR *f;
|
TMPFILE_WR *f;
|
||||||
|
@ -618,7 +629,14 @@ int save_basic_info()
|
||||||
s.swapchans=MIN(get_snd_effect(SND_SWAP),255);
|
s.swapchans=MIN(get_snd_effect(SND_SWAP),255);
|
||||||
s.out_filter=MIN(get_snd_effect(SND_OUTFILTER),255);
|
s.out_filter=MIN(get_snd_effect(SND_OUTFILTER),255);
|
||||||
s.autosave=autosave_enabled;
|
s.autosave=autosave_enabled;
|
||||||
s.game_flags=(enable_glmap!=0);
|
s.game_flags=0;
|
||||||
|
|
||||||
|
if (enable_glmap!=0) s.game_flags |= GM_MAPENABLE;
|
||||||
|
if (gamespeedbattle<gamespeed) s.game_flags |= GM_FASTBATTLES;
|
||||||
|
if (timerspeed_val <= GM_GAMESPEED_MASK) {
|
||||||
|
s.game_flags |= (timerspeed_val & GM_GAMESPEED_MASK) << GM_GAMESPEED_SHIFT;
|
||||||
|
}
|
||||||
|
|
||||||
strcopy_n(s.level_name,level_fname,sizeof(s.level_name));
|
strcopy_n(s.level_name,level_fname,sizeof(s.level_name));
|
||||||
for(i=0;i<5;i++) s.runes[i]=runes[i];
|
for(i=0;i<5;i++) s.runes[i]=runes[i];
|
||||||
if (picked_item!=NULL)
|
if (picked_item!=NULL)
|
||||||
|
@ -635,11 +653,26 @@ int save_basic_info()
|
||||||
for(i=0,h=postavy;i<POCET_POSTAV;h++,i++) if (h->demon_save!=NULL)
|
for(i=0,h=postavy;i<POCET_POSTAV;h++,i++) if (h->demon_save!=NULL)
|
||||||
temp_storage_write(h->demon_save,sizeof(THUMAN)*1,f); //ulozeni polozek s demony
|
temp_storage_write(h->demon_save,sizeof(THUMAN)*1,f); //ulozeni polozek s demony
|
||||||
res|=save_dialog_info(f);
|
res|=save_dialog_info(f);
|
||||||
|
save_destroyed_items(f);
|
||||||
temp_storage_close_wr(f);
|
temp_storage_close_wr(f);
|
||||||
SEND_LOG("(SAVELOAD) Done... Result: %d",res);
|
SEND_LOG("(SAVELOAD) Done... Result: %d",res);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int load_destroyed_items(TMPFILE_RD *f) {
|
||||||
|
int res = 0;
|
||||||
|
short destroyed_items_count = 0;
|
||||||
|
temp_storage_read(&destroyed_items_count,sizeof(destroyed_items_count), f);
|
||||||
|
free(destroyed_items);
|
||||||
|
destroyed_items = NULL;
|
||||||
|
if (destroyed_items_count) {
|
||||||
|
destroyed_items = NewArr(short, destroyed_items_count+1);
|
||||||
|
res|=temp_storage_read(destroyed_items,destroyed_items_count*sizeof(short), f) != destroyed_items_count*sizeof(short);
|
||||||
|
destroyed_items[destroyed_items_count] = 0;
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
int load_basic_info()
|
int load_basic_info()
|
||||||
{
|
{
|
||||||
TMPFILE_RD *f;
|
TMPFILE_RD *f;
|
||||||
|
@ -654,6 +687,9 @@ int load_basic_info()
|
||||||
if (f==NULL) return 1;
|
if (f==NULL) return 1;
|
||||||
res|=(temp_storage_read(&s,1*sizeof(s),f)!=sizeof(s));
|
res|=(temp_storage_read(&s,1*sizeof(s),f)!=sizeof(s));
|
||||||
if (s.game_flags & GM_MAPENABLE) enable_glmap=1;else enable_glmap=0;
|
if (s.game_flags & GM_MAPENABLE) enable_glmap=1;else enable_glmap=0;
|
||||||
|
gamespeedbattle =s.game_flags & GM_FASTBATTLES? GAMESPEED_FASTBATTLE:gamespeed;
|
||||||
|
int tmsp = (s.game_flags >> GM_GAMESPEED_SHIFT) & GM_GAMESPEED_MASK;
|
||||||
|
if (tmsp) timerspeed_val = tmsp;
|
||||||
i=s.picks;
|
i=s.picks;
|
||||||
if (picked_item!=NULL) free(picked_item);
|
if (picked_item!=NULL) free(picked_item);
|
||||||
if (i)
|
if (i)
|
||||||
|
@ -685,6 +721,7 @@ int load_basic_info()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
res|=load_dialog_info(f);
|
res|=load_dialog_info(f);
|
||||||
|
res|=load_destroyed_items(f);
|
||||||
temp_storage_close_rd(f);
|
temp_storage_close_rd(f);
|
||||||
viewsector=s.viewsector;
|
viewsector=s.viewsector;
|
||||||
viewdir=s.viewdir;
|
viewdir=s.viewdir;
|
||||||
|
|
|
@ -12,6 +12,10 @@
|
||||||
#define POCET_POSTAV 6
|
#define POCET_POSTAV 6
|
||||||
#define HODINA 360
|
#define HODINA 360
|
||||||
|
|
||||||
|
#define GAMESPEED 5
|
||||||
|
#define GAMESPEED_FASTBATTLE 2
|
||||||
|
|
||||||
|
|
||||||
#define MAX_FILESYSTEM_PATH 256
|
#define MAX_FILESYSTEM_PATH 256
|
||||||
|
|
||||||
#define A_SIDEMAP 0x8001
|
#define A_SIDEMAP 0x8001
|
||||||
|
@ -573,6 +577,7 @@ extern int mapsize; //pocet sektoru v mape
|
||||||
extern int hl_ptr; //ukazatel na konec staticke tabulky registraci
|
extern int hl_ptr; //ukazatel na konec staticke tabulky registraci
|
||||||
extern int end_ptr; //ukazatel na uplny konec tabulky registraci
|
extern int end_ptr; //ukazatel na uplny konec tabulky registraci
|
||||||
extern short **map_items; //ukazatel na mapu predmetu
|
extern short **map_items; //ukazatel na mapu predmetu
|
||||||
|
extern short *destroyed_items; //list of destroyed items to be returned to the game
|
||||||
extern int default_ms_cursor; //cislo zakladniho mysiho kurzoru
|
extern int default_ms_cursor; //cislo zakladniho mysiho kurzoru
|
||||||
extern void (*unwire_proc)(void); //procedura zajistujici odpojeni prave ukoncovane interakce
|
extern void (*unwire_proc)(void); //procedura zajistujici odpojeni prave ukoncovane interakce
|
||||||
extern void (*wire_proc)(void); //procedura zajistujici pripojeni drive ukoncene interakce
|
extern void (*wire_proc)(void); //procedura zajistujici pripojeni drive ukoncene interakce
|
||||||
|
@ -581,8 +586,8 @@ extern word minimap[VIEW3D_Z+1][VIEW3D_X*2+1]; //minimalizovana mapa s informace
|
||||||
extern char norefresh; //vypina refresh obrazovky
|
extern char norefresh; //vypina refresh obrazovky
|
||||||
extern char cancel_pass; //okamzite zrusi plynuly prechod
|
extern char cancel_pass; //okamzite zrusi plynuly prechod
|
||||||
extern char reverse_draw ; //kresba odpredu dozadu
|
extern char reverse_draw ; //kresba odpredu dozadu
|
||||||
extern char gamespeed; //rychlost hry
|
extern uint8_t gamespeed; //rychlost hry
|
||||||
extern char gamespeedbattle; //akcelerace rychlosti pro bitvy
|
extern uint8_t gamespeedbattle; //akcelerace rychlosti pro bitvy
|
||||||
extern int num_ofsets[]; //tabulka offsetu pro steny
|
extern int num_ofsets[]; //tabulka offsetu pro steny
|
||||||
extern int back_color; //cislo barvy pozadi
|
extern int back_color; //cislo barvy pozadi
|
||||||
extern uint8_t cur_group; //cislo aktualni skupiny
|
extern uint8_t cur_group; //cislo aktualni skupiny
|
||||||
|
@ -986,10 +991,10 @@ char pick_item_(int id,int xa,int ya,int xr,int yr);
|
||||||
void wire_inv_mode(THUMAN *select);
|
void wire_inv_mode(THUMAN *select);
|
||||||
void init_inventory(void);
|
void init_inventory(void);
|
||||||
void init_items(void);
|
void init_items(void);
|
||||||
void push_item(int sect,int pos,short *picked_item);
|
void push_item(int sect,int pos,const short *picked_item);
|
||||||
void pop_item(int sect,int pos,int mask,short **picked_item);
|
void pop_item(int sect,int pos,int mask,short **picked_item);
|
||||||
int count_items_inside(short *place);
|
int count_items_inside(const short *place);
|
||||||
int count_items_total(short *place);
|
int count_items_total(const short *place);
|
||||||
char put_item_to_inv(THUMAN *p,short *picked_items); //funkce vklada predmet(y) do batohu postavy
|
char put_item_to_inv(THUMAN *p,short *picked_items); //funkce vklada predmet(y) do batohu postavy
|
||||||
void pick_set_cursor(void); //nastavuje kurzor podle vlozeneho predmetu;
|
void pick_set_cursor(void); //nastavuje kurzor podle vlozeneho predmetu;
|
||||||
void calc_fly(THE_TIMER *t);
|
void calc_fly(THE_TIMER *t);
|
||||||
|
|
|
@ -1486,8 +1486,9 @@ int smlouvat_prodej(int cena,int ponuka,int posledni,int puvod,int pocet)
|
||||||
|
|
||||||
if (ponuka==0) return 0;
|
if (ponuka==0) return 0;
|
||||||
if (ponuka<=cena) return 0;
|
if (ponuka<=cena) return 0;
|
||||||
if (posledni!=0) if (ponuka>=posledni || ponuka>min) return 1;
|
if (ponuka <= min && (posledni==0 || ponuka<posledni)) {
|
||||||
if (p_ok>r_ok) return 0;
|
if (p_ok>r_ok) return 0;
|
||||||
|
}
|
||||||
if (p_ok>75) return 2;
|
if (p_ok>75) return 2;
|
||||||
if (p_ok>50) return 3;
|
if (p_ok>50) return 3;
|
||||||
if (p_ok>25) return 4;
|
if (p_ok>25) return 4;
|
||||||
|
@ -1544,7 +1545,7 @@ THAGGLERESULT smlouvat_dlg(int cena,int puvod,int pocet,int posledni, int money,
|
||||||
define(-1,150,15,100,13,0,label,int2ascii(cena,buffer,10));
|
define(-1,150,15,100,13,0,label,int2ascii(cena,buffer,10));
|
||||||
set_font(H_FBOLD,MSG_COLOR1);
|
set_font(H_FBOLD,MSG_COLOR1);
|
||||||
define(-1,10,30,1,1,0,label,texty[238]);
|
define(-1,10,30,1,1,0,label,texty[238]);
|
||||||
define(10,150,30,100,13,0,input_line,8,0,0,"");property(def_border(5,BAR_COLOR),NULL,NULL,0);set_default("");
|
define(10,150,30,100,13,0,input_line,7,0,0,"");property(def_border(5,BAR_COLOR),NULL,NULL,0);set_default("");
|
||||||
on_control_event(smlouvat_enter);
|
on_control_event(smlouvat_enter);
|
||||||
define(20,20,20,80,20,2,button,texty[239]);property(def_border(5,BAR_COLOR),NULL,NULL,BAR_COLOR);on_control_change(terminate_gui);
|
define(20,20,20,80,20,2,button,texty[239]);property(def_border(5,BAR_COLOR),NULL,NULL,BAR_COLOR);on_control_change(terminate_gui);
|
||||||
define(30,110,20,80,20,2,button,texty[230]);property(def_border(5,BAR_COLOR),NULL,NULL,BAR_COLOR);on_control_change(terminate_gui);
|
define(30,110,20,80,20,2,button,texty[230]);property(def_border(5,BAR_COLOR),NULL,NULL,BAR_COLOR);on_control_change(terminate_gui);
|
||||||
|
|
61
game/inv.c
61
game/inv.c
|
@ -432,7 +432,7 @@ void draw_placed_items_normal(int celx,int cely,int sect,int side)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int count_items_total(short *place)
|
int count_items_total(const short *place)
|
||||||
{
|
{
|
||||||
int c=0;
|
int c=0;
|
||||||
|
|
||||||
|
@ -441,7 +441,7 @@ int count_items_total(short *place)
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
|
||||||
int count_items_visible(short *place)
|
int count_items_visible(const short *place)
|
||||||
{
|
{
|
||||||
int c=0;
|
int c=0;
|
||||||
|
|
||||||
|
@ -455,7 +455,7 @@ int count_items_visible(short *place)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int count_items_inside(short *place)
|
int count_items_inside(const short *place)
|
||||||
{
|
{
|
||||||
int c=1;
|
int c=1;
|
||||||
|
|
||||||
|
@ -479,43 +479,37 @@ int find_item(short *place,int mask)
|
||||||
return lastitem;
|
return lastitem;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int lastsector;
|
void push_to_destroyed_items(const short *picked_items) {
|
||||||
|
int new_count = count_items_total(picked_items);
|
||||||
static char ValidateSector(word sector, void *_)
|
if (new_count == 0) return;
|
||||||
{
|
int cur_destroyed = count_items_total(destroyed_items);
|
||||||
int pp=map_sectors[sector].sector_type;
|
short *nw = NewArr(short, new_count+cur_destroyed+1);
|
||||||
if (pp==S_NORMAL || pp==S_SMER || pp==S_LEAVE || pp==S_FLT_SMER)
|
for (int i = 0; i < new_count; ++i) {
|
||||||
{
|
nw[i] = abs(picked_items[i]);
|
||||||
lastsector=sector;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
for (int i = 0; i < cur_destroyed; ++i) {
|
||||||
|
nw[new_count+i] = destroyed_items[i];
|
||||||
|
}
|
||||||
|
nw[new_count+cur_destroyed] = 0;
|
||||||
|
free(destroyed_items);
|
||||||
|
destroyed_items = nw;
|
||||||
|
}
|
||||||
|
|
||||||
void push_item(int sect,int pos,short *picked_item)
|
void push_item(int sect,int pos,const short *picked_item)
|
||||||
{
|
{
|
||||||
int bc;
|
int bc;
|
||||||
int pc;
|
int pc;
|
||||||
int tc;
|
int tc;
|
||||||
short *p;
|
short *p;
|
||||||
|
char s = map_sectors[sect].sector_type;
|
||||||
|
|
||||||
if (map_sectors[sect].sector_type==S_DIRA || ISTELEPORTSECT(sect))
|
|
||||||
|
if (s==S_DIRA || ISTELEPORTSECT(sect) || s == S_SCHODY)
|
||||||
sect=map_sectors[sect].sector_tag;
|
sect=map_sectors[sect].sector_tag;
|
||||||
if (sect==0 || map_sectors[sect].sector_type==S_VODA)
|
if (sect==0 || s==S_VODA || s == S_LAVA || s == S_SSMRT || s == S_LODKA) {
|
||||||
{
|
push_to_destroyed_items(picked_item);
|
||||||
if (game_extras & EX_RECOVER_DESTROYED_ITEMS)
|
return;
|
||||||
{
|
}
|
||||||
labyrinth_find_path(viewsector,65535,SD_PLAY_IMPS,ValidateSector,NULL, NULL);
|
|
||||||
push_item(lastsector,viewdir,picked_item);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
free(picked_item);
|
|
||||||
picked_item=NULL;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
sect=(sect<<2)+pos;
|
sect=(sect<<2)+pos;
|
||||||
bc=count_items_total(map_items[sect]);
|
bc=count_items_total(map_items[sect]);
|
||||||
pc=count_items_total(picked_item);
|
pc=count_items_total(picked_item);
|
||||||
|
@ -682,7 +676,7 @@ char pick_item_(int id,int xa,int ya,int xr,int yr)
|
||||||
idd=(id+viewdir)&0x3;
|
idd=(id+viewdir)&0x3;
|
||||||
if (picked_item!=NULL)
|
if (picked_item!=NULL)
|
||||||
{
|
{
|
||||||
if (map_sectors[sect].sector_type==S_DIRA)
|
if (map_sectors[sect].sector_type==S_DIRA)
|
||||||
{
|
{
|
||||||
throw_fly(xa,ya,0);
|
throw_fly(xa,ya,0);
|
||||||
letici_veci->speed=0;
|
letici_veci->speed=0;
|
||||||
|
@ -2494,7 +2488,6 @@ static int shop_sector;
|
||||||
T_CLK_MAP clk_shop[]=
|
T_CLK_MAP clk_shop[]=
|
||||||
{
|
{
|
||||||
{-1,54,378,497,479,shop_change_player,2+8,-1},
|
{-1,54,378,497,479,shop_change_player,2+8,-1},
|
||||||
{-1,0,0,639,479,_exit_shop,8,-1},
|
|
||||||
{-1,INV_X,INV_Y,INV_X+INV_XS*6,INV_Y+INV_YS*5,shop_bag_click,MS_EVENT_MOUSE_LPRESS,-1},
|
{-1,INV_X,INV_Y,INV_X+INV_XS*6,INV_Y+INV_YS*5,shop_bag_click,MS_EVENT_MOUSE_LPRESS,-1},
|
||||||
{1,2+BUYBOX_X,39+BUYBOX_Y,22+BUYBOX_X,76+BUYBOX_Y,shop_block_click,2,H_MS_DEFAULT},
|
{1,2+BUYBOX_X,39+BUYBOX_Y,22+BUYBOX_X,76+BUYBOX_Y,shop_block_click,2,H_MS_DEFAULT},
|
||||||
{2,246+BUYBOX_X,39+BUYBOX_Y,266+BUYBOX_X,76+BUYBOX_Y,shop_block_click,2,H_MS_DEFAULT},
|
{2,246+BUYBOX_X,39+BUYBOX_Y,266+BUYBOX_X,76+BUYBOX_Y,shop_block_click,2,H_MS_DEFAULT},
|
||||||
|
@ -2503,6 +2496,7 @@ T_CLK_MAP clk_shop[]=
|
||||||
{-1,337,0,357,14,go_map,2,H_MS_DEFAULT},
|
{-1,337,0,357,14,go_map,2,H_MS_DEFAULT},
|
||||||
{-1,87,0,142,14,game_setup,2,H_MS_DEFAULT},
|
{-1,87,0,142,14,game_setup,2,H_MS_DEFAULT},
|
||||||
{-1,30,0,85,14,konec,2,H_MS_DEFAULT},
|
{-1,30,0,85,14,konec,2,H_MS_DEFAULT},
|
||||||
|
{-1,0,0,639,479,_exit_shop,8,-1},
|
||||||
};
|
};
|
||||||
|
|
||||||
static void shop_mouse_event(EVENT_MSG *msg,void **unused)
|
static void shop_mouse_event(EVENT_MSG *msg,void **unused)
|
||||||
|
@ -3207,7 +3201,6 @@ char _exit_shop(int id, int xa, int ya,int xr,int yr)
|
||||||
{
|
{
|
||||||
xr,yr,xa,ya,id;
|
xr,yr,xa,ya,id;
|
||||||
SEND_LOG("(SHOP) Exiting shop...");
|
SEND_LOG("(SHOP) Exiting shop...");
|
||||||
memset(shp_item_map, 0, sizeof(shp_item_map));
|
|
||||||
if (cur_owner==-1)
|
if (cur_owner==-1)
|
||||||
{
|
{
|
||||||
free(picked_item);
|
free(picked_item);
|
||||||
|
|
|
@ -62,7 +62,8 @@ TSTENA *map_sides;
|
||||||
TSECTOR *map_sectors;
|
TSECTOR *map_sectors;
|
||||||
TVYKLENEK *map_vyk; //mapa vyklenku
|
TVYKLENEK *map_vyk; //mapa vyklenku
|
||||||
word vyk_max; //pocet vyklenku v mape
|
word vyk_max; //pocet vyklenku v mape
|
||||||
short **map_items;
|
short **map_items = 0;
|
||||||
|
short *destroyed_items = 0;;
|
||||||
char *flag_map;
|
char *flag_map;
|
||||||
TMAP_EDIT_INFO *map_coord;
|
TMAP_EDIT_INFO *map_coord;
|
||||||
TSTR_LIST level_texts;
|
TSTR_LIST level_texts;
|
||||||
|
|
10
game/setup.c
10
game/setup.c
|
@ -44,7 +44,7 @@ static void checkbox_animator(THE_TIMER *t)
|
||||||
animate_checkbox(10,130,10);
|
animate_checkbox(10,130,10);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int effects[]={SND_GVOLUME,SND_MUSIC,SND_GFX,SND_TREBL,SND_BASS,SND_XBASS};
|
static int effects[]={SND_GVOLUME,SND_MUSIC,SND_GFX,SND_TREBL,SND_BASS};
|
||||||
|
|
||||||
static void do_setup_change(void)
|
static void do_setup_change(void)
|
||||||
{
|
{
|
||||||
|
@ -55,6 +55,7 @@ static void do_setup_change(void)
|
||||||
{
|
{
|
||||||
case 10:set_snd_effect(SND_SWAP,c & 1);break;
|
case 10:set_snd_effect(SND_SWAP,c & 1);break;
|
||||||
case 20:set_snd_effect(SND_OUTFILTER,c & 1);break;
|
case 20:set_snd_effect(SND_OUTFILTER,c & 1);break;
|
||||||
|
case 250:timerspeed_val = TIMERSPEED- c;break;
|
||||||
default:set_snd_effect(effects[o_aktual->id/10-20],c);break;
|
default:set_snd_effect(effects[o_aktual->id/10-20],c);break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -111,7 +112,7 @@ static void unwire_setup(void)
|
||||||
enable_sort=f_get_value(0,100) & 1;
|
enable_sort=f_get_value(0,100) & 1;
|
||||||
autoattack=f_get_value(0,110) & 1;
|
autoattack=f_get_value(0,110) & 1;
|
||||||
autosave_enabled=f_get_value(0,120) & 1;
|
autosave_enabled=f_get_value(0,120) & 1;
|
||||||
level_preload=f_get_value(0,130) & 1;
|
gamespeedbattle=(f_get_value(0,130) & 1)?GAMESPEED_FASTBATTLE:gamespeed;
|
||||||
delete_from_timer(TM_CHECKBOX);
|
delete_from_timer(TM_CHECKBOX);
|
||||||
mix_back_sound(32768);
|
mix_back_sound(32768);
|
||||||
close_current();
|
close_current();
|
||||||
|
@ -188,7 +189,7 @@ void new_setup()
|
||||||
case 1:c_default(enable_sort);break;
|
case 1:c_default(enable_sort);break;
|
||||||
case 2:c_default(autoattack);break;
|
case 2:c_default(autoattack);break;
|
||||||
case 3:c_default(autosave_enabled);break;
|
case 3:c_default(autosave_enabled);break;
|
||||||
case 4:c_default(level_preload);break;
|
case 4:c_default(gamespeedbattle < gamespeed);break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -201,6 +202,9 @@ void new_setup()
|
||||||
define(200+i*10,50+i*60,30,30,200,0,skeldal_soupak,effects[i]==SND_MUSIC?127:255);c_default(get_snd_effect(effects[i]));
|
define(200+i*10,50+i*60,30,30,200,0,skeldal_soupak,effects[i]==SND_MUSIC?127:255);c_default(get_snd_effect(effects[i]));
|
||||||
on_control_change(do_setup_change);
|
on_control_change(do_setup_change);
|
||||||
}
|
}
|
||||||
|
define(200+5*10,50+5*60,30,30,200,0,skeldal_soupak,TIMERSPEED-1);c_default(timerspeed_val >TIMERSPEED?0:TIMERSPEED - timerspeed_val);
|
||||||
|
on_control_change(do_setup_change);
|
||||||
|
|
||||||
define(300,559,336,81,21,0,setup_ok_button,texty[174]);on_control_change(exit_setup_action);
|
define(300,559,336,81,21,0,setup_ok_button,texty[174]);on_control_change(exit_setup_action);
|
||||||
property(NULL,ablock(H_FTINY),&color_topbar,0);
|
property(NULL,ablock(H_FTINY),&color_topbar,0);
|
||||||
redraw_window();
|
redraw_window();
|
||||||
|
|
|
@ -75,12 +75,13 @@ typedef struct inis
|
||||||
THE_TIMER timer_tree;
|
THE_TIMER timer_tree;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int hl_ptr=H_FIRST_FREE;
|
int hl_ptr=H_FIRST_FREE;
|
||||||
int debug_enabled=0;
|
int debug_enabled=0;
|
||||||
char sound_detection=1;
|
char sound_detection=1;
|
||||||
int snd_devnum,snd_parm1,snd_parm2,snd_parm3,snd_mixing=22000;
|
int snd_devnum,snd_parm1,snd_parm2,snd_parm3,snd_mixing=22000;
|
||||||
char gamespeed=5;
|
uint8_t gamespeed=GAMESPEED;
|
||||||
char gamespeedbattle=0;
|
uint8_t gamespeedbattle=GAMESPEED;
|
||||||
char level_preload=1;
|
char level_preload=1;
|
||||||
char *level_fname=NULL;
|
char *level_fname=NULL;
|
||||||
int game_extras=0;
|
int game_extras=0;
|
||||||
|
@ -823,6 +824,8 @@ void cti_texty(void)
|
||||||
//patch stringtable
|
//patch stringtable
|
||||||
if (!texty[98]) str_replace(&texty,98,"Ulo\x91it hru jako");
|
if (!texty[98]) str_replace(&texty,98,"Ulo\x91it hru jako");
|
||||||
if (!texty[99]) str_replace(&texty,99,"CRT Filter (>720p)");
|
if (!texty[99]) str_replace(&texty,99,"CRT Filter (>720p)");
|
||||||
|
str_replace(&texty, 144, "Zrychlit souboje");
|
||||||
|
str_replace(&texty, 51, "Celkov\x88 Hudba Efekty V\x98\xA8ky Basy Rychlost");
|
||||||
str_replace(&texty,0,"Byl nalezen p\xA9ipojen\x98 ovlada\x87\nPro aktivaci ovlada\x87""e stiskn\x88te kter\x82koliv tla\x87\xA1tko na ovlada\x87i");
|
str_replace(&texty,0,"Byl nalezen p\xA9ipojen\x98 ovlada\x87\nPro aktivaci ovlada\x87""e stiskn\x88te kter\x82koliv tla\x87\xA1tko na ovlada\x87i");
|
||||||
lang_patch_stringtable(&texty, "ui.csv", "");
|
lang_patch_stringtable(&texty, "ui.csv", "");
|
||||||
}
|
}
|
||||||
|
|
|
@ -879,7 +879,7 @@ char JePozdrzeno()
|
||||||
|
|
||||||
void pozdrz_akci()
|
void pozdrz_akci()
|
||||||
{
|
{
|
||||||
int battlespeed=gamespeed-gamespeed*gamespeedbattle/5;
|
int battlespeed=gamespeedbattle;
|
||||||
SPozdrzeno=get_game_tick_count()+battlespeed*2000/6;
|
SPozdrzeno=get_game_tick_count()+battlespeed*2000/6;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1146,7 +1146,7 @@ static void pouzij_svitek(THUMAN *p,int ruka)
|
||||||
static void play_weapon_anim(int anim_num,int hitpos)
|
static void play_weapon_anim(int anim_num,int hitpos)
|
||||||
{
|
{
|
||||||
char count_save=global_anim_counter;
|
char count_save=global_anim_counter;
|
||||||
int battlespeed=gamespeed-gamespeed*gamespeedbattle/5;
|
int battlespeed=gamespeedbattle;
|
||||||
|
|
||||||
if (anim_num==0) return;
|
if (anim_num==0) return;
|
||||||
hold_timer(TM_SCENE,1);
|
hold_timer(TM_SCENE,1);
|
||||||
|
@ -1453,7 +1453,7 @@ void jadro_souboje(EVENT_MSG *msg,void **unused) //!!!! Jadro souboje
|
||||||
|
|
||||||
void wire_jadro_souboje(void)
|
void wire_jadro_souboje(void)
|
||||||
{
|
{
|
||||||
int battlespeed=gamespeed-gamespeed*gamespeedbattle/5;
|
int battlespeed=gamespeedbattle;
|
||||||
recalc_volumes(viewsector,viewdir);
|
recalc_volumes(viewsector,viewdir);
|
||||||
if (battlespeed<1) battlespeed=1;
|
if (battlespeed<1) battlespeed=1;
|
||||||
add_to_timer(TM_SCENE,battlespeed,-1,hrat_souboj);
|
add_to_timer(TM_SCENE,battlespeed,-1,hrat_souboj);
|
||||||
|
|
|
@ -45,7 +45,7 @@ To activate the controller, press any button on the controller"
|
||||||
48,Start
|
48,Start
|
||||||
49,Throw
|
49,Throw
|
||||||
50,Combat in Progress
|
50,Combat in Progress
|
||||||
51,Overall Music Sounds Treble Bass
|
51,Overall Music Sounds Treble Bass Speed
|
||||||
52,Stereo Settings (Ultrasound)
|
52,Stereo Settings (Ultrasound)
|
||||||
53,Swap Sides
|
53,Swap Sides
|
||||||
54,Output Filter (SBPro)
|
54,Output Filter (SBPro)
|
||||||
|
@ -117,7 +117,7 @@ To activate the controller, press any button on the controller"
|
||||||
141,Rearrange Portraits
|
141,Rearrange Portraits
|
||||||
142,Auto Attack
|
142,Auto Attack
|
||||||
143,Auto Save
|
143,Auto Save
|
||||||
144,Load All Into Memory
|
144,Speed up battles
|
||||||
145,Adventure Length:
|
145,Adventure Length:
|
||||||
146,%d day and
|
146,%d day and
|
||||||
147,%d days and
|
147,%d days and
|
||||||
|
|
|
|
@ -299,7 +299,8 @@ static void update_music_volume(){
|
||||||
float v = music_volume * master_volume;
|
float v = music_volume * master_volume;
|
||||||
for (int i = 0; i <2; i++)
|
for (int i = 0; i <2; i++)
|
||||||
sound_mixer.visit_track(music_track_id_base+i,[&](WaveMixer<2> &m){
|
sound_mixer.visit_track(music_track_id_base+i,[&](WaveMixer<2> &m){
|
||||||
m.set_channel_volume(v, v);
|
m.set_channel_volume(0, v);
|
||||||
|
m.set_channel_volume(1, v);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -45,7 +45,7 @@ DDLArchive::Extracted DDLArchive::extract_file(std::ifstream &s,
|
||||||
std::vector<char> data;
|
std::vector<char> data;
|
||||||
data.resize(sz);
|
data.resize(sz);
|
||||||
s.read(data.data(), sz);
|
s.read(data.data(), sz);
|
||||||
if (s.gcount() != sz) return {fname, false, {}};
|
if (static_cast<uint32_t>(s.gcount()) != sz) return {fname, false, {}};
|
||||||
return {fname, true, std::move(data)};
|
return {fname, true, std::move(data)};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue