This commit is contained in:
twinaphex 2021-10-01 22:05:49 +02:00
parent a54f410b44
commit 2f3d1ffdbb
9 changed files with 83 additions and 131 deletions

View File

@ -20,8 +20,8 @@
typedef void *data_file_t;
extern void data_setpath(char *);
extern void data_closepath();
extern int data_setpath(char *);
extern void data_closepath(void);
extern data_file_t *data_file_open(char *);
extern int data_file_seek(data_file_t *file, long offset, int origin);

View File

@ -61,7 +61,6 @@ typedef signed int S32; /* 32 bits signed */
*/
extern void sys_init(int, char **);
extern void sys_shutdown(void);
extern void sys_panic(char *, ...);
extern U32 sys_gettime(void);
/*

View File

@ -85,33 +85,21 @@ static void parse_cmdline(const char *argv)
int pre_main(const char *argv)
{
int i;
bool Only1Arg;
parse_cmdline(argv);
Only1Arg = (strcmp(ARGUV[0],"skelsdl") == 0) ? 1: 0;
for (i = 0; i<64; i++)
xargv_cmd[i] = NULL;
if(Only1Arg)
{
Add_Option("skelsdl");
Add_Option(RPATH/*ARGUV[0]*/);
}
else
{ // Pass all cmdline args
for(i = 0; i < ARGUC; i++)
Add_Option(ARGUV[i]);
}
/* Pass all cmdline args */
for(i = 0; i < ARGUC; i++)
Add_Option(ARGUV[i]);
for (i = 0; i < PARAMCOUNT; i++)
{
xargv_cmd[i] = (char*)(XARGV[i]);
printf("%2d %s\n",i,XARGV[i]);
}
skel_main(PARAMCOUNT,( char **)xargv_cmd);
if (skel_main(PARAMCOUNT,( char **)xargv_cmd) == -1)
return -1;
xargv_cmd[PARAMCOUNT - 2] = NULL;

View File

@ -22,19 +22,25 @@ SDL_Surface *sdlscrn;
void SDL_Uninit(void)
{
if(sdlscrn->format->palette->colors)
free(sdlscrn->format->palette->colors);
if (sdlscrn)
{
if(sdlscrn->format->palette)
free(sdlscrn->format->palette);
if(sdlscrn->format)
free(sdlscrn->format);
if(sdlscrn->format)
{
if(sdlscrn->format->palette)
{
if(sdlscrn->format->palette->colors)
free(sdlscrn->format->palette->colors);
free(sdlscrn->format->palette);
}
free(sdlscrn->format);
}
if(sdlscrn->pixels)
sdlscrn->pixels=NULL;
if(sdlscrn->pixels)
sdlscrn->pixels=NULL;
if(sdlscrn)
free(sdlscrn);
}
}
const char *retro_save_directory;
@ -68,15 +74,10 @@ void retro_set_environment(retro_environment_t cb)
static void update_variables(void)
{
/* TODO/FIXME - add core options? */
}
static void retro_wrap_emulator(void)
{
}
void retro_reset(void)
{
}
void retro_reset(void) { }
void StartTicks(void);
@ -93,22 +94,25 @@ void retro_init(void)
StartTicks();
// if defined, use the system directory
if (environ_cb(RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY, &system_dir) && system_dir)
/* if defined, use the system directory */
if (environ_cb(RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY, &system_dir)
&& system_dir)
retro_system_directory=system_dir;
// if defined, use the system directory
if (environ_cb(RETRO_ENVIRONMENT_GET_CONTENT_DIRECTORY, &content_dir) && content_dir)
/* if defined, use the system directory */
if (environ_cb(RETRO_ENVIRONMENT_GET_CONTENT_DIRECTORY, &content_dir)
&& content_dir)
retro_content_directory=content_dir;
// If save directory is defined use it, otherwise use system directory
if (environ_cb(RETRO_ENVIRONMENT_GET_SAVE_DIRECTORY, &save_dir) && save_dir)
/* If save directory is defined use it, otherwise use system directory */
if (environ_cb(RETRO_ENVIRONMENT_GET_SAVE_DIRECTORY, &save_dir)
&& save_dir)
retro_save_directory = *save_dir ? save_dir : retro_system_directory;
else
// make retro_save_directory the same in case RETRO_ENVIRONMENT_GET_SAVE_DIRECTORY is not implemented by the frontend
retro_save_directory=retro_system_directory;
if(retro_system_directory==NULL)
if (!retro_system_directory)
sprintf(RETRO_DIR, "%s\0",".");
else
sprintf(RETRO_DIR, "%s\0", retro_system_directory);
@ -137,11 +141,7 @@ unsigned retro_api_version(void)
return RETRO_API_VERSION;
}
void retro_set_controller_port_device(unsigned port, unsigned device)
{
(void)port;
(void)device;
}
void retro_set_controller_port_device(unsigned port, unsigned device) { }
void retro_get_system_info(struct retro_system_info *info)
{
@ -155,7 +155,8 @@ void retro_get_system_info(struct retro_system_info *info)
void retro_get_system_av_info(struct retro_system_av_info *info)
{
struct retro_game_geometry geom = { retrow, retroh, retrow, retrow,4.0 / 3.0 };
struct retro_game_geometry geom = { retrow, retroh, retrow, retrow,
4.0 / 3.0 };
struct retro_system_timing timing = { 25.0, 22050.0 };
info->geometry = geom;
@ -184,7 +185,8 @@ void retro_run(void)
{
bool updated = false;
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE_UPDATE, &updated) && updated)
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE_UPDATE, &updated)
&& updated)
update_variables();
Retro_PollEvent();
@ -212,8 +214,9 @@ bool retro_load_game(const struct retro_game_info *info)
sprintf(RPATH,"\"xrick\" \"-data\" \"%s\"\0", info->path);
else
sprintf(RPATH,"\"xrick\" \"-data\" \"%s/data.zip\"\0", retro_system_directory);
pre_main(RPATH);
game_run();
if (pre_main(RPATH) == -1)
return false;
game_run();
return true;
}
@ -222,9 +225,9 @@ void freedata(void);
void retro_unload_game(void)
{
freedata(); /* free cached data */
data_closepath();
sys_shutdown();
freedata(); /* free cached data */
data_closepath();
sys_shutdown();
}
unsigned retro_get_region(void)
@ -257,13 +260,11 @@ bool retro_unserialize(const void *data_, size_t size)
void *retro_get_memory_data(unsigned id)
{
(void)id;
return NULL;
}
size_t retro_get_memory_size(unsigned id)
{
(void)id;
return 0;
}

View File

@ -84,11 +84,11 @@ static char *str_slash(char *s)
/*
*
*/
void data_setpath(char *name)
int data_setpath(char *name)
{
unzFile zip;
unzFile zip;
if (str_zipext(name))
if (str_zipext(name))
{
/* path has .zip extension */
char *n = str_slash(str_dup(name));
@ -96,13 +96,11 @@ void data_setpath(char *name)
if (!zip)
{
free(n);
sys_panic("(data) can not open data");
}
else
{
path.zip = zip;
path.name = n;
return -1;
}
path.zip = zip;
path.name = n;
}
else
{
@ -111,6 +109,8 @@ void data_setpath(char *name)
path.zip = NULL;
path.name = str_dup(name);
}
return 0;
}
/*

View File

@ -152,8 +152,6 @@ map_chain(void)
* found, then panic
*/
for (c = map_submaps[game_submap].connect; ; c++) {
if (map_connect[c].dir == 0xff)
sys_panic("(map_chain) can not find connector\n");
if (map_connect[c].dir != game_dir) continue;
t = (ent_ents[1].y >> 3) + map_frow - map_connect[c].rowout;
if (t < 3) break;

View File

@ -11,32 +11,12 @@
* You must not remove this notice, or any other, from this software.
*/
#include <stdarg.h> /* args for sys_panic */
#include <stdio.h> /* printf */
#include <stdlib.h>
#include <signal.h>
#include "system.h"
/*
* Panic
*/
void
sys_panic(char *err, ...)
{
va_list argptr;
char s[1024];
/* prepare message */
va_start(argptr, err);
vsprintf(s, err, argptr);
va_end(argptr);
/* print message and die */
printf("%s\npanic!\n", s);
exit(1);
}
/* forward declaration */
extern long GetTicks(void);

View File

@ -31,16 +31,14 @@
* x,y: coordinates to test.
* ret: TRUE/(x,y) is within e's space, FALSE/not.
*/
U8
u_fboxtest(U8 e, S16 x, S16 y)
U8 u_fboxtest(U8 e, S16 x, S16 y)
{
if (ent_ents[e].x >= x ||
ent_ents[e].x + ent_ents[e].w < x ||
ent_ents[e].y >= y ||
ent_ents[e].y + ent_ents[e].h < y)
return FALSE;
else
return TRUE;
return TRUE;
}
@ -55,24 +53,22 @@ u_fboxtest(U8 e, S16 x, S16 y)
* e2: entity to test (corresponds to SI in asm code).
* ret: TRUE/intersect, FALSE/not.
*/
U8
u_boxtest(U8 e1, U8 e2)
U8 u_boxtest(U8 e1, U8 e2)
{
/* rick is special (may be crawling) */
if (e1 == E_RICK_NO)
return e_rick_boxtest(e2);
/* rick is special (may be crawling) */
if (e1 == E_RICK_NO)
return e_rick_boxtest(e2);
/*
* entity 1: x+0x05 to x+0x011, y to y+0x14
* entity 2: x to x+ .w, y to y+ .h
*/
if (ent_ents[e1].x + 0x11 < ent_ents[e2].x ||
ent_ents[e1].x + 0x05 > ent_ents[e2].x + ent_ents[e2].w ||
ent_ents[e1].y + 0x14 < ent_ents[e2].y ||
ent_ents[e1].y > ent_ents[e2].y + ent_ents[e2].h - 1)
return FALSE;
else
return TRUE;
/*
* entity 1: x+0x05 to x+0x011, y to y+0x14
* entity 2: x to x+ .w, y to y+ .h
*/
if (ent_ents[e1].x + 0x11 < ent_ents[e2].x ||
ent_ents[e1].x + 0x05 > ent_ents[e2].x + ent_ents[e2].w ||
ent_ents[e1].y + 0x14 < ent_ents[e2].y ||
ent_ents[e1].y > ent_ents[e2].y + ent_ents[e2].h - 1)
return FALSE;
return TRUE;
}
@ -86,8 +82,7 @@ u_boxtest(U8 e1, U8 e2)
* rc0: anything CHANGED to the environment flag for crawling (6DBA)
* rc1: anything CHANGED to the environment flag (6DAD)
*/
void
u_envtest(S16 x, S16 y, U8 crawl, U8 *rc0, U8 *rc1)
void u_envtest(S16 x, S16 y, U8 crawl, U8 *rc0, U8 *rc1)
{
U8 i, xx;
@ -188,21 +183,17 @@ u_envtest(S16 x, S16 y, U8 crawl, U8 *rc0, U8 *rc1)
* ASM 126F
* return: FALSE if not in box, TRUE if in box.
*/
U8
u_trigbox(U8 e, S16 x, S16 y)
U8 u_trigbox(U8 e, S16 x, S16 y)
{
U16 xmax, ymax;
U16 xmax = ent_ents[e].trig_x + (ent_entdata[ent_ents[e].n & 0x7F].trig_w << 3);
U16 ymax = ent_ents[e].trig_y + (ent_entdata[ent_ents[e].n & 0x7F].trig_h << 3);
xmax = ent_ents[e].trig_x + (ent_entdata[ent_ents[e].n & 0x7F].trig_w << 3);
ymax = ent_ents[e].trig_y + (ent_entdata[ent_ents[e].n & 0x7F].trig_h << 3);
if (xmax > 0xFF) xmax = 0xFF;
if (xmax > 0xFF) xmax = 0xFF;
if (x <= ent_ents[e].trig_x || x > xmax ||
y <= ent_ents[e].trig_y || y > ymax)
return FALSE;
else
return TRUE;
if (x <= ent_ents[e].trig_x || x > xmax ||
y <= ent_ents[e].trig_y || y > ymax)
return FALSE;
return TRUE;
}

View File

@ -14,18 +14,13 @@
#include "system.h"
#include "game.h"
/*
* main
*/
int
skel_main(int argc, char *argv[])
/* main */
int skel_main(int argc, char *argv[])
{
sys_init(argc, argv);
if (sysarg_args_data)
data_setpath(sysarg_args_data);
else
data_setpath("data.zip");
return 0;
return data_setpath(sysarg_args_data);
return data_setpath("data.zip");
}
/* eof */