1
0
Fork 0
forked from fte/fteqw

fix .gravity on non-players.

try to fix webgl's mouse cursors on misaligned canvases.
fix q2 tent issue.
fix bmp screenshots.
allow disabling packages via renaming, instead of only deleting.
support negative dlights.

git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5133 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
Spoike 2017-07-31 17:15:37 +00:00
parent d980fd74a0
commit e8c0014b58
16 changed files with 121 additions and 54 deletions

View file

@ -2415,6 +2415,13 @@ qboolean SCR_ScreenShot (char *filename, enum fs_relative fsroot, void **buffer,
char ext[8]; char ext[8];
void *nbuffers[2]; void *nbuffers[2];
switch(fmt)
{ //nuke any alpha channel...
case TF_RGBA32: fmt = TF_RGBX32; break;
case TF_BGRA32: fmt = TF_BGRX32; break;
default: break;
}
if (!bytestride) if (!bytestride)
bytestride = width*4; bytestride = width*4;
if (bytestride < 0) if (bytestride < 0)

View file

@ -3426,7 +3426,7 @@ void CLQ2_ParseTEnt (void)
case Q2TE_FORCEWALL: case Q2TE_FORCEWALL:
MSG_ReadPos (pos); MSG_ReadPos (pos);
MSG_ReadDir (pos2); MSG_ReadPos (pos2);
color = MSG_ReadByte (); color = MSG_ReadByte ();
P_ParticleTrailIndex(pos, pos2, pt, color, 0, NULL); P_ParticleTrailIndex(pos, pos2, pt, color, 0, NULL);
break; break;

View file

@ -2055,6 +2055,7 @@ typedef struct bmpheader_s
unsigned short Reserved1; unsigned short Reserved1;
unsigned short Reserved2; unsigned short Reserved2;
unsigned int OffsetofBMPBits; unsigned int OffsetofBMPBits;
unsigned int SizeofBITMAPINFOHEADER; unsigned int SizeofBITMAPINFOHEADER;
signed int Width; signed int Width;
signed int Height; signed int Height;
@ -2074,7 +2075,8 @@ typedef struct bmpheaderv4_s
unsigned int BlueMask; unsigned int BlueMask;
unsigned int AlphaMask; unsigned int AlphaMask;
qbyte ColourSpace[4]; //"Win " or "sRGB" qbyte ColourSpace[4]; //"Win " or "sRGB"
qbyte ColourSpaceCrap[24+4*3]; qbyte ColourSpaceCrap[12*3];
unsigned int Gamma[3];
} bmpheaderv4_t; } bmpheaderv4_t;
qbyte *ReadBMPFile(qbyte *buf, int length, int *width, int *height) qbyte *ReadBMPFile(qbyte *buf, int length, int *width, int *height)
@ -2270,17 +2272,11 @@ qboolean WriteBMPFile(char *filename, enum fs_relative fsroot, qbyte *in, int in
outstride = width * (bits/8); outstride = width * (bits/8);
outstride = (outstride+3)&~3; //bmp pads rows to a multiple of 4 bytes. outstride = (outstride+3)&~3; //bmp pads rows to a multiple of 4 bytes.
data = BZ_Malloc(2+sizeof(h)+extraheadersize+width*outstride);
out = data+2+sizeof(h)+extraheadersize;
data[0] = 'B';
data[1] = 'M';
h.Size = 2+sizeof(h)+extraheadersize + outstride*height; h.Size = 2+sizeof(h)+extraheadersize + outstride*height;
h.Reserved1 = 0; h.Reserved1 = 0;
h.Reserved2 = 0; h.Reserved2 = 0;
h.OffsetofBMPBits = 2+sizeof(h)+extraheadersize; h.OffsetofBMPBits = 2+sizeof(h)+extraheadersize; //yes, this is misaligned.
h.SizeofBITMAPINFOHEADER = sizeof(h)+extraheadersize; h.SizeofBITMAPINFOHEADER = (sizeof(h)-12)+extraheadersize;
h.Width = width; h.Width = width;
h.Height = height; h.Height = height;
h.Planes = 1; h.Planes = 1;
@ -2291,9 +2287,18 @@ qboolean WriteBMPFile(char *filename, enum fs_relative fsroot, qbyte *in, int in
h.TargetDeviceYRes = 2835; h.TargetDeviceYRes = 2835;
h.NumofColorIndices = 0; h.NumofColorIndices = 0;
h.NumofImportantColorIndices = 0; h.NumofImportantColorIndices = 0;
memcpy(data+2, &h, sizeof(h));
if (extraheadersize) //bmp is bottom-up so flip it now.
memcpy(data+2+sizeof(h), &h4, sizeof(h4)); in += instride*(height-1);
instride *= -1;
out = data = BZ_Malloc(h.Size);
*out++ = 'B';
*out++ = 'M';
memcpy(out, &h, sizeof(h));
out += sizeof(h);
memcpy(out, &h4, extraheadersize);
out += extraheadersize;
for (y = 0; y < height; y++) for (y = 0; y < height; y++)
{ {

View file

@ -260,7 +260,7 @@ qboolean PM_PurgeOnDisable(package_t *p)
if (p->flags & DPF_DISABLEDINSTALLED) if (p->flags & DPF_DISABLEDINSTALLED)
return false; return false;
//hashed packages can also be present and not enabled, but only if they're in the cache and not native //hashed packages can also be present and not enabled, but only if they're in the cache and not native
if (*p->gamedir && p->qhash && (p->flags & DPF_CACHED)) if (*p->gamedir && p->qhash && (p->flags & DPF_PRESENT))
return false; return false;
//FIXME: add basedir-plugins to the package manager so they can be enabled/disabled properly. //FIXME: add basedir-plugins to the package manager so they can be enabled/disabled properly.
//if (p->arch) //if (p->arch)
@ -1472,7 +1472,7 @@ static unsigned int PM_ChangeList(char *out, size_t outsize)
else else
change = va(" install %s\n", p->name); change = va(" install %s\n", p->name);
} }
else if ((p->flags & DPF_PURGE) || !(p->qhash && (p->flags & DPF_CACHED))) else if ((p->flags & DPF_PURGE) || !(p->qhash && (p->flags & DPF_PRESENT)))
change = va(" uninstall %s\n", p->name); change = va(" uninstall %s\n", p->name);
else else
change = va(" disable %s\n", p->name); change = va(" disable %s\n", p->name);
@ -2285,6 +2285,7 @@ static void PM_StartADownload(void)
static void PM_ApplyChanges(void) static void PM_ApplyChanges(void)
{ {
package_t *p, **link; package_t *p, **link;
char temp[MAX_OSPATH];
if (pkg_updating) if (pkg_updating)
return; return;
@ -2331,7 +2332,6 @@ static void PM_ApplyChanges(void)
if (*p->gamedir) if (*p->gamedir)
{ {
char *f = va("%s/%s", p->gamedir, dep->name); char *f = va("%s/%s", p->gamedir, dep->name);
char temp[MAX_OSPATH];
if (p->qhash && FS_GenCachedPakName(f, p->qhash, temp, sizeof(temp)) && PM_CheckFile(temp, p->fsroot)) if (p->qhash && FS_GenCachedPakName(f, p->qhash, temp, sizeof(temp)) && PM_CheckFile(temp, p->fsroot))
{ {
if (!FS_Remove(temp, p->fsroot)) if (!FS_Remove(temp, p->fsroot))
@ -2346,7 +2346,21 @@ static void PM_ApplyChanges(void)
} }
} }
else else
{
for (dep = p->deps; dep; dep = dep->next)
{
if (dep->dtype == DEP_FILE)
{
if (*p->gamedir)
{
char *f = va("%s/%s", p->gamedir, dep->name);
if ((p->flags & DPF_NATIVE) && p->qhash && FS_GenCachedPakName(f, p->qhash, temp, sizeof(temp)))
FS_Rename(f, temp, p->fsroot);
}
}
}
Con_Printf("Disabling package %s\n", p->name); Con_Printf("Disabling package %s\n", p->name);
}
p->flags &= ~(DPF_PURGE|DPF_ENABLED); p->flags &= ~(DPF_PURGE|DPF_ENABLED);
/* FIXME: windows bug: /* FIXME: windows bug:

View file

@ -7029,7 +7029,6 @@ qboolean CSQC_Init (qboolean anycsqc, qboolean csdatenabled, unsigned int checks
csqc_world.Event_ContentsTransition = CSQC_Event_ContentsTransition; csqc_world.Event_ContentsTransition = CSQC_Event_ContentsTransition;
csqc_world.Get_CModel = CSQC_World_ModelForIndex; csqc_world.Get_CModel = CSQC_World_ModelForIndex;
csqc_world.Get_FrameState = CSQC_World_GetFrameState; csqc_world.Get_FrameState = CSQC_World_GetFrameState;
csqc_world.defaultgravityscale = 1;
World_ClearWorld(&csqc_world, false); World_ClearWorld(&csqc_world, false);
CSQC_InitFields(); //let the qclib know the field order that the engine needs. CSQC_InitFields(); //let the qclib know the field order that the engine needs.

View file

@ -496,8 +496,7 @@ static void Surf_AddDynamicLightsColours (msurface_t *surf)
rad = cl_dlights[lnum].radius; rad = cl_dlights[lnum].radius;
VectorSubtract(cl_dlights[lnum].origin, currententity->origin, lightofs); VectorSubtract(cl_dlights[lnum].origin, currententity->origin, lightofs);
dist = DotProduct (lightofs, surf->plane->normal) - dist = DotProduct (lightofs, surf->plane->normal) - surf->plane->dist;
surf->plane->dist;
rad -= fabs(dist); rad -= fabs(dist);
minlight = cl_dlights[lnum].minlight; minlight = cl_dlights[lnum].minlight;
if (rad < minlight) if (rad < minlight)
@ -525,16 +524,17 @@ static void Surf_AddDynamicLightsColours (msurface_t *surf)
b = cl_dlights[lnum].color[2]*128; b = cl_dlights[lnum].color[2]*128;
} }
/* if (cl_dlights[lnum].type == 1) //a wierd effect. bl = blocklights;
if (r < 0 || g < 0 || b < 0)
{ {
for (t = 0 ; t<tmax ; t++) for (t = 0 ; t<tmax ; t++)
{ {
td = local[1] - t*surf->lmscale; td = local[1] - (t<<surf->lmshift);
if (td < 0) if (td < 0)
td = -td; td = -td;
for (s=0 ; s<smax ; s++) for (s=0 ; s<smax ; s++)
{ {
sd = local[0] - s*surf->lmscale; sd = local[0] - (s<<surf->lmshift);
if (sd < 0) if (sd < 0)
sd = -sd; sd = -sd;
if (sd > td) if (sd > td)
@ -543,16 +543,19 @@ static void Surf_AddDynamicLightsColours (msurface_t *surf)
dist = td + (sd>>1); dist = td + (sd>>1);
if (dist < minlight) if (dist < minlight)
{ {
blocklights[t*smax + s] += 2*sin(dist/10+cl.time*20)*(rad - dist)*256 * cl_dlights[lnum].colour[0]*3; i = bl[0] + (rad - dist)*r;
greenblklights[t*smax + s] += 2*sin(M_PI/3+dist/10+cl.time*20)*(rad - dist)*256 * cl_dlights[lnum].colour[1]*3; bl[0] = (i<0)?0:i;
blueblklights[t*smax + s] += 2*sin(2*M_PI/3+dist/10+cl.time*20)*(rad - dist)*256 * cl_dlights[lnum].colour[2]*3; i = bl[1] + (rad - dist)*g;
bl[1] = (i<0)?0:i;
i = bl[2] + (rad - dist)*b;
bl[2] = (i<0)?0:i;
} }
bl += 3;
} }
} }
} }
else else
*/ { {
bl = blocklights;
for (t = 0 ; t<tmax ; t++) for (t = 0 ; t<tmax ; t++)
{ {
td = local[1] - (t<<surf->lmshift); td = local[1] - (t<<surf->lmshift);

View file

@ -62,7 +62,7 @@ void R_ForceSky_f(void)
else if (*cl.skyname) else if (*cl.skyname)
Con_Printf("Current per-map skybox is %s\n", cl.skyname); Con_Printf("Current per-map skybox is %s\n", cl.skyname);
else else
Con_Printf("no skybox forced.\n", cl.skyname); Con_Printf("no skybox forced.\n");
} }
else else
{ {

View file

@ -247,7 +247,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#define SIDEVIEWS 4 //enable secondary/reverse views. #define SIDEVIEWS 4 //enable secondary/reverse views.
// #define DSPMODELS //doom sprites (only needs DOOMWADS to generate the right wad file names) // #define DSPMODELS //doom sprites (only needs PACKAGE_DOOMWAD to generate the right wad file names)
#define SPRMODELS //quake1 sprite models #define SPRMODELS //quake1 sprite models
#define SP2MODELS //quake2 sprite models #define SP2MODELS //quake2 sprite models
#define MD1MODELS //quake1 alias models #define MD1MODELS //quake1 alias models
@ -262,7 +262,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#define RAGDOLL #define RAGDOLL
#define HUFFNETWORK //huffman network compression #define HUFFNETWORK //huffman network compression
#define DOOMWADS //doom wad/sprite support // #define PACKAGE_DOOMWAD //doom wad support (maps+sprites are separate)
// #define MAP_DOOM //doom map support // #define MAP_DOOM //doom map support
// #define MAP_PROC //doom3/quake4 map support // #define MAP_PROC //doom3/quake4 map support
//#define WOLF3DSUPPORT //wolfenstein3d map support (not started yet) //#define WOLF3DSUPPORT //wolfenstein3d map support (not started yet)
@ -444,7 +444,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#undef HALFLIFEMODELS #undef HALFLIFEMODELS
#undef RUNTIMELIGHTING #undef RUNTIMELIGHTING
#undef HEXEN2 #undef HEXEN2
#undef DOOMWADS #undef PACKAGE_DOOMWAD
#undef MAP_PROC #undef MAP_PROC
#undef Q1BSPS #undef Q1BSPS
#undef Q2BSPS #undef Q2BSPS

View file

@ -199,8 +199,6 @@ struct world_s
double lastchecktime; // for monster ai double lastchecktime; // for monster ai
qbyte *lastcheckpvs; // for monster ai qbyte *lastcheckpvs; // for monster ai
float defaultgravityscale; //0 in QW, 1 for anything else (inc csqc)
/*antilag*/ /*antilag*/
float lagentsfrac; float lagentsfrac;
laggedentinfo_t *lagents; laggedentinfo_t *lagents;

View file

@ -1444,7 +1444,8 @@ void GLBE_Init(void)
shaderstate.curentity = &r_worldentity; shaderstate.curentity = &r_worldentity;
be_maxpasses = gl_config_nofixedfunc?1:gl_mtexarbable; be_maxpasses = gl_config_nofixedfunc?1:gl_mtexarbable;
gl_stencilbits = 0; gl_stencilbits = 0;
if (gl_config.glversion >= 3.0 && gl_config_nofixedfunc) #ifndef GLESONLY
if (!gl_config_gles && gl_config.glversion >= 3.0 && gl_config_nofixedfunc)
{ {
//docs say this line should be okay in gl3+. nvidia do not seem to agree. GL_STENCIL_BITS is depricated however. so for now, just assume. //docs say this line should be okay in gl3+. nvidia do not seem to agree. GL_STENCIL_BITS is depricated however. so for now, just assume.
qglGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER_EXT, GL_STENCIL, GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE, &gl_stencilbits); qglGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER_EXT, GL_STENCIL, GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE, &gl_stencilbits);
@ -1452,6 +1453,7 @@ void GLBE_Init(void)
gl_stencilbits = 8; gl_stencilbits = 8;
} }
else else
#endif
qglGetIntegerv(GL_STENCIL_BITS, &gl_stencilbits); qglGetIntegerv(GL_STENCIL_BITS, &gl_stencilbits);
for (i = 0; i < FTABLE_SIZE; i++) for (i = 0; i < FTABLE_SIZE; i++)
{ {

View file

@ -5924,7 +5924,7 @@ void Mod_LoadDoomSprite (model_t *mod)
frame.left = -header->xpos; frame.left = -header->xpos;
frame.right = header->width - header->xpos; frame.right = header->width - header->xpos;
t[0] = t[1] = max(abs(frame.left),abs(frame.right)); t[0] = t[1] = max(fabs(frame.left),fabs(frame.right));
t[2] = frame.up; t[2] = frame.up;
AddPointToBounds(t, mod->mins, mod->maxs); AddPointToBounds(t, mod->mins, mod->maxs);
t[0] *= -1; t[0] *= -1;

View file

@ -841,3 +841,37 @@ r_part TEQ2_BOSSTPORT
scalefactor 0.8 scalefactor 0.8
sound "misc/bigtele.wav" 1 0 0 0 1 sound "misc/bigtele.wav" 1 0 0 0 1
} }
/*
r_part teq2_heatbeam_steam
{
count 20
colorindex 0xe0 7
// magnitude 60
texture "classicparticle"
tcoords 0 0 16 16 32
scale 1
alpha 1
die 0.3 0.8
randomvel 20 magnitude/3
veladd magnitude
orgadd magnitude/10
spawnorg 4
gravity -400
scalefactor 0.8
}
*/
//this is apparently just a trail effect (palette index specified by netcode)
r_part teq2_forcewall
{
texture "classicparticle"
tcoords 0 0 16 16 32
scale 0.5
alpha 1
scalefactor 0.8
step 5
spawnorg 3
randomvel 5
die 3 3.5
}

View file

@ -2013,10 +2013,6 @@ void Q_InitProgs(void)
sv.world.edict_size = PR_InitEnts(svprogfuncs, sv.world.max_edicts); sv.world.edict_size = PR_InitEnts(svprogfuncs, sv.world.max_edicts);
if (progstype == PROG_QW)
sv.world.defaultgravityscale = 0;
else
sv.world.defaultgravityscale = 1;
#ifdef HEXEN2 #ifdef HEXEN2
SV_RegisterH2CustomTents(); SV_RegisterH2CustomTents();
#endif #endif

View file

@ -559,10 +559,11 @@ SV_AddGravity
============ ============
*/ */
static void WPhys_AddGravity (world_t *w, wedict_t *ent, const float *gravitydir, float scale) static void WPhys_AddGravity (world_t *w, wedict_t *ent, const float *gravitydir)
{ {
float scale = ent->xv->gravity;
if (!scale) if (!scale)
scale = w->defaultgravityscale; scale = 1.0;
VectorMA(ent->v->velocity, scale * movevars.gravity * host_frametime, gravitydir, ent->v->velocity); VectorMA(ent->v->velocity, scale * movevars.gravity * host_frametime, gravitydir, ent->v->velocity);
} }
@ -1331,7 +1332,7 @@ static void WPhys_Physics_Toss (world_t *w, wedict_t *ent)
&& ent->v->movetype != MOVETYPE_FLYMISSILE && ent->v->movetype != MOVETYPE_FLYMISSILE
&& ent->v->movetype != MOVETYPE_BOUNCEMISSILE && ent->v->movetype != MOVETYPE_BOUNCEMISSILE
&& ent->v->movetype != MOVETYPE_H2SWIM) && ent->v->movetype != MOVETYPE_H2SWIM)
WPhys_AddGravity (w, ent, gravitydir, 1.0); WPhys_AddGravity (w, ent, gravitydir);
// move angles // move angles
VectorMA (ent->v->angles, host_frametime, ent->v->avelocity, ent->v->angles); VectorMA (ent->v->angles, host_frametime, ent->v->avelocity, ent->v->angles);
@ -1455,7 +1456,7 @@ static void WPhys_Physics_Step (world_t *w, wedict_t *ent)
{ {
hitsound = -DotProduct(gravitydir, ent->v->velocity) < movevars.gravity*-0.1; hitsound = -DotProduct(gravitydir, ent->v->velocity) < movevars.gravity*-0.1;
WPhys_AddGravity (w, ent, gravitydir, 1.0); WPhys_AddGravity (w, ent, gravitydir);
WPhys_CheckVelocity (w, ent); WPhys_CheckVelocity (w, ent);
WPhys_FlyMove (w, ent, gravitydir, host_frametime, NULL); WPhys_FlyMove (w, ent, gravitydir, host_frametime, NULL);
World_LinkEdict (w, ent, true); World_LinkEdict (w, ent, true);
@ -2180,7 +2181,7 @@ void WPhys_RunEntity (world_t *w, wedict_t *ent)
gravitydir = w->g.defaultgravitydir; gravitydir = w->g.defaultgravitydir;
if (!WPhys_CheckWater (w, ent) && ! ((int)ent->v->flags & FL_WATERJUMP) ) if (!WPhys_CheckWater (w, ent) && ! ((int)ent->v->flags & FL_WATERJUMP) )
WPhys_AddGravity (w, ent, gravitydir, ent->xv->gravity); WPhys_AddGravity (w, ent, gravitydir);
WPhys_CheckStuck (w, ent); WPhys_CheckStuck (w, ent);
WPhys_WalkMove (w, ent, gravitydir); WPhys_WalkMove (w, ent, gravitydir);

View file

@ -114,7 +114,9 @@ mergeInto(LibraryManager.library,
break; break;
case 'resize': case 'resize':
if (FTEC.evcb.resize != 0) if (FTEC.evcb.resize != 0)
{
Runtime.dynCall('vii', FTEC.evcb.resize, [Module['canvas'].width, Module['canvas'].height]); Runtime.dynCall('vii', FTEC.evcb.resize, [Module['canvas'].width, Module['canvas'].height]);
}
break; break;
case 'mousemove': case 'mousemove':
if (FTEC.evcb.mouse != 0) if (FTEC.evcb.mouse != 0)
@ -134,7 +136,10 @@ mergeInto(LibraryManager.library,
Runtime.dynCall('viidddd', FTEC.evcb.mouse, [0, false, event.movementX, event.movementY, 0, 0]); Runtime.dynCall('viidddd', FTEC.evcb.mouse, [0, false, event.movementX, event.movementY, 0, 0]);
} }
else else
Runtime.dynCall('viidddd', FTEC.evcb.mouse, [0, true, event.pageX, event.pageY, 0, 0]); {
var rect = Module['canvas'].getBoundingClientRect();
Runtime.dynCall('viidddd', FTEC.evcb.mouse, [0, true, (event.clientX - rect.left)*(Module['canvas'].width/rect.width), (event.clientY - rect.top)*(Module['canvas'].height/rect.height), 0, 0]);
}
} }
break; break;
case 'mousedown': case 'mousedown':
@ -432,7 +437,7 @@ mergeInto(LibraryManager.library,
'keypress', 'keydown', 'keyup', 'keypress', 'keydown', 'keyup',
'touchstart', 'touchend', 'touchcancel', 'touchleave', 'touchmove', 'touchstart', 'touchend', 'touchcancel', 'touchleave', 'touchmove',
'dragenter', 'dragover', 'drop', 'dragenter', 'dragover', 'drop',
'message', 'message', 'resize',
'pointerlockchange', 'mozpointerlockchange', 'webkitpointerlockchange', 'pointerlockchange', 'mozpointerlockchange', 'webkitpointerlockchange',
'focus', 'blur']; //try to fix alt-tab 'focus', 'blur']; //try to fix alt-tab
events.forEach(function(event) events.forEach(function(event)
@ -453,11 +458,11 @@ mergeInto(LibraryManager.library,
window.addEventListener(event, FTEC.handleevent, true); window.addEventListener(event, FTEC.handleevent, true);
}); });
Browser.resizeListeners.push(function(w, h) { // Browser.resizeListeners.push(function(w, h) {
FTEC.handleevent({ // FTEC.handleevent({
type: 'resize', // type: 'resize',
}); // });
}); // });
} }
var ctx = Browser.createContext(Module['canvas'], true, true); var ctx = Browser.createContext(Module['canvas'], true, true);
if (ctx == null) if (ctx == null)
@ -482,7 +487,10 @@ mergeInto(LibraryManager.library,
// Browser.windowedHeight = window.innerHeight; // Browser.windowedHeight = window.innerHeight;
// } // }
// else // else
Browser.setCanvasSize(window.innerWidth, window.innerHeight, false); {
var rect = Module['canvas'].getBoundingClientRect();
Browser.setCanvasSize(rect.width, rect.height, false);
}
if (FTEC.evcb.resize != 0) if (FTEC.evcb.resize != 0)
Runtime.dynCall('vii', FTEC.evcb.resize, [Module['canvas'].width, Module['canvas'].height]); Runtime.dynCall('vii', FTEC.evcb.resize, [Module['canvas'].width, Module['canvas'].height]);
}; };

View file

@ -6,10 +6,10 @@
<meta name=viewport content="width=device-width, initial-scale=1"> <meta name=viewport content="width=device-width, initial-scale=1">
<title>FTE QuakeWorld</title> <title>FTE QuakeWorld</title>
<style> <style>
body { background-color:#000000; color:#808080; height:100%;width:100%;margin:0;padding:0;} html,body { background-color:#000000; color:#808080; height:100%;width:100%;margin:0;padding:0;}
.emscripten { padding-right: 0; margin-left: auto; margin-right: auto; display: block; } .emscripten { padding-right: 0; margin-left: auto; margin-right: auto; display: block; }
div.emscripten { text-align: center; padding:0; margin: 0;} div.emscripten { text-align: center; padding:0; margin: 0;}
div.emscripten_border { padding:0; margin: 0; } div.emscripten_border { padding:0; margin: 0; width:100%; height: 100%;}
/* the canvas *must not* have any border or padding, or mouse coords will be wrong */ /* the canvas *must not* have any border or padding, or mouse coords will be wrong */
canvas.emscripten { border: 0px none; width:100%; height:100%; padding:0; margin: 0;} canvas.emscripten { border: 0px none; width:100%; height:100%; padding:0; margin: 0;}
</style> </style>