5d05b9d3e9
This ports id Software's Quake to run on the SDL plugin runtime. The source code originated from id under the GPLv2 license. I used https://github.com/ahefner/sdlquake as the base of my port. Performance is, unsurprisingly, not on par with what you're probably used to on PC. I average about 10FPS on ipod6g, but it's still playable. Sound works well enough, but in-game music is not supported. I've written ARM assembly routines for the inner sound loop. Make sure you turn the "brightness" all the way down, or colors will look funky. To run, extract Quake's data files to /.rockbox/quake. Have fun! Change-Id: I4285036e967d7f0722802d43cf2096c808ca5799
78 lines
2.5 KiB
C
78 lines
2.5 KiB
C
/*
|
|
Copyright (C) 1996-1997 Id Software, Inc.
|
|
|
|
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; either version 2
|
|
of the License, or (at your option) any later version.
|
|
|
|
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, write to the Free Software
|
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
|
|
*/
|
|
// world.h
|
|
|
|
typedef struct
|
|
{
|
|
vec3_t normal;
|
|
float dist;
|
|
} plane_t;
|
|
|
|
typedef struct
|
|
{
|
|
qboolean allsolid; // if true, plane is not valid
|
|
qboolean startsolid; // if true, the initial point was in a solid area
|
|
qboolean inopen, inwater;
|
|
float fraction; // time completed, 1.0 = didn't hit anything
|
|
vec3_t endpos; // final position
|
|
plane_t plane; // surface normal at impact
|
|
edict_t *ent; // entity the surface is on
|
|
} trace_t;
|
|
|
|
|
|
#define MOVE_NORMAL 0
|
|
#define MOVE_NOMONSTERS 1
|
|
#define MOVE_MISSILE 2
|
|
|
|
|
|
void SV_ClearWorld (void);
|
|
// called after the world model has been loaded, before linking any entities
|
|
|
|
void SV_UnlinkEdict (edict_t *ent);
|
|
// call before removing an entity, and before trying to move one,
|
|
// so it doesn't clip against itself
|
|
// flags ent->v.modified
|
|
|
|
void SV_LinkEdict (edict_t *ent, qboolean touch_triggers);
|
|
// Needs to be called any time an entity changes origin, mins, maxs, or solid
|
|
// flags ent->v.modified
|
|
// sets ent->v.absmin and ent->v.absmax
|
|
// if touchtriggers, calls prog functions for the intersected triggers
|
|
|
|
int SV_PointContents (vec3_t p);
|
|
int SV_TruePointContents (vec3_t p);
|
|
// returns the CONTENTS_* value from the world at the given point.
|
|
// does not check any entities at all
|
|
// the non-true version remaps the water current contents to content_water
|
|
|
|
edict_t *SV_TestEntityPosition (edict_t *ent);
|
|
|
|
trace_t SV_Move (vec3_t start, vec3_t mins, vec3_t maxs, vec3_t end, int type, edict_t *passedict);
|
|
// mins and maxs are reletive
|
|
|
|
// if the entire move stays in a solid volume, trace.allsolid will be set
|
|
|
|
// if the starting point is in a solid, it will be allowed to move out
|
|
// to an open area
|
|
|
|
// nomonsters is used for line of sight or edge testing, where mosnters
|
|
// shouldn't be considered solid objects
|
|
|
|
// passedict is explicitly excluded from clipping checks (normally NULL)
|