mirror of
https://github.com/ondra-novak/gates_of_skeldal.git
synced 2025-07-06 06:30:33 -04:00
fix shops
This commit is contained in:
parent
99378da298
commit
42087c926c
10 changed files with 143 additions and 139 deletions
|
@ -164,7 +164,8 @@ static void dialog_anim(va_list args)
|
||||||
mgif_install_proc(animace_kouzla);
|
mgif_install_proc(animace_kouzla);
|
||||||
const char *ch = build_pathname(2,gpathtable[SR_DIALOGS], block);
|
const char *ch = build_pathname(2,gpathtable[SR_DIALOGS], block);
|
||||||
free(block);
|
free(block);
|
||||||
aptr=load_file(ch);
|
size_t loadsize;
|
||||||
|
aptr=load_file(ch, &loadsize);
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
anm=open_mgif(aptr);
|
anm=open_mgif(aptr);
|
||||||
|
|
129
game/enemy.c
129
game/enemy.c
|
@ -460,72 +460,75 @@ int mob_vyber_vychod(int r,int sector,int dir,char alone,char mobile)
|
||||||
return dir;
|
return dir;
|
||||||
}
|
}
|
||||||
|
|
||||||
char je_mozne_videt(int sector1,int sector2,int flag)
|
char je_mozne_videt(int sector1, int sector2, int flag) {
|
||||||
{
|
int x1, y1;
|
||||||
int x1,y1;
|
int x2, y2;
|
||||||
int x2,y2;
|
int xs, ys;
|
||||||
int xs,ys;
|
int x, y, ly, s;
|
||||||
int x,y,ly,s;
|
|
||||||
|
|
||||||
if (map_coord[sector1].layer!=map_coord[sector2].layer) return 0;
|
if (map_coord[sector1].layer != map_coord[sector2].layer)
|
||||||
x1=map_coord[sector1].x;x2=map_coord[sector2].x;
|
return 0;
|
||||||
y1=map_coord[sector1].y;y2=map_coord[sector2].y;
|
x1 = map_coord[sector1].x;
|
||||||
xs=x1-x2;
|
x2 = map_coord[sector2].x;
|
||||||
ys=y1-y2;
|
y1 = map_coord[sector1].y;
|
||||||
if (xs==0 && ys==0) return 1;
|
y2 = map_coord[sector2].y;
|
||||||
s=sector1;
|
xs = x1 - x2;
|
||||||
ly=0;
|
ys = y1 - y2;
|
||||||
if (xs>=0)
|
if (xs == 0 && ys == 0)
|
||||||
{
|
return 1;
|
||||||
for(x=0;x<=xs;x++)
|
s = sector1;
|
||||||
{
|
ly = 0;
|
||||||
y=(x+1)*ys/(xs+1);
|
if (xs >= 0) {
|
||||||
while (y>ly)
|
for (x = 0; x <= xs; x++) {
|
||||||
if ((map_sides[(s<<2)].flags & flag)!=(unsigned)flag)
|
y = (x + 1) * ys / (xs + 1);
|
||||||
{
|
while (y > ly) {
|
||||||
s=map_sectors[s].step_next[0];
|
if ((map_sides[(s << 2)].flags & flag) != (unsigned) flag) {
|
||||||
ly++;
|
s = map_sectors[s].step_next[0];
|
||||||
}
|
ly++;
|
||||||
else return 0;
|
} else
|
||||||
while (y<ly)
|
return 0;
|
||||||
if ((map_sides[(s<<2)+2].flags & flag)!=(unsigned)flag)
|
}
|
||||||
{
|
while (y < ly) {
|
||||||
s=map_sectors[s].step_next[2];
|
if ((map_sides[(s << 2) + 2].flags & flag) != (unsigned) flag) {
|
||||||
ly--;
|
s = map_sectors[s].step_next[2];
|
||||||
}
|
ly--;
|
||||||
else return 0;
|
} else
|
||||||
if (x!=xs) {
|
return 0;
|
||||||
if ((map_sides[(s<<2)+3].flags & flag)!=(unsigned)flag) s=map_sectors[s].step_next[3];
|
}
|
||||||
} else return 0;
|
if (x != xs) {
|
||||||
|
if ((map_sides[(s << 2) + 3].flags & flag) != (unsigned) flag) {
|
||||||
|
s = map_sectors[s].step_next[3];
|
||||||
|
} else {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
} else if (xs < 0) {
|
||||||
else
|
for (x = 0; x >= xs; x--) {
|
||||||
if (xs<0)
|
y = (x - 1) * ys / (xs - 1);
|
||||||
{
|
while (y > ly)
|
||||||
for(x=0;x>=xs;x--)
|
if ((map_sides[(s << 2)].flags & flag) != (unsigned) flag) {
|
||||||
{
|
s = map_sectors[s].step_next[0];
|
||||||
y=(x-1)*ys/(xs-1);
|
ly++;
|
||||||
while (y>ly)
|
} else
|
||||||
if ((map_sides[(s<<2)].flags & flag)!=(unsigned)flag)
|
return 0;
|
||||||
{
|
while (y < ly)
|
||||||
s=map_sectors[s].step_next[0];
|
if ((map_sides[( s << 2) + 2].flags & flag) != (unsigned) flag) {
|
||||||
ly++;
|
s = map_sectors[s].step_next[2];
|
||||||
}
|
ly--;
|
||||||
else return 0;
|
} else
|
||||||
while (y<ly)
|
return 0;
|
||||||
if ((map_sides[(s<<2)+2].flags & flag)!=(unsigned)flag)
|
if (x != xs) {
|
||||||
{
|
if ((map_sides[(s << 2) + 1].flags & flag) != (unsigned) flag) {
|
||||||
s=map_sectors[s].step_next[2];
|
s = map_sectors[s].step_next[1];
|
||||||
ly--;
|
} else {
|
||||||
}
|
return 0;
|
||||||
else return 0;
|
}
|
||||||
if (x!=xs) {
|
}
|
||||||
if ((map_sides[(s<<2)+1].flags & flag)!=(unsigned)flag) s=map_sectors[s].step_next[1];
|
|
||||||
} else return 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return s==sector2;
|
return s == sector2;
|
||||||
}
|
}
|
||||||
|
|
||||||
int q_vidis_postavu(int sector,int dir,TMOB *p,int *otocit_se,char ret)
|
int q_vidis_postavu(int sector,int dir,TMOB *p,int *otocit_se,char ret)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1485,9 +1485,10 @@ int smlouvat(int cena,int puvod,int pocet,int money,char mode)
|
||||||
int temp1,temp2;
|
int temp1,temp2;
|
||||||
|
|
||||||
cena,puvod,pocet,money;text[0]=0;text[1]=0;
|
cena,puvod,pocet,money;text[0]=0;text[1]=0;
|
||||||
add_window(170,130,300,150,H_IDESKA,3,20,20);
|
set_font(H_FBOLD,RGB555(31,31,31));
|
||||||
|
add_window(170,130,300,100,H_WINTXTR,3,20,20);
|
||||||
define(-1,10,15,1,1,0,label,texty[241]);
|
define(-1,10,15,1,1,0,label,texty[241]);
|
||||||
set_font(H_FBOLD,RGB555(31,31,31));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);property(def_border(5,BAR_COLOR),NULL,NULL,0);set_default("");
|
define(10,150,30,100,13,0,input_line,8);property(def_border(5,BAR_COLOR),NULL,NULL,0);set_default("");
|
||||||
|
|
74
game/inv.c
74
game/inv.c
|
@ -1534,6 +1534,9 @@ void write_pocet_sipu()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static const void *shop_keeper_picture = NULL;
|
||||||
|
|
||||||
|
|
||||||
void redraw_inventory()
|
void redraw_inventory()
|
||||||
{
|
{
|
||||||
update_mysky();
|
update_mysky();
|
||||||
|
@ -2430,12 +2433,12 @@ static void shop_mouse_event(EVENT_MSG *msg,void **unused)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static __inline void copy_data(char **src, void *target, int size) {
|
static __inline void copy_data(const char **src, void *target, int size) {
|
||||||
memcpy(target, *src, size);
|
memcpy(target, *src, size);
|
||||||
(*src)+=size;
|
(*src)+=size;
|
||||||
}
|
}
|
||||||
|
|
||||||
static char * load_TSHOP(char *binary, TSHOP *target) {
|
static const char * load_TSHOP(const char *binary, TSHOP *target) {
|
||||||
copy_data(&binary, target->keeper, 16);
|
copy_data(&binary, target->keeper, 16);
|
||||||
copy_data(&binary, target->picture, 13);
|
copy_data(&binary, target->picture, 13);
|
||||||
copy_data(&binary, &target->koef, 4);
|
copy_data(&binary, &target->koef, 4);
|
||||||
|
@ -2447,7 +2450,7 @@ static char * load_TSHOP(char *binary, TSHOP *target) {
|
||||||
return binary;
|
return binary;
|
||||||
}
|
}
|
||||||
|
|
||||||
static char * load_TPRODUCT(char *binary, TPRODUCT *target) {
|
static const char * load_TPRODUCT(const char *binary, TPRODUCT *target) {
|
||||||
copy_data(&binary, &target->item, 2);
|
copy_data(&binary, &target->item, 2);
|
||||||
copy_data(&binary, &target->cena, 4);
|
copy_data(&binary, &target->cena, 4);
|
||||||
copy_data(&binary, &target->trade_flags, 2);
|
copy_data(&binary, &target->trade_flags, 2);
|
||||||
|
@ -2456,16 +2459,17 @@ static char * load_TPRODUCT(char *binary, TPRODUCT *target) {
|
||||||
return binary;
|
return binary;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void rebuild_shops(void)
|
static void rebuild_shops(const void *shop_ptr)
|
||||||
{
|
{
|
||||||
char *c=(char *)shop_hacek;
|
const char *c=(const char *)shop_ptr;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
SEND_LOG("(SHOP) Rebuilding shops....");
|
SEND_LOG("(SHOP) Rebuilding shops....");
|
||||||
if (shop_list!=NULL) free(shop_list);
|
if (shop_list!=NULL) free(shop_list);
|
||||||
|
max_shops = *(const int32_t *)c;
|
||||||
shop_list=NewArr(TSHOP *,max_shops);
|
shop_list=NewArr(TSHOP *,max_shops);
|
||||||
c+=4;
|
c+=4;
|
||||||
char *d = c;
|
const char *d = c;
|
||||||
size_t reqsize = 0;
|
size_t reqsize = 0;
|
||||||
size_t products = 0;
|
size_t products = 0;
|
||||||
for(i=0;i<max_shops;i++) {
|
for(i=0;i<max_shops;i++) {
|
||||||
|
@ -2509,24 +2513,14 @@ static void rebuild_shops(void)
|
||||||
void load_shops(void)
|
void load_shops(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
int *d;
|
|
||||||
if (!test_file_exist(SR_MAP,SHOP_NAME))
|
if (!test_file_exist(SR_MAP,SHOP_NAME))
|
||||||
{
|
{
|
||||||
shop_hacek=NULL;
|
shop_hacek=NULL;
|
||||||
shop_list=NULL;
|
shop_list=NULL;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
shop_hacek=afile(SHOP_NAME,SR_MAP,&shop_hacek_size);
|
const void *sh=afile(SHOP_NAME,SR_MAP,&shop_hacek_size);
|
||||||
d=shop_hacek;
|
rebuild_shops(sh);
|
||||||
max_shops=*d;
|
|
||||||
if (!max_shops)
|
|
||||||
{
|
|
||||||
free(shop_hacek);
|
|
||||||
shop_hacek=NULL;
|
|
||||||
shop_list=NULL;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
rebuild_shops();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t *get_product_count(const TPRODUCT *p) {
|
static int32_t *get_product_count(const TPRODUCT *p) {
|
||||||
|
@ -2660,6 +2654,7 @@ static void redraw_shop()
|
||||||
info_box_drawed=0;
|
info_box_drawed=0;
|
||||||
if (info_box_below!=NULL) free(info_box_below);
|
if (info_box_below!=NULL) free(info_box_below);
|
||||||
info_box_below=NULL;
|
info_box_below=NULL;
|
||||||
|
if (shop_keeper_picture) put_picture(5,SCREEN_OFFLINE,shop_keeper_picture);
|
||||||
ms_last_event.event_type=0x1;send_message(E_MOUSE,&ms_last_event);
|
ms_last_event.event_type=0x1;send_message(E_MOUSE,&ms_last_event);
|
||||||
ukaz_mysku();
|
ukaz_mysku();
|
||||||
showview(0,0,0,0);
|
showview(0,0,0,0);
|
||||||
|
@ -2778,10 +2773,14 @@ char shop_keeper_click(int id, int xa, int ya, int xr, int yr) {
|
||||||
sprintf(c, texty[102], price);
|
sprintf(c, texty[102], price);
|
||||||
p = message(3, 0, 1, texty[118], c, texty[77], texty[230],
|
p = message(3, 0, 1, texty[118], c, texty[77], texty[230],
|
||||||
texty[78]);
|
texty[78]);
|
||||||
if (p == 2)
|
if (p == 2) {
|
||||||
price = -1;
|
price = -1;
|
||||||
if (p == 1)
|
}
|
||||||
|
if (p == 1) {
|
||||||
|
redraw_shop();
|
||||||
price = smlouvat(price, pp->cena, *get_product_count(pp), money, 0);
|
price = smlouvat(price, pp->cena, *get_product_count(pp), money, 0);
|
||||||
|
|
||||||
|
}
|
||||||
if (price >= 0) {
|
if (price >= 0) {
|
||||||
play_sample_at_channel(H_SND_OBCHOD, 1, 100);
|
play_sample_at_channel(H_SND_OBCHOD, 1, 100);
|
||||||
buy_item(z);
|
buy_item(z);
|
||||||
|
@ -2834,18 +2833,24 @@ char shop_bag_click(int id,int xa,int ya,int xr,int yr)
|
||||||
if (pp==NULL) return 0;
|
if (pp==NULL) return 0;
|
||||||
mouse_set_cursor(H_MS_DEFAULT);
|
mouse_set_cursor(H_MS_DEFAULT);
|
||||||
if (!price) return 0;
|
if (!price) return 0;
|
||||||
if (price>money)
|
if (price > money) {
|
||||||
{
|
p = message(2, 0, 0, "", texty[104], texty[230], texty[78]);
|
||||||
p=message(2,0,0,"",texty[104],texty[230],texty[78]);
|
if (!p) {
|
||||||
if (!p) price=smlouvat(price,pp->cena,*get_product_count(pp),money,1);else price=-1;
|
redraw_shop();
|
||||||
}
|
price = smlouvat(price, pp->cena, *get_product_count(pp), money, 1);
|
||||||
else
|
} else {
|
||||||
{
|
price = -1;
|
||||||
sprintf(s,texty[101],price);
|
}
|
||||||
p=message(3,0,1,texty[118],s,texty[77],texty[230],texty[78]);
|
} else {
|
||||||
if (p==1) price=smlouvat(price,pp->cena,*get_product_count(pp),money,1);else
|
sprintf(s, texty[101], price);
|
||||||
if (p==2) price=-1;
|
p = message(3, 0, 1, texty[118], s, texty[77], texty[230], texty[78]);
|
||||||
}
|
if (p == 1) {
|
||||||
|
redraw_shop();
|
||||||
|
price = smlouvat(price, pp->cena, *get_product_count(pp), money, 1);
|
||||||
|
} else if (p == 2) {
|
||||||
|
price = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
if (price>=0)
|
if (price>=0)
|
||||||
{
|
{
|
||||||
play_sample_at_channel(H_SND_OBCHOD,1,100);
|
play_sample_at_channel(H_SND_OBCHOD,1,100);
|
||||||
|
@ -2887,7 +2892,6 @@ void wire_shop()
|
||||||
{
|
{
|
||||||
int32_t size;
|
int32_t size;
|
||||||
static TSHOP *last_shop=NULL;
|
static TSHOP *last_shop=NULL;
|
||||||
static void *pic=NULL;
|
|
||||||
mute_all_tracks(0);
|
mute_all_tracks(0);
|
||||||
old_inv_view_mode=inv_view_mode;
|
old_inv_view_mode=inv_view_mode;
|
||||||
inv_view_mode=0;
|
inv_view_mode=0;
|
||||||
|
@ -2895,10 +2899,10 @@ void wire_shop()
|
||||||
schovej_mysku();
|
schovej_mysku();
|
||||||
if (last_shop!=cur_shop)
|
if (last_shop!=cur_shop)
|
||||||
{
|
{
|
||||||
free(pic);pic=afile(cur_shop->picture,SR_DIALOGS,&size);
|
ablock_free(shop_keeper_picture);
|
||||||
|
shop_keeper_picture=afile(cur_shop->picture,SR_DIALOGS,&size);
|
||||||
last_shop=cur_shop;
|
last_shop=cur_shop;
|
||||||
}
|
}
|
||||||
if (cur_shop->picture[0]) put_picture(5,SCREEN_OFFLINE,pic);
|
|
||||||
send_message(E_ADD,E_MOUSE,shop_mouse_event);
|
send_message(E_ADD,E_MOUSE,shop_mouse_event);
|
||||||
unwire_proc=unwire_shop;
|
unwire_proc=unwire_shop;
|
||||||
change_click_map(clk_shop,CLK_SHOP);
|
change_click_map(clk_shop,CLK_SHOP);
|
||||||
|
|
|
@ -1233,14 +1233,7 @@ static void configure(char *filename)
|
||||||
*/
|
*/
|
||||||
static int update_config(void)
|
static int update_config(void)
|
||||||
{
|
{
|
||||||
SEND_LOG("(GAME) Updating config. file '%s'",CONFIG_NAME);
|
|
||||||
add_field_num(&cur_config,sinit[1].heslo,zoom_speed(-1));
|
|
||||||
add_field_num(&cur_config,sinit[2].heslo,turn_speed(-1));
|
|
||||||
if (check_snd_effect(SND_MUSIC)) add_field_num(&cur_config,sinit[3].heslo,get_snd_effect(SND_MUSIC));
|
|
||||||
if (check_snd_effect(SND_GFX)) add_field_num(&cur_config,sinit[4].heslo,get_snd_effect(SND_GFX));
|
|
||||||
add_field_num(&cur_config,sinit[9].heslo,level_preload);
|
|
||||||
add_field_num(&cur_config,sinit[13].heslo,autosave_enabled);
|
|
||||||
save_config(cur_config,CONFIG_NAME);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -816,6 +816,7 @@ void input_line_event(EVENT_MSG *msg,OBJREC *o)
|
||||||
|
|
||||||
void input_line_done(OBJREC *o) {
|
void input_line_done(OBJREC *o) {
|
||||||
free(o->userptr);
|
free(o->userptr);
|
||||||
|
o->userptr = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
10
libs/gui.c
10
libs/gui.c
|
@ -606,7 +606,11 @@ void do_it_events(EVENT_MSG *msg,void **user_data)
|
||||||
if (msg->msg==E_INIT) return;
|
if (msg->msg==E_INIT) return;
|
||||||
if (desktop==NULL) {exit_wait=1;return;}
|
if (desktop==NULL) {exit_wait=1;return;}
|
||||||
change_flag=0;f_cancel_event=0;
|
change_flag=0;f_cancel_event=0;
|
||||||
if (o_aktual!=NULL)o_aktual->on_event(msg,o_aktual);
|
if (o_aktual!=NULL) {
|
||||||
|
EVENT_MSG mcpy = clone_message(msg);
|
||||||
|
o_aktual->on_event(&mcpy,o_aktual);
|
||||||
|
destroy_message(&mcpy);
|
||||||
|
}
|
||||||
if (msg->msg==E_MOUSE)
|
if (msg->msg==E_MOUSE)
|
||||||
{
|
{
|
||||||
*oz=1;
|
*oz=1;
|
||||||
|
@ -665,11 +669,13 @@ void do_it_events(EVENT_MSG *msg,void **user_data)
|
||||||
if (msg->msg==E_KEYBOARD)
|
if (msg->msg==E_KEYBOARD)
|
||||||
{
|
{
|
||||||
*oz=1;
|
*oz=1;
|
||||||
|
EVENT_MSG cmsg = clone_message(msg);
|
||||||
if (o_aktual!=NULL)
|
if (o_aktual!=NULL)
|
||||||
{
|
{
|
||||||
o_aktual->call_event(msg,o_aktual);
|
o_aktual->call_event(msg,o_aktual);
|
||||||
}
|
}
|
||||||
int code = va_arg(msg->data, int);
|
int code = va_arg(cmsg.data, int);
|
||||||
|
destroy_message(&cmsg);
|
||||||
if ((code>>8)==0xf && waktual->idlist!=NULL)
|
if ((code>>8)==0xf && waktual->idlist!=NULL)
|
||||||
{
|
{
|
||||||
if (o_aktual==NULL) o_aktual=get_last_id();
|
if (o_aktual==NULL) o_aktual=get_last_id();
|
||||||
|
|
|
@ -90,7 +90,7 @@ void *getmem(int32_t size)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void *load_file(const char *filename)
|
void *load_file(const char *filename, size_t *sz)
|
||||||
{
|
{
|
||||||
FILE *f;
|
FILE *f;
|
||||||
int32_t *p;
|
int32_t *p;
|
||||||
|
@ -109,7 +109,7 @@ void *load_file(const char *filename)
|
||||||
p=(void *)getmem(size);
|
p=(void *)getmem(size);
|
||||||
if (fread(p,1,size,f)!=size) load_error(filename);
|
if (fread(p,1,size,f)!=size) load_error(filename);
|
||||||
fclose(f);
|
fclose(f);
|
||||||
last_load_size=size;
|
*sz=size;
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -377,7 +377,7 @@ THANDLE_DATA *def_handle(int handle,const char *filename,ABLOCK_DECODEPROC decom
|
||||||
return h;
|
return h;
|
||||||
}
|
}
|
||||||
|
|
||||||
void *afile(char *filename,int group,int32_t *blocksize)
|
const void *afile(char *filename,int group,int32_t *blocksize)
|
||||||
{
|
{
|
||||||
char *d;
|
char *d;
|
||||||
int32_t entr;
|
int32_t entr;
|
||||||
|
@ -393,24 +393,31 @@ void *afile(char *filename,int group,int32_t *blocksize)
|
||||||
const void *hnd;
|
const void *hnd;
|
||||||
SEND_LOG("(LOAD) Afile is loading file '%s' from group %d",d,group);
|
SEND_LOG("(LOAD) Afile is loading file '%s' from group %d",d,group);
|
||||||
if (entr<0) entr=-entr,hnd=patch_m;else hnd=bmf_m;
|
if (entr<0) entr=-entr,hnd=patch_m;else hnd=bmf_m;
|
||||||
const int32_t * szptr = (const int32_t *)hnd;
|
const int32_t * szptr = (const int32_t *)((const char *)hnd+entr);
|
||||||
*blocksize = *szptr;
|
*blocksize = *szptr;
|
||||||
void *ret = getmem(*blocksize);
|
return szptr+1;
|
||||||
memcpy(ret, szptr+1, *blocksize);
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
else if (mman_pathlist!=NULL)
|
else if (mman_pathlist!=NULL)
|
||||||
{
|
{
|
||||||
const char *name = build_pathname(2,mman_pathlist[group],d);
|
const char *name = build_pathname(2,mman_pathlist[group],d);
|
||||||
|
size_t sz;
|
||||||
|
|
||||||
SEND_LOG("(LOAD) Afile is loading file '%s' from disk (group %d)",d,group);
|
SEND_LOG("(LOAD) Afile is loading file '%s' from disk (group %d)",d,group);
|
||||||
p=load_file(name);
|
p=load_file(name, &sz);
|
||||||
*blocksize=last_load_size;
|
*blocksize=sz;
|
||||||
}
|
}
|
||||||
else return NULL;
|
else return NULL;
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void *afile_copy(char *filename,int group,int32_t *blocksize) {
|
||||||
|
const void *ptr = afile(filename, group, blocksize);
|
||||||
|
if (need_to_be_free(ptr)) return (void *)ptr;
|
||||||
|
void *cpy = getmem(*blocksize);
|
||||||
|
memcpy(cpy, ptr, *blocksize);
|
||||||
|
return cpy;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void decompress_data(THANDLE_DATA *h) {
|
static void decompress_data(THANDLE_DATA *h) {
|
||||||
if (h->loadproc) {
|
if (h->loadproc) {
|
||||||
|
@ -452,10 +459,11 @@ const void *ablock(int handle)
|
||||||
{
|
{
|
||||||
if (h->src_file[0]!=0)
|
if (h->src_file[0]!=0)
|
||||||
{
|
{
|
||||||
|
size_t sz;
|
||||||
if (mman_action!=NULL) mman_action(MMA_READ);
|
if (mman_action!=NULL) mman_action(MMA_READ);
|
||||||
const char *name = build_pathname(2,mman_pathlist[h->path], h->src_file);
|
const char *name = build_pathname(2,mman_pathlist[h->path], h->src_file);
|
||||||
p=load_file(name);
|
p=load_file(name, &sz);
|
||||||
s=last_load_size;
|
s=sz;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -795,19 +803,6 @@ int32_t get_handle_size(int handle)
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
FILE *afiletemp(char *filename, int group)
|
|
||||||
{
|
|
||||||
int32_t size;
|
|
||||||
void *p=afile(filename,group,&size);
|
|
||||||
FILE *f;
|
|
||||||
if (p==NULL) return NULL;
|
|
||||||
f=tmpfile();
|
|
||||||
if (f==NULL) {free(p);return NULL;}
|
|
||||||
fwrite(p,size,1,f);
|
|
||||||
fseek(f,0,SEEK_SET);
|
|
||||||
return f;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ablock_free(const void *ptr) {
|
void ablock_free(const void *ptr) {
|
||||||
if (need_to_be_free(ptr)) free((void *)ptr);
|
if (need_to_be_free(ptr)) free((void *)ptr);
|
||||||
}
|
}
|
||||||
|
|
|
@ -81,7 +81,7 @@ extern int memman_handle; //cislo handle naposled zpracovavaneho prikazem ablock
|
||||||
extern char mman_patch; //jednicka zapina moznost pouziti patchu
|
extern char mman_patch; //jednicka zapina moznost pouziti patchu
|
||||||
void *getmem(int32_t size); //alokace pameti pres memman. alokovat pomoci malloc lze ale hrozi nebezpeci ze vrati NULL
|
void *getmem(int32_t size); //alokace pameti pres memman. alokovat pomoci malloc lze ale hrozi nebezpeci ze vrati NULL
|
||||||
void *grealloc(void *m,int32_t size); //realokace pameti pres memman
|
void *grealloc(void *m,int32_t size); //realokace pameti pres memman
|
||||||
void *load_file(const char *filename); //obycejne natahne soubor do pameti a vrati ukazatel.
|
void *load_file(const char *filename, size_t *size); //obycejne natahne soubor do pameti a vrati ukazatel.
|
||||||
void init_manager(const char *filename,const char *swp); //inicializuje manager. Jmeno filename i swapname nejsou povinne (musi byt NULL kdyz nejsou pouzity)
|
void init_manager(const char *filename,const char *swp); //inicializuje manager. Jmeno filename i swapname nejsou povinne (musi byt NULL kdyz nejsou pouzity)
|
||||||
void def_mman_group_table(const char ** ); //define pointer to table of paths, for each group there is path
|
void def_mman_group_table(const char ** ); //define pointer to table of paths, for each group there is path
|
||||||
THANDLE_DATA *def_handle(int handle,const char *filename,ABLOCK_DECODEPROC decompress,char path); //deklaruje rukojet. promenna decompress je ukazatel na funkci ktera upravi data pred vracenim ukazatele
|
THANDLE_DATA *def_handle(int handle,const char *filename,ABLOCK_DECODEPROC decompress,char path); //deklaruje rukojet. promenna decompress je ukazatel na funkci ktera upravi data pred vracenim ukazatele
|
||||||
|
@ -98,7 +98,8 @@ THANDLE_DATA *zneplatnit_block(int handle); //zneplatni data bloku
|
||||||
THANDLE_DATA *get_handle(int handle); //vraci informace o rukojeti
|
THANDLE_DATA *get_handle(int handle); //vraci informace o rukojeti
|
||||||
int find_handle(const char *name,void *decomp); //hleda mezi rukojeti stejnou definici
|
int find_handle(const char *name,void *decomp); //hleda mezi rukojeti stejnou definici
|
||||||
int test_file_exist(int group,char *filename); //testuje zda soubor existuje v ramci mmanageru
|
int test_file_exist(int group,char *filename); //testuje zda soubor existuje v ramci mmanageru
|
||||||
void *afile(char *filename,int group,int32_t *blocksize); //nahraje do pameti soubor registrovany v ramci mmanageru
|
const void *afile(char *filename,int group,int32_t *blocksize); //nahraje do pameti soubor registrovany v ramci mmanageru
|
||||||
|
void *afile_copy(char *filename,int group,int32_t *blocksize); //nahraje do pameti soubor registrovany v ramci mmanageru
|
||||||
int32_t get_handle_size(int handle);
|
int32_t get_handle_size(int handle);
|
||||||
//void get_mem_info(MEMORYSTATUS *mem);
|
//void get_mem_info(MEMORYSTATUS *mem);
|
||||||
void ablock_free(const void *ptr);
|
void ablock_free(const void *ptr);
|
||||||
|
@ -106,7 +107,6 @@ void ablock_free(const void *ptr);
|
||||||
|
|
||||||
int read_group(int index);
|
int read_group(int index);
|
||||||
char add_patch_file(char *filename); //pripojuje zaplatu
|
char add_patch_file(char *filename); //pripojuje zaplatu
|
||||||
FILE *afiletemp(char *filename, int group);
|
|
||||||
|
|
||||||
|
|
||||||
#define MMA_READ 1
|
#define MMA_READ 1
|
||||||
|
|
|
@ -6,7 +6,7 @@ static char *render_int(char *where, int i, int radix) {
|
||||||
if (i == 0) return where;
|
if (i == 0) return where;
|
||||||
char *r = render_int(where, i/radix, radix);
|
char *r = render_int(where, i/radix, radix);
|
||||||
int p = i % radix;
|
int p = i % radix;
|
||||||
if (p<=0) {
|
if (p<=9) {
|
||||||
*r = p + '0';
|
*r = p + '0';
|
||||||
} else {
|
} else {
|
||||||
*r = p + 'A' - 10;
|
*r = p + 'A' - 10;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue