diff --git a/.gitignore b/.gitignore index c1190ff56..d5f4a9b05 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,6 @@ tools/bin/.wget-hsts tools/win-sdk/* tools/psp-sdk/* tools/devkitpro/* +# switch port +.idea +cmake-build* \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 000000000..22f18b295 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,134 @@ +cmake_minimum_required(VERSION 3.1) +#set(CMAKE_VERBOSE_MAKEFILE ON) + +project(OpenBOR) +set(OPENBOR_VERSION "3.0.7162") + +##################### +# OPTIONS +##################### +option(BUILD_GFX "Build with GFX support" ON) +option(BUILD_VORBIS "Build with BUILD_VORBIS support" ON) + +############## +# COMMON +############## +include(FindPkgConfig) +pkg_search_module(SDL2 REQUIRED sdl2) +pkg_search_module(VPX REQUIRED vpx) +pkg_search_module(PNG REQUIRED libpng) +pkg_search_module(ZLIB REQUIRED zlib) + +set(BOR_INC + engine + engine/sdl + engine/source + engine/source/adpcmlib + engine/source/gamelib + engine/source/openborscript + engine/source/pnglib + engine/source/preprocessorlib + engine/source/ramlib + engine/source/randlib + engine/source/scriptlib + engine/source/webmlib + engine/source/webmlib/halloc + engine/source/webmlib/nestegg + ${SDL2_INCLUDE_DIRS} + ${VPX_INCLUDE_DIRS} + ${PNG_INCLUDE_DIRS} + ${ZLIB_INCLUDE_DIRS} + ) + +file(GLOB BOR_SRC + engine/*.c + engine/sdl/*.c + engine/source/*.c + engine/source/adpcmlib/*.c + engine/source/gamelib/*.c + engine/source/openborscript/*.c + engine/source/pnglib/*.c + engine/source/preprocessorlib/*.c + engine/source/ramlib/*.c + engine/source/randlib/*.c + engine/source/scriptlib/*.c + engine/source/webmlib/*.c + engine/source/webmlib/halloc/*.c + engine/source/webmlib/nestegg/*.c + ) + +set(BOR_CFLAGS -g -Wall -fsigned-char -fomit-frame-pointer -DSDL -DSDL2 -DWEBM -D__CMAKE__) +set(BOR_LDFLAGS ${SDL2_LIBRARIES} ${VPX_LIBRARIES} ${PNG_LIBRARIES} ${ZLIB_LIBRARIES} m) + +############## +# VERSION.SH +############## +ADD_CUSTOM_COMMAND( + OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/engine/version.h + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/engine + COMMAND bash version.sh) +list(APPEND BOR_SRC ${CMAKE_CURRENT_SOURCE_DIR}/engine/version.h) + +##################### +# OPTIONS +##################### +if (BUILD_GFX) + list(APPEND BOR_INC engine/source/gfxlib) + file(GLOB GFX_SRC engine/source/gfxlib/*.c) + list(APPEND BOR_SRC ${GFX_SRC}) +endif () +if (BUILD_VORBIS) + pkg_search_module(VORBIS REQUIRED vorbis) + pkg_search_module(VORBISFILE REQUIRED vorbisfile) + pkg_search_module(OGG REQUIRED ogg) + list(APPEND BOR_INC ${VORBIS_INCLUDE_DIRS} ${VORBISFILE_INCLUDE_DIRS} ${OGG_INCLUDE_DIRS}) + list(APPEND BOR_CFLAGS -DOV_EXCLUDE_STATIC_CALLBACKS) + list(APPEND BOR_LDFLAGS ${VORBIS_LIBRARIES} ${VORBISFILE_LIBRARIES} ${OGG_LIBRARIES} m) +endif () + +##################### +# PLATORM SPECIFIC +##################### +if (NINTENDO_SWITCH) + if (CMAKE_BUILD_TYPE STREQUAL "Debug") + list(APPEND BOR_CFLAGS -D__NXLINK__) + endif () + list(APPEND BOR_CFLAGS -DOPENGL -DLOADGL) + list(APPEND BOR_LDFLAGS stdc++) +elseif (PS4) + list(APPEND BOR_CFLAGS -D__CLANG_MAX_ALIGN_T_DEFINED) + add_self(${PROJECT_NAME}) + add_pkg(${PROJECT_NAME} ${CMAKE_SOURCE_DIR}/engine/resources/ps4 "OBOR00001" "OpenBor @ cpasjuste" "03.71") +else () + list(APPEND BOR_CFLAGS -D__LINUX__ -DLINUX -DOPENGL -DLOADGL) +endif () + +##################### +# OpenBOR executable +##################### +add_executable(${CMAKE_PROJECT_NAME} ${BOR_SRC}) +target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE ${BOR_INC}) +target_compile_options(${CMAKE_PROJECT_NAME} PRIVATE ${BOR_CFLAGS}) +target_link_libraries(${CMAKE_PROJECT_NAME} ${BOR_LDFLAGS}) + +##################### +# SWITCH target +##################### +if (NINTENDO_SWITCH) + nx_generate_nacp(${CMAKE_PROJECT_NAME}.nacp + NAME "${CMAKE_PROJECT_NAME}" + AUTHOR "cpasjuste" + VERSION "${OPENBOR_VERSION}" + ) + nx_create_nro(${CMAKE_PROJECT_NAME} + NACP ${CMAKE_PROJECT_NAME}.nacp + ICON "${CMAKE_SOURCE_DIR}/engine/resources/switch_icon.jpg" + ) + add_custom_target(${PROJECT_NAME}_switch_release + DEPENDS ${PROJECT_NAME}.nro + COMMAND ${CMAKE_COMMAND} -E remove -f ${CMAKE_BINARY_DIR}/${PROJECT_NAME}-${OPENBOR_VERSION}_switch.zip + COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/release/${PROJECT_NAME} + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.nro ${CMAKE_BINARY_DIR}/release/${PROJECT_NAME}/ + COMMAND cd ${CMAKE_BINARY_DIR}/release && zip -r ../${PROJECT_NAME}-${OPENBOR_VERSION}_switch.zip ${PROJECT_NAME} + ) +endif () diff --git a/engine/openbor.c b/engine/openbor.c index 74ad4418a..84a54fdea 100644 --- a/engine/openbor.c +++ b/engine/openbor.c @@ -2455,6 +2455,10 @@ void clearsettings() savedata.hwfilter = 1; #ifdef ANDROID savedata.hwscale = 0.0; + #elif __SWITCH__ + savedata.hwscale = 2.0f; + #elif __PS4__ + savedata.hwscale = 2.0f; #else savedata.hwscale = 1.0; #endif @@ -37830,6 +37834,12 @@ void init_videomodes(int log) #elif VITA tryfile("data/videovita.txt"); tryfile("data/video169.txt"); +#elif __SWITCH__ + tryfile("data/videoswitch.txt"); + tryfile("data/video169.txt"); +#elif __PS4__ + tryfile("data/videops4.txt"); + tryfile("data/video169.txt"); #endif #undef tryfile @@ -39489,7 +39499,9 @@ void menu_options_video() #if SDL #if !defined(GP2X) && !defined(OPENDINGUX) +#if !defined(__SWITCH__) && !defined(__PS4__) video_fullscreen_flip(); +#endif break; case 4: savedata.usegl = !savedata.usegl; diff --git a/engine/openbor.h b/engine/openbor.h index a19fafbe5..06a5d37c0 100644 --- a/engine/openbor.h +++ b/engine/openbor.h @@ -358,7 +358,8 @@ typedef enum PORTING_WINDOWS, PORTING_WIZ, PORTING_XBOX, - PORTING_VITA + PORTING_VITA, + PORTING_PS4 } e_porting; // Caskey, Damon V. diff --git a/engine/openborscript.c b/engine/openborscript.c index 9b4be67f9..c437d84f4 100644 --- a/engine/openborscript.c +++ b/engine/openborscript.c @@ -45,81 +45,81 @@ static s_drawmethod drawmethod; int max_indexed_vars = 0; int max_entity_vars = 0; int max_script_vars = 0; -int no_nested_script = 0; - -extern int ent_count; -extern int ent_max; -extern int gameOver; -extern int selectScreen; -extern int titleScreen; -extern int hallOfFame; -extern int showComplete; -extern char *currentScene; -extern int enginecreditsScreen; -extern int menuScreen; -extern int optionsMenu; -extern int controloptionsMenu; -extern int videooptionsMenu; -extern int soundoptionsMenu; -extern int systemoptionsMenu; -extern int startgameMenu; -extern int newgameMenu; -extern int loadgameMenu; -extern int num_difficulties; -extern u32 _time; -extern int goto_mainmenu_flag; -extern int _pause; -extern int timeleft; -extern int gfx_x_offset; -extern int gfx_y_offset; -extern int gfx_y_offset_adj; -extern s_lasthit lasthit; -extern int current_set; -extern int current_level; -extern int current_stage; -extern int timevar; -extern float bgtravelled; -extern float vbgtravelled; -extern int traveltime; -extern int texttime; -extern int timetoshow; -extern int is_total_timeover; -extern int showgo; -extern float advancex; -extern float advancey; -extern float scrolldx; -extern float scrolldy; -extern float scrollminz; -extern float scrollmaxz; -extern float blockade; -extern float scrollminx; -extern float scrollmaxx; -extern s_videomodes videomodes; -extern int panel_height; -extern char branch_name[MAX_NAME_LEN + 1]; -extern s_set_entry *levelsets; -extern unsigned int models_loaded; -//extern unsigned int models_cached; -extern int viewportx; -extern int viewporty; -extern int viewportw; -extern int viewporth; -extern int nosave; -extern int nopause; -extern int nofadeout; -extern int noscreenshot; -extern int nojoin; -extern s_screen *vscreen; -extern entity *smartbomber; -extern entity *textbox; -extern s_screen *background; -extern int skiptoset; -extern s_slow_motion slowmotion; -extern int shadowcolor; -extern int shadowalpha; -extern int shadowopacity; -extern s_axis_plane_vertical_int light; -extern int max_attack_types; +int no_nested_script = 0; + +extern int ent_count; +extern int ent_max; +extern int gameOver; +extern int selectScreen; +extern int titleScreen; +extern int hallOfFame; +extern int showComplete; +extern char *currentScene; +extern int enginecreditsScreen; +extern int menuScreen; +extern int optionsMenu; +extern int controloptionsMenu; +extern int videooptionsMenu; +extern int soundoptionsMenu; +extern int systemoptionsMenu; +extern int startgameMenu; +extern int newgameMenu; +extern int loadgameMenu; +extern int num_difficulties; +extern u32 _time; +extern int goto_mainmenu_flag; +extern int _pause; +extern int timeleft; +extern int gfx_x_offset; +extern int gfx_y_offset; +extern int gfx_y_offset_adj; +extern s_lasthit lasthit; +extern int current_set; +extern int current_level; +extern int current_stage; +extern int timevar; +extern float bgtravelled; +extern float vbgtravelled; +extern int traveltime; +extern int texttime; +extern int timetoshow; +extern int is_total_timeover; +extern int showgo; +extern float advancex; +extern float advancey; +extern float scrolldx; +extern float scrolldy; +extern float scrollminz; +extern float scrollmaxz; +extern float blockade; +extern float scrollminx; +extern float scrollmaxx; +extern s_videomodes videomodes; +extern int panel_height; +extern char branch_name[MAX_NAME_LEN + 1]; +extern s_set_entry *levelsets; +extern unsigned int models_loaded; +//extern unsigned int models_cached; +extern int viewportx; +extern int viewporty; +extern int viewportw; +extern int viewporth; +extern int nosave; +extern int nopause; +extern int nofadeout; +extern int noscreenshot; +extern int nojoin; +extern s_screen *vscreen; +extern entity *smartbomber; +extern entity *textbox; +extern s_screen *background; +extern int skiptoset; +extern s_slow_motion slowmotion; +extern int shadowcolor; +extern int shadowalpha; +extern int shadowopacity; +extern s_axis_plane_vertical_int light; +extern int max_attack_types; extern int max_animations; static void clear_named_var_list(List *list, int level) @@ -684,12 +684,12 @@ static s_collision_attack attack; HRESULT system_isempty(ScriptVariant **varlist , ScriptVariant **pretvar, int paramCount) { if(paramCount != 1) - { + { *pretvar = NULL; return E_FAIL; } - ScriptVariant_ChangeType(*pretvar, VT_INTEGER); + ScriptVariant_ChangeType(*pretvar, VT_INTEGER); (*pretvar)->lVal = (LONG)( (varlist[0])->vt == VT_EMPTY ); @@ -923,7 +923,7 @@ HRESULT system_typeof(ScriptVariant **varlist , ScriptVariant **pretvar, int par static const char *svlist[] = { "background", - "blockade", + "blockade", "bossescount", "branchname", "cheats", @@ -1000,7 +1000,7 @@ static const char *svlist[] = "nosave", "noscreenshot", "noshowcomplete", - "numbasemaps", + "numbasemaps", "numbosses", "numholes", "numlayers", @@ -2031,7 +2031,7 @@ enum entityproperty_enum _ep_attackthrottletime, _ep_autokill, _ep_base, - _ep_bbox, + _ep_bbox, _ep_bind, _ep_blink, _ep_blockback, @@ -2041,7 +2041,7 @@ enum entityproperty_enum _ep_bounce, _ep_bound, _ep_candamage, - _ep_chargerate, + _ep_chargerate, _ep_collidedentity, _ep_colourmap, _ep_colourtable, @@ -2055,14 +2055,14 @@ enum entityproperty_enum _ep_defense, _ep_destx, _ep_destz, - _ep_detect, + _ep_detect, _ep_die_on_landing, _ep_direction, _ep_dropframe, - _ep_edelay, - _ep_edge, + _ep_edelay, + _ep_edge, _ep_edgerange, - _ep_energycost, + _ep_energycost, _ep_entitypushing, _ep_escapecount, _ep_escapehits, @@ -2110,8 +2110,8 @@ enum entityproperty_enum _ep_maxhealth, _ep_maxjugglepoints, _ep_maxmp, - _ep_model, - _ep_movex, + _ep_model, + _ep_movex, _ep_movez, _ep_mp, _ep_mpdroprate, @@ -2143,10 +2143,10 @@ enum entityproperty_enum _ep_path, _ep_pathfindstep, _ep_playerindex, - _ep_position, + _ep_position, _ep_prevanimationid, _ep_projectile, - _ep_projectilehit, + _ep_projectilehit, _ep_pushingfactor, _ep_range, _ep_releasetime, @@ -2234,7 +2234,7 @@ static const char *eplist[] = "attackthrottletime", "autokill", "base", - "bbox", + "bbox", "binding", "blink", "blockback", @@ -2244,7 +2244,7 @@ static const char *eplist[] = "bounce", "bound", "candamage", - "chargerate", + "chargerate", "collidedentity", "colourmap", "colourtable", @@ -2258,14 +2258,14 @@ static const char *eplist[] = "defense", "destx", "destz", - "detect", + "detect", "die_on_landing", "direction", "dropframe", - "edelay", - "edge", + "edelay", + "edge", "edgerange", - "energycost", + "energycost", "entitypushing", "escapecount", "escapehits", @@ -2313,8 +2313,8 @@ static const char *eplist[] = "maxhealth", "maxjugglepoints", "maxmp", - "model", - "movex", + "model", + "movex", "movez", "mp", "mpdroprate", @@ -2346,10 +2346,10 @@ static const char *eplist[] = "path", "pathfindstep", "playerindex", - "position", + "position", "prevanimationid", "projectile", - "projectilehit", + "projectilehit", "pushingfactor", "range", "releasetime", @@ -2418,7 +2418,7 @@ enum aiflag_enum _ep_aiflag_blocking, _ep_aiflag_charging, _ep_aiflag_dead, - _ep_aiflag_drop, + _ep_aiflag_drop, _ep_aiflag_ducking, _ep_aiflag_falling, _ep_aiflag_frozen, @@ -2430,7 +2430,7 @@ enum aiflag_enum _ep_aiflag_invincible, _ep_aiflag_jumpid, _ep_aiflag_jumping, - _ep_aiflag_projectile, + _ep_aiflag_projectile, _ep_aiflag_rising, _ep_aiflag_running, _ep_aiflag_toexplode, @@ -2450,7 +2450,7 @@ static const char *eplist_aiflag[] = "blocking", "charging", "dead", - "drop", + "drop", "ducking", "falling", "frozen", @@ -2462,22 +2462,22 @@ static const char *eplist_aiflag[] = "invincible", "jumpid", "jumping", - "projectile", + "projectile", "rising", "running", "toexplode", "turning", "walking", "walkmode", -}; - +}; + enum edgerange_enum { _ep_edgerange_x, _ep_edgerange_z, _ep_edgerange_the_end, -}; - +}; + static const char *eplist_edgerange[] = { "x", @@ -2683,8 +2683,8 @@ enum _prop_summonframe_enum _PROP_SUMMONFRAME_Y, _PROP_SUMMONFRAME_Z, _PROP_SUMMONFRAME_THE_END -}; - +}; + enum _prop_starvelocity_enum { _PROP_STARVELOCITY_1, @@ -3102,7 +3102,7 @@ int mapstrings_entityproperty(ScriptVariant **varlist, int paramCount) MAPSTRINGS(varlist[2], eplist_aiflag, _ep_aiflag_the_end, _is_not_a_known_subproperty_of_, eps); break; - } + } // map subproperties of edgerange property case _ep_edgerange: { @@ -3345,7 +3345,7 @@ HRESULT openbor_getentityproperty(ScriptVariant **varlist , ScriptVariant **pret break; case _ep_aiflag_blocking: (*pretvar)->lVal = (LONG)ent->blocking; - break; + break; case _ep_aiflag_ducking: (*pretvar)->lVal = (LONG)ent->ducking; break; @@ -3357,7 +3357,7 @@ HRESULT openbor_getentityproperty(ScriptVariant **varlist , ScriptVariant **pret break; case _ep_aiflag_inpain: (*pretvar)->lVal = (LONG)ent->inpain; - break; + break; case _ep_aiflag_rising: (*pretvar)->lVal = (LONG)ent->rising; break; @@ -3476,7 +3476,7 @@ HRESULT openbor_getentityproperty(ScriptVariant **varlist , ScriptVariant **pret ScriptVariant_ChangeType(*pretvar, VT_INTEGER); (*pretvar)->lVal = (LONG)ent->animnum; break; - } + } case _ep_prevanimationid: { ScriptVariant_ChangeType(*pretvar, VT_INTEGER); @@ -3605,7 +3605,7 @@ HRESULT openbor_getentityproperty(ScriptVariant **varlist , ScriptVariant **pret ScriptVariant_ChangeType(*pretvar, VT_PTR); (*pretvar)->ptrVal = (VOID *)ent->binding.ent; break; - } + } case _ep_bind: { ScriptVariant_ChangeType(*pretvar, VT_PTR); @@ -3641,12 +3641,12 @@ HRESULT openbor_getentityproperty(ScriptVariant **varlist , ScriptVariant **pret ScriptVariant_ChangeType(*pretvar, VT_INTEGER); (*pretvar)->lVal = (LONG)ent->combotime; break; - } - case _ep_collidedentity: - { - ScriptVariant_ChangeType(*pretvar, VT_PTR); - (*pretvar)->ptrVal = (VOID *)&ent->collided_entity; - break; + } + case _ep_collidedentity: + { + ScriptVariant_ChangeType(*pretvar, VT_PTR); + (*pretvar)->ptrVal = (VOID *)&ent->collided_entity; + break; } case _ep_hostile: { @@ -3680,9 +3680,9 @@ HRESULT openbor_getentityproperty(ScriptVariant **varlist , ScriptVariant **pret } case _ep_damage_on_landing: { - ScriptVariant_ChangeType(*pretvar, VT_INTEGER); - (*pretvar)->lVal = (LONG)ent->damage_on_landing.attack_force; - + ScriptVariant_ChangeType(*pretvar, VT_INTEGER); + (*pretvar)->lVal = (LONG)ent->damage_on_landing.attack_force; + break; } @@ -3783,7 +3783,7 @@ HRESULT openbor_getentityproperty(ScriptVariant **varlist , ScriptVariant **pret ScriptVariant_ChangeType(*pretvar, VT_INTEGER); (*pretvar)->lVal = (LONG)ent->modeldata.stealth.detect; break; - } + } case _ep_die_on_landing: { ScriptVariant_ChangeType(*pretvar, VT_INTEGER); @@ -3843,7 +3843,7 @@ HRESULT openbor_getentityproperty(ScriptVariant **varlist , ScriptVariant **pret break; } case _ep_edelay_factor: - { + { ScriptVariant_ChangeType(*pretvar, VT_DECIMAL); (*pretvar)->dblVal = (DOUBLE)ent->modeldata.edelay.factor; break; @@ -3873,41 +3873,41 @@ HRESULT openbor_getentityproperty(ScriptVariant **varlist , ScriptVariant **pret return E_FAIL; } break; - } + } case _ep_edge: { ScriptVariant_ChangeType(*pretvar, VT_INTEGER); (*pretvar)->lVal = (LONG)ent->edge; break; - } + } case _ep_edgerange: - { - if(paramCount < 3) - { - break; - } - arg = varlist[2]; - if(arg->vt != VT_INTEGER) - { - printf("You must give a string name for edgerange.\n"); - return E_FAIL; - } - ltemp = arg->lVal; - - ScriptVariant_ChangeType(*pretvar, VT_DECIMAL); - switch(ltemp) - { - case _ep_edgerange_x: - (*pretvar)->dblVal = (DOUBLE)ent->modeldata.edgerange.x; - break; - case _ep_edgerange_z: - (*pretvar)->dblVal = (DOUBLE)ent->modeldata.edgerange.z; - break; - default: - ScriptVariant_Clear(*pretvar); - return E_FAIL; - } - break; + { + if(paramCount < 3) + { + break; + } + arg = varlist[2]; + if(arg->vt != VT_INTEGER) + { + printf("You must give a string name for edgerange.\n"); + return E_FAIL; + } + ltemp = arg->lVal; + + ScriptVariant_ChangeType(*pretvar, VT_DECIMAL); + switch(ltemp) + { + case _ep_edgerange_x: + (*pretvar)->dblVal = (DOUBLE)ent->modeldata.edgerange.x; + break; + case _ep_edgerange_z: + (*pretvar)->dblVal = (DOUBLE)ent->modeldata.edgerange.z; + break; + default: + ScriptVariant_Clear(*pretvar); + return E_FAIL; + } + break; } case _ep_energycost: { @@ -4355,12 +4355,12 @@ HRESULT openbor_getentityproperty(ScriptVariant **varlist , ScriptVariant **pret { break; } - - // entity must have a land frame set. - if(!ent->modeldata.animation[i]->landframe) - { - break; - } + + // entity must have a land frame set. + if(!ent->modeldata.animation[i]->landframe) + { + break; + } switch(ltemp) { @@ -4580,25 +4580,25 @@ HRESULT openbor_getentityproperty(ScriptVariant **varlist , ScriptVariant **pret ScriptVariant_ChangeType(*pretvar, VT_STR); (*pretvar)->strVal = StrCache_CreateNewFrom(ent->model->name); break; - } + } case _ep_movex: { ScriptVariant_ChangeType(*pretvar, VT_DECIMAL); (*pretvar)->dblVal = (DOUBLE)ent->movex; break; - } + } case _ep_movez: { ScriptVariant_ChangeType(*pretvar, VT_DECIMAL); (*pretvar)->dblVal = (DOUBLE)ent->movex; break; - } + } case _ep_entitypushing: { ScriptVariant_ChangeType(*pretvar, VT_INTEGER); (*pretvar)->lVal = (LONG)ent->modeldata.entitypushing; break; - } + } case _ep_pushingfactor: { ScriptVariant_ChangeType(*pretvar, VT_DECIMAL); @@ -5476,7 +5476,7 @@ HRESULT openbor_changeentityproperty(ScriptVariant **varlist , ScriptVariant **p break; case _ep_aiflag_blocking: ent->blocking = (LONG)ltemp; - break; + break; case _ep_aiflag_ducking: ent->ducking = (LONG)ltemp; break; @@ -5488,7 +5488,7 @@ HRESULT openbor_changeentityproperty(ScriptVariant **varlist , ScriptVariant **p break; case _ep_aiflag_inpain: ent->inpain = (LONG)ltemp; - break; + break; case _ep_aiflag_rising: ent->rising = (LONG)ltemp; break; @@ -5720,7 +5720,7 @@ HRESULT openbor_changeentityproperty(ScriptVariant **varlist , ScriptVariant **p ent->combotime = (LONG)ltemp; } break; - } + } case _ep_collidedentity: { ent->collided_entity = (entity *)varlist[2]->ptrVal; @@ -5865,7 +5865,7 @@ HRESULT openbor_changeentityproperty(ScriptVariant **varlist , ScriptVariant **p } break; - } + } case _ep_edge: { if(SUCCEEDED(ScriptVariant_IntegerValue(varlist[2], <emp))) @@ -5873,38 +5873,38 @@ HRESULT openbor_changeentityproperty(ScriptVariant **varlist , ScriptVariant **p ent->edge = (LONG)ltemp; } break; - } + } case _ep_edgerange: - { - if(varlist[2]->vt != VT_INTEGER) - { - if(varlist[2]->vt != VT_STR) - { - printf("You must give a string value for edgerange name.\n"); - } - goto changeentityproperty_error; - } - if(paramCount < 4) - { - break; - } - - if(SUCCEEDED(ScriptVariant_DecimalValue(varlist[3], &dbltemp))) - { - switch(varlist[2]->lVal) - { - case _ep_edgerange_x: - ent->modeldata.edgerange.x = (DOUBLE)dbltemp; - break; - case _ep_edgerange_z: - ent->modeldata.edgerange.z = (DOUBLE)dbltemp; - break; - default: - printf("Unknown edgerange.\n"); - goto changeentityproperty_error; - } - } - break; + { + if(varlist[2]->vt != VT_INTEGER) + { + if(varlist[2]->vt != VT_STR) + { + printf("You must give a string value for edgerange name.\n"); + } + goto changeentityproperty_error; + } + if(paramCount < 4) + { + break; + } + + if(SUCCEEDED(ScriptVariant_DecimalValue(varlist[3], &dbltemp))) + { + switch(varlist[2]->lVal) + { + case _ep_edgerange_x: + ent->modeldata.edgerange.x = (DOUBLE)dbltemp; + break; + case _ep_edgerange_z: + ent->modeldata.edgerange.z = (DOUBLE)dbltemp; + break; + default: + printf("Unknown edgerange.\n"); + goto changeentityproperty_error; + } + } + break; } case _ep_energycost: { @@ -6396,38 +6396,38 @@ HRESULT openbor_changeentityproperty(ScriptVariant **varlist , ScriptVariant **p } } break; - } - case _ep_movex: - { - if(SUCCEEDED(ScriptVariant_DecimalValue(varlist[2], &dbltemp))) - { - ent->movex = (DOUBLE)dbltemp; - } - break; - } - case _ep_movez: - { - if(SUCCEEDED(ScriptVariant_DecimalValue(varlist[2], &dbltemp))) - { - ent->movez = (DOUBLE)dbltemp; - } - break; - } - case _ep_entitypushing: - { - if(SUCCEEDED(ScriptVariant_IntegerValue(varlist[2], <emp))) - { - ent->modeldata.entitypushing = (LONG)ltemp; - } - break; - } - case _ep_pushingfactor: - { - if(SUCCEEDED(ScriptVariant_DecimalValue(varlist[2], &dbltemp))) - { - ent->modeldata.pushingfactor = (DOUBLE)dbltemp; - } - break; + } + case _ep_movex: + { + if(SUCCEEDED(ScriptVariant_DecimalValue(varlist[2], &dbltemp))) + { + ent->movex = (DOUBLE)dbltemp; + } + break; + } + case _ep_movez: + { + if(SUCCEEDED(ScriptVariant_DecimalValue(varlist[2], &dbltemp))) + { + ent->movez = (DOUBLE)dbltemp; + } + break; + } + case _ep_entitypushing: + { + if(SUCCEEDED(ScriptVariant_IntegerValue(varlist[2], <emp))) + { + ent->modeldata.entitypushing = (LONG)ltemp; + } + break; + } + case _ep_pushingfactor: + { + if(SUCCEEDED(ScriptVariant_DecimalValue(varlist[2], &dbltemp))) + { + ent->modeldata.pushingfactor = (DOUBLE)dbltemp; + } + break; } case _ep_mp: { @@ -7679,8 +7679,8 @@ HRESULT openbor_getplayerproperty(ScriptVariant **varlist , ScriptVariant **pret (*pretvar)->lVal = (LONG)(model_cache[cacheindex].model->maps_loaded + 1); break; - } - default: + } + default: { //printf("Property name '%s' is not supported by function getplayerproperty.\n", propname); *pretvar = NULL; @@ -8037,893 +8037,895 @@ HRESULT openbor_changeplayerproperty(ScriptVariant **varlist , ScriptVariant **p ScriptVariant_ToString(arg, buffer); printf("Function changeplayerproperty receives an invalid value: %s.\n", buffer); return E_FAIL; -} - -//this method is used by script engine, we move it here -// it will get a system property, put it in the ScriptVariant -// if failed return 0, otherwise return 1 -int getsyspropertybyindex(ScriptVariant *var, int index) -{ - if(!var) - { - return 0; - } - - switch(index) - { - case _sv_count_enemies: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = count_ents(TYPE_ENEMY); - break; - case _sv_count_players: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = count_ents(TYPE_PLAYER); - break; - case _sv_count_npcs: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = count_ents(TYPE_NPC); - break; - case _sv_count_entities: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = ent_count; - break; - case _sv_drawmethod_default: - ScriptVariant_ChangeType(var, VT_PTR); - var->ptrVal = (void *)&plainmethod; - break; - case _sv_ent_max: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = ent_max; - break; - case _sv_in_level: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = (level != NULL); - break; - case _sv_in_gameoverscreen: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = gameOver; - break; - case _sv_in_menuscreen: - ScriptVariant_ChangeType(var, VT_INTEGER); - if(selectScreen || titleScreen || hallOfFame || gameOver || showComplete || currentScene || level || enginecreditsScreen) - { - var->lVal = 0; - } - else - { - var->lVal = menuScreen; - } - break; - case _sv_in_enginecreditsscreen: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = enginecreditsScreen; - break; - case _sv_in_options: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = optionsMenu; - break; - case _sv_in_system_options: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = systemoptionsMenu; - break; - case _sv_in_cheat_options: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = (optionsMenu && is_cheat_actived()) ? 1:0; - break; - case _sv_cheats: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = is_cheat_actived(); - break; - case _sv_in_control_options: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = controloptionsMenu; - break; - case _sv_in_sound_options: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = soundoptionsMenu; - break; - case _sv_in_video_options: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = videooptionsMenu; - break; - case _sv_in_start_game: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = startgameMenu; - break; - case _sv_in_new_game: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = newgameMenu; - break; - case _sv_in_load_game: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = loadgameMenu; - break; - case _sv_sets_count: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = num_difficulties; - break; - case _sv_in_showcomplete: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = showComplete; - break; - case _sv_in_titlescreen: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = titleScreen; - break; - case _sv_in_halloffamescreen: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = (hallOfFame); - break; - case _sv_sample_play_id: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = sample_play_id; - break; - case _sv_effectvol: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = savedata.effectvol; - break; - case _sv_elapsed_time: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = _time; - break; - case _sv_game_speed: - if(!level) - { - return 0; - } - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = GAME_SPEED; - break; - case _sv_game_paused: - case _sv_pause: - ScriptVariant_ChangeType(var, VT_INTEGER); - if( !(goto_mainmenu_flag&1) ) var->lVal = (_pause); - else var->lVal = 0; - break; - case _sv_game_time: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = timeleft; - break; - case _sv_porting: - { - e_porting porting; - - #if ANDROID - porting = PORTING_ANDROID; - #elif DARWIN - porting = PORTING_DARWIN; - #elif DC - porting = PORTING_DREAMCAST; - #elif GPX2 - porting = PORTING_GPX2; - #elif LINUX - porting = PORTING_LINUX; - #elif OPENDINGUX - porting = PORTING_OPENDINGUX; - #elif PSP - porting = PORTING_PSP; - #elif WII - porting = PORTING_WII; - #elif WIN - porting = PORTING_WINDOWS; - #elif WIZ - porting = PORTING_WIZ; - #elif XBOX - porting = PORTING_XBOX; - #elif VITA - porting = PORTING_VITA; - #else - porting = PORTING_UNKNOWN; - #endif - - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = porting; - break; - } - case _sv_gfx_x_offset: - if(!level) - { - return 0; - } - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = gfx_x_offset; - break; - case _sv_gfx_y_offset: - if(!level) - { - return 0; - } - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = gfx_y_offset; - break; - case _sv_gfx_y_offset_adj: - if(!level) - { - return 0; - } - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = gfx_y_offset_adj; - break; - case _sv_in_selectscreen: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = selectScreen; - break; - case _sv_lasthit_attack: - ScriptVariant_ChangeType(var, VT_PTR); - var->ptrVal = lasthit.attack; - break; - case _sv_lasthit_attacker: - ScriptVariant_ChangeType(var, VT_PTR); - var->ptrVal = lasthit.attacker; - break; - case _sv_lasthit_target: - ScriptVariant_ChangeType(var, VT_PTR); - var->ptrVal = lasthit.target; - break; - - case _sv_lasthita: - case _sv_lasthity: - ScriptVariant_ChangeType(var, VT_DECIMAL); - var->dblVal = lasthit.position.y; - break; - case _sv_lasthitc: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = lasthit.confirm; - break; - case _sv_lasthitt: - ScriptVariant_ChangeType(var, VT_INTEGER); - - if(lasthit.attack) - { - var->lVal = lasthit.attack->attack_type; - } - - break; - case _sv_lasthitx: - ScriptVariant_ChangeType(var, VT_DECIMAL); - var->dblVal = lasthit.position.x; - break; - case _sv_lasthitz: - ScriptVariant_ChangeType(var, VT_DECIMAL); - var->dblVal = lasthit.position.z; - break; - case _sv_xpos: - if(!level) - { - return 0; - } - ScriptVariant_ChangeType(var, VT_DECIMAL); - var->dblVal = advancex; - break; - case _sv_ypos: - if(!level) - { - return 0; - } - ScriptVariant_ChangeType(var, VT_DECIMAL); - var->dblVal = advancey; - break; - case _sv_hresolution: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = videomodes.hRes; - break; - case _sv_vresolution: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = videomodes.vRes; - break; - case _sv_current_scene: - if(currentScene) - { - ScriptVariant_ChangeType(var, VT_STR); - var->strVal = StrCache_CreateNewFrom(currentScene); - } - else - { - ScriptVariant_Clear(var); - } - break; - case _sv_current_set: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = current_set; - break; - case _sv_current_level: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = current_level; - break; - case _sv_current_palette: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = current_palette; - break; - case _sv_current_stage: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = current_stage; - break; - case _sv_levelwidth: - if(!level) - { - return 0; - } - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = level->width; - break; - case _sv_levelheight: - if(!level) - { - return 0; - } - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = panel_height; - break; - case _sv_branchname: - ScriptVariant_ChangeType(var, VT_STR); - var->strVal = StrCache_CreateNewFrom(branch_name); - break; - case _sv_current_branch: - if(level != NULL && levelsets && levelsets[current_set].levelorder && levelsets[current_set].levelorder[current_level].branchname) - { - ScriptVariant_ChangeType(var, VT_STR); - var->strVal = StrCache_CreateNewFrom(levelsets[current_set].levelorder[current_level].branchname); - } - else - { - ScriptVariant_Clear(var); - } - break; - case _sv_pakname: - { - char tempstr[MAX_BUFFER_LEN]; - getPakName(tempstr, -1); - ScriptVariant_ChangeType(var, VT_STR); - var->strVal = StrCache_CreateNewFrom(tempstr); - break; - } - case _sv_bossescount: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = level->bossescount; - break; - case _sv_maxsoundchannels: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = maxchannels(); - break; - case _sv_maxentityvars: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = max_entity_vars; - break; - case _sv_maxindexedvars: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = max_indexed_vars; - break; - case _sv_maxplayers: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = levelsets[current_set].maxplayers; - break; - case _sv_maxscriptvars: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = max_script_vars; - break; - case _sv_models_cached: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = models_cached; - break; - case _sv_models_loaded: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = models_loaded; - break; - case _sv_musicvol: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = savedata.musicvol; - break; - case _sv_nofadeout: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = nofadeout; - break; - case _sv_nojoin: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = nojoin; - break; - case _sv_nopause: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = nopause; - break; - case _sv_nosave: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = nosave; - break; - case _sv_noscreenshot: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = noscreenshot; - break; - case _sv_noshowcomplete: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = levelsets[current_set].noshowcomplete; - break; - case _sv_numbasemaps: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = level->numbasemaps; - break; - case _sv_numbosses: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = level->numbosses; - break; - case _sv_numholes: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = level->numholes; - break; - case _sv_numlayers: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = level->numlayers; - break; - case _sv_numpalettes: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = level->numpalettes; - break; - case _sv_numwalls: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = level->numwalls; - break; - case _sv_pixelformat: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = pixelformat; - break; - case _sv_player: - case _sv_player1: - ScriptVariant_ChangeType(var, VT_PTR); - var->ptrVal = player; - break; - case _sv_player2: - ScriptVariant_ChangeType(var, VT_PTR); - var->ptrVal = player + 1; - break; - case _sv_player3: - ScriptVariant_ChangeType(var, VT_PTR); - var->ptrVal = player + 2; - break; - case _sv_player4: - ScriptVariant_ChangeType(var, VT_PTR); - var->ptrVal = player + 3; - break; - case _sv_player_max_z: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = PLAYER_MAX_Z; - break; - case _sv_player_min_z: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = PLAYER_MIN_Z; - break; - case _sv_lightx: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = light.x; - break; - case _sv_lightz: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = light.y; - break; - case _sv_self: - ScriptVariant_ChangeType(var, VT_PTR); - var->ptrVal = self; - break; - case _sv_shadowalpha: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = shadowalpha; - break; - case _sv_shadowcolor: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = shadowcolor; - break; - case _sv_shadowopacity: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = shadowopacity; - break; - case _sv_skiptoset: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = skiptoset; - break; - case _sv_slowmotion: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = slowmotion.toggle; - break; - case _sv_slowmotion_duration: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = slowmotion.duration; - break; - case _sv_soundvol: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = savedata.soundvol; - break; - case _sv_totalram: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = getSystemRam(KBYTES); - break; - case _sv_freeram: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = getFreeRam(KBYTES); - break; - case _sv_usedram: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = getUsedRam(KBYTES); - break; - case _sv_textbox: - ScriptVariant_ChangeType(var, VT_PTR); - var->ptrVal = textbox; - break; - case _sv_background: - ScriptVariant_ChangeType(var, VT_PTR); - var->ptrVal = background; - break; - case _sv_vscreen: - ScriptVariant_ChangeType(var, VT_PTR); - var->ptrVal = vscreen; - break; - case _sv_viewportx: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = viewportx; - break; - case _sv_viewporty: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = viewporty; - break; - case _sv_viewportw: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = viewportw; - break; - case _sv_viewporth: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = viewporth; - break; - case _sv_scrollminx: - ScriptVariant_ChangeType(var, VT_DECIMAL); - var->dblVal = scrollminx; - break; - case _sv_scrollmaxx: - ScriptVariant_ChangeType(var, VT_DECIMAL); - var->dblVal = scrollmaxx; - break; - case _sv_scrollminz: - ScriptVariant_ChangeType(var, VT_DECIMAL); - var->dblVal = scrollminz; - break; - case _sv_scrollmaxz: - ScriptVariant_ChangeType(var, VT_DECIMAL); - var->dblVal = scrollmaxz; - break; - case _sv_blockade: - ScriptVariant_ChangeType(var, VT_DECIMAL); - var->dblVal = blockade; - break; - case _sv_waiting: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = level ? level->waiting : 0; - case _sv_maxattacktypes: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = max_attack_types; - break; - case _sv_maxanimations: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = max_animations; - break; - case _sv_ticks: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = timer_gettick(); - break; - case _sv_nogameover: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = levelsets[current_set].noshowgameover; // or s_set_entry *set = levelsets + current_set; - break; - case _sv_nohof: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = levelsets[current_set].noshowhof; - break; - case _sv_fps: - ScriptVariant_ChangeType(var, VT_INTEGER); - var->lVal = getFPS(); - break; - default: - // We use indices now, but players/modders don't need to be exposed - // to that implementation detail, so we write "name" and not "index". - printf("Unknown system property name.\n"); - return 0; - } - return 1; -} - -// change a system variant, used by script -int changesyspropertybyindex(int index, ScriptVariant *value) -{ - //char* tempstr = NULL; - LONG ltemp; - DOUBLE dbltemp; - - switch(index) - { - case _sv_elapsed_time: - if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) - { - _time = (LONG)ltemp; - } - break; - case _sv_current_stage: - if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) - { - current_stage = (LONG)ltemp; - } - break; - case _sv_current_set: - if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) - { - current_set = (LONG)ltemp; - } - break; - case _sv_current_level: - if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) - { - current_level = (LONG)ltemp; - } - break; - case _sv_game_time: - if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) - { - timeleft = (LONG)ltemp; - } - break; - case _sv_gfx_x_offset: - if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) - { - gfx_x_offset = (LONG)ltemp; - } - break; - case _sv_gfx_y_offset: - if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) - { - gfx_y_offset = (LONG)ltemp; - } - break; - case _sv_gfx_y_offset_adj: - if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) - { - gfx_y_offset_adj = (LONG)ltemp; - } - break; - case _sv_levelpos: - if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) - { - level->pos = (LONG)ltemp; - } - break; - case _sv_xpos: - if(SUCCEEDED(ScriptVariant_DecimalValue(value, &dbltemp))) - { - advancex = (float)dbltemp; - } - break; - case _sv_ypos: - if(SUCCEEDED(ScriptVariant_DecimalValue(value, &dbltemp))) - { - advancey = (DOUBLE)dbltemp; - } - break; - case _sv_scrollminz: - if(SUCCEEDED(ScriptVariant_DecimalValue(value, &dbltemp))) - { - scrollminz = (DOUBLE)dbltemp; - } - break; - case _sv_scrollmaxz: - if(SUCCEEDED(ScriptVariant_DecimalValue(value, &dbltemp))) - { - scrollmaxz = (DOUBLE)dbltemp; - } - break; - case _sv_scrollminx: - if(SUCCEEDED(ScriptVariant_DecimalValue(value, &dbltemp))) - { - scrollminx = (DOUBLE)dbltemp; - } - break; - case _sv_scrollmaxx: - if(SUCCEEDED(ScriptVariant_DecimalValue(value, &dbltemp))) - { - scrollmaxx = (DOUBLE)dbltemp; - } - break; - case _sv_blockade: - if(SUCCEEDED(ScriptVariant_DecimalValue(value, &dbltemp))) - { - blockade = (DOUBLE)dbltemp; - } - break; - case _sv_shadowcolor: - if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) - { - shadowcolor = (LONG)ltemp; - } - break; - case _sv_shadowalpha: - if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) - { - shadowalpha = (LONG)ltemp; - } - break; - case _sv_shadowopacity: - if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) - { - shadowopacity = (LONG)ltemp; - } - break; - case _sv_skiptoset: - if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) - { - skiptoset = (LONG)ltemp; - } - break; - case _sv_slowmotion: - if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) - { - slowmotion.toggle = (unsigned)ltemp; - } - break; - case _sv_slowmotion_duration: - if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) - { - slowmotion.duration = (unsigned)ltemp; - } - break; - case _sv_lasthit_attack: - - lasthit.attack = (s_collision_attack*)value->ptrVal; - break; - - case _sv_lasthit_attacker: - - lasthit.attacker = (entity*)value->ptrVal; - break; - - case _sv_lasthit_target: - - lasthit.target = (entity*)value->ptrVal; - break; - - case _sv_lasthita: - case _sv_lasthity: - if(SUCCEEDED(ScriptVariant_DecimalValue(value, &dbltemp))) - { - lasthit.position.y = (DOUBLE)dbltemp; - } - break; - case _sv_lasthitx: - if(SUCCEEDED(ScriptVariant_DecimalValue(value, &dbltemp))) - { - lasthit.position.x = (DOUBLE)dbltemp; - } - break; - case _sv_lasthitz: - if(SUCCEEDED(ScriptVariant_DecimalValue(value, &dbltemp))) - { - lasthit.position.z = (DOUBLE)dbltemp; - } - break; - case _sv_lasthitc: - if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) - { - lasthit.confirm = (LONG)ltemp; - } - break; - case _sv_lasthitt: - if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) - { - lasthit.attack->attack_type = (LONG)ltemp; - } - break; - case _sv_smartbomber: - smartbomber = (entity *)value->ptrVal; - break; - case _sv_textbox: - textbox = (entity *)value->ptrVal; - break; - case _sv_background: - background = (s_screen *)value->ptrVal; - break; - case _sv_bossescount: - if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) - { - level->bossescount = (LONG)ltemp; - } - break; - case _sv_vscreen: - vscreen = (s_screen *)value->ptrVal; - break; - case _sv_nofadeout: - if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) - { - nofadeout = (LONG)ltemp; - } - break; - case _sv_nojoin: - if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) - { - nojoin = (LONG)ltemp; - } - break; - case _sv_nopause: - if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) - { - nopause = (LONG)ltemp; - } - break; - case _sv_nosave: - if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) - { - nosave = (LONG)ltemp; - } - break; - case _sv_noscreenshot: - if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) - { - noscreenshot = (LONG)ltemp; - } - break; - case _sv_noshowcomplete: - if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) - { - levelsets[current_set].noshowcomplete = (LONG)ltemp; - } - break; - case _sv_numbosses: - if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) - { - level->numbosses = (LONG)ltemp; - } - break; - case _sv_viewportx: - if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) - { - viewportx = (LONG)ltemp; - } - break; - case _sv_viewporty: - if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) - { - viewporty = (LONG)ltemp; - } - break; - case _sv_viewportw: - if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) - { - viewportw = (LONG)ltemp; - } - break; - case _sv_viewporth: - if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) - { - viewporth = (LONG)ltemp; - } - break; - case _sv_waiting: - if(!level) - { - break; - } - if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) - { - level->waiting = (LONG)ltemp; - } - break; - case _sv_nogameover: - if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) - { - levelsets[current_set].noshowgameover = (LONG)ltemp; - } - break; - case _sv_nohof: - if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) - { - levelsets[current_set].noshowhof = (LONG)ltemp; - } - break; - default: - return 0; - } - - return 1; +} + +//this method is used by script engine, we move it here +// it will get a system property, put it in the ScriptVariant +// if failed return 0, otherwise return 1 +int getsyspropertybyindex(ScriptVariant *var, int index) +{ + if(!var) + { + return 0; + } + + switch(index) + { + case _sv_count_enemies: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = count_ents(TYPE_ENEMY); + break; + case _sv_count_players: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = count_ents(TYPE_PLAYER); + break; + case _sv_count_npcs: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = count_ents(TYPE_NPC); + break; + case _sv_count_entities: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = ent_count; + break; + case _sv_drawmethod_default: + ScriptVariant_ChangeType(var, VT_PTR); + var->ptrVal = (void *)&plainmethod; + break; + case _sv_ent_max: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = ent_max; + break; + case _sv_in_level: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = (level != NULL); + break; + case _sv_in_gameoverscreen: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = gameOver; + break; + case _sv_in_menuscreen: + ScriptVariant_ChangeType(var, VT_INTEGER); + if(selectScreen || titleScreen || hallOfFame || gameOver || showComplete || currentScene || level || enginecreditsScreen) + { + var->lVal = 0; + } + else + { + var->lVal = menuScreen; + } + break; + case _sv_in_enginecreditsscreen: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = enginecreditsScreen; + break; + case _sv_in_options: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = optionsMenu; + break; + case _sv_in_system_options: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = systemoptionsMenu; + break; + case _sv_in_cheat_options: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = (optionsMenu && is_cheat_actived()) ? 1:0; + break; + case _sv_cheats: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = is_cheat_actived(); + break; + case _sv_in_control_options: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = controloptionsMenu; + break; + case _sv_in_sound_options: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = soundoptionsMenu; + break; + case _sv_in_video_options: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = videooptionsMenu; + break; + case _sv_in_start_game: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = startgameMenu; + break; + case _sv_in_new_game: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = newgameMenu; + break; + case _sv_in_load_game: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = loadgameMenu; + break; + case _sv_sets_count: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = num_difficulties; + break; + case _sv_in_showcomplete: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = showComplete; + break; + case _sv_in_titlescreen: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = titleScreen; + break; + case _sv_in_halloffamescreen: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = (hallOfFame); + break; + case _sv_sample_play_id: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = sample_play_id; + break; + case _sv_effectvol: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = savedata.effectvol; + break; + case _sv_elapsed_time: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = _time; + break; + case _sv_game_speed: + if(!level) + { + return 0; + } + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = GAME_SPEED; + break; + case _sv_game_paused: + case _sv_pause: + ScriptVariant_ChangeType(var, VT_INTEGER); + if( !(goto_mainmenu_flag&1) ) var->lVal = (_pause); + else var->lVal = 0; + break; + case _sv_game_time: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = timeleft; + break; + case _sv_porting: + { + e_porting porting; + + #if ANDROID + porting = PORTING_ANDROID; + #elif DARWIN + porting = PORTING_DARWIN; + #elif DC + porting = PORTING_DREAMCAST; + #elif GPX2 + porting = PORTING_GPX2; + #elif LINUX + porting = PORTING_LINUX; + #elif OPENDINGUX + porting = PORTING_OPENDINGUX; + #elif PSP + porting = PORTING_PSP; + #elif WII + porting = PORTING_WII; + #elif WIN + porting = PORTING_WINDOWS; + #elif WIZ + porting = PORTING_WIZ; + #elif XBOX + porting = PORTING_XBOX; + #elif VITA + porting = PORTING_VITA; + #elif __PS4__ + porting = PORTING_PS4; + #else + porting = PORTING_UNKNOWN; + #endif + + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = porting; + break; + } + case _sv_gfx_x_offset: + if(!level) + { + return 0; + } + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = gfx_x_offset; + break; + case _sv_gfx_y_offset: + if(!level) + { + return 0; + } + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = gfx_y_offset; + break; + case _sv_gfx_y_offset_adj: + if(!level) + { + return 0; + } + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = gfx_y_offset_adj; + break; + case _sv_in_selectscreen: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = selectScreen; + break; + case _sv_lasthit_attack: + ScriptVariant_ChangeType(var, VT_PTR); + var->ptrVal = lasthit.attack; + break; + case _sv_lasthit_attacker: + ScriptVariant_ChangeType(var, VT_PTR); + var->ptrVal = lasthit.attacker; + break; + case _sv_lasthit_target: + ScriptVariant_ChangeType(var, VT_PTR); + var->ptrVal = lasthit.target; + break; + + case _sv_lasthita: + case _sv_lasthity: + ScriptVariant_ChangeType(var, VT_DECIMAL); + var->dblVal = lasthit.position.y; + break; + case _sv_lasthitc: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = lasthit.confirm; + break; + case _sv_lasthitt: + ScriptVariant_ChangeType(var, VT_INTEGER); + + if(lasthit.attack) + { + var->lVal = lasthit.attack->attack_type; + } + + break; + case _sv_lasthitx: + ScriptVariant_ChangeType(var, VT_DECIMAL); + var->dblVal = lasthit.position.x; + break; + case _sv_lasthitz: + ScriptVariant_ChangeType(var, VT_DECIMAL); + var->dblVal = lasthit.position.z; + break; + case _sv_xpos: + if(!level) + { + return 0; + } + ScriptVariant_ChangeType(var, VT_DECIMAL); + var->dblVal = advancex; + break; + case _sv_ypos: + if(!level) + { + return 0; + } + ScriptVariant_ChangeType(var, VT_DECIMAL); + var->dblVal = advancey; + break; + case _sv_hresolution: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = videomodes.hRes; + break; + case _sv_vresolution: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = videomodes.vRes; + break; + case _sv_current_scene: + if(currentScene) + { + ScriptVariant_ChangeType(var, VT_STR); + var->strVal = StrCache_CreateNewFrom(currentScene); + } + else + { + ScriptVariant_Clear(var); + } + break; + case _sv_current_set: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = current_set; + break; + case _sv_current_level: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = current_level; + break; + case _sv_current_palette: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = current_palette; + break; + case _sv_current_stage: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = current_stage; + break; + case _sv_levelwidth: + if(!level) + { + return 0; + } + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = level->width; + break; + case _sv_levelheight: + if(!level) + { + return 0; + } + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = panel_height; + break; + case _sv_branchname: + ScriptVariant_ChangeType(var, VT_STR); + var->strVal = StrCache_CreateNewFrom(branch_name); + break; + case _sv_current_branch: + if(level != NULL && levelsets && levelsets[current_set].levelorder && levelsets[current_set].levelorder[current_level].branchname) + { + ScriptVariant_ChangeType(var, VT_STR); + var->strVal = StrCache_CreateNewFrom(levelsets[current_set].levelorder[current_level].branchname); + } + else + { + ScriptVariant_Clear(var); + } + break; + case _sv_pakname: + { + char tempstr[MAX_BUFFER_LEN]; + getPakName(tempstr, -1); + ScriptVariant_ChangeType(var, VT_STR); + var->strVal = StrCache_CreateNewFrom(tempstr); + break; + } + case _sv_bossescount: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = level->bossescount; + break; + case _sv_maxsoundchannels: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = maxchannels(); + break; + case _sv_maxentityvars: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = max_entity_vars; + break; + case _sv_maxindexedvars: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = max_indexed_vars; + break; + case _sv_maxplayers: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = levelsets[current_set].maxplayers; + break; + case _sv_maxscriptvars: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = max_script_vars; + break; + case _sv_models_cached: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = models_cached; + break; + case _sv_models_loaded: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = models_loaded; + break; + case _sv_musicvol: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = savedata.musicvol; + break; + case _sv_nofadeout: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = nofadeout; + break; + case _sv_nojoin: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = nojoin; + break; + case _sv_nopause: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = nopause; + break; + case _sv_nosave: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = nosave; + break; + case _sv_noscreenshot: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = noscreenshot; + break; + case _sv_noshowcomplete: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = levelsets[current_set].noshowcomplete; + break; + case _sv_numbasemaps: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = level->numbasemaps; + break; + case _sv_numbosses: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = level->numbosses; + break; + case _sv_numholes: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = level->numholes; + break; + case _sv_numlayers: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = level->numlayers; + break; + case _sv_numpalettes: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = level->numpalettes; + break; + case _sv_numwalls: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = level->numwalls; + break; + case _sv_pixelformat: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = pixelformat; + break; + case _sv_player: + case _sv_player1: + ScriptVariant_ChangeType(var, VT_PTR); + var->ptrVal = player; + break; + case _sv_player2: + ScriptVariant_ChangeType(var, VT_PTR); + var->ptrVal = player + 1; + break; + case _sv_player3: + ScriptVariant_ChangeType(var, VT_PTR); + var->ptrVal = player + 2; + break; + case _sv_player4: + ScriptVariant_ChangeType(var, VT_PTR); + var->ptrVal = player + 3; + break; + case _sv_player_max_z: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = PLAYER_MAX_Z; + break; + case _sv_player_min_z: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = PLAYER_MIN_Z; + break; + case _sv_lightx: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = light.x; + break; + case _sv_lightz: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = light.y; + break; + case _sv_self: + ScriptVariant_ChangeType(var, VT_PTR); + var->ptrVal = self; + break; + case _sv_shadowalpha: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = shadowalpha; + break; + case _sv_shadowcolor: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = shadowcolor; + break; + case _sv_shadowopacity: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = shadowopacity; + break; + case _sv_skiptoset: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = skiptoset; + break; + case _sv_slowmotion: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = slowmotion.toggle; + break; + case _sv_slowmotion_duration: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = slowmotion.duration; + break; + case _sv_soundvol: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = savedata.soundvol; + break; + case _sv_totalram: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = getSystemRam(KBYTES); + break; + case _sv_freeram: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = getFreeRam(KBYTES); + break; + case _sv_usedram: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = getUsedRam(KBYTES); + break; + case _sv_textbox: + ScriptVariant_ChangeType(var, VT_PTR); + var->ptrVal = textbox; + break; + case _sv_background: + ScriptVariant_ChangeType(var, VT_PTR); + var->ptrVal = background; + break; + case _sv_vscreen: + ScriptVariant_ChangeType(var, VT_PTR); + var->ptrVal = vscreen; + break; + case _sv_viewportx: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = viewportx; + break; + case _sv_viewporty: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = viewporty; + break; + case _sv_viewportw: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = viewportw; + break; + case _sv_viewporth: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = viewporth; + break; + case _sv_scrollminx: + ScriptVariant_ChangeType(var, VT_DECIMAL); + var->dblVal = scrollminx; + break; + case _sv_scrollmaxx: + ScriptVariant_ChangeType(var, VT_DECIMAL); + var->dblVal = scrollmaxx; + break; + case _sv_scrollminz: + ScriptVariant_ChangeType(var, VT_DECIMAL); + var->dblVal = scrollminz; + break; + case _sv_scrollmaxz: + ScriptVariant_ChangeType(var, VT_DECIMAL); + var->dblVal = scrollmaxz; + break; + case _sv_blockade: + ScriptVariant_ChangeType(var, VT_DECIMAL); + var->dblVal = blockade; + break; + case _sv_waiting: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = level ? level->waiting : 0; + case _sv_maxattacktypes: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = max_attack_types; + break; + case _sv_maxanimations: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = max_animations; + break; + case _sv_ticks: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = timer_gettick(); + break; + case _sv_nogameover: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = levelsets[current_set].noshowgameover; // or s_set_entry *set = levelsets + current_set; + break; + case _sv_nohof: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = levelsets[current_set].noshowhof; + break; + case _sv_fps: + ScriptVariant_ChangeType(var, VT_INTEGER); + var->lVal = getFPS(); + break; + default: + // We use indices now, but players/modders don't need to be exposed + // to that implementation detail, so we write "name" and not "index". + printf("Unknown system property name.\n"); + return 0; + } + return 1; +} + +// change a system variant, used by script +int changesyspropertybyindex(int index, ScriptVariant *value) +{ + //char* tempstr = NULL; + LONG ltemp; + DOUBLE dbltemp; + + switch(index) + { + case _sv_elapsed_time: + if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) + { + _time = (LONG)ltemp; + } + break; + case _sv_current_stage: + if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) + { + current_stage = (LONG)ltemp; + } + break; + case _sv_current_set: + if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) + { + current_set = (LONG)ltemp; + } + break; + case _sv_current_level: + if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) + { + current_level = (LONG)ltemp; + } + break; + case _sv_game_time: + if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) + { + timeleft = (LONG)ltemp; + } + break; + case _sv_gfx_x_offset: + if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) + { + gfx_x_offset = (LONG)ltemp; + } + break; + case _sv_gfx_y_offset: + if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) + { + gfx_y_offset = (LONG)ltemp; + } + break; + case _sv_gfx_y_offset_adj: + if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) + { + gfx_y_offset_adj = (LONG)ltemp; + } + break; + case _sv_levelpos: + if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) + { + level->pos = (LONG)ltemp; + } + break; + case _sv_xpos: + if(SUCCEEDED(ScriptVariant_DecimalValue(value, &dbltemp))) + { + advancex = (float)dbltemp; + } + break; + case _sv_ypos: + if(SUCCEEDED(ScriptVariant_DecimalValue(value, &dbltemp))) + { + advancey = (DOUBLE)dbltemp; + } + break; + case _sv_scrollminz: + if(SUCCEEDED(ScriptVariant_DecimalValue(value, &dbltemp))) + { + scrollminz = (DOUBLE)dbltemp; + } + break; + case _sv_scrollmaxz: + if(SUCCEEDED(ScriptVariant_DecimalValue(value, &dbltemp))) + { + scrollmaxz = (DOUBLE)dbltemp; + } + break; + case _sv_scrollminx: + if(SUCCEEDED(ScriptVariant_DecimalValue(value, &dbltemp))) + { + scrollminx = (DOUBLE)dbltemp; + } + break; + case _sv_scrollmaxx: + if(SUCCEEDED(ScriptVariant_DecimalValue(value, &dbltemp))) + { + scrollmaxx = (DOUBLE)dbltemp; + } + break; + case _sv_blockade: + if(SUCCEEDED(ScriptVariant_DecimalValue(value, &dbltemp))) + { + blockade = (DOUBLE)dbltemp; + } + break; + case _sv_shadowcolor: + if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) + { + shadowcolor = (LONG)ltemp; + } + break; + case _sv_shadowalpha: + if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) + { + shadowalpha = (LONG)ltemp; + } + break; + case _sv_shadowopacity: + if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) + { + shadowopacity = (LONG)ltemp; + } + break; + case _sv_skiptoset: + if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) + { + skiptoset = (LONG)ltemp; + } + break; + case _sv_slowmotion: + if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) + { + slowmotion.toggle = (unsigned)ltemp; + } + break; + case _sv_slowmotion_duration: + if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) + { + slowmotion.duration = (unsigned)ltemp; + } + break; + case _sv_lasthit_attack: + + lasthit.attack = (s_collision_attack*)value->ptrVal; + break; + + case _sv_lasthit_attacker: + + lasthit.attacker = (entity*)value->ptrVal; + break; + + case _sv_lasthit_target: + + lasthit.target = (entity*)value->ptrVal; + break; + + case _sv_lasthita: + case _sv_lasthity: + if(SUCCEEDED(ScriptVariant_DecimalValue(value, &dbltemp))) + { + lasthit.position.y = (DOUBLE)dbltemp; + } + break; + case _sv_lasthitx: + if(SUCCEEDED(ScriptVariant_DecimalValue(value, &dbltemp))) + { + lasthit.position.x = (DOUBLE)dbltemp; + } + break; + case _sv_lasthitz: + if(SUCCEEDED(ScriptVariant_DecimalValue(value, &dbltemp))) + { + lasthit.position.z = (DOUBLE)dbltemp; + } + break; + case _sv_lasthitc: + if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) + { + lasthit.confirm = (LONG)ltemp; + } + break; + case _sv_lasthitt: + if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) + { + lasthit.attack->attack_type = (LONG)ltemp; + } + break; + case _sv_smartbomber: + smartbomber = (entity *)value->ptrVal; + break; + case _sv_textbox: + textbox = (entity *)value->ptrVal; + break; + case _sv_background: + background = (s_screen *)value->ptrVal; + break; + case _sv_bossescount: + if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) + { + level->bossescount = (LONG)ltemp; + } + break; + case _sv_vscreen: + vscreen = (s_screen *)value->ptrVal; + break; + case _sv_nofadeout: + if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) + { + nofadeout = (LONG)ltemp; + } + break; + case _sv_nojoin: + if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) + { + nojoin = (LONG)ltemp; + } + break; + case _sv_nopause: + if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) + { + nopause = (LONG)ltemp; + } + break; + case _sv_nosave: + if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) + { + nosave = (LONG)ltemp; + } + break; + case _sv_noscreenshot: + if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) + { + noscreenshot = (LONG)ltemp; + } + break; + case _sv_noshowcomplete: + if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) + { + levelsets[current_set].noshowcomplete = (LONG)ltemp; + } + break; + case _sv_numbosses: + if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) + { + level->numbosses = (LONG)ltemp; + } + break; + case _sv_viewportx: + if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) + { + viewportx = (LONG)ltemp; + } + break; + case _sv_viewporty: + if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) + { + viewporty = (LONG)ltemp; + } + break; + case _sv_viewportw: + if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) + { + viewportw = (LONG)ltemp; + } + break; + case _sv_viewporth: + if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) + { + viewporth = (LONG)ltemp; + } + break; + case _sv_waiting: + if(!level) + { + break; + } + if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) + { + level->waiting = (LONG)ltemp; + } + break; + case _sv_nogameover: + if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) + { + levelsets[current_set].noshowgameover = (LONG)ltemp; + } + break; + case _sv_nohof: + if(SUCCEEDED(ScriptVariant_IntegerValue(value, <emp))) + { + levelsets[current_set].noshowhof = (LONG)ltemp; + } + break; + default: + return 0; + } + + return 1; } //checkhole(x,z,a), return 1 if there's hole here @@ -9011,14 +9013,14 @@ HRESULT openbor_checkholeindex(ScriptVariant **varlist , ScriptVariant **pretvar } return S_OK; -} - +} + //checkbase(x,z,y,entity), return base of terrain. -1 if there is a wall and no platform. entity param is optional. -HRESULT openbor_checkbase(ScriptVariant **varlist , ScriptVariant **pretvar, int paramCount) -{ +HRESULT openbor_checkbase(ScriptVariant **varlist , ScriptVariant **pretvar, int paramCount) +{ ScriptVariant *arg = NULL; - DOUBLE x, z, y; - entity *ent = NULL; + DOUBLE x, z, y; + entity *ent = NULL; float base = -1.0f; if(paramCount < 3) @@ -9040,8 +9042,8 @@ HRESULT openbor_checkbase(ScriptVariant **varlist , ScriptVariant **pretvar, int if(FAILED(ScriptVariant_DecimalValue(arg, &z))) { return S_OK; - } - + } + arg = varlist[2]; if(FAILED(ScriptVariant_DecimalValue(arg, &y))) { @@ -9051,12 +9053,12 @@ HRESULT openbor_checkbase(ScriptVariant **varlist , ScriptVariant **pretvar, int if (paramCount > 3) { arg = varlist[3]; - /*if(arg->vt != VT_PTR && arg->vt != VT_EMPTY) - { - printf("Function checkbase must have a valid entity handle or NULL().\n"); - *pretvar = NULL; - return E_FAIL; - }*/ + /*if(arg->vt != VT_PTR && arg->vt != VT_EMPTY) + { + printf("Function checkbase must have a valid entity handle or NULL().\n"); + *pretvar = NULL; + return E_FAIL; + }*/ ent = (entity *)arg->ptrVal; //retrieve the entity } @@ -9064,7 +9066,7 @@ HRESULT openbor_checkbase(ScriptVariant **varlist , ScriptVariant **pretvar, int { (*pretvar)->dblVal = (DOUBLE)base; } - return S_OK; + return S_OK; } //checkwall(x,z), return wall height, or 0 | accept checkwall_index(x,z,y) too @@ -10035,15 +10037,15 @@ HRESULT openbor_damageentity(ScriptVariant **varlist , ScriptVariant **pretvar, de_error: *pretvar = NULL; return E_FAIL; -} - +} + //getcomputeddamage(defender, attacker, force, drop, type), it returns the real damage. Minimum 3 params (defender, attacker, force) -HRESULT openbor_getcomputeddamage(ScriptVariant **varlist , ScriptVariant **pretvar, int paramCount) -{ +HRESULT openbor_getcomputeddamage(ScriptVariant **varlist , ScriptVariant **pretvar, int paramCount) +{ entity *defender = NULL; - entity *attacker = NULL; - entity *temp = NULL; - LONG force, drop, type; + entity *attacker = NULL; + entity *temp = NULL; + LONG force, drop, type; s_collision_attack atk; if(paramCount < 3) @@ -10053,8 +10055,8 @@ HRESULT openbor_getcomputeddamage(ScriptVariant **varlist , ScriptVariant **pret } ScriptVariant_ChangeType(*pretvar, VT_INTEGER); - (*pretvar)->lVal = (LONG)0; - + (*pretvar)->lVal = (LONG)0; + force = (LONG)0; drop = (LONG)0; type = (LONG)ATK_NORMAL; @@ -10075,8 +10077,8 @@ HRESULT openbor_getcomputeddamage(ScriptVariant **varlist , ScriptVariant **pret { printf("Wrong force value.\n"); goto gcd_error; - } - + } + if(paramCount >= 4) { if(FAILED(ScriptVariant_IntegerValue((varlist[3]), &drop))) @@ -10092,8 +10094,8 @@ HRESULT openbor_getcomputeddamage(ScriptVariant **varlist , ScriptVariant **pret printf("Wrong type value.\n"); goto gcd_error; } - } - + } + atk = emptyattack; atk.attack_force = force; atk.attack_drop = drop; @@ -10103,18 +10105,18 @@ HRESULT openbor_getcomputeddamage(ScriptVariant **varlist , ScriptVariant **pret atk.dropv.x = (float)DEFAULT_ATK_DROPV_X; atk.dropv.z = (float)DEFAULT_ATK_DROPV_Z; } - atk.attack_type = type; - + atk.attack_type = type; + temp = self; - self = defender; - (*pretvar)->lVal = (LONG)calculate_force_damage(attacker, &atk); + self = defender; + (*pretvar)->lVal = (LONG)calculate_force_damage(attacker, &atk); self = temp; return S_OK; gcd_error: *pretvar = NULL; - return E_FAIL; + return E_FAIL; } //killentity(entity) @@ -10757,7 +10759,7 @@ HRESULT openbor_spawn(ScriptVariant **varlist , ScriptVariant **pretvar, int par if(spawnentry.boss && level) { - level->bossescount++; + level->bossescount++; level->numbosses++; } @@ -10865,20 +10867,20 @@ HRESULT openbor_projectile(ScriptVariant **varlist , ScriptVariant **pretvar, in // PType if(paramCount >= 6 && SUCCEEDED(ScriptVariant_IntegerValue(varlist[5], <emp))) - { - - // Backwards compatibility for modules made before bitwise update - // of projectile_prime and expect base vs. floor and moving - // behavior to both be tied to a single 0 or 1 value. - if((LONG)ltemp) - { - projectile_prime |= PROJECTILE_PRIME_BASE_FLOOR; - projectile_prime |= PROJECTILE_PRIME_LAUNCH_STATIONARY; - } - else - { - projectile_prime |= PROJECTILE_PRIME_BASE_Y; - projectile_prime |= PROJECTILE_PRIME_LAUNCH_MOVING; + { + + // Backwards compatibility for modules made before bitwise update + // of projectile_prime and expect base vs. floor and moving + // behavior to both be tied to a single 0 or 1 value. + if((LONG)ltemp) + { + projectile_prime |= PROJECTILE_PRIME_BASE_FLOOR; + projectile_prime |= PROJECTILE_PRIME_LAUNCH_STATIONARY; + } + else + { + projectile_prime |= PROJECTILE_PRIME_BASE_Y; + projectile_prime |= PROJECTILE_PRIME_LAUNCH_MOVING; } } @@ -11293,7 +11295,7 @@ HRESULT openbor_pausesamples(ScriptVariant **varlist , ScriptVariant **pretvar, //pausesample(toggle,channel) HRESULT openbor_pausesample(ScriptVariant **varlist , ScriptVariant **pretvar, int paramCount) { - int pause = 0; + int pause = 0; LONG channel = 0; if(paramCount < 2) { @@ -13881,9 +13883,9 @@ HRESULT openbor_executeanimation(ScriptVariant **varlist , ScriptVariant **pretv e->idling = IDLING_NONE; e->drop = 0; e->falling = 0; - e->inpain = 0; - e->rising = RISING_NONE; - e->edge = EDGE_NONE; + e->inpain = 0; + e->rising = RISING_NONE; + e->edge = EDGE_NONE; e->ducking = DUCK_NONE; e->inbackpain = 0; e->blocking = 0; @@ -13945,8 +13947,8 @@ HRESULT openbor_performattack(ScriptVariant **varlist , ScriptVariant **pretvar, e->idling = IDLING_NONE; e->drop = 0; e->falling = 0; - e->inpain = 0; - e->rising = RISING_NONE; + e->inpain = 0; + e->rising = RISING_NONE; e->edge = EDGE_NONE; e->inbackpain = 0; e->blocking = 0; @@ -14009,9 +14011,9 @@ HRESULT openbor_setidle(ScriptVariant **varlist , ScriptVariant **pretvar, int p e->idling = 1; e->drop = 0; e->falling = 0; - e->inpain = 0; - e->rising = RISING_NONE; - e->edge = EDGE_NONE; + e->inpain = 0; + e->rising = RISING_NONE; + e->edge = EDGE_NONE; e->ducking = DUCK_NONE; e->inbackpain = 0; e->blocking = 0; @@ -15155,8 +15157,8 @@ HRESULT openbor_finishlevel(ScriptVariant **varlist , ScriptVariant **pretvar, i *pretvar = NULL; level->force_finishlevel = 1; return S_OK; -} - +} + //gameover() HRESULT openbor_gameover(ScriptVariant **varlist , ScriptVariant **pretvar, int paramCount) { diff --git a/engine/resources/ps4/sce_module/libSceFios2.prx b/engine/resources/ps4/sce_module/libSceFios2.prx new file mode 100644 index 000000000..1f83bdc8f Binary files /dev/null and b/engine/resources/ps4/sce_module/libSceFios2.prx differ diff --git a/engine/resources/ps4/sce_module/libc.prx b/engine/resources/ps4/sce_module/libc.prx new file mode 100644 index 000000000..e49b25d01 Binary files /dev/null and b/engine/resources/ps4/sce_module/libc.prx differ diff --git a/engine/resources/ps4/sce_sys/about/right.sprx b/engine/resources/ps4/sce_sys/about/right.sprx new file mode 100644 index 000000000..aed25c03f Binary files /dev/null and b/engine/resources/ps4/sce_sys/about/right.sprx differ diff --git a/engine/resources/ps4/sce_sys/icon0.png b/engine/resources/ps4/sce_sys/icon0.png new file mode 100644 index 000000000..45bdc7de4 Binary files /dev/null and b/engine/resources/ps4/sce_sys/icon0.png differ diff --git a/engine/resources/switch_icon.jpg b/engine/resources/switch_icon.jpg new file mode 100644 index 000000000..fc4207e8c Binary files /dev/null and b/engine/resources/switch_icon.jpg differ diff --git a/engine/sdl/menu.c b/engine/sdl/menu.c index de60c0c2e..82129b4c3 100644 --- a/engine/sdl/menu.c +++ b/engine/sdl/menu.c @@ -58,7 +58,11 @@ static s_screen* logscreen; #define LOG_SCREEN_END (isWide ? 26 : 23) static int bpp = 32; +#if defined(__SWITCH__) || defined(__PS4__) +static int isWide = 1; +#else static int isWide = 0; +#endif static int isFull = 0; static int dListTotal; static int dListCurrentPosition; @@ -275,8 +279,8 @@ static s_screen *getPreview(char *filename) else { scalescreen(scale, title); + memcpy(scale->palette, title->palette, PAL_BYTES); } - memcpy(scale->palette, title->palette, PAL_BYTES); // ScreenShots within Menu will be saved as "Menu" strncpy(packfile,"Menu.xxx",MAX_FILENAME_LEN); diff --git a/engine/sdl/sdlport.c b/engine/sdl/sdlport.c index 0d4c7f7de..c4822f873 100644 --- a/engine/sdl/sdlport.c +++ b/engine/sdl/sdlport.c @@ -20,6 +20,9 @@ #include #elif WIN #undef main +#elif defined(__SWITCH__) && defined(__NXLINK__) +#include +int nx_sock = -1; #endif char packfile[MAX_FILENAME_LEN] = {"bor.pak"}; @@ -64,6 +67,12 @@ void borExit(int reset) SDL_Quit(); // call this instead of atexit(SDL_Quit); It's best practice! #endif +#if defined(__SWITCH__) && defined(__NXLINK__) + if (nx_sock != -1) + close(nx_sock); + socketExit(); +#endif + exit(reset); } @@ -101,6 +110,11 @@ int main(int argc, char *argv[]) } #endif +#if defined(__SWITCH__) && defined(__NXLINK__) + socketInitializeDefault(); + nx_sock = nxlinkStdio(); +#endif + setSystemRam(); initSDL(); diff --git a/engine/sdl/video.c b/engine/sdl/video.c index 0f13f308d..abb3b80dc 100644 --- a/engine/sdl/video.c +++ b/engine/sdl/video.c @@ -55,17 +55,25 @@ void initSDL() SDL_ShowCursor(SDL_DISABLE); //atexit(SDL_Quit); //White Dragon: use SDL_Quit() into sdlport.c it's best practice! -#ifdef LOADGL +#if defined(LOADGL) && !defined(__SWITCH__) && !defined(__PS4__) if(SDL_GL_LoadLibrary(NULL) < 0) { printf("Warning: couldn't load OpenGL library (%s)\n", SDL_GetError()); } #endif +#ifdef __SWITCH__ + nativeWidth = 1280; + nativeHeight = 720; +#elif __PS4__ + nativeWidth = 1920; + nativeHeight = 1080; +#else SDL_GetCurrentDisplayMode(0, &video_info); nativeWidth = video_info.w; nativeHeight = video_info.h; printf("debug:nativeWidth, nativeHeight, bpp, Hz %d, %d, %d, %d\n", nativeWidth, nativeHeight, SDL_BITSPERPIXEL(video_info.format), video_info.refresh_rate); +#endif } void video_set_window_title(const char* title) diff --git a/engine/source/globals.h b/engine/source/globals.h index bfb7ba416..f7d0fa62c 100644 --- a/engine/source/globals.h +++ b/engine/source/globals.h @@ -65,10 +65,31 @@ #define strnicmp strncasecmp #endif +#ifdef __SWITCH__ +#define stricmp strcasecmp +#define strnicmp strncasecmp +#endif + +#ifndef stricmp +#define stricmp strcasecmp +#endif + +#ifndef strnicmp +#define strnicmp strncasecmp +#endif + #include "packfile.h" ///////////////////////////////////////////////////////////////////////////// +#ifdef __CMAKE__ +#ifdef NDEBUG +#define printf writeToLogFile +#undef assert +#define assert(x) exitIfFalse((x)?1:0, #x, __func__, __FILE__, __LINE__) +#define sysassert(x) abortIfFalse((x)?1:0, #x, __func__, __FILE__, __LINE__) +#endif +#else #ifndef PP_TEST #define printf writeToLogFile @@ -77,6 +98,7 @@ #define assert(x) exitIfFalse((x)?1:0, #x, __func__, __FILE__, __LINE__) #define sysassert(x) abortIfFalse((x)?1:0, #x, __func__, __FILE__, __LINE__) #endif +#endif ///////////////////////////////////////////////////////////////////////////// diff --git a/engine/source/ramlib/ram.c b/engine/source/ramlib/ram.c index 96e93a85f..84b1428ed 100644 --- a/engine/source/ramlib/ram.c +++ b/engine/source/ramlib/ram.c @@ -115,6 +115,8 @@ u64 getFreeRam(int byte_size) return (atoi(result) * 1024) / byte_size; #elif SYMBIAN return GetFreeAmount(); +#elif __PS4__ + return 1024 * 1024 * 1024; #else struct mallinfo mi = mallinfo(); #ifdef _INCLUDE_MALLOC_H_ @@ -179,12 +181,15 @@ void setSystemRam() #elif VITA systemRam = 0x0f000000; elfOffset = 0x00000000; +#elif __SWITCH__ + systemRam = (u64) 2560 * 1024 * 1024; + elfOffset = 0x00000000; #else elfOffset = 0x00000000; stackSize = 0x00000000; systemRam = getFreeRam(BYTES); #endif -#if !(defined(WIN) || defined(LINUX) || defined(DARWIN) || defined(SYMBIAN) || defined(VITA)) +#if !(defined(WIN) || defined(LINUX) || defined(DARWIN) || defined(SYMBIAN) || defined(VITA) || defined(__SWITCH__)) && !defined(__PS4__) stackSize = (int)&_end - (int)&_start + ((int)&_start - elfOffset); #endif getRamStatus(BYTES); diff --git a/engine/source/savedata.h b/engine/source/savedata.h index 9700f3202..6890ec917 100644 --- a/engine/source/savedata.h +++ b/engine/source/savedata.h @@ -49,6 +49,9 @@ typedef struct #if ANDROID int is_touchpad_vibration_enabled; #endif +#if __SWITCH__ + int single_joycon_mode; +#endif } s_savedata; extern s_savedata savedata; diff --git a/engine/source/utils.c b/engine/source/utils.c index f9e071e69..5eba88164 100644 --- a/engine/source/utils.c +++ b/engine/source/utils.c @@ -94,6 +94,13 @@ typedef void DIR; #define READ_LOGFILE(type) type ? fopen(Alog, "rt") : fopen(Aslog, "rt") #define COPY_ROOT_PATH(buf, name) strncpy(buf, rootDir, strlen(rootDir)); strncat(buf, name, strlen(name)); strncat(buf, "/", 1); #define COPY_PAKS_PATH(buf, name) strncpy(buf, paksDir, strlen(paksDir)); strncat(buf, "/", 1); strncat(buf, name, strlen(name)); +#elif __PS4__ +#define CHECK_LOGFILE(type) type ? fileExists("/data/OpenBOR/Logs/OpenBorLog.txt") : fileExists("/data/OpenBOR/Logs/ScriptLog.txt") +#define OPEN_LOGFILE(type) type ? fopen("/data/OpenBOR/Logs/OpenBorLog.txt", "wt") : fopen("/data/OpenBOR/Logs/ScriptLog.txt", "wt") +#define APPEND_LOGFILE(type) type ? fopen("/data/OpenBOR/Logs/OpenBorLog.txt", "at") : fopen("/data/OpenBOR/Logs/ScriptLog.txt", "at") +#define READ_LOGFILE(type) type ? fopen("/data/OpenBOR/Logs/OpenBorLog.txt", "rt") : fopen("/data/OpenBOR/Logs/ScriptLog.txt", "rt") +#define COPY_ROOT_PATH(buf, name) strcpy(buf, "/data/OpenBOR/"); strcat(buf, name); strcat(buf, "/"); +#define COPY_PAKS_PATH(buf, name) strcpy(buf, "/data/OpenBOR/Paks/"); strcat(buf, name); #else #define CHECK_LOGFILE(type) type ? fileExists("./Logs/OpenBorLog.txt") : fileExists("./Logs/ScriptLog.txt") #define OPEN_LOGFILE(type) type ? fopen("./Logs/OpenBorLog.txt", "wt") : fopen("./Logs/ScriptLog.txt", "wt") @@ -303,7 +310,7 @@ void *checkAlloc(void *ptr, size_t size, const char *func, const char *file, int "\n* Shutting Down *\n\n"); writeToLogFile("Out of memory!\n"); writeToLogFile("Allocation of size %i failed in function '%s' at %s:%i.\n", size, func, file, line); -#ifndef WIN +#if !defined(WIN) && !defined(__PS4__) writeToLogFile("Memory usage at exit: %u\n", mallinfo().arena); #endif borExit(2);