diff --git a/polymer/eduke32/build/include/baselayer.h b/polymer/eduke32/build/include/baselayer.h
index c7e9b959b..ec52ee76a 100644
--- a/polymer/eduke32/build/include/baselayer.h
+++ b/polymer/eduke32/build/include/baselayer.h
@@ -188,13 +188,13 @@ void showframe(int32_t);
 int32_t setpalette(int32_t start, int32_t num);
 //int32_t getpalette(int32_t start, int32_t num, char *dapal);
 int32_t setgamma(void);
-extern double vid_gamma, vid_contrast, vid_brightness;
+extern float vid_gamma, vid_contrast, vid_brightness;
 
-#define DEFAULT_GAMMA 1.0
-#define DEFAULT_CONTRAST 1.0
-#define DEFAULT_BRIGHTNESS 0.0
+#define DEFAULT_GAMMA 1.0f
+#define DEFAULT_CONTRAST 1.0f
+#define DEFAULT_BRIGHTNESS 0.0f
 
-#define GAMMA_CALC ((int32_t)(min(max((double)((vid_gamma-1.0)*10.0),0),15)))
+#define GAMMA_CALC ((int32_t)(min(max((float)((vid_gamma-1.0f)*10.0f),0.f),15.f)))
 
 //int32_t switchrendermethod(int32_t,int32_t);    // 0 = software, 1 = opengl | bool = reinit
 
diff --git a/polymer/eduke32/build/include/compat.h b/polymer/eduke32/build/include/compat.h
index 7cfdb8cbd..f2c3ba02b 100644
--- a/polymer/eduke32/build/include/compat.h
+++ b/polymer/eduke32/build/include/compat.h
@@ -177,6 +177,14 @@ static inline long lround(double num)
 #define nearbyintf rintf
 #endif
 
+#if defined(__arm__)
+#define Bsqrt __sqrt
+#define Bsqrtf __sqrtf
+#else
+#define Bsqrt sqrt
+#define Bsqrtf sqrtf
+#endif
+
 #ifndef NULL
 # define NULL ((void *)0)
 #endif
diff --git a/polymer/eduke32/build/src/baselayer.c b/polymer/eduke32/build/src/baselayer.c
index 494753903..26022f0d3 100644
--- a/polymer/eduke32/build/src/baselayer.c
+++ b/polymer/eduke32/build/src/baselayer.c
@@ -422,9 +422,9 @@ int32_t baselayer_init(void)
         { "r_tror_nomaskpass", "enable/disable additional pass in TROR software rendering", (void *)&r_tror_nomaskpass, CVAR_BOOL, 0, 1 },
 #endif
         { "r_windowpositioning", "enable/disable window position memory", (void *) &windowpos, CVAR_BOOL, 0, 1 },
-        { "vid_gamma","adjusts gamma component of gamma ramp",(void *) &vid_gamma, CVAR_DOUBLE|CVAR_FUNCPTR, 0, 10 },
-        { "vid_contrast","adjusts contrast component of gamma ramp",(void *) &vid_contrast, CVAR_DOUBLE|CVAR_FUNCPTR, 0, 10 },
-        { "vid_brightness","adjusts brightness component of gamma ramp",(void *) &vid_brightness, CVAR_DOUBLE|CVAR_FUNCPTR, 0, 10 },
+        { "vid_gamma","adjusts gamma component of gamma ramp",(void *) &vid_gamma, CVAR_FLOAT|CVAR_FUNCPTR, 0.f, 10.f },
+        { "vid_contrast","adjusts contrast component of gamma ramp",(void *) &vid_contrast, CVAR_FLOAT|CVAR_FUNCPTR, 0.f, 10.f },
+        { "vid_brightness","adjusts brightness component of gamma ramp",(void *) &vid_brightness, CVAR_FLOAT|CVAR_FUNCPTR, 0.f, 10.f },
 #ifdef DEBUGGINGAIDS
         { "debug1","debug counter",(void *) &debug1, CVAR_FLOAT, -100000, 100000 },
         { "debug2","debug counter",(void *) &debug2, CVAR_FLOAT, -100000, 100000 },
