diff --git a/hyperweb.cpp b/hyperweb.cpp index 752abf70..bc4edd14 100644 --- a/hyperweb.cpp +++ b/hyperweb.cpp @@ -2,19 +2,14 @@ // This is the main file when the online version of HyperRogue is compiled with Emscripten. // Copyright (C) 2011-2018 Zeno Rogue, see 'hyper.cpp' for details +#ifndef ISWEB #define ISWEB 1 #define ISMINI 0 -#define CAP_AUDIO 0 -#define CAP_SDLGFX 0 -#define CAP_PNG 0 -#define CAP_TOUR 1 -#define CAP_SDLTTF 0 -#define CAP_SHMUP 0 -#define CAP_RUG 1 #define CAP_INV 0 #define CAP_URL 1 #define GLES_ONLY -#define CAP_COMPLEX2 1 +#define SCU +#endif #if CAP_ROGUEVIZ #define MAXMDIM 4 @@ -53,7 +48,11 @@ namespace hr { void offer_download(std::string sfilename, std::string smimetype); } +#ifdef SCU #include "hyper.cpp" +#else +#include "hyper.h" +#endif namespace hr { @@ -72,7 +71,7 @@ string get_value(string name) { return res; } -void offer_download(string sfilename, string smimetype) { +EX void offer_download(string sfilename, string smimetype) { EM_ASM({ var name = UTF8ToString($0, $1); @@ -105,7 +104,7 @@ extern "C" { } } -void offer_choose_file(reaction_t r) { +EX void offer_choose_file(reaction_t r) { on_use_file = r; EM_ASM({ fileElem.click(); @@ -221,7 +220,7 @@ EM_BOOL fsc_callback(int eventType, const EmscriptenFullscreenChangeEvent *fulls return true; } -void initweb() { +EX void initweb() { // toggleanim(false); emscripten_set_fullscreenchange_callback(0, NULL, false, fsc_callback); printf("showstartmenu = %d\n", showstartmenu); @@ -241,7 +240,7 @@ transmatrix getOrientation() { } #endif -void emscripten_get_commandline() { +EX void emscripten_get_commandline() { #ifdef EMSCRIPTEN_FIXED_ARG string s = EMSCRIPTEN_FIXED_ARG; #else diff --git a/language.cpp b/language.cpp index 36738b28..1d5dea17 100644 --- a/language.cpp +++ b/language.cpp @@ -62,7 +62,10 @@ struct fullnoun { }; #if !CAP_TRANS +#if HDR #define NUMEXTRA 11 +extern const char* natchars[NUMEXTRA]; +#endif const char* natchars[NUMEXTRA] = {"°","é","á", "²", "½", "Θ", "δ", "π", "ϕ", "ᵈ", "∞"}; #endif diff --git a/multi.cpp b/multi.cpp index 2b8d3525..7bf1ae58 100644 --- a/multi.cpp +++ b/multi.cpp @@ -638,6 +638,7 @@ EX void initConfig() { multi::scs[5].uicolor = 0x00C0C0FF; multi::scs[6].uicolor = 0xC0C0C0FF; + #if CAP_CONFIG addsaver(multi::players, "mode-number of players"); addsaver(alwaysuse, "use configured keys"); // unfortunately we cannot use key names here because SDL is not yet initialized @@ -656,6 +657,7 @@ EX void initConfig() { } } for(int i=0; i<7; i++) addsaver(multi::scs[i], "player"+its(i)); + #endif } EX void handleInput(int delta) { diff --git a/mymake.cpp b/mymake.cpp index 4dbcdb97..2d4ca6d7 100644 --- a/mymake.cpp +++ b/mymake.cpp @@ -59,6 +59,19 @@ void set_win() { standard = ""; } +void set_web() { + preprocessor = "/usr/lib/emscripten/em++ -E"; + compiler = "/usr/lib/emscripten/em++ -c"; + default_standard = standard = " -std=c++17"; + opts = "-DISWEB=1"; + linker = + "/usr/lib/emscripten/em++ -s USE_ZLIB=1 -s DISABLE_DEPRECATED_FIND_EVENT_TARGET_BEHAVIOR=0 -s TOTAL_MEMORY=512MB " + "-s EXTRA_EXPORTED_RUNTIME_METHODS='[\"FS\",\"ccall\"]' " + "-s EXPORTED_FUNCTIONS=\"['_main', '_use_file']\" " + "-s DISABLE_EXCEPTION_CATCHING=0 -o mhyper.html"; + libs = ""; + } + vector modules; time_t get_file_time(const string s) { @@ -118,6 +131,12 @@ int main(int argc, char **argv) { obj_dir += "/linux"; setdir += "../"; } + else if(s == "-web") { + set_web(); + modules.push_back("hyperweb"); + obj_dir += "/web"; + setdir += "../"; + } else if(s.substr(0, 2) == "-f") { opts += " " + s; obj_dir += "/"; diff --git a/nofont.cpp b/nofont.cpp index 90ebeb78..de994a34 100644 --- a/nofont.cpp +++ b/nofont.cpp @@ -127,11 +127,11 @@ unsigned char fonttable[] = { unsigned char *ftv = fonttable; -void resetTabFont() { +EX void resetTabFont() { ftv = fonttable; } -void loadCompressedChar(int &otwidth, int &otheight, unsigned char *tpix) { +EX void loadCompressedChar(int &otwidth, int &otheight, unsigned char *tpix) { if(*ftv == 255) { fprintf(stderr, "There is something wrong with the font table\n"); exit(1); diff --git a/sysconfig.h b/sysconfig.h index 075579ce..b76ad296 100644 --- a/sysconfig.h +++ b/sysconfig.h @@ -206,7 +206,7 @@ #endif #ifndef CAP_TOUR -#define CAP_TOUR (!ISWEB && !ISMINI) +#define CAP_TOUR (!ISMINI) #endif #ifndef CAP_ROGUEVIZ @@ -285,7 +285,7 @@ #endif #ifndef CAP_SHMUP -#define CAP_SHMUP 1 +#define CAP_SHMUP (!ISWEB) #endif #ifndef CAP_BITFIELD @@ -403,6 +403,10 @@ extern "C" { #define CAP_GLEW (CAP_GL && !ISMOBILE && !ISMAC && !ISLINUX && !ISWEB) #endif +#if ISWEB +#define GLES_ONLY +#endif + #if CAP_GL #if CAP_GLEW #include @@ -462,6 +466,11 @@ typedef unsigned GLuint; #include #endif +#if ISWEB +#include +#include +#endif + #if CAP_GMP #include #endif