Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. #include "PHL.h"
  2. #include "game.h"
  3. #include <stdlib.h>
  4. #include <time.h>
  5. #include <sys/stat.h>
  6. #include <stdlib.h>
  7. #include <stdio.h>
  8. #include <string.h>
  9. #ifdef ODROID
  10. #define _XTYPEDEF_MASK
  11. #include <X11/Xlib.h>
  12. #endif
  13. #ifdef EMSCRIPTEN
  14. #include <emscripten.h>
  15. #endif
  16.  
  17. #ifdef __amigaos4__
  18. static const char* __attribute__((used)) stackcookie = "$STACK: 1000000";
  19. #endif
  20. #ifdef __MORPHOS__
  21. unsigned long __stack = 1000000;
  22. #endif
  23.  
  24. #ifdef _KOLIBRI
  25. extern char* dirname(char*);
  26. extern void setcwd(char*);
  27. #endif
  28.  
  29. void createSaveLocations()
  30. {      
  31.         //Force create save data folders       
  32.         #ifdef _3DS
  33.                 //3DS builds
  34.                 mkdir("sdmc:/3ds", 0777);
  35.                 mkdir("sdmc:/3ds/appdata", 0777);
  36.                 mkdir("sdmc:/3ds/appdata/HydraCastleLabyrinth", 0777);
  37.                 mkdir("sdmc:/3ds/appdata/HydraCastleLabyrinth/data", 0777);
  38.                 mkdir("sdmc:/3ds/appdata/HydraCastleLabyrinth/map", 0777);
  39.         #elif defined(_SDL)
  40.                 char buff[4096];
  41.                 #if defined(__amigaos4__) || defined(__MORPHOS__)
  42.                 strcpy(buff,"PROGDIR:.hydracastlelabyrinth");
  43.                 #elif defined(EMSCRIPTEN)
  44.                 strcpy(buff, "hcl_data");
  45.                 #elif defined (_KOLIBRI)
  46.                 mkdir(KOS_HCL_SAVES_PATH, 777);
  47.                 #else
  48.                 strcpy(buff, getenv("HOME"));
  49.                 strcat(buff, "/.hydracastlelabyrinth");
  50.                 #endif
  51.                 // if exist first?
  52.                 #ifndef _KOLIBRI
  53.                 struct stat sb;
  54.                 if(!(stat(buff, &sb)==0 && S_ISDIR(sb.st_mode)))
  55.                         mkdir(buff, 0777);
  56.                 #endif
  57.         #else
  58.                 //psp, wii
  59.                 mkdir("/data", 0777);
  60.                 mkdir("/map", 0777);
  61.         #endif
  62. }
  63.  
  64. #ifdef EMSCRIPTEN
  65. int fileSynched = 0;
  66. #endif
  67.  
  68. int main(int argc, char **argv)
  69. {      
  70.         //Setup
  71.         #ifdef _KOLIBRI
  72.         setcwd(dirname(argv[0]));
  73.         #endif
  74.  
  75.         #ifdef EMSCRIPTEN
  76.         // that HEAP32 on &fileSynched looks like a hack, but I needed a way to be sure the DB is read before reading the ini files
  77.         EM_ASM_INT({
  78.                 FS.mkdir('hcl_data');
  79.                 FS.mount(IDBFS,{},'hcl_data');
  80.                 Module.print("Will import permanent storage");
  81.                 FS.syncfs(true, function() {
  82.                         Module.print("Permanent storage imported");
  83.                         HEAP32[$0>>2] = 1;
  84.                 });
  85.         }, &fileSynched);
  86.         #endif
  87.         #ifdef _3DS
  88.                 sdmcInit();
  89.                 osSetSpeedupEnable(false);
  90.         #endif
  91.         #ifdef _SDL
  92.         if ( SDL_Init(SDL_INIT_VIDEO) < 0) {
  93.                 SDL_Delay(5000);
  94.                 exit(EXIT_FAILURE);
  95.         }
  96.         #if defined(PANDORA) || defined(PYRA) || defined(CHIP) || defined(ODROID)
  97.         wantFullscreen = 1;
  98.         #else
  99.         wantFullscreen = 0;
  100.         #endif
  101.         #ifdef CHIP
  102.         screenScale = 1;
  103.         #elif defined(BITTBOY)
  104.         screenScale = 1;
  105.         #elif defined(PYRA)
  106.         //screenScale = 3;
  107.         desktopFS = 1;
  108.         #elif defined(ODROID)
  109.         desktopFS = 1;
  110.         #else
  111.         screenScale = 2;
  112.         #endif
  113.         useJoystick = 1;
  114.         // get command line arguments
  115.         for (int i=1; i<argc; i++)
  116.         {
  117.                 if(!strcmp(argv[i], "-f"))
  118.                         wantFullscreen = 1;
  119.                 if(!strcmp(argv[i], "--fullscreen"))
  120.                         wantFullscreen = 1;
  121.                 if(!strcmp(argv[i], "-d"))
  122.                         desktopFS = 1;
  123.                 if(!strcmp(argv[i], "--desktop"))
  124.                         desktopFS = 1;
  125.                 if(!strcmp(argv[i], "-x1"))
  126.                         screenScale = 1;
  127.                 if(!strcmp(argv[i], "-x2"))
  128.                         screenScale = 2;
  129.                 if(!strcmp(argv[i], "-x3"))
  130.                         screenScale = 3;
  131.                 if(!strcmp(argv[i], "-x4"))
  132.                         screenScale = 4;
  133.                 if(!strcmp(argv[i], "-x5"))
  134.                         screenScale = 5;
  135.                 if(!strcmp(argv[i], "--xbrz"))
  136.                         setXBRZ(1);
  137.                 if(!strcmp(argv[i], "--no-xbrz"))
  138.                         setXBRZ(0);
  139.                 if(!strcmp(argv[i], "-j"))
  140.                         useJoystick = 0;
  141.                 if(!strcmp(argv[i], "--nojoy"))
  142.                         useJoystick = 0;
  143.                 if(!strcmp(argv[i], "-h") || !strcmp(argv[i], "--help")) {
  144.                         printf("Quick help\n-f|--fullscreen\tUse fullscreen\n-d|--desktop\tdesktop fullscreen\n-x1|-x2|-x3|-x4\tUse screenScale of *1..*4 (default *2 = 640x480)\n-j|-nojoy\tdo not use Joystick\n--xbrz\tUse xBRZ scaling\n--no-xbrz\tNo xBRZ scaling\n");
  145.                         exit(0);
  146.                 }
  147.         }
  148.         if(desktopFS)
  149.         {
  150.                 #ifdef _SDL2
  151.                 SDL_DisplayMode infos;
  152.                 SDL_GetCurrentDisplayMode(0, &infos);
  153.                 screenW = infos.w;
  154.                 screenH = infos.h;
  155.                 #else
  156.                 const SDL_VideoInfo* infos = SDL_GetVideoInfo();
  157.                 screenH = infos->current_h;
  158.                 screenW = infos->current_w;
  159.                 #endif
  160.         } else {
  161.                 screenW = 320 * screenScale;
  162.                 screenH = 240 * screenScale;
  163.         }
  164.         printf("Hydra Castle Labyrinth, %s %dx%d scale=x%d%s, using Joystick=%d\n", (wantFullscreen || desktopFS)?"Fullscreen":"Windowed", screenW, screenH, screenScale, getXBRZ()?" xBRZ":"", useJoystick);
  165.         #endif
  166.  
  167.         srand(time(NULL));
  168.         createSaveLocations();
  169.        
  170.         game();
  171.  
  172.         //System specific cleanup      
  173.         #ifdef _PSP
  174.                 sceKernelExitGame();
  175.         #endif
  176.        
  177.         #ifdef _3DS
  178.                 sdmcExit();
  179.         #endif
  180.  
  181.         return 0;
  182. }
  183.