diff --git a/polymer/eduke32/build/src/build.c b/polymer/eduke32/build/src/build.c
index 1e9885e86..893070f61 100644
--- a/polymer/eduke32/build/src/build.c
+++ b/polymer/eduke32/build/src/build.c
@@ -91,7 +91,7 @@ int32_t synctics = 0, lockclock = 0;
 
 // those ones save the respective 3d video vars while in 2d mode
 // so that exiting from mapster32 in 2d mode saves the correct ones
-double vid_gamma_3d=-1, vid_contrast_3d=-1, vid_brightness_3d=-1;
+float vid_gamma_3d=-1, vid_contrast_3d=-1, vid_brightness_3d=-1;
 
 int32_t xdim2d = 640, ydim2d = 480, xdimgame = 640, ydimgame = 480, bppgame = 8;
 int32_t forcesetup = 1;
diff --git a/polymer/eduke32/build/src/engine.c b/polymer/eduke32/build/src/engine.c
index dc5f95024..fc96b5a61 100644
--- a/polymer/eduke32/build/src/engine.c
+++ b/polymer/eduke32/build/src/engine.c
@@ -59,7 +59,10 @@ L_State g_engState;
 # define CLASSIC_NONPOW2_YSIZE_WALLS
 #endif
 
+#if !defined(__arm__) && !defined(GEKKO)
 #define HIGH_PRECISION_SPRITE
+#endif
+
 #define MULTI_COLUMN_VLINE
 //#define DEBUG_TILESIZY_512
 //#define DEBUG_TILEOFFSETS
@@ -156,9 +159,9 @@ uint32_t r_screenxy = 0;
 
 int32_t curbrightness = 0, gammabrightness = 0;
 
-double vid_gamma = DEFAULT_GAMMA;
-double vid_contrast = DEFAULT_CONTRAST;
-double vid_brightness = DEFAULT_BRIGHTNESS;
+float vid_gamma = DEFAULT_GAMMA;
+float vid_contrast = DEFAULT_CONTRAST;
+float vid_brightness = DEFAULT_BRIGHTNESS;
 
 //Textured Map variables
 static char globalpolytype;
@@ -2428,8 +2431,9 @@ static int32_t bakframeplace[4], bakxsiz[4], bakysiz[4];
 static int32_t bakwindowx1[4], bakwindowy1[4];
 static int32_t bakwindowx2[4], bakwindowy2[4];
 #ifdef USE_OPENGL
-static int32_t bakrendmode,baktile;
+static int32_t bakrendmode;
 #endif
+static int32_t baktile;
 
 char apptitle[256] = "Build Engine";
 
@@ -2512,9 +2516,7 @@ int32_t engine_addtsprite(int16_t z, int16_t sectnum)
         }
     }
     else
-#ifdef YAX_ENABLE
         if (yax_nomaskpass==0)
-#endif
     {
         sortcnt = &yax_spritesortcnt[yax_globallev];
         if (*sortcnt >= MAXSPRITESONSCREEN)
@@ -5579,32 +5581,6 @@ static void setup_globals_sprite1(const spritetype *tspr, const sectortype *sec,
 //
 // drawsprite (internal)
 //
-static void drawsprite_opengl(int32_t snum)
-{
-    //============================================================================= //POLYMOST BEGINS
-#ifdef USE_OPENGL
-    if (getrendermode() == REND_POLYMOST)
-    {
-        polymost_drawsprite(snum);
-        bglDisable(GL_POLYGON_OFFSET_FILL);
-    }
-# ifdef POLYMER
-    else if (getrendermode() == REND_POLYMER)
-    {
-        bglEnable(GL_ALPHA_TEST);
-        bglEnable(GL_BLEND);
-
-        polymer_drawsprite(snum);
-
-        bglDisable(GL_BLEND);
-        bglDisable(GL_ALPHA_TEST);
-    }
-# endif
-#else
-    UNREFERENCED_PARAMETER(snum);
-#endif
-    //============================================================================= //POLYMOST ENDS
-}
 
 
 static uint8_t falpha_to_blend(float alpha, int32_t *cstatptr, int32_t transbit1, int32_t transbit2)
@@ -6614,10 +6590,27 @@ draw_as_face_sprite:
 
 static void drawsprite(int32_t snum)
 {
-    if (getrendermode() >= REND_POLYMOST)
-        drawsprite_opengl(snum);
-    else
+    switch (getrendermode())
+    {
+    case REND_CLASSIC:
         drawsprite_classic(snum);
+        return;
+#ifdef USE_OPENGL
+    case REND_POLYMOST:
+        polymost_drawsprite(snum);
+        bglDisable(GL_POLYGON_OFFSET_FILL);
+        return;
+# ifdef POLYMER
+    case REND_POLYMER:
+        bglEnable(GL_ALPHA_TEST);
+        bglEnable(GL_BLEND);
+        polymer_drawsprite(snum);
+        bglDisable(GL_BLEND);
+        bglDisable(GL_ALPHA_TEST);
+        return;
+# endif
+#endif
+    }
 }
 
 
@@ -7851,8 +7844,8 @@ static void dosetaspect(void)
         int32_t k, x, xinc;
 
         no_radarang2 = 0;
-        oxdimen = xdimen;
         oviewingrange = viewingrange;
+        oxdimen = xdimen;
 
         xinc = mulscale32(viewingrange*320,xdimenrecip);
         x = (640<<16)-mulscale1(xinc,xdimen);
@@ -7877,9 +7870,9 @@ static void dosetaspect(void)
         }
 
         {
-            EDUKE32_STATIC_ASSERT((uint64_t)MAXXDIM*(ARRAY_SIZE(distrecip)-1) <= INT32_MAX);
+            EDUKE32_STATIC_ASSERT((uint64_t) MAXXDIM*(ARRAY_SIZE(distrecip)-1) <= INT32_MAX);
 
-            for (i=1; i<(int32_t)ARRAY_SIZE(distrecip); i++)
+            for (i=1; i<(int32_t) ARRAY_SIZE(distrecip); i++)
                 distrecip[i] = (xdimen * i)>>20;
         }
 
@@ -8862,7 +8855,7 @@ int32_t initengine(void)
         return 1;
 
 #ifdef USE_OPENGL
-    if (!hicfirstinit) hicinit();
+    if (!hicinitcounter) hicinit();
     if (!mdinited) mdinit();
 #endif
 
@@ -9357,10 +9350,10 @@ static inline int32_t         sameside(const _equation *eq, const _point2d *p1,
     if (sign1 > 0)
     {
         //OSD_Printf("SAME SIDE !\n");
-        return (1);
+        return 1;
     }
     //OSD_Printf("OPPOSITE SIDE !\n");
-    return (0);
+    return 0;
 }
 
 // x1, y1: in/out
@@ -9409,6 +9402,7 @@ void drawmasks(void)
 #ifdef USE_OPENGL
         const int32_t modelp = (usemodels && tile2model[tspriteptr[i]->picnum].modelid >= 0);
 #endif
+
         if (yp > (4<<8))
         {
             const int32_t xp = dmulscale6(ys,cosglobalang,-xs,singlobalang);
@@ -15265,14 +15259,19 @@ void setviewtotile(int16_t tilenume, int32_t xsiz, int32_t ysiz)
     bakframeplace[setviewcnt] = frameplace; frameplace = waloff[tilenume];
     bakwindowx1[setviewcnt] = windowx1; bakwindowy1[setviewcnt] = windowy1;
     bakwindowx2[setviewcnt] = windowx2; bakwindowy2[setviewcnt] = windowy2;
-#ifdef USE_OPENGL
+
     if (setviewcnt == 0)
     {
+#ifdef USE_OPENGL
         bakrendmode = rendmode;
+#endif
         baktile = tilenume;
     }
-    rendmode = REND_CLASSIC;//2;
+
+#ifdef USE_OPENGL
+    rendmode = REND_CLASSIC;
 #endif
+
     copybufbyte(&startumost[windowx1],&bakumost[windowx1],(windowx2-windowx1+1)*sizeof(bakumost[0]));
     copybufbyte(&startdmost[windowx1],&bakdmost[windowx1],(windowx2-windowx1+1)*sizeof(bakdmost[0]));
     setviewcnt++;
@@ -17628,7 +17627,7 @@ static inline uint32_t hash_getcode(const char *s)
     return h;
 }
 
-void hash_add(hashtable_t *t, const char *s, int32_t key, int32_t replace)
+void hash_add(hashtable_t *t, const char *s, intptr_t key, int32_t replace)
 {
     hashitem_t *cur, *prev=NULL;
     int32_t code;
@@ -17708,7 +17707,7 @@ void hash_delete(hashtable_t *t, const char *s)
     while ((cur = cur->next));
 }
 
-int32_t hash_find(const hashtable_t *t, const char *s)
+intptr_t hash_find(const hashtable_t *t, const char *s)
 {
     hashitem_t *cur;
 
@@ -17728,7 +17727,7 @@ int32_t hash_find(const hashtable_t *t, const char *s)
     return -1;
 }
 
-int32_t hash_findcase(const hashtable_t *t, const char *s)
+intptr_t hash_findcase(const hashtable_t *t, const char *s)
 {
     hashitem_t *cur;
 
diff --git a/polymer/eduke32/build/src/engine_priv.h b/polymer/eduke32/build/src/engine_priv.h
index fcc9e9966..8e583d5e4 100644
--- a/polymer/eduke32/build/src/engine_priv.h
+++ b/polymer/eduke32/build/src/engine_priv.h
@@ -72,7 +72,7 @@ extern int16_t numscans, numbunches;
 #ifdef USE_OPENGL
 
 // For GL_EXP2 fog:
-#define FOGSCALE 0.0000768
+#define FOGSCALE 0.0000768f
 
 extern palette_t palookupfog[MAXPALOOKUPS];
 void calc_and_apply_fog(int32_t tile, int32_t shade, int32_t vis, int32_t pal);
diff --git a/polymer/eduke32/build/src/sdlayer.c b/polymer/eduke32/build/src/sdlayer.c
index 71292720a..c48db7aa1 100644
--- a/polymer/eduke32/build/src/sdlayer.c
+++ b/polymer/eduke32/build/src/sdlayer.c
@@ -2142,16 +2142,16 @@ int32_t getpalette(int32_t start, int32_t num, char *dapal)
 //
 int32_t setgamma(void)
 {
-	//return 0;
+    //return 0;
 
     int32_t i;
     uint16_t gammaTable[768];
-    float gamma = max(0.1f,min(4.f,vid_gamma));
-    float contrast = max(0.1f,min(3.f,vid_contrast));
-    float bright = max(-0.8f,min(0.8f,vid_brightness));
+    float gamma = max(0.1f, min(4.f, vid_gamma));
+    float contrast = max(0.1f, min(3.f, vid_contrast));
+    float bright = max(-0.8f, min(0.8f, vid_brightness));
 
-    double invgamma = 1 / gamma;
-    double norm = pow(255., invgamma - 1);
+    float invgamma = 1.f / gamma;
+    float norm = powf(255.f, invgamma - 1.f);
 
     if (novideo) return 0;
 
@@ -2162,21 +2162,23 @@ int32_t setgamma(void)
 
     for (i = 0; i < 256; i++)
     {
-        double val = i * contrast - (contrast - 1) * 127;
-        if (gamma != 1) val = pow(val, invgamma) / norm;
-        val += bright * 128;
+        float val = i * contrast - (contrast - 1.f) * 127.f;
+        if (gamma != 1.f)
+            val = powf(val, invgamma) / norm;
 
-        gammaTable[i] = gammaTable[i + 256] = gammaTable[i + 512] = (uint16_t)max(0.f,(double)min(0xffff,val*256));
+        val += bright * 128.f;
+
+        gammaTable[i] = gammaTable[i + 256] = gammaTable[i + 512] = (uint16_t) max(0.f, min(65535.f, val*256.f));
     }
 
 #if SDL_MAJOR_VERSION==1
-    i = SDL_SetGammaRamp(&gammaTable[0],&gammaTable[256],&gammaTable[512]);
+    i = SDL_SetGammaRamp(&gammaTable[0], &gammaTable[256], &gammaTable[512]);
     if (i != -1)
 #else
     i = INT32_MIN;
+
     if (sdl_window)
-        i = SDL_SetWindowGammaRamp(
-            sdl_window,&gammaTable[0],&gammaTable[256],&gammaTable[512]);
+        i = SDL_SetWindowGammaRamp(sdl_window, &gammaTable[0], &gammaTable[256], &gammaTable[512]);
 
     if (i < 0)
     {