X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgl%2Frender.c;h=e29dd232c40cfd39ff164ab81e1483e17d710948;hb=2cd3d04c04fb347e6eea354dccf14099f56bd352;hp=28c5b86976ccb1cb97f6cf464698034798d88587;hpb=21e27adcd50196e94141390f96c8d4a089ccde08;p=flatwaifu.git
diff --git a/src/gl/render.c b/src/gl/render.c
index 28c5b86..e29dd23 100644
--- a/src/gl/render.c
+++ b/src/gl/render.c
@@ -1,3 +1,18 @@
+/* Copyright (C) 2020 SovietPony
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, version 3 of the License ONLY.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
#include "glob.h"
#include "render.h"
#include "system.h"
@@ -11,8 +26,8 @@
#include "dots.h"
#include "items.h"
-#include "sound.h" // snd_vol
-#include "music.h" // mus_vol
+#include "sound.h"
+#include "music.h"
#include "fx.h"
#include "player.h"
@@ -23,6 +38,7 @@
#include "switch.h" // sw_secrets
#include "cp866.h"
+#include "common/endianness.h"
#ifdef __APPLE__
# include
@@ -542,7 +558,7 @@ static image R_gl_loadimage (const char name[8]) {
}
static image R_gl_get_special_spr (const char n[4], int s, int d, rgba *(*fn)(vgaimg*)) {
- return R_gl_get_special_image(F_getsprid(n, s, d), fn);
+ return R_gl_get_special_image(F_getsprid(n, s, d, NULL), fn);
}
static void R_gl_free_image (image *img) {
@@ -553,16 +569,12 @@ static void R_gl_free_image (image *img) {
img->res = -1;
}
-static void R_gl_quad_vetexes (int x, int y, int w, int h) {
+static void R_gl_draw_quad (int x, int y, int w, int h) {
+ glBegin(GL_QUADS);
glVertex2i(x + w, y);
glVertex2i(x, y);
glVertex2i(x, y + h);
glVertex2i(x + w, y + h);
-}
-
-static void R_gl_draw_quad (int x, int y, int w, int h) {
- glBegin(GL_QUADS);
- R_gl_quad_vetexes(x, y, w, h);
glEnd();
}
@@ -636,10 +648,7 @@ static void R_gl_setmatrix (void) {
/* --- Misc --- */
static image Z_getspr (const char n[4], int s, int d, char *dir) {
- int h = F_getsprid(n, s, d);
- if (dir != NULL) {
- *dir = (h & 0x8000) ? 1 : 0;
- }
+ int h = F_getsprid(n, s, d, dir);
return R_gl_getimage(h);
}
@@ -806,58 +815,59 @@ static void get_entry_size (const menu_t *m, int i, int *w, int *h) {
int type = 0;
menu_msg_t msg;
msg.type = GM_GETENTRY;
- assert(GM_send(m, i, &msg));
- type = msg.integer.i;
- switch (type) {
- case GM_BUTTON:
- case GM_SCROLLER:
- case GM_TEXTFIELD:
- case GM_TEXTFIELD_BUTTON:
- msg.type = GM_GETCAPTION;
- if (GM_send(m, i, &msg)) {
- x = Z_get_big_string_width("%.*s", msg.string.maxlen, msg.string.s);
- }
- break;
- case GM_SMALL_BUTTON:
- msg.type = GM_GETCAPTION;
- if (GM_send(m, i, &msg)) {
- x = Z_get_small_string_width("%.*s", msg.string.maxlen, msg.string.s);
- }
- break;
- default:
- assert(0);
- }
- switch (type) {
- case GM_BUTTON:
- msg.type = GM_GETSTR;
- if (GM_send(m, i, &msg)) {
- x += Z_get_big_string_width("%.*s", msg.string.maxlen, msg.string.s);
- }
- y = 16;
- break;
- case GM_SMALL_BUTTON:
- msg.type = GM_GETSTR;
- if (GM_send(m, i, &msg)) {
- x += Z_get_big_string_width("%.*s", msg.string.maxlen, msg.string.s);
- }
- y = 12;
- break;
- case GM_SCROLLER:
- x += (SCROLLER_MIDDLE + 2) * 8;
- y = 16;
- break;
- case GM_TEXTFIELD:
- case GM_TEXTFIELD_BUTTON:
- msg.type = GM_GETSTR;
- if (GM_send(m, i, &msg)) {
- x += (msg.string.maxlen + 2) * 8;
- } else {
- x += (TEXTFIELD_MIDDLE + 2) * 8;
- }
- y = 16;
- break;
- default:
- assert(0);
+ if (GM_send(m, i, &msg)) {
+ type = msg.integer.i;
+ switch (type) {
+ case GM_BUTTON:
+ case GM_SCROLLER:
+ case GM_TEXTFIELD:
+ case GM_TEXTFIELD_BUTTON:
+ msg.type = GM_GETCAPTION;
+ if (GM_send(m, i, &msg)) {
+ x = Z_get_big_string_width("%.*s", msg.string.maxlen, msg.string.s);
+ }
+ break;
+ case GM_SMALL_BUTTON:
+ msg.type = GM_GETCAPTION;
+ if (GM_send(m, i, &msg)) {
+ x = Z_get_small_string_width("%.*s", msg.string.maxlen, msg.string.s);
+ }
+ break;
+ default:
+ assert(0);
+ }
+ switch (type) {
+ case GM_BUTTON:
+ msg.type = GM_GETSTR;
+ if (GM_send(m, i, &msg)) {
+ x += Z_get_big_string_width("%.*s", msg.string.maxlen, msg.string.s);
+ }
+ y = 16;
+ break;
+ case GM_SMALL_BUTTON:
+ msg.type = GM_GETSTR;
+ if (GM_send(m, i, &msg)) {
+ x += Z_get_big_string_width("%.*s", msg.string.maxlen, msg.string.s);
+ }
+ y = 12;
+ break;
+ case GM_SCROLLER:
+ x += (SCROLLER_MIDDLE + 2) * 8;
+ y = 16;
+ break;
+ case GM_TEXTFIELD:
+ case GM_TEXTFIELD_BUTTON:
+ msg.type = GM_GETSTR;
+ if (GM_send(m, i, &msg)) {
+ x += (msg.string.maxlen + 2) * 8;
+ } else {
+ x += (TEXTFIELD_MIDDLE + 2) * 8;
+ }
+ y = 16;
+ break;
+ default:
+ assert(0);
+ }
}
*w = x;
*h = y;
@@ -1049,8 +1059,12 @@ static void R_draw_dots (void) {
glBegin(GL_QUADS);
for (i = 0; i < MAXDOT; i++) {
if (dot[i].t != 0) {
- R_gl_set_color(dot[i].c);
- R_gl_quad_vetexes(dot[i].o.x, dot[i].o.y, 1, 1);
+ int x = dot[i].o.x;
+ int y = dot[i].o.y;
+ R_gl_set_color(dot[i].c); glVertex2i(x + 1, y);
+ R_gl_set_color(dot[i].c); glVertex2i(x, y);
+ R_gl_set_color(dot[i].c); glVertex2i(x, y + 1);
+ R_gl_set_color(dot[i].c); glVertex2i(x + 1, y + 1);
}
}
glEnd();
@@ -1128,7 +1142,7 @@ static int wpnspr (player_t *p) {
}
static void R_draw_player (player_t *p) {
- enum {STAND, GO, DIE, SLOP, DEAD, MESS, OUT, FALL}; // copypasted from player.c!
+ enum {STAND, GO, DIE, SLOP, DEAD, MESS, OUT_, FALL}; // copypasted from player.c!
static const int wytab[] = {-1, -2, -1, 0};
int s = 'A';
int w = 0;
@@ -1174,7 +1188,7 @@ static void R_draw_player (player_t *p) {
case SLOP:
s = plr_slopanim[p->s];
break;
- case OUT:
+ case OUT_:
s = 0;
break;
}
@@ -1340,7 +1354,6 @@ static void R_draw_smoke (void) {
static void R_draw_effects (void) {
enum {NONE, TFOG, IFOG, BUBL}; // copypasted from fx.c
int i, s;
- glPointSize(screen_scale);
for (i = 0; i < MAXFX; ++i) {
switch (fx[i].t) {
case TFOG:
@@ -1876,7 +1889,7 @@ void R_set_videomode (int w, int h, int fullscreen) {
R_reload_textures();
}
-static int video_menu_handler (menu_msg_t *msg, const menu_t *m, void *data, int i) {
+static int video_menu_handler (menu_msg_t *msg, const menu_t *m, int i) {
static int cur;
static int w, h, fullscreen;
static char buf[16];
@@ -1937,12 +1950,9 @@ static int video_menu_handler (menu_msg_t *msg, const menu_t *m, void *data, int
return simple_menu_handler(msg, i, __NUM__, &sm, &cur);
}
-static const menu_t video_menu = {
- NULL, &video_menu_handler
-};
-
const menu_t *R_menu (void) {
- return &video_menu;
+ static const menu_t m = { video_menu_handler };
+ return &m;
}
const cfg_t *R_args (void) {
@@ -1998,7 +2008,7 @@ void R_get_name (int n, char s[8]) {
static short getani (char n[8]) {
short i = 0;
- while (i < ANIT - 1 && strncasecmp(n, anm[i][0], 8) != 0) {
+ while (i < ANIT - 1 && cp866_strncasecmp(n, anm[i][0], 8) != 0) {
i++;
}
return i < ANIT - 1 ? i + 1 : 0;
@@ -2040,7 +2050,7 @@ void R_begin_load (void) {
max_textures = 1;
}
-void R_load (char s[8], int f) {
+void R_load (char s[8]) {
assert(max_textures < 256);
if (!s[0]) {
walp[max_textures] = (image) {
@@ -2051,7 +2061,7 @@ void R_load (char s[8], int f) {
.h = 0,
.res = -1,
};
- } else if (strncasecmp(s, "_WATER_", 7) == 0) {
+ } else if (cp866_strncasecmp(s, "_WATER_", 7) == 0) {
walp[max_textures] = (image) {
.n = (void*)((intptr_t)s[7] - '0' + 1),
.x = 0,
@@ -2062,9 +2072,6 @@ void R_load (char s[8], int f) {
};
} else {
walp[max_textures] = R_gl_loadimage(s);
- if (f) {
- walp[max_textures].res |= 0x8000;
- }
if (s[0] == 'S' && s[1] == 'W' && s[4] == '_') {
walswp[max_textures] = 0;
}
@@ -2083,7 +2090,7 @@ void R_end_load (void) {
if (walswp[i] == 0) {
R_get_name(i, s);
s[5] ^= 1;
- g = F_getresid(s) | (walp[i].res & 0x8000);
+ g = F_getresid(s);
k = 1;
while (k < 256 && walp[k].res != g) {
k += 1;
@@ -2093,7 +2100,7 @@ void R_end_load (void) {
j += 1;
max_textures += 1;
walp[k] = R_gl_getimage(g);
- walf[k] = g & 0x8000 ? 1 : 0;
+ walf[k] = walf[i];
}
walswp[i] = k;
walswp[k] = i;