mirror of
https://github.com/ondra-novak/gates_of_skeldal.git
synced 2025-07-12 17:32:30 -04:00
support adv files
This commit is contained in:
parent
7aaeccd1c3
commit
8cf3c928e9
6 changed files with 63 additions and 33 deletions
|
@ -1,6 +1,7 @@
|
||||||
#include <platform/platform.h>
|
#include <platform/platform.h>
|
||||||
#include "advconfig.h"
|
#include "advconfig.h"
|
||||||
|
|
||||||
|
#include <ctype.h>
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
|
@ -9,7 +10,14 @@
|
||||||
|
|
||||||
static void process_row(INI_CONFIG_SECTION *sec, const char *row) {
|
static void process_row(INI_CONFIG_SECTION *sec, const char *row) {
|
||||||
|
|
||||||
char *buff = strcpy((char *)alloca(strlen(row)+1), row);
|
int l = strlen(row);
|
||||||
|
char *buff = strcpy((char *)alloca(l+1), row);
|
||||||
|
while (l && isspace(buff[l-1])) {
|
||||||
|
--l;
|
||||||
|
buff[l] = 0;
|
||||||
|
}
|
||||||
|
if (!l) return;
|
||||||
|
|
||||||
char *sep = strchr(buff,' ');
|
char *sep = strchr(buff,' ');
|
||||||
if (sep == NULL) return;
|
if (sep == NULL) return;
|
||||||
*sep = 0;
|
*sep = 0;
|
||||||
|
@ -18,26 +26,29 @@ static void process_row(INI_CONFIG_SECTION *sec, const char *row) {
|
||||||
const char *value = sep+1;
|
const char *value = sep+1;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (istrcmp(key,"CESTA_GRAFIKA") == 0) {
|
if (istrcmp(key,"CESTA_GRAFIKA") == 0) {
|
||||||
ini_replace_key(sec, "graphics", value);
|
ini_replace_key(sec, "graphics", file_icase_find(value));
|
||||||
} else if (istrcmp(key, "CESTA_ZVUKY") == 0) {
|
} else if (istrcmp(key, "CESTA_ZVUKY") == 0) {
|
||||||
ini_replace_key(sec, "sounds", value);
|
ini_replace_key(sec, "sounds", file_icase_find(value));
|
||||||
} else if (istrcmp(key, "CESTA_FONTY") == 0) {
|
} else if (istrcmp(key, "CESTA_FONTY") == 0) {
|
||||||
ini_replace_key(sec, "fonts", value);
|
ini_replace_key(sec, "fonts", file_icase_find(value));
|
||||||
} else if (istrcmp(key, "CESTA_MAPY") == 0) {
|
} else if (istrcmp(key, "CESTA_MAPY") == 0) {
|
||||||
ini_replace_key(sec, "maps", value);
|
ini_replace_key(sec, "maps", file_icase_find(value));
|
||||||
} else if (istrcmp(key, "CESTA_MUSIC") == 0) {
|
} else if (istrcmp(key, "CESTA_MUSIC") == 0) {
|
||||||
ini_replace_key(sec, "music_adv", value);
|
ini_replace_key(sec, "music_adv", file_icase_find(value));
|
||||||
} else if (istrcmp(key, "CESTA_BGRAFIKA") == 0) {
|
} else if (istrcmp(key, "CESTA_BGRAFIKA") == 0) {
|
||||||
ini_replace_key(sec, "gui", value);
|
ini_replace_key(sec, "gui", file_icase_find(value));
|
||||||
} else if (istrcmp(key, "CESTA_ITEMY") == 0) {
|
} else if (istrcmp(key, "CESTA_ITEMY") == 0) {
|
||||||
ini_replace_key(sec, "items", value);
|
ini_replace_key(sec, "items", file_icase_find(value));
|
||||||
} else if (istrcmp(key, "CESTA_ENEMY") == 0) {
|
} else if (istrcmp(key, "CESTA_ENEMY") == 0) {
|
||||||
ini_replace_key(sec, "enemy", value);
|
ini_replace_key(sec, "enemy", file_icase_find(value));
|
||||||
} else if (istrcmp(key, "CESTA_VIDEO") == 0) {
|
} else if (istrcmp(key, "CESTA_VIDEO") == 0) {
|
||||||
ini_replace_key(sec, "video", value);
|
ini_replace_key(sec, "video", file_icase_find(value));
|
||||||
} else if (istrcmp(key, "CESTA_DIALOGY") == 0) {
|
} else if (istrcmp(key, "CESTA_DIALOGY") == 0) {
|
||||||
ini_replace_key(sec, "dialogs", value);
|
ini_replace_key(sec, "dialogs", file_icase_find(value));
|
||||||
|
} else if (istrcmp(key, "DEFAULT_MAP") == 0) {
|
||||||
|
ini_replace_key(sec, "default_map", value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -781,8 +781,8 @@ static const void *check_autofade(const void *image, char ceil, int dark)
|
||||||
if (mglob.map_autofadefc==1)
|
if (mglob.map_autofadefc==1)
|
||||||
{
|
{
|
||||||
word *imgdata=xy+3;
|
word *imgdata=xy+3;
|
||||||
int br=back_color>>11;
|
int br=back_color>>10;
|
||||||
int bg=(back_color>>5) & 0x3F;
|
int bg=(back_color>>5) & 0x1F;
|
||||||
int bb=back_color & 0x1F;
|
int bb=back_color & 0x1F;
|
||||||
int y;
|
int y;
|
||||||
|
|
||||||
|
@ -793,16 +793,16 @@ static const void *check_autofade(const void *image, char ceil, int dark)
|
||||||
float factor=(float)y/(xy[1]-1);
|
float factor=(float)y/(xy[1]-1);
|
||||||
int x;
|
int x;
|
||||||
if (!ceil) factor=1.0f-factor;
|
if (!ceil) factor=1.0f-factor;
|
||||||
factor=factor*factor;
|
factor=factor*factor*factor;
|
||||||
for (x=0;x<xy[0];x++)
|
for (x=0;x<xy[0];x++)
|
||||||
{
|
{
|
||||||
int r=*imgdata>>11;
|
int r=*imgdata>>10;
|
||||||
int g=(*imgdata>>5) & 0x3F;
|
int g=(*imgdata>>5) & 0x1F;
|
||||||
int b=*imgdata & 0x1F;
|
int b=*imgdata & 0x1F;
|
||||||
r=(int)(r+factor*(br-r));
|
r=(int)(r+factor*(br-r));
|
||||||
g=(int)(g+factor*(bg-g));
|
g=(int)(g+factor*(bg-g));
|
||||||
b=(int)(b+factor*(bb-b));
|
b=(int)(b+factor*(bb-b));
|
||||||
*imgdata=(r<<11)|(g<<5)|b;
|
*imgdata=(r<<10)|(g<<5)|b;
|
||||||
imgdata++;
|
imgdata++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1371,7 +1371,7 @@ void redraw_scene()
|
||||||
other_draw();
|
other_draw();
|
||||||
if (cur_mode == MD_END_GAME) {
|
if (cur_mode == MD_END_GAME) {
|
||||||
death_screen();
|
death_screen();
|
||||||
}
|
}
|
||||||
ukaz_mysku();
|
ukaz_mysku();
|
||||||
global_anim_counter++;
|
global_anim_counter++;
|
||||||
send_message(E_KOUZLO_ANM);
|
send_message(E_KOUZLO_ANM);
|
||||||
|
|
|
@ -352,7 +352,7 @@ static void mob_sound_event(TMOB *m, int event) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void load_enemies(short *data,int size,int *grptr,TMOB *template,int32_t tsize)
|
void load_enemies(short *data,int size,int *grptr,const TMOB *template,int32_t tsize)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
short cisla[256];
|
short cisla[256];
|
||||||
|
@ -365,7 +365,7 @@ void load_enemies(short *data,int size,int *grptr,TMOB *template,int32_t tsize)
|
||||||
for(i=0;i<size;i++)
|
for(i=0;i<size;i++)
|
||||||
{
|
{
|
||||||
int j,c,cnt;
|
int j,c,cnt;
|
||||||
TMOB *b;
|
const TMOB *b;
|
||||||
|
|
||||||
b=template;
|
b=template;
|
||||||
cnt=tsize/sizeof(TMOB);
|
cnt=tsize/sizeof(TMOB);
|
||||||
|
|
|
@ -645,6 +645,7 @@ const void *hi_8bit_correct(const void *p, int32_t *s);
|
||||||
const void *pcx_8bit_nopal(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 *set_background(const void *p, int32_t *s);
|
||||||
const void *wav_load(const void *p, int32_t *s);
|
const void *wav_load(const void *p, int32_t *s);
|
||||||
|
const void *load_mob_legacy_format_direct(const void *p, int32_t *s);
|
||||||
const void *load_mob_legacy_format(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);
|
const void *load_spells_legacy_format(const void *p, int32_t *s);
|
||||||
void wire_main_functs(void);
|
void wire_main_functs(void);
|
||||||
|
@ -1562,7 +1563,7 @@ char track_mob(int sect,int dir);//trackuje pritomnost potvory v urcitem smeru
|
||||||
void stop_all_mobs(void);
|
void stop_all_mobs(void);
|
||||||
int utok_na_sektor(THUMAN *p,TMOB *m,int chaos,int bonus, int ruka);
|
int utok_na_sektor(THUMAN *p,TMOB *m,int chaos,int bonus, int ruka);
|
||||||
int vyber_potvoru(int sect,int dir,int *chaos); //vybere potvoru ze sektoru a smeru. Vraci take pocet potvor v promenne *chaos
|
int vyber_potvoru(int sect,int dir,int *chaos); //vybere potvoru ze sektoru a smeru. Vraci take pocet potvor v promenne *chaos
|
||||||
void load_enemies(short *data,int size,int *grptr,TMOB *template,int32_t tsize);
|
void load_enemies(short *data,int size,int *grptr,const TMOB *template,int32_t tsize);
|
||||||
char mob_test_na_bitvu(TMOB *p); //nastavi p->vlajky|MOB_INBATTLE pokud potvora muze vstoupit do bitvy;
|
char mob_test_na_bitvu(TMOB *p); //nastavi p->vlajky|MOB_INBATTLE pokud potvora muze vstoupit do bitvy;
|
||||||
void send_mob_to(int m,word *path);
|
void send_mob_to(int m,word *path);
|
||||||
void save_enemy_paths(TMPFILE_WR *f);
|
void save_enemy_paths(TMPFILE_WR *f);
|
||||||
|
|
|
@ -238,7 +238,7 @@ int load_map(const char *filename)
|
||||||
char nmapend=1;
|
char nmapend=1;
|
||||||
int ofsts=START_HANDLE;
|
int ofsts=START_HANDLE;
|
||||||
char snd_load=0;
|
char snd_load=0;
|
||||||
void *mob_template;
|
const void *mob_template;
|
||||||
int32_t mob_size;
|
int32_t mob_size;
|
||||||
int failed = 0;
|
int failed = 0;
|
||||||
|
|
||||||
|
@ -344,7 +344,7 @@ int load_map(const char *filename)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
load_enemies(temp,size,&ofsts,mob_template,mob_size);
|
load_enemies(temp,size,&ofsts,mob_template,mob_size);
|
||||||
free(mob_template);
|
ablock_free(mob_template);
|
||||||
SEND_LOG("(GAME) Loading enemies from map template...");
|
SEND_LOG("(GAME) Loading enemies from map template...");
|
||||||
}
|
}
|
||||||
free(temp);
|
free(temp);
|
||||||
|
@ -358,7 +358,7 @@ int load_map(const char *filename)
|
||||||
vyk_max=size/sizeof(TVYKLENEK);
|
vyk_max=size/sizeof(TVYKLENEK);
|
||||||
break;
|
break;
|
||||||
case A_MOBS:
|
case A_MOBS:
|
||||||
mob_template=temp;
|
mob_template=load_mob_legacy_format_direct(temp, &size);
|
||||||
mob_size=size;
|
mob_size=size;
|
||||||
break;
|
break;
|
||||||
case A_MOBSND:
|
case A_MOBSND:
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
#include "skeldal.h"
|
#include "skeldal.h"
|
||||||
#include "lang.h"
|
#include "lang.h"
|
||||||
|
|
||||||
|
#include <ctype.h>
|
||||||
#define CONFIG_NAME SKELDALINI
|
#define CONFIG_NAME SKELDALINI
|
||||||
|
|
||||||
#define INI_TEXT 1
|
#define INI_TEXT 1
|
||||||
|
@ -374,14 +375,13 @@ const void *hi_8bit_correct(const void *p,int32_t *s)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const void *load_mob_legacy_format(const void *p, int32_t *s) {
|
const void *load_mob_legacy_format_direct(const void *p, int32_t *s) {
|
||||||
|
const char *c = p;
|
||||||
const int sz = 376;
|
const int sz = 376;
|
||||||
int count = *s / sz;;
|
int count = *s / sz;;
|
||||||
const char *c = p;
|
|
||||||
TMOB *out = getmem(count * sizeof(TMOB));
|
TMOB *out = getmem(count * sizeof(TMOB));
|
||||||
|
|
||||||
memset(out, 0 , sizeof(TMOB)*count);
|
memset(out, 0 , sizeof(TMOB)*count);
|
||||||
c+=8;
|
|
||||||
for (int i = 0; i < count ; i++) {
|
for (int i = 0; i < count ; i++) {
|
||||||
TMOB *m = out+i;
|
TMOB *m = out+i;
|
||||||
char *d = (char *)m;
|
char *d = (char *)m;
|
||||||
|
@ -404,6 +404,12 @@ const void *load_mob_legacy_format(const void *p, int32_t *s) {
|
||||||
*s = count * sizeof(TMOB);
|
*s = count * sizeof(TMOB);
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
const void *load_mob_legacy_format(const void *p, int32_t *s) {
|
||||||
|
const char *c = p;
|
||||||
|
c+=8;
|
||||||
|
*s-=8;
|
||||||
|
return load_mob_legacy_format_direct(c, s);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
const void *set_background(const void *p, int32_t *s)
|
const void *set_background(const void *p, int32_t *s)
|
||||||
|
@ -1662,6 +1668,10 @@ const char *configure_pathtable(const INI_CONFIG *cfg) {
|
||||||
gpathtable[SR_SAVES] = ini_get_string(paths, "savegame", get_default_savegame_directory());
|
gpathtable[SR_SAVES] = ini_get_string(paths, "savegame", get_default_savegame_directory());
|
||||||
gpathtable[SR_DATA]= ini_get_string(paths, "data", "./");
|
gpathtable[SR_DATA]= ini_get_string(paths, "data", "./");
|
||||||
gpathtable[SR_LANG]= ini_get_string(paths, "lang", "./lang");
|
gpathtable[SR_LANG]= ini_get_string(paths, "lang", "./lang");
|
||||||
|
const char *defmap = ini_get_string(paths, "default_map", NULL);
|
||||||
|
if (defmap) {
|
||||||
|
strcopy_n(default_map, defmap, sizeof(default_map));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
return groot;
|
return groot;
|
||||||
|
@ -1726,11 +1736,6 @@ int skeldal_entry_point(const SKELDAL_CONFIG *start_cfg)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (start_cfg->adventure_path) {
|
|
||||||
TSTR_LIST adv_config=read_config(start_cfg->adventure_path);
|
|
||||||
adv_patch_config(cfg, adv_config);
|
|
||||||
release_list(adv_config);
|
|
||||||
}
|
|
||||||
|
|
||||||
const char *groot = configure_pathtable(cfg);
|
const char *groot = configure_pathtable(cfg);
|
||||||
if (!change_current_directory(groot)) {
|
if (!change_current_directory(groot)) {
|
||||||
|
@ -1738,7 +1743,20 @@ int skeldal_entry_point(const SKELDAL_CONFIG *start_cfg)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (start_cfg->lang_path) {
|
if (start_cfg->adventure_path) {
|
||||||
|
TSTR_LIST adv_config=read_config(start_cfg->adventure_path);
|
||||||
|
if (!adv_config) {
|
||||||
|
start_cfg->show_error(concat2("Failed to open adventure configuration: ", start_cfg->adventure_path));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
adv_patch_config(cfg, adv_config);
|
||||||
|
release_list(adv_config);
|
||||||
|
configure_pathtable(cfg);
|
||||||
|
char *sname = local_strdup(start_cfg->adventure_path);
|
||||||
|
for (char *c = sname; *c; ++c) if (!isalnum(*c)) *c = '_';
|
||||||
|
const char *p = build_pathname(2, gpathtable[SR_SAVES], sname);
|
||||||
|
gpathtable[SR_SAVES] = local_strdup(p);
|
||||||
|
} else if (start_cfg->lang_path) {
|
||||||
lang_set_folder(build_pathname(2, gpathtable[SR_LANG], start_cfg->lang_path));
|
lang_set_folder(build_pathname(2, gpathtable[SR_LANG], start_cfg->lang_path));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue