mirror of
https://github.com/ondra-novak/gates_of_skeldal.git
synced 2025-07-04 21:50:38 -04:00
prepare linux build, fix some memory leaks
This commit is contained in:
parent
0fa5c48519
commit
e7db30ca27
13 changed files with 133 additions and 94 deletions
|
@ -3,19 +3,22 @@ project(skeldal)
|
|||
|
||||
# Najít SDL2 knihovnu
|
||||
find_package(SDL2 REQUIRED)
|
||||
set(STEAMWORKS_SDK_DIR "${CMAKE_SOURCE_DIR}/external/steamworks/")
|
||||
# Check if Steamworks SDK directories exist
|
||||
if(NOT EXISTS "${STEAMWORKS_SDK_DIR}/public")
|
||||
message(FATAL_ERROR "❌ Could not find Steamworks SDK 'public' headers.
|
||||
Make sure to download the Steamworks SDK and place it in:${STEAMWORKS_SDK_DIR}
|
||||
Expected directory: ${STEAMWORKS_SDK_DIR}/public
|
||||
")
|
||||
endif()
|
||||
if(NOT EXISTS "${STEAMWORKS_SDK_DIR}/redistributable_bin")
|
||||
message(FATAL_ERROR "❌ Could not find Steamworks SDK 'redistributable_bin' libraries.
|
||||
Make sure to download the Steamworks SDK and place it in: ${STEAMWORKS_SDK_DIR}
|
||||
Expected directory: ${STEAMWORKS_SDK_DIR}/redistributable_bin
|
||||
")
|
||||
|
||||
set(STEAMWORKS_SDK_DIR "" CACHE PATH "Path to Steamworks SDK directory")
|
||||
|
||||
if(NOT STEAMWORKS_SDK_DIR)
|
||||
set(POSSIBLE_STEAMWORKS_DIR "${CMAKE_SOURCE_DIR}/external/steamworks")
|
||||
if(EXISTS "${POSSIBLE_STEAMWORKS_DIR}/public")
|
||||
if(NOT EXISTS "${STEAMWORKS_SDK_DIR}/redistributable_bin")
|
||||
set(STEAMWORKS_SDK_DIR "${POSSIBLE_STEAMWORKS_DIR}" CACHE PATH "Path to Steamworks SDK directory" FORCE)
|
||||
endif()
|
||||
endif()
|
||||
if (NOT STEAMWORKS_SDK_DIR)
|
||||
message("!!! Steam is not installed")
|
||||
message("!!! compiling without steam and without achievements support")
|
||||
message("!!! To enable steam, set STEAMWORKS_SDK_DIR to correct value")
|
||||
set(STEAMWORKS_SDK_DIR "none" CACHE PATH "Path to Steamworks SDK directory" FORCE)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if (MSVC)
|
||||
|
@ -26,6 +29,18 @@ else()
|
|||
set(STANDARD_LIBRARIES "pthread")
|
||||
endif()
|
||||
|
||||
|
||||
|
||||
if(${STEAMWORKS_SDK_DIR} STREQUAL "none")
|
||||
set(STEAM_ENABLED 0)
|
||||
else()
|
||||
add_compile_definitions(STEAM_ENABLED)
|
||||
include_directories(${STEAMWORKS_SDK_DIR}/public)
|
||||
set(STEAM_ENABLED 1)
|
||||
|
||||
endif()
|
||||
|
||||
|
||||
include_directories(.)
|
||||
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin/)
|
||||
|
@ -33,7 +48,6 @@ set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib/)
|
|||
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib/)
|
||||
|
||||
include_directories( ${SDL2_INCLUDE_DIRS})
|
||||
include_directories(${STEAMWORKS_SDK_DIR}/public)
|
||||
add_subdirectory(libs)
|
||||
add_subdirectory(platform)
|
||||
add_subdirectory(game)
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
#include <libs/event.h>
|
||||
#include <platform/achievements.h>
|
||||
#include "globals.h"
|
||||
#include "../platform/error.h"
|
||||
#include "../platform/platform.h"
|
||||
|
||||
#include <ctype.h>
|
||||
|
@ -281,24 +282,6 @@ static PARSED_COMMAND parse_command(const char *cmd) {
|
|||
extern int ghost_walls;
|
||||
extern int nofloors;
|
||||
|
||||
static int add_file_to_console(const char *name, LIST_FILE_TYPE _, size_t __, void *ctx) {
|
||||
int *cnt = (void *)ctx;
|
||||
char buff[20] = "";
|
||||
for (int i = 0; i < 19; ++i) buff[i] = ' ';
|
||||
buff[19] = 0;
|
||||
int l = strlen(name);
|
||||
if (l > 3 && istrcmp(name+l-4,".MAP") == 0) {
|
||||
if (l>19) l = 19;
|
||||
memcpy(buff, name, l);
|
||||
wzprintf("%s", buff);
|
||||
if (++(*cnt) == 6) {
|
||||
wzprintf("\n");
|
||||
*cnt = 0;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
static int process_on_off_command(const char *cmd, char on) {
|
||||
if (istrcmp(cmd, "inner-eye") == 0) {
|
||||
|
@ -358,9 +341,8 @@ static int process_on_off_command(const char *cmd, char on) {
|
|||
|
||||
void postavy_teleport_effect(int sector,int dir,int postava,char effect);
|
||||
|
||||
static int command_ls_callback(const char*name, void* ctx) {
|
||||
static void command_ls_callback(const char *name, void* ctx) {
|
||||
wzprintf("%s\n", name);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int process_actions(const char *command) {
|
||||
|
@ -651,6 +633,25 @@ static int process_with_params(const char *cmd, const char *args) {
|
|||
free(data);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (istrcmp(cmd, "rm") == 0) {
|
||||
if (strcmp(args, "*") == 0) {
|
||||
temp_storage_clear();
|
||||
} else {
|
||||
int32_t sz =temp_storage_find(args);
|
||||
if (sz < 0) return 0;
|
||||
temp_storage_delete(args);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
if (istrcmp(cmd, "crash") == 0) {
|
||||
throw_exception(args);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -38,7 +38,7 @@
|
|||
|
||||
#define SSAVE_VERSION 0
|
||||
|
||||
static TMPFILE_WR *story=NULL;
|
||||
//static TMPFILE_WR *story=NULL;
|
||||
static char load_another;
|
||||
static unsigned long current_campaign = 0;
|
||||
static long prev_game_time_save = -999;
|
||||
|
@ -505,7 +505,7 @@ static void add_status_file(FILE *f, const char *name, size_t sz, void *data) {
|
|||
fwrite(name, 1, name_size_b, f);
|
||||
uint32_t data_size = sz;
|
||||
fwrite(&data_size,1,sizeof(data_size),f);
|
||||
fwrite(data, 1,data_size, f);
|
||||
if (data && data_size) fwrite(data,1,data_size, f);
|
||||
}
|
||||
|
||||
static void pack_status_file_cb(const char *name, void *ctx) {
|
||||
|
@ -942,6 +942,7 @@ typedef struct {
|
|||
char skip_autosave;
|
||||
} TSAVEGAME_CB_STATE;
|
||||
|
||||
/*
|
||||
static char is_same_prefix(const char *name, const char *prev_name) {
|
||||
const char *sep1 = strrchr(name, '.');
|
||||
const char *sep2 = strrchr(prev_name, '.');
|
||||
|
@ -950,7 +951,7 @@ static char is_same_prefix(const char *name, const char *prev_name) {
|
|||
if (strncmp(name, prev_name,sep1-name) == 0) return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
*/
|
||||
static int get_all_savegames_callback(const char *name, LIST_FILE_TYPE type , size_t tm, void *ctx) {
|
||||
if (istrncmp(name, "sav.", 4) != 0
|
||||
&& istrcmp(name+strlen(name)-4,".sav") != 0)
|
||||
|
@ -974,11 +975,11 @@ static int get_all_savegames_callback(const char *name, LIST_FILE_TYPE type , s
|
|||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
static int compare_strings (const void *a, const void *b) {
|
||||
return strcmp(*(const char **)a, *(const char **)b);
|
||||
}
|
||||
|
||||
*/
|
||||
static int compare_strings_third_back (const void *a, const void *b) {
|
||||
const char *sa = *(const char **)a;
|
||||
const char *sb = *(const char **)b;
|
||||
|
@ -995,7 +996,7 @@ static int compare_strings_third_back (const void *a, const void *b) {
|
|||
return -strcmp(ba,bb);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
static int dedup_strings_prefix(TSTR_LIST lst, int count) {
|
||||
int j = -1;
|
||||
for (int i = 0; i < count; ++i) {
|
||||
|
@ -1014,7 +1015,7 @@ static int dedup_strings_prefix(TSTR_LIST lst, int count) {
|
|||
}
|
||||
|
||||
|
||||
/*
|
||||
|
||||
static void load_specific_file(int slot_num,char *filename,void **out,int32_t *size) //call it in task!
|
||||
{
|
||||
FILE *slot;
|
||||
|
@ -1596,7 +1597,7 @@ void wire_ask_gamename(int id)
|
|||
}
|
||||
|
||||
static void save_as_dialog(int pos);
|
||||
static const char *find_autosave(const char *name);
|
||||
|
||||
|
||||
|
||||
#define CLK_SAVELOAD 11
|
||||
|
@ -1799,24 +1800,20 @@ void wire_save_load(char save) {
|
|||
|
||||
void open_story_file()
|
||||
{
|
||||
|
||||
story=temp_storage_append(STORY_BOOK);
|
||||
SEND_LOG("(STORY) Story temp file is opened....");
|
||||
}
|
||||
|
||||
|
||||
void write_story_text(char *text)
|
||||
{
|
||||
int l = strlen(text);
|
||||
TMPFILE_WR *story = temp_storage_append(STORY_BOOK);
|
||||
temp_storage_write( text, l, story);
|
||||
temp_storage_write("\n", 1, story);
|
||||
temp_storage_close_wr(story);
|
||||
}
|
||||
|
||||
void close_story_file()
|
||||
{
|
||||
if (story!=NULL) temp_storage_close_wr(story);
|
||||
story=NULL;
|
||||
SEND_LOG("(STORY) Story temp file is closed...");
|
||||
}
|
||||
|
||||
#if 0
|
||||
|
@ -1909,6 +1906,7 @@ void do_autosave() {
|
|||
remove(build_pathname(2, gpathtable[SR_SAVES],n));
|
||||
}
|
||||
}
|
||||
release_list(st.files);
|
||||
}
|
||||
save_game(get_save_game_slot_id(), game_name,1);
|
||||
}
|
||||
|
|
|
@ -463,7 +463,7 @@ void type_text_v2(va_list args)
|
|||
case 8:if (pos>0)
|
||||
{
|
||||
pos--;
|
||||
strcpy(&text[pos],&text[pos+1]);
|
||||
memmove(text+pos,text+pos+1, strlen(text+pos+1)+1);
|
||||
len--;
|
||||
}
|
||||
break;
|
||||
|
|
|
@ -1078,7 +1078,7 @@ char check_jidlo_voda(THUMAN *p)
|
|||
char check_map_specials(THUMAN *p)
|
||||
{
|
||||
char c=0;
|
||||
if (p->inmaphash != current_map_hash) return;
|
||||
if (p->inmaphash != current_map_hash) return c;
|
||||
switch(mglob.map_effector)
|
||||
{
|
||||
case ME_NORMAL:break;
|
||||
|
@ -1144,16 +1144,16 @@ void real_regeneration(THE_TIMER *t)
|
|||
int i;
|
||||
THUMAN *p;
|
||||
|
||||
for(i=0;i<POCET_POSTAV;i++)
|
||||
{
|
||||
for(i=0;i<POCET_POSTAV;i++) {
|
||||
p=&postavy[i];
|
||||
if (p->used)
|
||||
if (p->used) {
|
||||
if (p->lives) {
|
||||
pomala_regenerace_postavy(p);
|
||||
} else {
|
||||
umirani_postavy(p);
|
||||
}
|
||||
}
|
||||
}
|
||||
send_message(E_KOUZLO_KOLO);
|
||||
sleep_ticks+=MAX_SLEEP/30;
|
||||
if (sleep_ticks>MAX_SLEEP) sleep_ticks=MAX_SLEEP;
|
||||
|
|
|
@ -358,6 +358,7 @@ int load_map(const char *filename)
|
|||
{
|
||||
load_enemies(temp,size,&ofsts,mob_template,mob_size);
|
||||
ablock_free(mob_template);
|
||||
mob_template=NULL;
|
||||
SEND_LOG("(GAME) Loading enemies from map template...");
|
||||
}
|
||||
free(temp);
|
||||
|
@ -365,6 +366,7 @@ int load_map(const char *filename)
|
|||
case A_MAPMACR:
|
||||
SEND_LOG("(GAME) Loading multiactions...");
|
||||
load_macros(size,temp);
|
||||
free(temp);
|
||||
break;
|
||||
case A_MAPVYK:
|
||||
map_vyk=temp;
|
||||
|
@ -373,6 +375,7 @@ int load_map(const char *filename)
|
|||
case A_MOBS:
|
||||
mob_template=load_mob_legacy_format_direct(temp, &size,0);
|
||||
mob_size=size;
|
||||
free(temp);
|
||||
break;
|
||||
case A_MOBSND:
|
||||
snd_load=1;
|
||||
|
@ -391,11 +394,13 @@ int load_map(const char *filename)
|
|||
else
|
||||
{
|
||||
if (temp!=NULL)free(temp);
|
||||
ablock_free(mob_template);
|
||||
fclose(f);
|
||||
return -3;
|
||||
}
|
||||
}
|
||||
while (nmapend);
|
||||
ablock_free(mob_template);
|
||||
fclose(f);
|
||||
flag_map=(char *)getmem(mapsize*4);
|
||||
memset(minimap,0,sizeof(minimap));
|
||||
|
|
|
@ -538,11 +538,13 @@ void hide_ms_cursor()
|
|||
}
|
||||
|
||||
void redraw_ms_cursor_on_screen(void) {
|
||||
#ifdef FORCE_SOFTWARE_CURSOR
|
||||
if (mssavebuffer) {
|
||||
integer xs=*(integer *)mssavebuffer;
|
||||
integer ys=*((integer *)mssavebuffer+1);
|
||||
showview(mscuroldx,mscuroldy,xs,ys);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -35,23 +35,27 @@ if(WIN32)
|
|||
windows/skeldal.rc
|
||||
)
|
||||
target_compile_definitions(skeldal_platform PRIVATE PLATFORM_WINDOWS)
|
||||
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||
# 64-bit
|
||||
set(STEAMLIB ${STEAMWORKS_SDK_DIR}redistributable_bin/win64/steam_api64.lib)
|
||||
set(STEAMDLL ${STEAMWORKS_SDK_DIR}redistributable_bin/win64/steam_api64.dll)
|
||||
target_compile_definitions(skeldal_platform PRIVATE PLATFORM_WINDOWS_64)
|
||||
if(STEAM_ENABLED)
|
||||
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||
# 64-bit
|
||||
set(STEAMLIB ${STEAMWORKS_SDK_DIR}redistributable_bin/win64/steam_api64.lib)
|
||||
set(STEAMDLL ${STEAMWORKS_SDK_DIR}redistributable_bin/win64/steam_api64.dll)
|
||||
else()
|
||||
# 32-bit
|
||||
set(STEAMLIB ${STEAMWORKS_SDK_DIR}/redistributable_bin/win32/steam_api.lib)
|
||||
set(STEAMDLL ${STEAMWORKS_SDK_DIR}redistributable_bin/win64/steam_api.dll)
|
||||
endif()
|
||||
else()
|
||||
# 32-bit
|
||||
set(STEAMLIB ${STEAMWORKS_SDK_DIR}/redistributable_bin/win32/steam_api.lib)
|
||||
set(STEAMDLL ${STEAMWORKS_SDK_DIR}redistributable_bin/win64/steam_api.dll)
|
||||
target_compile_definitions(skeldal_platform PRIVATE PLATFORM_WINDOWS_32)
|
||||
set(STEAMLIB "")
|
||||
set(STEAMDLL "")
|
||||
endif()
|
||||
|
||||
target_link_libraries(skeldal ${all_libs} ${STEAMLIB})
|
||||
|
||||
add_custom_command(TARGET skeldal POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
||||
${STEAMDLL} $<TARGET_FILE_DIR:skeldal>
|
||||
)
|
||||
if(STEAMDLL)
|
||||
add_custom_command(TARGET skeldal POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
||||
${STEAMDLL} $<TARGET_FILE_DIR:skeldal>)
|
||||
endif()
|
||||
|
||||
message(STATUS "Building for Windows")
|
||||
|
||||
|
@ -65,14 +69,14 @@ elseif(UNIX AND NOT APPLE)
|
|||
linux/app_start.cpp
|
||||
)
|
||||
target_compile_definitions(skeldal_bin PRIVATE PLATFORM_LINUX)
|
||||
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||
# 64-bit
|
||||
set(STEAMLIB ${STEAMWORKS_SDK_DIR}/redistributable_bin/linux64/libsteam_api.so)
|
||||
target_compile_definitions(skeldal_bin PRIVATE PLATFORM_LINUX_64)
|
||||
else()
|
||||
# 32-bit
|
||||
set(STEAMLIB ${STEAMWORKS_SDK_DIR}/redistributable_bin/linux32/libsteam_api.so)
|
||||
target_compile_definitions(skeldal_bin PRIVATE PLATFORM_LINUX_32)
|
||||
if(STEAM_ENABLED)
|
||||
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||
# 64-bit
|
||||
set(STEAMLIB ${STEAMWORKS_SDK_DIR}/redistributable_bin/linux64/libsteam_api.so)
|
||||
else()
|
||||
# 32-bit
|
||||
set(STEAMLIB ${STEAMWORKS_SDK_DIR}/redistributable_bin/linux32/libsteam_api.so)
|
||||
endif()
|
||||
endif()
|
||||
add_custom_command(
|
||||
TARGET skeldal_bin POST_BUILD
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
#include "achievements.h"
|
||||
#include <steam/steam_api.h>
|
||||
#include "error.h"
|
||||
#include <string.h>
|
||||
#include <sstream>
|
||||
#include "achievements.h"
|
||||
#include "error.h"
|
||||
#include "platform.h"
|
||||
#ifdef STEAM_ENABLED
|
||||
#include <steam/steam_api.h>
|
||||
|
||||
extern "C" {
|
||||
#include <libs/event.h>
|
||||
|
@ -104,3 +105,11 @@ char *get_steam_status()
|
|||
char *out = strdup(str.c_str());
|
||||
return out;
|
||||
}
|
||||
#else
|
||||
void steam_init() {}
|
||||
void steam_shutdown() {}
|
||||
int8_t set_achievement(const char *id) {return -1;}
|
||||
int8_t clear_achievement(const char *id) {return -1;}
|
||||
char is_steam_available() {return 0;}
|
||||
char *get_steam_status() {return NULL;}
|
||||
#endif
|
||||
|
|
|
@ -34,3 +34,7 @@ void send_log_impl(const char *format, ...) {
|
|||
#endif
|
||||
|
||||
}
|
||||
|
||||
void throw_exception(const char *text) {
|
||||
throw std::runtime_error(std::string("Invoked crash:") + text);
|
||||
}
|
||||
|
|
|
@ -8,6 +8,7 @@ extern "C" {
|
|||
|
||||
void send_log_impl(const char *format, ...);
|
||||
void display_error(const char *format, ...);
|
||||
void throw_exception(const char *text);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
#!/bin/bash
|
||||
|
||||
temp_file=$(mktemp /tmp/skeldal.XXXXXX.log)
|
||||
CURDIR=`dirname "$0"`
|
||||
|
||||
`dirname $0`/skeldal_bin $* > "$temp_file" 2>&1
|
||||
LD_LIBRARY_PATH=$CURDIR:$LD_LIBRARY_PATH "$CURDIR/skeldal_bin" $* > "$temp_file" 2>&1
|
||||
|
||||
exit_code=$?
|
||||
|
||||
|
@ -24,3 +24,5 @@ if [ $exit_code -ne 0 ]; then
|
|||
fi
|
||||
rm $temp_file
|
||||
exit $exit_code
|
||||
|
||||
|
||||
|
|
|
@ -11,7 +11,6 @@
|
|||
#include <stdexcept>
|
||||
#include <sstream>
|
||||
#include <algorithm>
|
||||
#include <steam/steam_api.h>
|
||||
#include <stdbool.h>
|
||||
#include <thread>
|
||||
#include <mutex>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue