mirror of
https://github.com/ondra-novak/gates_of_skeldal.git
synced 2025-07-20 13:15:16 -04:00
import sdl, some tests, nothing work yet
This commit is contained in:
parent
a7278bac40
commit
378b5586ab
37 changed files with 721 additions and 167 deletions
|
@ -1,5 +1,27 @@
|
|||
SET(files automap.c clk_map.c dialogy.c dump.cpp enemy.c engine2.c globmap.c inv.c kouzla.c menu.c skeldal.c souboje.c
|
||||
builder.c engine1.c gamesave.c interfac.c kniha.c macros.c realgame.c setup.c sndandmus.c specproc.c)
|
||||
SET(files automap.c
|
||||
clk_map.c
|
||||
dialogy.c
|
||||
dump.cpp
|
||||
enemy.c
|
||||
engine2.c
|
||||
globmap.c
|
||||
inv.c
|
||||
kouzla.c
|
||||
menu.c
|
||||
skeldal.c
|
||||
souboje.c
|
||||
builder.c
|
||||
engine1.c
|
||||
gamesave.c
|
||||
interfac.c
|
||||
kniha.c
|
||||
macros.c
|
||||
realgame.c
|
||||
setup.c
|
||||
chargen.c
|
||||
sndandmus.c
|
||||
specproc.c
|
||||
temp_storage.cpp)
|
||||
|
||||
add_executable(skeldal ${files})
|
||||
target_link_libraries(skeldal skeldal_libs)
|
||||
target_link_libraries(skeldal skeldal_libs skeldal_platform_libs ${SDL2_LIBRARIES} pthread)
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
|
||||
void display_items_wearing(THUMAN *h);
|
||||
void inv_display_vlastnosti();;
|
||||
extern void (*inv_redraw)();
|
||||
extern void (*inv_redraw)(char);
|
||||
void write_human_big_name(char *c);
|
||||
|
||||
#define MSG_COLOR1 RGB555(30,30,23)
|
||||
|
@ -123,16 +123,16 @@ char *error_text=NULL;
|
|||
|
||||
|
||||
|
||||
char select_xicht(int id,int xa,int ya,int xr,int yr);
|
||||
char vol_vlastnosti(int id,int xa,int ya,int xr,int yr);
|
||||
char go_next_page(int id,int xa,int ya,int xr,int yr);
|
||||
static char select_xicht(int id,int xa,int ya,int xr,int yr);
|
||||
static char vol_vlastnosti(int id,int xa,int ya,int xr,int yr);
|
||||
static char go_next_page(int id,int xa,int ya,int xr,int yr);
|
||||
char vls_click(int id,int xa,int ya,int xr,int yr);
|
||||
char view_another_click2(int id,int xa,int ya,int xr,int yr);
|
||||
static char view_another_click2(int id,int xa,int ya,int xr,int yr);
|
||||
//char edit_another_click(int id,int xa,int ya,int xr,int yr);
|
||||
char edit_another_click2(int id,int xa,int ya,int xr,int yr);
|
||||
char gen_exit_editor(int id,int xa,int ya,int xr,int yr);
|
||||
//static char edit_another_click2(int id,int xa,int ya,int xr,int yr);
|
||||
static char gen_exit_editor(int id,int xa,int ya,int xr,int yr);
|
||||
|
||||
void zobraz_staty(T_VLASTS *st);
|
||||
static void zobraz_staty(T_VLASTS *st);
|
||||
|
||||
#define CLK_PAGE1 6
|
||||
|
||||
|
@ -513,9 +513,9 @@ static void edit_name()
|
|||
static void stop_edit_name()
|
||||
{
|
||||
shut_downing_text=1;send_message(E_KEYBOARD,13);
|
||||
task_sleep(NULL);
|
||||
task_sleep();
|
||||
if (edit_task>0 && is_running(edit_task))
|
||||
shut_down_task(edit_task);
|
||||
term_task(edit_task);
|
||||
shut_downing_text=0;
|
||||
}
|
||||
|
||||
|
@ -623,7 +623,7 @@ void generuj_postavu(THUMAN *h)
|
|||
//postava je vygenerovana
|
||||
}
|
||||
|
||||
static void redraw_page3()
|
||||
static void redraw_page3(char)
|
||||
{
|
||||
update_mysky();
|
||||
schovej_mysku();
|
||||
|
@ -639,7 +639,7 @@ static void redraw_page3()
|
|||
}
|
||||
|
||||
|
||||
static void redraw_svitek()
|
||||
static void redraw_svitek(char)
|
||||
{
|
||||
if (postavy[cur_edited].bonus==0)
|
||||
{
|
||||
|
@ -649,7 +649,7 @@ static void redraw_svitek()
|
|||
if (!postavy[charmax-1].used) mode&=~1;
|
||||
if (!del_mode) mode&=~4;
|
||||
b_disables=mode;
|
||||
redraw_page3();
|
||||
redraw_page3(0);
|
||||
return;
|
||||
}
|
||||
update_mysky();
|
||||
|
@ -694,13 +694,13 @@ static void empty_proc()
|
|||
{
|
||||
}
|
||||
|
||||
char potvrzeno(char *text,void (*redraw)())
|
||||
char potvrzeno(char *text,void (*redraw)(char))
|
||||
{
|
||||
int i;
|
||||
unwire_proc=empty_proc;
|
||||
stop_edit_name();
|
||||
i=message(2,0,1,texty[118],text,texty[114],texty[115])==0;
|
||||
redraw();
|
||||
redraw(0);
|
||||
edit_name();
|
||||
return i;
|
||||
}
|
||||
|
@ -721,7 +721,7 @@ static char view_another_click2(int id,int xa,int ya,int xr,int yr)
|
|||
human_selected=postavy+id;
|
||||
cur_edited=id;
|
||||
edit_name();
|
||||
redraw_page3();
|
||||
redraw_page3(0);
|
||||
if (del_mode)
|
||||
if (potvrzeno(texty[117],redraw_page3))
|
||||
{
|
||||
|
@ -764,15 +764,14 @@ static void enter_reaction(EVENT_MSG *msg,void **unused)
|
|||
}
|
||||
}
|
||||
|
||||
static void enter_reaction2(EVENT_MSG *msg,void **unused)
|
||||
static void enter_reaction2(EVENT_MSG *msg,void **)
|
||||
{
|
||||
unused;
|
||||
int c = va_arg(msg->data, int)
|
||||
int c = va_arg(msg->data, int);
|
||||
if (msg->msg==E_KEYBOARD && c==13 && !shut_downing_text && ~b_disables & 0x3)
|
||||
{
|
||||
send_message(E_KEYBOARD,13);
|
||||
bott_draw(1);
|
||||
redraw_page3();
|
||||
redraw_page3(0);
|
||||
msg->msg=-1;
|
||||
}
|
||||
}
|
||||
|
@ -787,7 +786,7 @@ char gen_exit_editor(int id,int xa,int ya,int xr,int yr)
|
|||
del_mode=0;
|
||||
mouse_set_default(H_MS_DEFAULT);
|
||||
b_disables&=~0x4;
|
||||
redraw_svitek();
|
||||
redraw_svitek(0);
|
||||
return 1;
|
||||
}
|
||||
unwire_proc=empty_proc;
|
||||
|
@ -799,7 +798,7 @@ char gen_exit_editor(int id,int xa,int ya,int xr,int yr)
|
|||
else
|
||||
{
|
||||
if (id==2)redraw_generator(1);
|
||||
else redraw_svitek();
|
||||
else redraw_svitek(0);
|
||||
edit_name();
|
||||
}
|
||||
return 1;
|
||||
|
@ -841,7 +840,8 @@ char enter_generator()
|
|||
do
|
||||
{
|
||||
send_message(E_ADD,E_KEYBOARD,enter_reaction);
|
||||
i=*(char *)task_wait_event(E_CLOSE_GEN);
|
||||
EVENT_MSG *ev= task_wait_event(E_CLOSE_GEN);;
|
||||
i=va_arg(ev->data, int);
|
||||
send_message(E_DONE,E_KEYBOARD,enter_reaction);
|
||||
if (i==3 && potvrzeno(texty[116],redraw_generator)) goto znova;
|
||||
if (i==255) return 1;
|
||||
|
@ -857,12 +857,13 @@ char enter_generator()
|
|||
b_disables=0x7;
|
||||
do
|
||||
{
|
||||
redraw_svitek();
|
||||
redraw_svitek(0);
|
||||
change_click_map(clk_page2,CLK_PAGE2);
|
||||
do
|
||||
{
|
||||
send_message(E_ADD,E_KEYBOARD,enter_reaction2);
|
||||
i=*(char *)task_wait_event(E_CLOSE_GEN);
|
||||
EVENT_MSG *ev= task_wait_event(E_CLOSE_GEN);;
|
||||
i=va_arg(ev->data, int);
|
||||
send_message(E_DONE,E_KEYBOARD,enter_reaction2);
|
||||
if (i==3 && potvrzeno(texty[116],redraw_svitek)) goto znova;
|
||||
if (i==2)
|
||||
|
@ -870,7 +871,7 @@ char enter_generator()
|
|||
del_mode=1;
|
||||
mouse_set_default(H_MS_WHO);
|
||||
b_disables|=0x4;
|
||||
redraw_svitek();
|
||||
redraw_svitek(0);
|
||||
i=3;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -170,7 +170,7 @@ static void dialog_anim(va_list args)
|
|||
anm=open_mgif(aptr);
|
||||
while (anm!=NULL && task_quitmsg())
|
||||
{
|
||||
task_sleep(NULL);
|
||||
task_sleep();
|
||||
if (!spdc)
|
||||
{
|
||||
if (ms_last_event.x<=PIC_X+320 && ms_last_event.y<=PIC_Y+180)
|
||||
|
|
|
@ -142,12 +142,10 @@ int load_enemy_paths(TMPFILE_RD *f)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static EVENT_PROC(mob_reload)
|
||||
{
|
||||
static void mob_reload(EVENT_MSG *msg,void **){
|
||||
static int counter=0;
|
||||
|
||||
user_ptr;
|
||||
WHEN_MSG(E_KOUZLO_KOLO)
|
||||
if (msg->msg = E_KOUZLO_KOLO)
|
||||
{
|
||||
if (insleep) return;
|
||||
if (counter++==10)
|
||||
|
|
|
@ -888,7 +888,7 @@ static void load_specific_file(int slot_num,char *filename,void **out,int32_t *s
|
|||
fread(fname,1,12,slot);
|
||||
while(fname[0] && !succes)
|
||||
{
|
||||
task_sleep(NULL);
|
||||
task_sleep();
|
||||
if (task_quitmsg()) break;
|
||||
fread(&siz,1,4,slot);
|
||||
if (!strncmp(fname,filename,12)) succes=1; else
|
||||
|
@ -1113,10 +1113,9 @@ char updown_scroll(int id,int xa,int ya,int xr,int yr);
|
|||
|
||||
static char updown_noinst=0;
|
||||
|
||||
static EVENT_PROC(updown_scroll_hold)
|
||||
static void updown_scroll_hold(EVENT_MSG *msg,void **)
|
||||
{
|
||||
user_ptr;
|
||||
WHEN_MSG(E_MOUSE)
|
||||
if (msg->msg == E_MOUSE)
|
||||
{
|
||||
MS_EVENT *ms;
|
||||
|
||||
|
@ -1128,7 +1127,7 @@ static EVENT_PROC(updown_scroll_hold)
|
|||
updown_noinst=0;
|
||||
}
|
||||
}
|
||||
WHEN_MSG(E_TIMER)
|
||||
if (msg->msg == E_TIMER)
|
||||
{
|
||||
MS_EVENT *ms;
|
||||
|
||||
|
@ -1382,12 +1381,12 @@ T_CLK_MAP clk_save[]=
|
|||
{-1,0,0,639,479,close_saveload,9,H_MS_DEFAULT},
|
||||
};
|
||||
|
||||
static EVENT_PROC(saveload_keyboard)
|
||||
static void saveload_keyboard(EVENT_MSG *msg,void **)
|
||||
{
|
||||
user_ptr;
|
||||
WHEN_MSG(E_KEYBOARD)
|
||||
if (msg->msg == E_KEYBOARD)
|
||||
{
|
||||
switch (GET_DATA(word)>>8)
|
||||
int v = va_arg(msg->data, int);
|
||||
switch (v>>8)
|
||||
{
|
||||
case 1:unwire_proc();wire_proc();break;
|
||||
case 'H':if (last_select>0) bright_slot((last_select-1)*SLOT_SPACE+1);break;
|
||||
|
|
|
@ -1386,7 +1386,8 @@ void init_tracks();
|
|||
void recalc_volumes(int sector,int side);
|
||||
void play_effekt(int x,int y,int xd,int yd,int side,int sided,TMA_SOUND *p);
|
||||
void create_playlist(char *playlist);
|
||||
void play_next_music(char **c);
|
||||
const char *get_next_music_from_playlist();
|
||||
const char * end_of_song_callback(void *ctx);
|
||||
void purge_playlist();
|
||||
void restore_sound_names();
|
||||
void play_sample_at_sector(int sample,int sector1,int sector2,int track, char loop);
|
||||
|
|
|
@ -495,17 +495,16 @@ static char *fly_text;
|
|||
static int fly_x,fly_y,fly_xs,fly_ys;
|
||||
static void *fly_background;
|
||||
|
||||
EVENT_PROC(global_map_point)
|
||||
void global_map_point(EVENT_MSG *msg,void **)
|
||||
{
|
||||
MS_EVENT *ms;
|
||||
|
||||
user_ptr;
|
||||
WHEN_MSG(E_INIT)
|
||||
if(msg->msg == E_INIT)
|
||||
{
|
||||
fly_background=NULL;last_index=0;fly_text=NULL;
|
||||
fly_x=0;fly_y=0;fly_xs=4;fly_ys=4;
|
||||
}
|
||||
WHEN_MSG(E_MOUSE)
|
||||
if(msg->msg == E_MOUSE)
|
||||
{
|
||||
int x,y,i,xs,ys;
|
||||
char *ptr;
|
||||
|
@ -561,7 +560,7 @@ EVENT_PROC(global_map_point)
|
|||
trans_bar(x,y,xs,ys,0);
|
||||
position(x+2,y+2);outtext(fly_text);
|
||||
}
|
||||
send_message(E_MOUSE,msg);
|
||||
send_message(E_MOUSE,ms);
|
||||
ukaz_mysku();
|
||||
showview(fly_x,fly_y,fly_xs+1,fly_ys);
|
||||
showview(fly_x=x,fly_y=y,(fly_xs=xs)+1,fly_ys=ys);
|
||||
|
@ -582,7 +581,7 @@ EVENT_PROC(global_map_point)
|
|||
msg->msg=-1;
|
||||
}
|
||||
}
|
||||
WHEN_MSG(E_DONE)
|
||||
if (msg->msg == E_DONE)
|
||||
{
|
||||
free(fly_background);
|
||||
}
|
||||
|
|
|
@ -232,23 +232,30 @@ void open_message_win(int pocet_textu,char **texts)
|
|||
|
||||
static char default_action,cancel_action;
|
||||
|
||||
EVENT_PROC(message_keyboard)
|
||||
void message_keyboard(EVENT_MSG *msg,void **user_ptr)
|
||||
{
|
||||
switch(GET_MSG())
|
||||
char *c;
|
||||
char *d;
|
||||
switch(msg->msg)
|
||||
{
|
||||
case E_INIT:SAVE_USER_PTR(NewArr(char,strlen(GET_DATA(char *))+1));
|
||||
strcpy(GET_USER(char *),GET_DATA(char *));
|
||||
break;
|
||||
case E_DONE:free(*GET_USER_PTR());
|
||||
SAVE_USER_PTR(NULL);
|
||||
case E_INIT:
|
||||
c = va_arg(msg->data, char *);
|
||||
d = NewArr(char, strlen(c)+1);
|
||||
strcpy(d, c);
|
||||
*user_ptr = d;
|
||||
break;
|
||||
|
||||
case E_DONE:c = *user_ptr;
|
||||
free(c);
|
||||
user_ptr = NULL;
|
||||
break;
|
||||
case E_KEYBOARD:
|
||||
{
|
||||
char *keys=GET_USER(char *);
|
||||
char *keys=*(char **)(user_ptr);
|
||||
char code,*p;
|
||||
int key;
|
||||
|
||||
code=GET_DATA(char);
|
||||
code=va_arg(msg->data, int);
|
||||
if (code==0) return;
|
||||
code=toupper(code);
|
||||
if (code==13) key=default_action;
|
||||
|
@ -383,7 +390,7 @@ void type_text_v2(va_list args)
|
|||
short *back_pic;
|
||||
int i;
|
||||
|
||||
task_sleep(NULL);
|
||||
task_sleep();
|
||||
schovej_mysku();
|
||||
set_font(font,color);
|
||||
xs=max_size+text_width("_");
|
||||
|
@ -410,7 +417,10 @@ void type_text_v2(va_list args)
|
|||
position(px+x,y+3);outtext("_");
|
||||
ukaz_mysku();
|
||||
showview(x,y,xs,ys);
|
||||
znak=*(word *)task_wait_event(E_KEYBOARD); //proces bude cekat na klavesu
|
||||
|
||||
EVENT_MSG *ev= task_wait_event(E_KEYBOARD); //proces bude cekat na klavesu
|
||||
if (ev == NULL) return;
|
||||
znak=va_arg(ev->data, int);
|
||||
schovej_mysku();
|
||||
if (task_quitmsg()==1) znak=27;
|
||||
switch(znak & 0xff)
|
||||
|
@ -968,7 +978,7 @@ void skeldal_checkbox(OBJREC *o)
|
|||
static void setup_button_init(OBJREC *o,va_list params)
|
||||
{
|
||||
void **d;
|
||||
char title = va_arg(params, char *);
|
||||
char *title = va_arg(params, char *);
|
||||
d=NewArr(void *,2);
|
||||
d[0]=NewArr(char,strlen(title)+1);
|
||||
strcpy(d[0],title);
|
||||
|
|
|
@ -222,7 +222,7 @@ static void play_anim(va_list args) //tasked animation
|
|||
void play_big_mgif_animation(int block)
|
||||
{
|
||||
add_task(2048,play_anim,block);
|
||||
task_sleep(NULL);
|
||||
task_sleep();
|
||||
}
|
||||
|
||||
int get_spell_mana(int num)
|
||||
|
|
|
@ -611,8 +611,7 @@ void macro_change_music(int textindex)
|
|||
char *nextTrack;
|
||||
|
||||
create_playlist(trackdef);
|
||||
play_next_music(&nextTrack);
|
||||
change_music(nextTrack);
|
||||
change_music(get_next_music_from_playlist());
|
||||
}
|
||||
|
||||
void macro_register_global_event(TMULTI_ACTION *q)
|
||||
|
|
22
game/menu.c
22
game/menu.c
|
@ -280,7 +280,7 @@ static void preload_anim(va_list args)
|
|||
for(i=0;i<30;i+=2)
|
||||
{
|
||||
apreload(H_ANIM+i);
|
||||
task_sleep(NULL);
|
||||
task_sleep();
|
||||
}
|
||||
for(i=1;i<30;i+=2)
|
||||
{
|
||||
|
@ -293,12 +293,12 @@ static void preload_anim(va_list args)
|
|||
break;
|
||||
}
|
||||
apreload(H_ANIM+i);
|
||||
task_sleep(NULL);
|
||||
task_sleep();
|
||||
}
|
||||
for(i=0;i<5;i++)
|
||||
{
|
||||
apreload(H_MENU_ANIM+i);
|
||||
task_sleep(NULL);
|
||||
task_sleep();
|
||||
}
|
||||
apreload(H_MENU_MASK);
|
||||
task_wait_event(E_TIMER);
|
||||
|
@ -334,11 +334,10 @@ int enter_menu(char open)
|
|||
init_menu_entries();
|
||||
add_task(2048,preload_anim);
|
||||
load_ok=0;
|
||||
while(!load_ok) task_sleep(NULL);
|
||||
while(!load_ok) task_sleep();
|
||||
if (!open)
|
||||
{
|
||||
play_next_music(&d);
|
||||
change_music(d);
|
||||
change_music(get_next_music_from_playlist());
|
||||
}
|
||||
update_mysky();
|
||||
schovej_mysku();
|
||||
|
@ -352,8 +351,8 @@ int enter_menu(char open)
|
|||
send_message(E_ADD,E_KEYBOARD,klavesnice);
|
||||
ms_last_event.event_type=0x1;
|
||||
send_message(E_MOUSE,&ms_last_event);
|
||||
d=task_wait_event(E_MENU_SELECT);
|
||||
c=*d;
|
||||
EVENT_MSG *ev = task_wait_event(E_MENU_SELECT);
|
||||
c=va_arg(ev->data, int);
|
||||
disable_click_map();
|
||||
send_message(E_DONE,E_KEYBOARD,klavesnice);
|
||||
cur_dir[c]=UNSELECT;
|
||||
|
@ -599,10 +598,9 @@ void konec_hry()
|
|||
bar(0,0,639,479);
|
||||
effect_show(NULL);
|
||||
create_playlist(texty[205]);
|
||||
play_next_music(&d);
|
||||
change_music(d);
|
||||
change_music(get_next_music_from_playlist());
|
||||
timer=get_timer_value();
|
||||
while (get_timer_value()-timer<150) task_sleep(NULL);
|
||||
while (get_timer_value()-timer<150) task_sleep();
|
||||
task_id=add_task(8196,titles,1,"ENDTEXT.TXT");
|
||||
task_wait_event(E_KEYBOARD);
|
||||
if (is_running(task_id)) term_task(task_id);
|
||||
|
@ -617,6 +615,6 @@ void konec_hry()
|
|||
ukaz_mysku();
|
||||
effect_show(NULL);
|
||||
timer=get_timer_value();
|
||||
while (get_timer_value()-timer<150) task_sleep(NULL);
|
||||
while (get_timer_value()-timer<150) task_sleep();
|
||||
}
|
||||
|
||||
|
|
|
@ -1511,7 +1511,7 @@ void postavy_teleport_effect(int sector,int dir,int postava,char effect)
|
|||
while (running_anm) do_events();
|
||||
play_sample_at_channel(H_SND_TELEPIN,2,100);
|
||||
play_big_mgif_animation(H_TELEPORT);
|
||||
while (!running_anm) task_sleep(NULL);
|
||||
while (!running_anm) task_sleep();
|
||||
kolo=global_anim_counter;
|
||||
if (norefresh)
|
||||
{
|
||||
|
|
|
@ -78,12 +78,12 @@ static void change_turn()
|
|||
|
||||
static void unwire_setup();
|
||||
|
||||
static EVENT_PROC(setup_keyboard)
|
||||
static void setup_keyboard(EVENT_MSG *msg,void **)
|
||||
{
|
||||
user_ptr;
|
||||
WHEN_MSG(E_KEYBOARD)
|
||||
if (msg->msg == E_KEYBOARD)
|
||||
{
|
||||
if (GET_DATA(char)==27)
|
||||
char c= va_arg(msg->data, int);
|
||||
if (c==27)
|
||||
{
|
||||
unwire_proc();
|
||||
}
|
||||
|
|
|
@ -1043,7 +1043,7 @@ SEND_LOG("(INIT) Mouse initialized.",0,0);
|
|||
SEND_LOG("(INIT) Loading mouse cursor.",0,0);
|
||||
mouse_set_default(H_MS_DEFAULT);
|
||||
ukaz_mysku();
|
||||
konec_skladby=play_next_music;
|
||||
set_end_of_song_callback(end_of_song_callback, NULL);
|
||||
SEND_LOG("(INIT) Loading spells.",0,0);
|
||||
kouzla_init();
|
||||
SEND_LOG("(INIT) Loading items.",0,0);
|
||||
|
@ -1143,7 +1143,10 @@ void enter_game()
|
|||
set_game_click_map();
|
||||
SEND_LOG("(GAME) --------- Waiting for E_CLOSE_MAP ------------\n",0,0);
|
||||
send_message(E_ADD,E_RELOADMAP,reload_map_handler);
|
||||
end=*(int *)task_wait_event(E_CLOSE_MAP);
|
||||
{
|
||||
EVENT_MSG *msg = task_wait_event(E_CLOSE_MAP);
|
||||
end = va_arg(msg->data, int);
|
||||
}
|
||||
send_message(E_DONE,E_RELOADMAP,reload_map_handler);
|
||||
SEND_LOG("(GAME) --------- E_CLOSE_MAP triggered, leaving map------------\n",0,0);
|
||||
unwire_main_functs();
|
||||
|
@ -1522,10 +1525,9 @@ static void undef_menu()
|
|||
}
|
||||
|
||||
|
||||
static EVENT_PROC(load_error_report)
|
||||
static void load_error_report(EVENT_MSG *msg,void **)
|
||||
{
|
||||
user_ptr;
|
||||
WHEN_MSG(E_IDLE)
|
||||
if (msg->msg == E_IDLE)
|
||||
{
|
||||
message(1,0,0,"",texty[79],texty[80]);
|
||||
exit_wait=0;
|
||||
|
@ -1551,7 +1553,10 @@ static void load_saved_game(void)
|
|||
wire_save_load(4);
|
||||
ukaz_mysku();
|
||||
update_mysky();
|
||||
game=*((char *)task_wait_event(E_CLOSE_MAP));
|
||||
{
|
||||
EVENT_MSG *msg = task_wait_event(E_CLOSE_MAP);
|
||||
game = va_arg(msg->data, int);
|
||||
}
|
||||
unwire_proc();
|
||||
disable_click_map();
|
||||
task_wait_event(E_TIMER);
|
||||
|
|
|
@ -421,13 +421,15 @@ void create_playlist(char *playlist)
|
|||
playing_track=-1;
|
||||
}
|
||||
|
||||
void play_next_music(char **c)
|
||||
const char * end_of_song_callback(void *ctx) {
|
||||
return get_next_music_from_playlist();
|
||||
}
|
||||
const char *get_next_music_from_playlist()
|
||||
{
|
||||
int i,step;
|
||||
static char d[MAX_FILESYSTEM_PATH];
|
||||
|
||||
*c=NULL;
|
||||
if (cur_playlist==NULL) return;
|
||||
if (cur_playlist==NULL) return NULL;
|
||||
if (!remain_play)
|
||||
for(i=0;cur_playlist[i]!=NULL;remain_play++,i++) cur_playlist[i][0]=32;
|
||||
if (play_list_mode==PL_RANDOM)
|
||||
|
@ -444,11 +446,15 @@ void play_next_music(char **c)
|
|||
while (step);
|
||||
playing_track=i;
|
||||
snprintf(d,sizeof(d),"%s%s",pathtable[SR_MUSIC],cur_playlist[i]+1);
|
||||
if (access(d,0) == -1)
|
||||
if (access(d,0) == -1) {
|
||||
snprintf(d,sizeof(d),"%s%s",pathtable[SR_ORGMUSIC],cur_playlist[i]+1);
|
||||
if (access(d,0) == -1) {
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
cur_playlist[i][0]=33;
|
||||
remain_play--;
|
||||
*c=d;
|
||||
return d;
|
||||
}
|
||||
|
||||
void purge_playlist()
|
||||
|
|
|
@ -645,11 +645,10 @@ T_CLK_MAP clk_end_game[]=
|
|||
};
|
||||
|
||||
|
||||
EVENT_PROC(end_game_end_phase)
|
||||
{
|
||||
void end_game_end_phase(EVENT_MSG *msg,void **)
|
||||
{
|
||||
static int wait=0;
|
||||
WHEN_MSG(E_TIMER)
|
||||
{
|
||||
if (msg->msg == E_TIMER) {
|
||||
if (pass_zavora) return;
|
||||
if (wait==2)
|
||||
{
|
||||
|
@ -659,10 +658,10 @@ EVENT_PROC(end_game_end_phase)
|
|||
}
|
||||
else wait++;
|
||||
}
|
||||
WHEN_MSG(E_INIT)
|
||||
if (msg->msg == E_INIT) {
|
||||
wait=0;
|
||||
user_ptr;
|
||||
}
|
||||
}
|
||||
|
||||
void wire_end_game()
|
||||
{
|
||||
|
|
96
game/temp_storage.cpp
Normal file
96
game/temp_storage.cpp
Normal file
|
@ -0,0 +1,96 @@
|
|||
#include <map>
|
||||
#include <string>
|
||||
#include <string_view>
|
||||
#include <vector>
|
||||
|
||||
extern "C" {
|
||||
#include "temp_storage.h"
|
||||
}
|
||||
|
||||
typedef struct _temp_storage_file_wr {
|
||||
std::vector<uint8_t> *_data;
|
||||
} TMPFILE_WR;
|
||||
|
||||
typedef struct _temp_storage_file_rd {
|
||||
std::basic_string_view<uint8_t> _data;
|
||||
} TMPFILE_RD;
|
||||
|
||||
using FileSystem = std::map<std::string, std::vector<uint8_t>, std::less<> >;
|
||||
static FileSystem temp_fsystem;
|
||||
|
||||
|
||||
void temp_storage_store(const char *name, const void *data, int32_t size) {
|
||||
auto b = reinterpret_cast<const uint8_t *>(data);
|
||||
auto e = b+size;
|
||||
temp_fsystem[std::string(name)] = {b,e};
|
||||
}
|
||||
|
||||
int32_t temp_storage_find(const char *name) {
|
||||
auto iter = temp_fsystem.find(std::string_view(name));
|
||||
if (iter == temp_fsystem.end()) return -1;
|
||||
return iter->second.size();
|
||||
}
|
||||
|
||||
int32_t temp_storage_retrieve(const char *name, void *data, int32_t size) {
|
||||
auto iter = temp_fsystem.find(std::string_view(name));
|
||||
if (iter == temp_fsystem.end()) return -1;
|
||||
size = std::min<int32_t>(size, iter->second.size());
|
||||
std::copy(iter->second.begin(), iter->second.end(), reinterpret_cast<uint8_t *>(data));
|
||||
return iter->second.size();
|
||||
|
||||
}
|
||||
|
||||
void temp_storage_list(void (*callback)(const char*, void*), void *context) {
|
||||
for (const auto &[k,v]: temp_fsystem) {
|
||||
callback(k.c_str(), context);
|
||||
}
|
||||
}
|
||||
|
||||
void temp_storage_clear() {
|
||||
temp_fsystem.clear();
|
||||
}
|
||||
|
||||
TMPFILE_RD* temp_storage_open(const char *name) {
|
||||
auto iter = temp_fsystem.find(std::string_view(name));
|
||||
if (iter == temp_fsystem.end()) return NULL;
|
||||
return new TMPFILE_RD{std::basic_string_view<uint8_t>(iter->second.data(), iter->second.size())};
|
||||
}
|
||||
|
||||
TMPFILE_WR* temp_storage_create(const char *name) {
|
||||
auto &v = temp_fsystem[std::string(name)] = {};
|
||||
return new TMPFILE_WR{&v};
|
||||
}
|
||||
|
||||
TMPFILE_WR* temp_storage_append(const char *name) {
|
||||
auto &v = temp_fsystem[std::string(name)];
|
||||
return new TMPFILE_WR{&v};
|
||||
}
|
||||
|
||||
void temp_storage_close_rd(TMPFILE_RD *f) {
|
||||
delete f;
|
||||
}
|
||||
|
||||
void temp_storage_close_wr(TMPFILE_WR *f) {
|
||||
delete f;
|
||||
}
|
||||
|
||||
void temp_storage_write(const void *data, uint32_t size, TMPFILE_WR *f) {
|
||||
auto b = reinterpret_cast<const uint8_t *>(data);
|
||||
auto e = b+size;
|
||||
std::copy(b,e, std::back_inserter(*f->_data));
|
||||
}
|
||||
|
||||
uint32_t temp_storage_read(void *data, uint32_t size, TMPFILE_RD *f) {
|
||||
auto &d = f->_data;
|
||||
auto p = d.substr(0,size);
|
||||
d = d.substr(p.size());
|
||||
auto b = reinterpret_cast<uint8_t *>(data);
|
||||
std::copy(d.begin(), d.end(), b);
|
||||
return p.size();
|
||||
}
|
||||
|
||||
void temp_storage_skip(TMPFILE_RD *f, int bytes) {
|
||||
auto &d = f->_data;
|
||||
auto p = d.substr(0,bytes);
|
||||
d = d.substr(p.size());
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
|
||||
#include <stdint.h>
|
||||
|
||||
///store to temp storage
|
||||
void temp_storage_store(const char *name, const void *data, int32_t size);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue