no loading between levels, many improvements in code

This commit is contained in:
Ondřej Novák 2025-01-31 18:54:59 +01:00
parent 77f1700902
commit a8a87d514c
55 changed files with 628 additions and 763 deletions

View file

@ -242,7 +242,7 @@ void psani_poznamek_event(EVENT_MSG *msg,void **data)
{
char c;
c=va_arg(msg->data, int);
c=quit_request_as_escape(va_arg(msg->data, int));
set_font(H_FLITT5,NOSHADOW(0));
if (c)
{
@ -630,7 +630,7 @@ void *map_keyboard(EVENT_MSG *msg,void **usr)
if (msg->msg==E_AUTOMAP_REDRAW) draw=4;
if (msg->msg==E_KEYBOARD)
{
int d = va_arg(msg->data, int);
int d = quit_request_as_escape(va_arg(msg->data, int));
c=d>>8;
switch (c)
{
@ -773,13 +773,13 @@ static void wire_glob_map_control(void)
char map_menu(int id,int xa,int ya,int xr,int yr)
{
char *s;
word *c;
const char *s;
const word *c;
ya;xa;id;
id=set_select_mode(0);
s=ablock(H_CHARGENM);
c=ablock(H_CHARGENM);
c=(const word *)s;
s+=*c*yr+xr+6;
id=*s;
if (!id) return 1;
@ -897,7 +897,7 @@ void map_teleport_keyboard(EVENT_MSG *msg,void **usr)
{
usr;
if (msg->msg==E_KEYBOARD) {
int c = va_arg(msg->data, int);
int c = quit_request_as_escape(va_arg(msg->data, int));
switch (c>>8)
{
case 1:

View file

@ -287,14 +287,14 @@ word *bott_clear(void)
static void draw_small_icone(int num,int x,int y)
{
word *pic;
const word *pic;
pic=ablock(H_POSTUP);
num*=13;x+=num;
put_textured_bar(pic,x,y,13,13,num,0);
}
static void bott_fletna_normal(void **pp,int32_t *s)
static const void *bott_fletna_normal(const void *pp, int32_t *s)
{
word *bott_scr;
int i,x;
@ -307,12 +307,13 @@ static void bott_fletna_normal(void **pp,int32_t *s)
{
set_aligned_position(x,32,1,1,texty[180+i]);outtext(texty[180+i]);
}
*pp=GetScreenAdr();
void *out=GetScreenAdr();
*s=GetScreenSizeBytes();
RestoreScreen();
return out;
}
static void bott_draw_normal(void **pp,int32_t *s)
static const void *bott_draw_normal(const void *pp, int32_t *s)
{
int i,j;int x,xs=0,y;
word *bott_scr;
@ -404,9 +405,10 @@ static void bott_draw_normal(void **pp,int32_t *s)
outtext(s);
}
*/
*pp=GetScreenAdr();
void *out = GetScreenAdr();
*s=GetScreenSizeBytes();
RestoreScreen();
return out;
}
@ -420,7 +422,7 @@ void bott_timer_draw(struct the_timer *q)
bott_timer=NULL;
}
void bott_disp_text_proc(void **pp,int32_t *ss)
const void *bott_disp_text_proc(const void *pp, int32_t *ss)
{
char *p,*text;
int y=20;
@ -442,9 +444,10 @@ void bott_disp_text_proc(void **pp,int32_t *ss)
p=strchr(p,0)+1;
}
while (p[0]);
*pp=GetScreenAdr();
void *out = GetScreenAdr();
*ss=GetScreenSizeBytes();
RestoreScreen();
return out;
}
void bott_disp_text(const char *text)
@ -460,7 +463,7 @@ void bott_disp_text(const char *text)
strcpy(bott_text,text);
}
static void MaskPutPicture(int x, int y, char mask, word color, char blend, void *pic)
static void MaskPutPicture(int x, int y, char mask, word color, char blend, const void *pic)
{
short *info=(short *)pic;
char *data=(char *)(info+3+256);
@ -479,7 +482,7 @@ static void MaskPutPicture(int x, int y, char mask, word color, char blend, void
}
void bott_draw_rune(void **pp,int32_t *ss)
const void *bott_draw_rune(const void *pp, int32_t *ss)
{
int sel_zivel=showrune/10;
int sel_rune=showrune%10;
@ -504,9 +507,10 @@ void bott_draw_rune(void **pp,int32_t *ss)
position (75,60);
outtext(buff);
put_picture(70,30,ablock(glob_items[showruneitem].vzhled+face_arr[0]));
*pp=GetScreenAdr();
void *out = GetScreenAdr();
*ss=GetScreenSizeBytes();
RestoreScreen();
return out;
}
void bott_disp_rune(char rune, int item)
@ -527,14 +531,15 @@ void bott_text_forever()
bott_timer=NULL;
}
void bott_draw_proc(void **p,int32_t *s)
const void *bott_draw_proc(const void *p, int32_t *s)
{
switch (bott_display)
{
case BOTT_NORMAL:bott_draw_normal(p,s);break;
case BOTT_TEXT:bott_disp_text_proc(p,s);break;
case BOTT_FLETNA:bott_fletna_normal(p,s);break;
case BOTT_RUNA:bott_draw_rune(p,s);break;
case BOTT_NORMAL:return bott_draw_normal(p,s);break;
case BOTT_TEXT:return bott_disp_text_proc(p,s);break;
case BOTT_FLETNA:return bott_fletna_normal(p,s);break;
case BOTT_RUNA:return bott_draw_rune(p,s);break;
default: return p;
}
}
@ -562,7 +567,7 @@ void bott_draw_fletna()
void draw_spell(int handle,int phase,int xicht)
{
int x,y,i;
word *w;
const word *w;
int32_t scr_linelen2 = GetScreenPitch();
@ -721,9 +726,9 @@ static __inline int toInt( float fval )
}
static void *check_autofade(void *image, char ceil, int dark)
static const void *check_autofade(const void *image, char ceil, int dark)
{
char *data=image;
const char *data=image;
if (data[5]==0x80)
{
word *xy=(word *)image;
@ -781,7 +786,7 @@ int draw_basic_floor(int celx,int cely,int sector)
static int calc_item_shiftup(TITEM *it)
{
short *s;
const short *s;
char *c;
int y,x,xs,ys,t;
@ -1098,7 +1103,7 @@ static char set_blind(void) {
extern char folow_mode;
static void zobraz_lodku(word *lodka, word *screen, int size)
static void zobraz_lodku(const word *lodka, word *screen, int size)
{
int32_t scr_linelen2 = GetScreenPitch();
@ -1193,8 +1198,8 @@ void render_scene(int sector, int smer)
// trace_for_bgr(smer);
i=VIEW3D_Z-1;
s=minimap[i][VIEW3D_X];
if (s && !map_sectors[s].ceil) clear_buff(ablock(H_BGR_BUFF),back_color,360);
else clear_buff(ablock(H_BGR_BUFF),back_color,80);
if (s && !map_sectors[s].ceil) clear_buff(ablock_copy(H_BGR_BUFF),back_color,360);
else clear_buff(ablock_copy(H_BGR_BUFF),back_color,80);
for(i=-VIEW3D_X+1;i<VIEW3D_X;i++)
if ((s=minimap[VIEW3D_Z-1][VIEW3D_X+i])!=0)
if (map_coord[s].flags & MC_SHADING) back_clear(i,0);
@ -1336,7 +1341,7 @@ static FX_PLAY *fx_data=NULL;
void draw_fx()
{
word *c;
const word *c;
FX_PLAY *fx;
FX_PLAY **last;

View file

@ -227,7 +227,7 @@ static void draw_other_bar()
int i;
int32_t scr_linelen2 = GetScreenPitch();
word *bbar=ablock(H_BOTTBAR);
const word *bbar=ablock(H_BOTTBAR);
word *screen=GetScreenAdr()+(480-102)*scr_linelen2;
for (i=0;i<102;i++,screen+=scr_linelen2,bbar+=scr_linelen2) memcpy(screen,bbar,scr_linelen2*2);
//put_8bit_clipped(ablock(H_GEN_OKBUTT),378*640+520+screen,0,120,102);
@ -239,7 +239,7 @@ static void draw_other_bar()
static void display_character(THUMAN *p,char i)
{
word *w;
const word *w;
put_picture(4,SCREEN_OFFLINE,ablock(H_IOBLOUK));
if (p->used)
{
@ -277,11 +277,11 @@ static void vypocet_perly(int angle,int xp,int yp,int *x,int *y)
static void zobraz_perlu(void)
{
word *perla;
const word *perla;
int x,y;
word *scr,*sss;
char *p;
word *b;
const word *b;
int xs,ys,xxs;
int32_t scr_linelen2 = GetScreenPitch();
@ -567,7 +567,6 @@ static void def_entries()
sprintf(s,CHAR_NAME,i);
def_handle(H_GEN_POSTAVY+i,s,pcx_8bit_decomp,SR_BGRAFIKA);
apreload(H_GEN_POSTAVY+i);
mix_back_sound(0);
}
for(i=0;i<MAX_XICHTS;i++)
@ -576,14 +575,13 @@ static void def_entries()
sprintf(s,XICHT_NAME,i);
def_handle(H_GEN_XICHTY+i,s,pcx_8bit_decomp,SR_BGRAFIKA);
apreload(H_GEN_XICHTY+i);
mix_back_sound(0);
}
}
static char go_next_page(int id,int xa,int ya,int xr,int yr)
{
word *w;
const word *w;
char *b;
xa,ya;
@ -714,7 +712,7 @@ char potvrzeno(char *text,void (*redraw)(char))
static char view_another_click2(int id,int xa,int ya,int xr,int yr)
{
short *w;
const short *w;
id,xa,ya,xr,yr;
w=ablock(H_OKNO);
@ -760,21 +758,28 @@ static void enter_reaction(EVENT_MSG *msg,void **unused)
if (msg->msg==E_KEYBOARD)
{
int c = va_arg(msg->data, int);
if (c==13 && !shut_downing_text)
if ((c >> 1) == 1 || c == E_QUIT_GAME_KEY) {
gen_exit_editor(2,0,0,0,0);
return;
} else if ((c & 0xFF)==13 && !shut_downing_text)
{
send_message(E_KEYBOARD,13);
bott_draw(1);
redraw_generator(1);
msg->msg=-1;
was_enter=1;
}
was_enter=1;
}
}
static void enter_reaction2(EVENT_MSG *msg,void **_)
{
int c = va_arg(msg->data, int);
if (msg->msg==E_KEYBOARD && c==13 && !shut_downing_text && ~b_disables & 0x3)
if ((c >> 1) == 1 || c == E_QUIT_GAME_KEY) {
gen_exit_editor(1,0,0,0,0);
return;
}
if (msg->msg==E_KEYBOARD && (c & 0xFF)==13 && !shut_downing_text && ~b_disables & 0x3)
{
send_message(E_KEYBOARD,13);
bott_draw(1);
@ -804,6 +809,7 @@ char gen_exit_editor(int id,int xa,int ya,int xr,int yr)
}
else
{
game_display_cancel_quit_request();
if (id==2)redraw_generator(1);
else redraw_svitek(0);
edit_name();
@ -848,10 +854,13 @@ char enter_generator()
{
send_message(E_ADD,E_KEYBOARD,enter_reaction);
EVENT_MSG *ev= task_wait_event(E_CLOSE_GEN);;
i=va_arg(ev->data, int);
i=ev?va_arg(ev->data, int):255;
send_message(E_DONE,E_KEYBOARD,enter_reaction);
if (i==3 && potvrzeno(texty[116],redraw_generator)) goto znova;
if (i==255) return 1;
if (i==255) {
term_task(edit_task);
return 1;
}
}
while (cur_xicht==-1 || i==3);
send_message(E_KEYBOARD,13);

View file

@ -67,7 +67,7 @@ char clk_touch_vyk(int sector,int side,int xr,int yr)
else
{
int fc;
word *w;
const word *w;
for(i=0;v->items[i];i++);
if (i==8)
{
@ -202,7 +202,10 @@ char konec(int id,int xa,int ya,int xr,int yr)
if (cur_mode==MD_ANOTHER_MAP) unwire_proc(),wire_proc();
send_message(E_CLOSE_MAP);
}
else wire_proc();
else {
wire_proc();
game_display_cancel_quit_request();
}
return 1;
}
@ -234,7 +237,7 @@ char start_invetory(int id,int xa,int ya,int xr,int yr)
{
THUMAN *p;
int i;
word *xs;
const word *xs;
id;xa;ya;yr;
if (cur_mode==MD_ANOTHER_MAP) unwire_proc(),wire_proc();
@ -382,7 +385,7 @@ char empty_clk(int id,int xa,int ya,int xr,int yr) //tato udalost slouzi ke zrus
static char sing_song_clk(int id,int xa,int ya,int xr,int yr)
{
char *xadr;
const char *xadr;
word *xs;
static char playing=0;
char standardflute=map_sectors[viewsector].sector_type>=S_FLT_SMER &&

View file

@ -125,16 +125,16 @@ static int glob_y;
static int last_pgf;
static word *paleta;
static const word *paleta;
static int32_t loc_anim_render_buffer;
static short task_num=-1;
void small_anm_buff(void *target,void *buff,void *paleta);
void small_anm_buff(void *target,const void *buff,const void *paleta);
//#pragma aux small_anm_buff parm[edi][esi][ebx] modify [eax ecx]
void small_anm_delta(void *target,void *buff,void *paleta);
void small_anm_delta(void *target,const void *buff,const void *paleta);
//#pragma aux small_anm_delta parm[edi][esi][ebx] modify [eax ecx]
static void animace_kouzla(int act,void *data,int csize)
static void animace_kouzla(int act,const void *data,int csize)
{
word *p=GetScreenAdr()+loc_anim_render_buffer;
switch (act)
@ -154,7 +154,7 @@ static void dialog_anim(va_list args)
int speed=va_arg(args,int);
int rep=va_arg(args,int);
void *anm;
const void *anm;
void *aptr;
char hid;
int spdc=0,cntr=rep,tm,tm2;
@ -235,7 +235,7 @@ static T_PARAGRAPH *find_paragraph(int num)
T_PARAGRAPH *z;
num+=local_pgf;
pp=(int *)ablock(H_DIALOGY_DAT);
pp=(int *)ablock_copy(H_DIALOGY_DAT);
pocet=*pp;pp+=2;
z=(T_PARAGRAPH *)pp;
for(i=0;i<pocet;i++,z++) if (z->num==(unsigned)num) return z;
@ -256,7 +256,7 @@ static int find_pgnum(char *pc)
int pocet;
int pcc,i;
pp=(int *)ablock(H_DIALOGY_DAT);
pp=(int *)ablock_copy(H_DIALOGY_DAT);
pocet=*pp;pp+=2;
pcc=pc-(char *)pp-8-sizeof(T_PARAGRAPH)*pocet;
z=(T_PARAGRAPH *)pp;
@ -275,7 +275,7 @@ static void goto_paragraph(int prgf)
if (z->visited) z->first=1;
if (z->alt==z->num || !z->visited)
{
pc=((char *)ablock(H_DIALOGY_DAT))+*((int *)ablock(H_DIALOGY_DAT))*sizeof(T_PARAGRAPH)+8+z->position;
pc=((char *)ablock_copy(H_DIALOGY_DAT))+*((int *)ablock_copy(H_DIALOGY_DAT))*sizeof(T_PARAGRAPH)+8+z->position;
last_pgf=prgf;
z->visited=1;
return;
@ -527,7 +527,7 @@ static int get_last_his_line()
static void draw_all()
{
void *c;
const void *c;
show_desc();
if (back_pic_enable) c=back_pic;else c=ablock(H_DIALOG_PIC);
other_draw();
@ -991,7 +991,7 @@ static char ask_who_proc(int id,int xa,int ya,int xr,int yr)
{
THUMAN *p;
int i;
word *xs;
const word *xs;
if (id==2)
{
@ -1367,7 +1367,7 @@ char save_dialog_info(TMPFILE_WR *f)
T_PARAGRAPH *q;
SEND_LOG("(DIALOGS)(SAVELOAD) Saving dialogs info...");
p=ablock(H_DIALOGY_DAT);
p=ablock_copy(H_DIALOGY_DAT);
pgf_pocet=*p;
temp_storage_write(&pgf_pocet,1*4,f);
siz=(pgf_pocet+3)/4;
@ -1375,7 +1375,7 @@ char save_dialog_info(TMPFILE_WR *f)
{
c=getmem(siz);
memset(c,0,siz);
p=ablock(H_DIALOGY_DAT);
p=ablock_copy(H_DIALOGY_DAT);
q=(T_PARAGRAPH *)(p+2);
for(i=0;i<pgf_pocet;i++)
{
@ -1399,7 +1399,7 @@ char load_dialog_info(TMPFILE_RD *f)
T_PARAGRAPH *q;
SEND_LOG("(DIALOGS)(SAVELOAD) Loading dialogs info...");
p=ablock(H_DIALOGY_DAT);
p=ablock_copy(H_DIALOGY_DAT);
aswap(H_DIALOGY_DAT);
temp_storage_read(&pgf_pocet,1*4,f);
siz=(pgf_pocet+3)/4;
@ -1413,7 +1413,7 @@ char load_dialog_info(TMPFILE_RD *f)
{
c=getmem(siz);
res|=(temp_storage_read(c,1*siz,f)!=siz);
p=ablock(H_DIALOGY_DAT);
p=ablock_copy(H_DIALOGY_DAT);
q=(T_PARAGRAPH *)(p+2);
for(i=0;i<pgf_pocet;i++)
{

View file

@ -203,7 +203,7 @@ void init_mobs()
send_message(E_ADD,E_KOUZLO_KOLO,mob_reload);
}
static void register_mob_graphics(int num,char *name_part,char *anims,char *seq)
static void register_mob_graphics(int num,char *name_part,const char *anims,const char *seq)
{
char fulname[14];
char znaky[]=MOB_ZNAKY;
@ -949,9 +949,9 @@ void draw_blood(int zasah,int celx,int cely,int posx,int posy)
draw_placed_texture(ablock(H_MZASAH1+zasah-1),celx,cely,posx+64,posy+64,75,0);
}
*/
static void *mob_select_palette(TMOB *p)
static const void *mob_select_palette(TMOB *p)
{
char *palet;
const char *palet;
palet=ablock(p->cislo_vzoru+6*16+4+monster_block);
return palet+(p->palette)*PIC_FADE_PAL_SIZE;

View file

@ -76,7 +76,7 @@ void scroll_support_64(void *lbuf,void *src1,void *src2,int size1,void *xlat);
//#pragma aux scroll_support_64 parm [EDI][ESI][EDX][ECX][EBX] modify [EAX];
void scroll_support_64b(void *lbuf,void *src1,void *src2,int size1,void *xlat);
//#pragma aux scroll_support_64b parm [EDI][ESI][EDX][ECX][EBX] modify [EAX];*/
void fcdraw(void *source,void *target, void *table);
void fcdraw(const void *source,void *target,const void *table);
//#pragma aux fcdraw parm [EDX][EBX][EAX] modify [ECX ESI EDI];
/*void lodka32(void *source,void *target,void *background,void *xlat,int32_t xysize);
@ -451,7 +451,7 @@ void create_zooming(void)
}
}
static void zooming_forward_backward(word *background,char back)
static void zooming_forward_backward(const word *background,char back)
{
if (!zooming_step) return;
{
@ -477,12 +477,12 @@ static void zooming_forward_backward(word *background,char back)
}
}
void zooming_forward(word *background)
void zooming_forward(const word *background)
{
zooming_forward_backward(background,0);
}
void zooming_backward(word *background)
void zooming_backward(const word *background)
{
zooming_forward_backward(background,1);
}
@ -577,12 +577,13 @@ void turn_right()
*/
}
void show_cel(int celx,int cely,void *stena,int xofs,int yofs,char rev)
void show_cel(int celx,int cely,const void *stena,int xofs,int yofs,char rev)
{
T_INFO_X_3D *x3d,*x0d;
T_INFO_Y *yd,*yp;
int txtsx,txtsy,realsx,realsy,x,i,yss,ysd;
char *p;int plac;
const char *p;
int plac;
int32_t scr_linelen2 = GetScreenPitch();
@ -649,12 +650,13 @@ void show_cel(int celx,int cely,void *stena,int xofs,int yofs,char rev)
}
void show_cel2(int celx,int cely,void *stena,int xofs,int yofs,char rev)
void show_cel2(int celx,int cely,const void *stena,int xofs,int yofs,char rev)
{
T_INFO_X *x3d;
T_INFO_Y *yd;
int txtsx,txtsy,realsx,realsy,x,i;
char *p;int plac;
const char *p;
int plac;
int32_t scr_linelen2 = GetScreenPitch();
@ -716,7 +718,7 @@ void show_cel2(int celx,int cely,void *stena,int xofs,int yofs,char rev)
void draw_floor_ceil(int celx,int cely,char f_c,void *txtr)
void draw_floor_ceil(int celx,int cely,char f_c,const void *txtr)
{
int y;
@ -1051,7 +1053,7 @@ void map_pos(int celx,int cely,int posx,int posy,int posz,int *x,int *y)
*/
static int items_indextab[][2]={{0,0},{-1,3},{1,7},{-1,7},{1,10},{-1,10},{0,10},{-2,15}};
void draw_item(int celx,int cely,int posx,int posy,short *txtr,int index)
void draw_item(int celx,int cely,int posx,int posy,const short *txtr,int index)
{
int x,y;
int clipl,clipr;
@ -1076,10 +1078,10 @@ void draw_item(int celx,int cely,int posx,int posy,short *txtr,int index)
}
void put_textured_bar(void *src,int x,int y,int xs,int ys,int xofs,int yofs)
void put_textured_bar(const void *src,int x,int y,int xs,int ys,int xofs,int yofs)
{
word *pos;
word *xy;
const word *xy;
int32_t scr_linelen2 = GetScreenPitch();
@ -1092,7 +1094,7 @@ void put_textured_bar(void *src,int x,int y,int xs,int ys,int xofs,int yofs)
put_textured_bar_(src,pos,xs,ys,xofs,yofs);
}
void draw_placed_texture(short *txtr,int celx,int cely,int posx,int posy,int posz,char turn)
void draw_placed_texture(const short *txtr,int celx,int cely,int posx,int posy,int posz,char turn)
{
int x,y;
int clipl,clipr;
@ -1295,7 +1297,7 @@ void draw_enemy(DRW_ENEMY *drw)
}
}
void draw_player(short *txtr,int celx,int cely,int posx,int posy,int adjust,char *name)
void draw_player( const short *txtr,int celx,int cely,int posx,int posy,int adjust, const char *name)
{
int x,y,yc,lx,sd;
int clipl,clipr;
@ -1330,7 +1332,7 @@ void draw_player(short *txtr,int celx,int cely,int posx,int posy,int adjust,char
}
void draw_spectxtr(short *txtr,int celx,int cely,int xpos)
void draw_spectxtr(const short *txtr,int celx,int cely,int xpos)
{
int x,y,clipl,clipr;
int32_t scr_linelen2 = GetScreenPitch();
@ -1349,7 +1351,7 @@ void draw_spectxtr(short *txtr,int celx,int cely,int xpos)
}
void draw_item2(int celx,int cely,int xpos,int ypos,void *txtr,int index)
void draw_item2(int celx,int cely,int xpos,int ypos, const void *txtr,int index)
{
int x,y,xs,ys,abc,asc,clipl,clipr;
static int indextab[][2]={{0,0},{0,1},{1,0},{-1,0},{1,2},{-1,1},{-2,1},{2,1}};
@ -1441,7 +1443,7 @@ void set_backgrnd_mode(int mode)
backgrnd_mode=mode;
}
int get_item_top(int celx,int cely,int posx,int posy,word *txtr,int index)
int get_item_top(int celx,int cely,int posx,int posy,const word *txtr,int index)
{
int x,y;
int randx,randy;

View file

@ -28,19 +28,19 @@
void general_engine_init(void);
void draw_floor_ceil(int celx,int cely,char f_c,void *txtr);
void show_cel2(int celx,int cely,void *stena,int xofs,int yofs,char rev);
void draw_floor_ceil(int celx,int cely,char f_c,const void *txtr);
void show_cel2(int celx,int cely,const void *stena,int xofs,int yofs,char rev);
//zobrazi primou stenu ktera lezi pred nebo napravo od pozorovatele
void show_cel(int celx,int cely,void *stena,int xofs,int yofs,char rev);
void show_cel(int celx,int cely,const void *stena,int xofs,int yofs,char rev);
void turn_left(void);
void turn_right(void);
void zooming_backward(word *background);
void zooming_forward(word *background);
void zooming_backward(const word *background);
void zooming_forward(const word *background);
void OutBuffer2nd(void);
void CopyBuffer2nd(void);
void report_mode(int);
void draw_item(int celx,int cely,int posx,int posy,short *pic,int index);
void draw_item2(int celx,int cely,int xpos,int ypos,void *texture,int index);
void draw_item(int celx,int cely,int posx,int posy,const short *pic,int index);
void draw_item2(int celx,int cely,int xpos,int ypos,const void *texture,int index);
//void textmode_effekt(void);
//#pragma aux textmode_effekt modify[eax ebx ecx edx edi];
@ -49,7 +49,8 @@ void clear_buff(word *background,word backcolor,int lines);
typedef struct zoominfo
{
void *startptr, *texture;
void *startptr;
const void *texture;
int32_t texture_line,line_len;
int32_t *xtable;
short *ytable;
@ -122,41 +123,41 @@ typedef short palette_t[256];
typedef struct drw_enemy_struct
{
void *txtr;
const void *txtr;
int celx,cely,posx,posy,adjust,shiftup,num;
char mirror;
char stoned;
palette_t *palette;
const palette_t *palette;
}DRW_ENEMY;
void enemy_draw(void *src,void *trg,int shade,int scale,int maxspace,int clip);
void enemy_draw(const void *src,void *trg,int shade,int scale,int maxspace,int clip);
//#pragma aux enemy_draw parm[ESI][EDI][EBX][EDX][EAX][ECX]
void enemy_draw_transp(void *src,void *trg,void *shade,int scale,int maxspace,int clip);
void enemy_draw_transp(const void *src,void *trg, const void *shade,int scale,int maxspace,int clip);
//#pragma aux enemy_draw_transp parm[ESI][EDI][EBX][EDX][EAX][ECX]
void enemy_draw_mirror_transp(void *src,void *trg,void *shade,int scale,int maxspace,int clip);
void enemy_draw_mirror_transp(const void *src,void *trg, const void *shade,int scale,int maxspace,int clip);
//#pragma aux enemy_draw_mirror_transp parm[ESI][EDI][EBX][EDX][EAX][ECX]
void enemy_draw_mirror(void *src,void *trg,int shade,int scale,int maxspace,int clip);
void enemy_draw_mirror(const void *src,void *trg,int shade,int scale,int maxspace,int clip);
//#pragma aux enemy_draw_mirror parm[ESI][EDI][EBX][EDX][EAX][ECX]
//clip je v poradi vpravo - vlevo (HiLo)
void draw_enemy(DRW_ENEMY *drw);
void draw_player(short *txtr,int celx,int cely,int posx,int posy,int adjust,char *name);
void draw_player(const short *txtr,int celx,int cely,int posx,int posy,int adjust, const char *name);
void set_lclip_rclip(int celx,int cely,int lc,int rc);
void draw_spectxtr(short *txtr,int celx,int cely,int xpos);
void draw_spectxtr(const short *txtr,int celx,int cely,int xpos);
int turn_speed(int turnspeed); //oba je nutne volat na zacatku
int zoom_speed(int zoomspeed);
void scroll_and_copy(void *pic,void *slide, void *scr, int size,int shift, void *lineinfo);
void scroll_and_copy(const void *pic,void *slide, void *scr, int size,int shift, void *lineinfo);
//#pragma aux scroll_and_copy parm[esi][ebx][edi][ecx][edx][eax]
void set_backgrnd_mode(int mode);
int get_item_top(int celx,int cely,int posx,int posy,word *txtr,int index);
int get_item_top(int celx,int cely,int posx,int posy,const word *txtr,int index);
//vraci nejnizsi souradnici y predmetu leziciho na zemi v celx, cely na pozici posx,posy;
#endif

View file

@ -155,7 +155,7 @@ skpskp: add edx,2 ;dalsi hodnota v tabulce
}
void fcdraw(void *source,void *target, void *table)
void fcdraw(const void *source,void *target, const void *table)
//#pragma aux fcdraw parm [EDX][EBX][EAX] modify [ECX ESI EDI];
{
@ -445,7 +445,7 @@ shmad4: add edi,scr_linelen
void scroll_and_copy(void *pic,void *slide, void *scr, int _size,int shift, void *lineinfo)
void scroll_and_copy(const void *pic,void *slide, void *scr, int _size,int shift, void *lineinfo)
//#pragma aux scroll_and_copy parm[esi][ebx][edi][ecx][edx][eax]
{
int32_t scr_linelen2 = GetScreenPitch();
@ -570,7 +570,7 @@ sac_end:sub ecx,2 ;odecti counter
#define ed_stk1 600*4
void enemy_draw(void *src,void *trg,int shade,int scale,int maxspace,int clip)
void enemy_draw(const void *src,void *trg,int shade,int scale,int maxspace,int clip)
//#pragma aux enemy_draw parm[ESI][EDI][EBX][EDX][EAX][ECX]
{
int32_t scr_linelen2 = GetScreenPitch();
@ -756,7 +756,7 @@ ed_err: add esp,ed_stack;vymaz tabulku
}
*/
}
void enemy_draw_transp(void *src,void *trg,void *shade,int scale,int maxspace,int clip)
void enemy_draw_transp(const void *src,void *trg,const void *shade,int scale,int maxspace,int clip)
//#pragma aux enemy_draw_transp parm[ESI][EDI][EBX][EDX][EAX][ECX]
{
@ -945,7 +945,7 @@ et_err: add esp,ed_stack;vymaz tabulku
}*/
}
void enemy_draw_mirror_transp(void *src,void *trg,void *shade,int scale,int maxspace,int clip)
void enemy_draw_mirror_transp(const void *src,void *trg,const void *shade,int scale,int maxspace,int clip)
//#pragma aux enemy_draw_mirror_transp parm[ESI][EDI][EBX][EDX][EAX][ECX]
{
@ -1132,7 +1132,7 @@ etmerr: add esp,ed_stack;vymaz tabulku
}
*/
}
void enemy_draw_mirror(void *src,void *trg,int shade,int scale,int maxspace,int clip)
void enemy_draw_mirror(const void *src,void *trg,int shade,int scale,int maxspace,int clip)
//#pragma aux enemy_draw_mirror parm[ESI][EDI][EBX][EDX][EAX][ECX]
//clip je v poradi vpravo - vlevo (HiLo)
{

View file

@ -1358,7 +1358,7 @@ static void saveload_keyboard(EVENT_MSG *msg,void **_)
{
if (msg->msg == E_KEYBOARD)
{
int v = va_arg(msg->data, int);
int v = quit_request_as_escape(va_arg(msg->data, int));
switch (v>>8)
{
case 1:unwire_proc();wire_proc();break;
@ -1377,6 +1377,7 @@ static void saveload_keyboard(EVENT_MSG *msg,void **_)
void unwire_save_load()
{
term_task_wait(clk_ask_name[0].id);
if (back_texture!=NULL) free(back_texture);
back_texture=NULL;
if (story_text!=NULL)release_list(story_text);

View file

@ -6,6 +6,7 @@
#include <string.h>
#include <stdint.h>
#include <stdlib.h>
#include <libs/memman.h>
#define POCET_POSTAV 6
#define HODINA 360
@ -470,7 +471,7 @@ typedef struct tdregisters
{
int h_num;
char name[13];
void (*proc)(void **,int32_t *);
ABLOCK_DECODEPROC proc;
char path;
}TDREGISTERS;
@ -646,17 +647,17 @@ void calc_animations(void);
int load_map(char *filename);
void other_draw(void);
void refresh_scene(void);
void pcx_fade_decomp(void **p,int32_t *s);
void pcx_15bit_decomp(void **p,int32_t *s);
void pcx_15bit_autofade(void **p,int32_t *s);
void pcx_15bit_backgrnd(void **p,int32_t *s);
void pcx_8bit_decomp(void **p,int32_t *s);
void hi_8bit_correct(void **p,int32_t *s);
void pcx_8bit_nopal(void **p,int32_t *s);
void set_background(void **p,int32_t *s);
void wav_load(void **p,int32_t *s);
void load_mob_legacy_format(void **p, int32_t *s);
void load_spells_legacy_format(void **p, int32_t *s);
const void *pcx_fade_decomp(const void *p, int32_t *s);
const void *pcx_15bit_decomp(const void *p, int32_t *s);
const void *pcx_15bit_autofade(const void *p, int32_t *s);
const void *pcx_15bit_backgrnd(const void *p, int32_t *s);
const void *pcx_8bit_decomp(const void *p, int32_t *s);
const void *hi_8bit_correct(const void *p, int32_t *s);
const void *pcx_8bit_nopal(const void *p, int32_t *s);
const void *set_background(const void *p, int32_t *s);
const void *wav_load(const void *p, int32_t *s);
const void *load_mob_legacy_format(const void *p, int32_t *s);
const void *load_spells_legacy_format(const void *p, int32_t *s);
void wire_main_functs(void);
void ukaz_kompas(char mode);
void *timming(EVENT_MSG *msg,void **data);
@ -669,8 +670,7 @@ void objekty_mimo(void);
void mouse_set_cursor(int cursor);
void set_font(int font,int c1,...);
void bott_draw(char);
void bott_draw_proc(void **p,int32_t *s);
THE_TIMER *add_to_timer(int id,int delay,int maxcall,void *proc);
const void *bott_draw_proc(const void *p, int32_t *s);
void mouse_set_default(int cursor);
void create_frame(int x,int y,int xs,int ys,char clear);
void save_dump(const uint16_t *screen_addr,
@ -993,7 +993,7 @@ void calc_fly(void);
void zmen_skupinu(THUMAN *p);
void add_to_group(int num);
void group_all(void);
void build_items_called(void **p,int32_t *s);
const void *build_items_called(const void *p, int32_t *s);
void real_regeneration(void); //regenerace postav behem hry v realu (pouze kondice a mana)
char sleep_regenerace(THUMAN *p); //regenerace postav behem spani
char check_jidlo_voda(THUMAN *p);
@ -1666,7 +1666,7 @@ int message(int butts,char def,char canc,char *keys,...);
void type_text(EVENT_MSG *msg,void **data); //event procedura (parms: X,Y,TEXT,MAX_SPACE,MAX_CHARS);
void type_text_v2(va_list args);//char *text_buffer,int x,int y,int max_size,int max_chars,int font,int color,void (*exit_proc)(char));
void zalamovani(char *source,char *target,int maxxs,int *xs,int *ys);
void col_load(void **data,int32_t *size);
const void *col_load(const void *data, int32_t *size);
void open_story_file(void);
void write_story_text(char *text);
void close_story_file(void);
@ -1781,5 +1781,9 @@ static __inline char TimerEvents(int sector, int side, int32_t time)
return 1;
}
static __inline int quit_request_as_escape(int c) {
if (c == E_QUIT_GAME_KEY) return 0x011B;else return c;
}
//extras
#include "extras.h"

View file

@ -507,7 +507,7 @@ void global_map_point(EVENT_MSG *msg,void **_)
if(msg->msg == E_MOUSE)
{
int x,y,i,xs,ys;
char *ptr;
const char *ptr;
ms=get_mouse(msg);
if (ms->event_type & 0x1)
{

View file

@ -429,8 +429,7 @@ void type_text_v2(va_list args)
showview(x,y,xs,ys);
EVENT_MSG *ev= task_wait_event(E_KEYBOARD); //proces bude cekat na klavesu
if (ev == NULL) return;
znak=va_arg(ev->data, int);
znak=ev?va_arg(ev->data, int):27;
schovej_mysku();
if (task_quitmsg()==1) znak=27;
switch(znak & 0xff)
@ -507,21 +506,22 @@ void type_text_v2(va_list args)
}
void col_load(void **data,int32_t *size)
const void *col_load(const void *data, int32_t *size)
{
int siz=*size;
char *s,*c;
char *s;
const char *c;
int palcount;
int i;//,j,k;
palcount=siz/COL_SIZE;
*size=PIC_FADE_PAL_SIZE*palcount;
s=getmem(*size);
c=*data;c+=8;
for(i=0;i<palcount;i++,c+=COL_SIZE)
c=data;c+=8;
for(i=0;i<palcount;i++,c+=COL_SIZE) {
palette_shadow(c,(void *)(&s[i*PIC_FADE_PAL_SIZE]),mglob.fade_r,mglob.fade_g,mglob.fade_b);
free(*data);
*data=s;
}
return s;
}
@ -917,7 +917,7 @@ void check_number_1phase(char *exename) //check serial number!
*/
static void skeldal_checkbox_draw(int x1,int y1,int x2,int y2,OBJREC *o)
{
word *obr;
const word *obr;
char *data;
int phase;
int32_t scr_linelen2 = GetScreenPitch();
@ -1006,7 +1006,7 @@ static void setup_button_draw(int x1,int y1,int x2,int y2,OBJREC *o)
char data;
void **z;
word *pic;
word *bb;
const word *bb;
int x,y;
z=(void **)o->userptr;
@ -1088,7 +1088,7 @@ static void skeldal_soupak_draw (int x1,int y1,int x2,int y2,OBJREC *o)
skeldal_soupak_params *z;
int rozsah;
int value;
word *pic;
const word *pic;
word *back;
int total;
int xpos;
@ -1120,7 +1120,7 @@ static void skeldal_soupak_event(EVENT_MSG *msg,OBJREC *o)
skeldal_soupak_params *z;
int rozsah;
int total;
word *pic;
const word *pic;
int ypos,newvalue;
ms=get_mouse(msg);

View file

@ -109,7 +109,7 @@ void zkontroluj_postavu();
void place_human_item(word *obrazek,int x,int y,int item)
{
word *p;
const word *p;
p=ablock(item);
put_picture2picture(p,obrazek,PO_XSS-p[0]/2+x,PO_YS-p[1]-y-20);
@ -143,22 +143,25 @@ void item_sound_event(int item,int sector)
play_sample_at_sector(glob_items[item].sound+sound_handle,viewsector,sector,0,0);
}
static void items_15to16_correct(void **p,int32_t *s)
static const void *items_15to16_correct(const void *p,int32_t *s)
{
int i,j;
char *cur=(char *)(*p);
void *np = getmem(*s);
memcpy(np, p, *s);
char *cur=(char *)(np);
for (i=0;i<IT_LIB_SIZE;i++)
{
int pos=IT_ICONE_SIZE*i;
word *pal;
if (pos>=*s) return;
if (pos>=*s) return np;
pal=((word *)(cur+pos))+3;
for (j=0;j<256;j++,pal++)
{
*pal=RGB555(*pal>>10,(*pal>>5)& 0x1F,(*pal & 0x1F));
}
}
return np;
}
void load_items()
@ -870,7 +873,8 @@ char exit_inv(int id,int xa,int ya,int xr,int yr)
void definuj_postavy()
{
int i,num1,r,inv=0,z;
char *c,*end,cc;
const char *c,*end;
char cc;
int tmp;
c=ablock(H_POSTAVY_DAT);
@ -1128,7 +1132,7 @@ void display_items_in_inv(THUMAN *h)
short *p;
put_picture(266,TOP_OFS,ablock(H_IDESKA));
p=ablock(H_IMRIZ1);
p=ablock_copy(H_IMRIZ1);
p[1]=INV_YS*((h->inv_size-1)/6)+58;
put_picture(INV_X,INV_Y,p);
xr=INV_X;x=0;
@ -1176,7 +1180,8 @@ void display_rings()
void *build_items_wearing(THUMAN *h, int32_t *s)
{
int i,vzhled,it;
word *p,hx,hy;
const word *p;
word hx,hy;
word *ob;
size_t siz;
char *pp;
@ -1224,9 +1229,9 @@ void *build_items_wearing(THUMAN *h, int32_t *s)
}
void build_items_called(void **p,int32_t *s)
const void *build_items_called(const void *p, int32_t *s)
{
*p=build_items_wearing(&postavy[memman_handle-H_POSTAVY], s);
return build_items_wearing(&postavy[memman_handle-H_POSTAVY], s);
}
void display_items_wearing(THUMAN *h)
@ -1240,7 +1245,7 @@ void display_items_wearing(THUMAN *h)
if (it)
{
TITEM *itt;
word *w;int vzhled;
const word *w;int vzhled;
itt=&glob_items[it-1];
vzhled=itt->vzhled;
@ -1860,7 +1865,7 @@ char bag_click(int id,int xa,int ya,int xr,int yr)
char item_pointed(int k,int x,int y,short item,short kind)
{
int x1,y1,x2,y2,xs,ys,xsiz,ysiz,i;
short *p;
const short *p;
char *c,cc;
if (!item) return 0;
@ -2166,7 +2171,7 @@ void *inv_keyboard(EVENT_MSG *msg,void **usr)
usr;
if (msg->msg==E_KEYBOARD)
{
c=va_arg(msg->data, int)>>8;
c=quit_request_as_escape(va_arg(msg->data, int))>>8;
switch (c)
{
case 0x17:
@ -2212,7 +2217,8 @@ void draw_fly_items(int celx,int cely,int sector,int side)
{
LETICI_VEC *p;
int xpos,ypos;
short *pic,picnum;char turn,smr;
const short *pic;
short picnum;char turn,smr;
TITEM *it;
int i;
@ -2692,7 +2698,7 @@ static void block_back()
static void redraw_keepers_items()
{
word *w;
const word *w;
schovej_mysku();
w=ablock(H_SHOP_PIC);
display_keepers_items();
@ -2934,7 +2940,7 @@ void enter_shop(int shopid)
char shop_change_player(int id, int xa, int ya,int xr,int yr)
{
word *xs;
const word *xs;
int i;
id;xa;ya;yr;

View file

@ -337,7 +337,7 @@ static int get_data_handle(char *filename,void *dec)
static void insert_picture(char *filename,int align,int line,int lsize)
{
int x, y;
short *psiz;
const short *psiz;
char *c=write_buff;
psiz=ablock(get_data_handle(filename,pcx_8bit_decomp));
@ -568,7 +568,7 @@ static char *displ_picture(char *c)
{
char *d;
int x,y,hn,z,ln,sl;
short *sh;
const short *sh;
int32_t scr_linelen2 = GetScreenPitch();

View file

@ -161,43 +161,45 @@ unsigned char twins;
static short rand_value;
static word *paleta;
static word paleta[256];
void show_full_lfb12e(void *target,void *buff,void *paleta);
void show_full_lfb12e(void *target,const void *buff,const void *paleta);
//#pragma aux show_full_lfb12e parm[edi][esi][ebx] modify [eax ecx]
void show_delta_lfb12e(void *target,void *buff,void *paleta);
void show_delta_lfb12e(void *target,const void *buff,const void *paleta);
//#pragma aux show_delta_lfb12e parm[edi][esi][ebx] modify [eax ecx]
char mob_check_next_sector(int sect,int dir,char alone,char passable);
char mob_check_next_sector(int sect,int dir,const char alone,char passable);
void call_spell(int i);
int calculatePhaseDoor(int sector, int dir, int um);
static void animace_kouzla(int act,void *data, int ssize)
static void animace_kouzla(int act,const void *data, int ssize)
{
switch (act)
{
case MGIF_LZW:
case MGIF_COPY:show_full_lfb12e(anim_render_buffer,data,paleta);break;
case MGIF_DELTA:show_delta_lfb12e(anim_render_buffer,data,paleta);break;
case MGIF_PAL:paleta=data;*paleta|=0x8000;break;
case MGIF_PAL:memcpy(paleta,data,sizeof(paleta));paleta[0]|=0x8000;break;
}
}
void load_spells_legacy_format(void **p, int32_t *s) {
TKOUZLO *k = (*p);
TKOUZLO *end = (TKOUZLO *)((char *)(*p) + k->start);
const void *load_spells_legacy_format(const void *p, int32_t *s) {
void *np = getmem(*s);
memcpy(np,p,*s);
TKOUZLO *k = (np);
TKOUZLO *end = (TKOUZLO *)((char *)(np) + k->start);
++k;
int count = 1;
while (k < end) {
++count;
TKOUZLO *end2 = (TKOUZLO *)((char *)(*p) + k->start);
TKOUZLO *end2 = (TKOUZLO *)((char *)(np) + k->start);
if (end2 < end) end = end2;
++k;
}
SEND_LOG("(SPELL) Loading spell table: count %d", count);
k = (*p);
k = (np);
for (int i = 0; i < count; ++i) {
char *b = (char *)k;
char traceon = *(k->spellname-1); //traceon was there;
@ -207,6 +209,7 @@ void load_spells_legacy_format(void **p, int32_t *s) {
k->traceon = traceon;
++k;
}
return np;
}
@ -215,7 +218,7 @@ static void play_anim(va_list args) //tasked animation
{
int block=va_arg(args,int);
#define ANIM_SIZE (320*180*2)
void *anm;
const void *anm;
int32_t *l,c;
if (running_anm)

View file

@ -62,7 +62,7 @@ static char vymacknout(int id,int xa,int ya,int xr,int yr)
static char promacknuti(int id,int xa,int ya,int xr,int yr)
{
char *z;
const char *z;
word *w;
z=ablock(H_MENU_MASK);w=(word *)z;
@ -122,18 +122,17 @@ jp1:lodsb
}
}*/
static void nahraj_rozdilovy_pcx(void **pp,int32_t *s)
static const void *nahraj_rozdilovy_pcx(const void *pp, int32_t *s)
{
char *org,*pos;
char *vysl;
word *size,*paltab;
word *hicolor,*p;
void *origin;
const void *origin;
int siz;
load_pcx((char *)*pp,*s,A_8BIT,&vysl);
load_pcx((char *)pp,*s,A_8BIT,&vysl);
size=(word *)vysl;
free(*pp);
siz=size[0]*size[1];
p=hicolor=getmem(siz*2+12);
*p++=size[0];
@ -145,8 +144,8 @@ static void nahraj_rozdilovy_pcx(void **pp,int32_t *s)
paltab=(word *)vysl+3;
rozdily((uint8_t *)org,(uint8_t *)pos,hicolor+3,paltab,siz);
free(vysl);
*pp=hicolor;
*s=siz*2+12;
return hicolor;
}
@ -204,7 +203,7 @@ jp2: inc ebx
}
}
*/
static void zobraz_podle_masky_asm(char barva, uint16_t *scr, uint16_t *data, uint8_t *maska, int xs, int ys, int scr_linelen) {
static void zobraz_podle_masky_asm(char barva, uint16_t *scr, const uint16_t *data, const uint8_t *maska, int xs, int ys, int scr_linelen) {
int width = xs;
for (int y = 0; y < ys; y++) {
@ -221,8 +220,8 @@ static void zobraz_podle_masky_asm(char barva, uint16_t *scr, uint16_t *data, ui
static void zobraz_podle_masky(char barva,char anim)
{
char *maska;
word *data;
const char *maska;
const word *data;
int32_t scr_linelen2 = GetScreenPitch();
word *obr=GetScreenAdr()+300*scr_linelen2+220;
word xs,ys;
@ -272,11 +271,11 @@ static void prehraj_animaci_v_menu(EVENT_MSG *msg,char **unused)
}
#if 0
static void preload_anim(va_list args)
{
int i;
low_mem=0;
ablock(H_ANIM+29);
for(i=0;i<30;i+=2)
{
@ -305,6 +304,7 @@ static void preload_anim(va_list args)
task_wait_event(E_TIMER);
load_ok=1;
}
#endif
static void klavesnice(EVENT_MSG *msg,void **unused)
{
@ -317,7 +317,11 @@ static void klavesnice(EVENT_MSG *msg,void **unused)
for(cursor=0;cursor<5;cursor++) if (cur_dir[cursor]==SELECT) break;
if (cursor==5) cursor=-1;
int c = va_arg(msg->data,int);
switch(c)
if (c ==E_QUIT_GAME_KEY) {
send_message(E_MENU_SELECT,4);
return;
}
switch(c >> 8)
{
case 'H':cursor--;if (cursor<0) cursor=0;break;
case 'P':cursor++;if (cursor>4) cursor=4;break;
@ -328,14 +332,12 @@ static void klavesnice(EVENT_MSG *msg,void **unused)
}
}
int enter_menu(char open)
{
uint8_t c;
init_menu_entries();
add_task(2048,preload_anim);
load_ok=0;
while(!load_ok) task_sleep();
if (!open)
{
change_music(get_next_music_from_playlist());
@ -353,7 +355,7 @@ int enter_menu(char open)
ms_last_event.event_type=0x1;
send_message(E_MOUSE,&ms_last_event);
EVENT_MSG *ev = task_wait_event(E_MENU_SELECT);
c=va_arg(ev->data, int);
c=ev?va_arg(ev->data, int):-1;
disable_click_map();
send_message(E_DONE,E_KEYBOARD,klavesnice);
cur_dir[c]=UNSELECT;
@ -516,7 +518,7 @@ void titles(va_list args)
char send_back=va_arg(args,int);
char *textname=va_arg(args,char *);
void *picture;
const void *picture;
word *scr,*buff;
int counter,newc;
int lcounter=1;

View file

@ -125,45 +125,7 @@ void prepare_graphics(int *ofs,char *names,int32_t size,void *decomp,int class)
}
}
static void preload_percent(int cur,int max)
{
int pos;
pos=cur*640/max;
if (pos>640) pos=640;
curcolor=RGB555(16,16,16);hor_line32(0,476,pos);
curcolor=RGB555(8,8,8);hor_line32(0,477,pos);
curcolor=RGB555(31,31,31);hor_line32(0,475,pos);
showview(0,460,640,20);
do_events();
}
void preload_objects(int ofsts)
//#pragma preload_objects parm [];
{
int i;
char lodka=1;
for(i=1;i<mapsize;i++) if (map_sectors[i].sector_type==S_LODKA) break;
if (i==mapsize) lodka=0;
// const char *c = build_pathname(2, pathname[SR_DATA], "LOADING.MUS");
// change_music(c);
trans_bar(0,460,640,20,0);
position(0,460);
set_font(H_FBOLD,RGB555(0,31,0));
const char *c = concat2(texty[TX_LOAD], mglob.mapname);
outtext(c);
for(i=0;i<ofsts;i++)
{
if (i<H_LODKA0 || i>H_LODKA7 || lodka) apreload_sign(i,ofsts);
}
apreload_start(preload_percent);
/* for(i=0;i<ofsts;i++)
{
ablock(ofsts-i-1);
preload_percent(i+ofsts,ofsts);
}
*/
}
int load_level_texts(const char *filename)
{
@ -194,21 +156,6 @@ char *change_extension_support(char *buffer, const char *filename,char *new_exte
#define set_file_extension(filename, extension) change_extension_support((char *)alloca(strlen(filename)+strlen(extension)), (filename), (extension))
void show_loading_picture(char *filename)
{
void *p;
int32_t s;
p=afile(filename,SR_BGRAFIKA,&s);
put_picture(0,0,p);
showview(0,0,0,0);
free(p);
#ifdef LOGFILE
display_ver(639,0,2,0);
#endif
cancel_pass=1;
}
extern int snd_devnum;
int load_map(char *filename)
@ -228,8 +175,6 @@ int load_map(char *filename)
const char *mpath = build_pathname(2, gpathtable[SR_MAP], filename);
mpath = local_strdup(mpath);
schovej_mysku();
if (level_preload) show_loading_picture("LOADING.HI");
change_music("?");
zobraz_mysku();
f=fopen_icase(mpath,"rb");
if (level_fname!=NULL) free(level_fname);
@ -317,7 +262,7 @@ int load_map(char *filename)
SEND_LOG("(GAME) Loading enemies...");
if (mob_template==NULL)
{
int32_t h;char *p;
int32_t h;const char *p;
alock(H_ENEMY);
p=ablock(H_ENEMY);
@ -370,7 +315,6 @@ int load_map(char *filename)
fclose(f);
flag_map=(char *)getmem(mapsize*4);
memset(minimap,0,sizeof(minimap));
if (level_preload) preload_objects(ofsts);
end_ptr=ofsts;
const char *tpath=set_file_extension(mpath,".txt");
suc=load_level_texts(tpath);
@ -1866,16 +1810,16 @@ void sleep_players(va_list args)
void *game_keyboard(EVENT_MSG *msg,void **usr)
{
uint8_t c;
int c;
usr;
if (pass_zavora) return NULL;
if (cur_mode==MD_END_GAME) return NULL;
if (msg->msg==E_KEYBOARD)
{
c=va_arg(msg->data, int)>>8;
c=quit_request_as_escape(va_arg(msg->data, int));
while (_bios_keybrd(_KEYBRD_READY) ) _bios_keybrd(_KEYBRD_READ);
switch (c)
switch (c >> 8)
{
case 'H':step_zoom(0);break;
case 'P':step_zoom(2);break;

View file

@ -83,7 +83,7 @@ static void setup_keyboard(EVENT_MSG *msg,void **_)
{
if (msg->msg == E_KEYBOARD)
{
char c= va_arg(msg->data, int);
char c= quit_request_as_escape(va_arg(msg->data, int));
if (c==27)
{
unwire_proc();

View file

@ -91,11 +91,11 @@ static int init_music_vol=127;
static int init_gfx_vol=255;
static char titles_on=0;
void pcx_fade_decomp(void **p,int32_t *s);
void pcx_15bit_decomp(void **p,int32_t *s);
void pcx_15bit_autofade(void **p,int32_t *s);
void pcx_15bit_backgrnd(void **p,int32_t *s);
void pcx_8bit_decomp(void **p,int32_t *s);
const void *pcx_fade_decomp(const void *p, int32_t *s);
const void *pcx_15bit_decomp(const void *p, int32_t *s);
const void *pcx_15bit_autofade(const void *p, int32_t *s);
const void *pcx_15bit_backgrnd(const void *p, int32_t *s);
const void *pcx_8bit_decomp(const void *p, int32_t *s);
char *texty_knihy;
static char *patch_file=NULL;
@ -280,82 +280,80 @@ void purge_temps(char _) {
temp_storage_clear();
}
void pcx_fade_decomp(void **p,int32_t *s)
const void *pcx_fade_decomp(const void *p, int32_t *s)
{
char *buff;
int r = load_pcx(*p,*s,A_FADE_PAL,&buff,mglob.fade_r,mglob.fade_g,mglob.fade_b);
int r = load_pcx(p,*s,A_FADE_PAL,&buff,mglob.fade_r,mglob.fade_g,mglob.fade_b);
assert(r > 0);
*s=r;
free(*p);
*p=buff;
return buff;
}
void pcx_15bit_decomp(void **p,int32_t *s)
const void *pcx_15bit_decomp(const void *p, int32_t *s)
{
char *buff;
int r = load_pcx(*p,*s,A_16BIT,&buff);
int r = load_pcx(p,*s,A_16BIT,&buff);
assert(r > 0);
*s=r;
free(*p);
*p=buff;
return buff;
}
void pcx_15bit_autofade(void **p,int32_t *s)
const void *pcx_15bit_autofade(const void *p, int32_t *s)
{
char *buff;
int r = load_pcx(*p,*s,A_16BIT,&buff);
int r = load_pcx(p,*s,A_16BIT,&buff);
assert(r > 0);
*s=r;
free(*p);
*p=buff;
buff[5]=0x80;
return buff;
}
void pcx_15bit_backgrnd(void **p,int32_t *s)
const void *pcx_15bit_backgrnd(const void *p, int32_t *s)
{
char *buff;
int32_t i;int32_t *z;
if (*p!=NULL)
if (p!=NULL)
{
int r = load_pcx(*p,*s,A_16BIT,&buff);
int r = load_pcx(p,*s,A_16BIT,&buff);
assert(r>0);
z=(int32_t *)buff;
*s=r;
for(i=*s;i>0;i-=4,z++) *z|=0x80008000;
free(*p);
*p=buff;
return buff;
}
return NULL;
}
void pcx_8bit_nopal(void **p,int32_t *s)
const void *pcx_8bit_nopal(const void *p,int32_t *s)
{
char *buff;
char *buff = NULL;
if (*p!=NULL)
if (p!=NULL)
{
int r = load_pcx(*p,*s,A_8BIT_NOPAL,&buff);
int r = load_pcx(p,*s,A_8BIT_NOPAL,&buff);
assert(r>0);
*s=r;
free(*p);
*p=buff;
}
return buff;
}
void pcx_8bit_decomp(void **p,int32_t *s)
const void *pcx_8bit_decomp(const void *p, int32_t *s)
{
char *buff;
int r = load_pcx(*p,*s,A_8BIT,&buff);
int r = load_pcx(p,*s,A_8BIT,&buff);
assert(r>0);
*s=r;
free(*p);
*p=buff;
return buff;
}
void hi_8bit_correct(void **p,int32_t *s)
const void *hi_8bit_correct(const void *p,int32_t *s)
{
word *ptr=(word *)*p;
word *out = (word *)getmem(*s);
memcpy(out, p, *s);
word *ptr=out;
int i;
if (ptr[2]==8)
{
@ -364,13 +362,14 @@ void hi_8bit_correct(void **p,int32_t *s)
ptr[i+3]=((ptr[i+3] & ~0x1F)+ptr[i+3]);
}
}
return out;
}
void load_mob_legacy_format(void **p, int32_t *s) {
const void *load_mob_legacy_format(const void *p, int32_t *s) {
const int sz = 376;
int count = *s / sz;;
char *c = *p;
const char *c = p;
TMOB *out = getmem(count * sizeof(TMOB));
memset(out, 0 , sizeof(TMOB)*count);
@ -393,33 +392,34 @@ void load_mob_legacy_format(void **p, int32_t *s) {
memcpy(d, c, nx - ofs); //last padding 1
c+=nx - ofs - 1;
}
free(*p);
*p =out;
*s = count * sizeof(TMOB);
return out;
}
void set_background(void **p,int32_t *s)
const void *set_background(const void *p, int32_t *s)
{
word *data;
const word *data;
word *ptr;
word *pal;
const word *pal;
char *pic;
void *out;
int counter;
if (!bgr_handle) return;
if (bgr_distance==-1) return;
if (!bgr_handle) return p;
if (bgr_distance==-1) return p;
int32_t scr_linelen2 = GetScreenPitch();
data=ablock(bgr_handle);
*s=scr_linelen2*360*2;
ptr=*p=getmem(*s);
out = ptr=getmem(*s);
counter=scr_linelen2*360;
pal=data+3+bgr_distance*256;
pic=(char *)data+PIC_FADE_PAL_SIZE;
do
*ptr++=pal[(uint8_t)*pic++] | BGSWITCHBIT;
while (--counter);
return out;
}
void mouse_set_cursor(int cursor)
@ -1268,6 +1268,7 @@ void play_anim(int anim_num)
char *t,*z;
TSTR_LIST titl=NULL;
const char *s = build_pathname(2,gpathtable[SR_VIDEO], texty[anim_num]);
s = local_strdup(s);
if (snd_devnum==DEV_NOSOUND || titles_on)
{
concat(t,s," ");
@ -1433,7 +1434,7 @@ static void load_saved_game(void)
update_mysky();
{
EVENT_MSG *msg = task_wait_event(E_CLOSE_MAP);
game = va_arg(msg->data, int);
game = msg?va_arg(msg->data, int):-1;
}
unwire_proc();
disable_click_map();
@ -1485,6 +1486,7 @@ static void start(va_list args)
volba=enter_menu(openning);openning=1;
switch (volba)
{
default:
case V_KONEC:exit_wait=1;break;
case V_NOVA_HRA: if (!enter_generator())
{
@ -1594,6 +1596,10 @@ void show_help_short() {
printf("add -h to print help\n");
}
void quit_cb_exit_wait(void *) {
exit_wait = 1;
}
int main(int argc,char *argv[])
{
def_mman_group_table(gpathtable);
@ -1638,9 +1644,12 @@ int main(int argc,char *argv[])
init_skeldal(cfg);
add_task(65536,start);
int start_task = add_task(65536,start);
escape();
term_task_wait(start_task);
closemode();
ini_close(cfg);

View file

@ -196,17 +196,17 @@ int calcul_volume(int chan,int x,int y,int side,int volume)
return 0;
}
void wav_load(void **p,int32_t *s)
const void *wav_load(const void *p, int32_t *s)
{
char *sr;
const char *sr;
char *tg;
void *tgr;
struct t_wave x[3];
sr=*p;
sr=p;
sr=find_chunk(sr,WAV_FMT);
read_chunk(sr,&x);
sr=*p;
sr=p;
sr=find_chunk(sr,WAV_DATA);
*s=get_chunk_size(sr);
tgr=tg=getmem(*s+sizeof(struct t_wave)+4);
@ -215,31 +215,9 @@ void wav_load(void **p,int32_t *s)
*(int *)tg=*s;
tg+=4;
read_chunk(sr,tg);
free(*p);
*p=tgr;
*s+=sizeof(struct t_wave)+4;
/* if (x[0].freq!=x[0].bps)
{
char s;
siz>>=1;
s=siz & 1;
siz>>=1;
d=tg;
for(;siz--;d++) *d^=0x80008000;
if (s) {c=(char *)d;c[1]^=0x80;}
}
else
{
char s;
s=siz & 3;
siz>>=2;
d=(int32_t *)tg;
for(;siz--;d++) *d^=0x80808080;
c=(char *)d;
for(;s--;c++) *c^=0x80;
}*/
return tgr;
}
void play_effekt(int x,int y,int xd,int yd,int side,int sided,const TMA_SOUND *p)
@ -247,7 +225,7 @@ void play_effekt(int x,int y,int xd,int yd,int side,int sided,const TMA_SOUND *p
int chan;
int blockid;
SND_INFO *track;
char *s;
const char *s;
if (!sound_enabled) return;
side;
@ -273,8 +251,6 @@ void play_effekt(int x,int y,int xd,int yd,int side,int sided,const TMA_SOUND *p
if (blockid == -1) {
def_handle(end_ptr, p->filename, wav_load, SR_ZVUKY);
blockid = end_ptr++;
if (level_preload)
apreload(blockid);
}
alock(blockid);
@ -414,7 +390,7 @@ void purge_playlist()
void play_sample_at_sector(int sample,int sector1,int sector2,int track, char loop)
{
int x,y,xd,yd,chan;
char *s;
const char *s;
struct t_wave *p;
int siz;
int oldtrack;
@ -450,7 +426,7 @@ void play_sample_at_sector(int sample,int sector1,int sector2,int track, char lo
void play_sample_at_channel(int sample,int channel,int vol)
{
char *s;
const char *s;
struct t_wave *p;
int siz;
@ -486,7 +462,7 @@ void create_sound_table(char *template,int32_t size)
void create_sound_table_old()
{
char *c,*s;
const char *c,*s;
int32_t pocet;
int i=0;
@ -547,8 +523,8 @@ static int flute_canal=30;
void start_play_flute(char note)
{
void *q;
char *w;
const void *q;
const char *w;
float realfrq;
int vol=50;
@ -569,8 +545,8 @@ void start_play_flute(char note)
void stop_play_flute()
{
void *q;
char *w;
const void *q;
const char *w;
if (check_snd_effect(SND_GFX))
{

View file

@ -1415,7 +1415,7 @@ char ask_who_proc(int id,int xa,int ya,int xr,int yr)
{
THUMAN *p;
int i;
word *xs;
const word *xs;
xs=ablock(H_OKNO);
i=xr/xs[0];yr;xa;ya;id;
@ -1492,7 +1492,7 @@ char runes_mask(int id,int xa,int ya,int xr,int yr)
{
char *c;
int cc;
short *d;
const short *d;
id;ya;xa;
d=ablock(H_RUNEMASK);
@ -1927,7 +1927,7 @@ void programming_keyboard(EVENT_MSG *msg,void **unused)
unused;
if (msg->msg==E_KEYBOARD)
{
c=va_arg(msg->data, int)>>8;
c=quit_request_as_escape(va_arg(msg->data, int))>>8;
while (_bios_keybrd(_KEYBRD_READY) ) _bios_keybrd(_KEYBRD_READ);
switch (c)
{