19 Aug 2007

This commit is contained in:
g-cont 2007-08-19 00:00:00 +04:00 committed by Alibek Omarov
parent 162d36aa30
commit cd06165425
70 changed files with 509 additions and 1317 deletions

View File

@ -4,43 +4,24 @@
Заменить все нелогичные Com_Error\Sys_Error на варнинги Заменить все нелогичные Com_Error\Sys_Error на варнинги
render.dll render.dll
1. убрать все типы float, кроме ABGR128 OK 1. Избавиться от pcx совсем
2. Избавиться от pcx совсем 2. избавиться от LightImageScale
3. упорядочить типы загрузки ОК
4. избавиться от LightImageScale
5. переименовать в renderer.dll
engine.dll engine.dll
1. избавиться от Com_Sprintf OK 1. убить все ссылки на .md2(заменить на mdl)
2. убить все ссылки на .md2(заменить на mdl) 2. переписать парсинг scripts\maps.txt
3. подгрузка дллок из base\game директории OK
4. переписать парсинг scripts\maps.txt
5. убить поддержку cd
launcher.dll
1. перенести лог в лаунчер OK
platform.dll platform.dll
1. Запись файлов должна идти в game директорию ОК 1. сделать парсинг "ambient" из карты
2. Сделать валидатор game-директорий ОК 2. сделать новый contents для Null
3. Переписать валидатор-финдер game directory ОК 3. научить rad суммировать цвета в dxt
4. Переписать SC_ParseToken
5. Не работает MsgDev OK
6. научить GetToken распознaвать \r
{
studiomdl - апгрейд до версии 0.2
1. Окончательно настроить все лимиты
bsplib
1. сделать парсинг "ambient" из карты
2. сделать новый contents для Null
3. научить rad суммировать цвета в dxt
}
//================================================== //==================================================
// то, что уже готово // то, что уже готово
//================================================== //==================================================
+исправлены баги со studiomdl
+убраны лишние пункты в меню
+исправлен баг с вылетом рендерера +исправлен баг с вылетом рендерера
+пофикшен баг с автоматическим рассчетом хулла для первой энтити на карте +пофикшен баг с автоматическим рассчетом хулла для первой энтити на карте
+существенное уменьшение размера сейвов +существенное уменьшение размера сейвов

View File

@ -20,7 +20,7 @@ if errorlevel 1 set BUILD_ERROR=1
%MSDEV% platform/platform.dsp %CONFIG%"platform - Win32 Debug" %build_target% %MSDEV% platform/platform.dsp %CONFIG%"platform - Win32 Debug" %build_target%
if errorlevel 1 set BUILD_ERROR=1 if errorlevel 1 set BUILD_ERROR=1
%MSDEV% render/render.dsp %CONFIG%"render - Win32 Debug" %build_target% %MSDEV% renderer/renderer.dsp %CONFIG%"renderer - Win32 Debug" %build_target%
if errorlevel 1 set BUILD_ERROR=1 if errorlevel 1 set BUILD_ERROR=1
%MSDEV% server/server.dsp %CONFIG%"server - Win32 Debug" %build_target% %MSDEV% server/server.dsp %CONFIG%"server - Win32 Debug" %build_target%
@ -48,7 +48,7 @@ rem //delete log files
if exist engine\engine.plg del /f /q engine\engine.plg if exist engine\engine.plg del /f /q engine\engine.plg
if exist launcher\launcher.plg del /f /q launcher\launcher.plg if exist launcher\launcher.plg del /f /q launcher\launcher.plg
if exist platform\platform.plg del /f /q platform\platform.plg if exist platform\platform.plg del /f /q platform\platform.plg
if exist render\render.plg del /f /q render\render.plg if exist renderer\renderer.plg del /f /q renderer\renderer.plg
if exist server\server.plg del /f /q server\server.plg if exist server\server.plg del /f /q server\server.plg
echo Build succeeded! echo Build succeeded!

View File

@ -3,36 +3,9 @@
<pre> <pre>
<h1>Build Log</h1> <h1>Build Log</h1>
<h3> <h3>
--------------------Configuration: editor - Win32 Debug-------------------- --------------------Configuration: editor - Win32 Release--------------------
</h3> </h3>
<h3>Command Lines</h3> <h3>Command Lines</h3>
Creating temporary file "C:\Temp\RSP1739.tmp" with contents
[
/nologo /MTd /W3 /Gm /Gi /GX /ZI /Od /I "../public" /I "../platform/formats" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR"..\temp\editor\!debug/" /Fo"..\temp\editor\!debug/" /Fd"..\temp\editor\!debug/" /FD /GZ /c
"D:\XASH3D\src_main\!source\editor\guiforms.c"
]
Creating command line "cl.exe @C:\Temp\RSP1739.tmp"
Creating temporary file "C:\Temp\RSP173A.tmp" with contents
[
kernel32.lib user32.lib gdi32.lib comctl32.lib comdlg32.lib /nologo /dll /incremental:yes /pdb:"..\temp\editor\!debug/editor.pdb" /debug /machine:I386 /out:"..\temp\editor\!debug/editor.dll" /implib:"..\temp\editor\!debug/editor.lib" /pdbtype:sept
"\XASH3D\src_main\!source\temp\editor\!debug\editor.obj"
"\XASH3D\src_main\!source\temp\editor\!debug\guiutils.obj"
"\XASH3D\src_main\!source\temp\editor\!debug\guiforms.obj"
"\XASH3D\src_main\!source\temp\editor\!debug\editor.res"
]
Creating command line "link.exe @C:\Temp\RSP173A.tmp"
Creating temporary file "C:\Temp\RSP173B.bat" with contents
[
@echo off
copy \XASH3D\src_main\!source\temp\editor\!debug\editor.dll "D:\Xash3D\bin\editor.dll"
]
Creating command line "C:\Temp\RSP173B.bat"
Compiling...
guiforms.c
Linking...
<h3>Output Window</h3>
Performing Custom Build Step on \XASH3D\src_main\!source\temp\editor\!debug\editor.dll
‘ª®¯¨à®¢ ­® ä ©«®¢: 1.

View File

@ -24,10 +24,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
extern struct model_s *cl_mod_powerscreen; extern struct model_s *cl_mod_powerscreen;
//PGM
int vidref_val;
//PGM
/* /*
========================================================================= =========================================================================
@ -1203,12 +1199,8 @@ void CL_AddPacketEntities (frame_t *frame)
float intensity; float intensity;
intensity = 50 + (500 * (sin(cl.time/500.0) + 1.0)); intensity = 50 + (500 * (sin(cl.time/500.0) + 1.0));
// FIXME - check out this effect in rendition V_AddLight (ent.origin, intensity, -1.0, -1.0, -1.0);
if(vidref_val == VIDREF_GL) }
V_AddLight (ent.origin, intensity, -1.0, -1.0, -1.0);
else
V_AddLight (ent.origin, -1.0 * intensity, 1.0, 1.0, 1.0);
}
else else
{ {
CL_Tracker_Shell (cent->lerp_origin); CL_Tracker_Shell (cent->lerp_origin);
@ -1218,14 +1210,8 @@ void CL_AddPacketEntities (frame_t *frame)
else if (effects & EF_TRACKER) else if (effects & EF_TRACKER)
{ {
CL_TrackerTrail (cent->lerp_origin, ent.origin, 0); CL_TrackerTrail (cent->lerp_origin, ent.origin, 0);
// FIXME - check out this effect in rendition V_AddLight (ent.origin, 200, -1, -1, -1);
if(vidref_val == VIDREF_GL)
V_AddLight (ent.origin, 200, -1, -1, -1);
else
V_AddLight (ent.origin, -200, 1, 1, 1);
} }
//ROGUE
//======
// RAFAEL // RAFAEL
else if (effects & EF_GREENGIB) else if (effects & EF_GREENGIB)
{ {

View File

@ -816,39 +816,11 @@ void CL_AddDLights (void)
dl = cl_dlights; dl = cl_dlights;
//===== for (i = 0; i < MAX_DLIGHTS; i++, dl++)
//PGM
if(vidref_val == VIDREF_GL)
{ {
for (i=0 ; i<MAX_DLIGHTS ; i++, dl++) if (!dl->radius) continue;
{ V_AddLight (dl->origin, dl->radius, dl->color[0], dl->color[1], dl->color[2]);
if (!dl->radius)
continue;
V_AddLight (dl->origin, dl->radius,
dl->color[0], dl->color[1], dl->color[2]);
}
} }
else
{
for (i=0 ; i<MAX_DLIGHTS ; i++, dl++)
{
if (!dl->radius)
continue;
// negative light in software. only black allowed
if ((dl->color[0] < 0) || (dl->color[1] < 0) || (dl->color[2] < 0))
{
dl->radius = -(dl->radius);
dl->color[0] = 1;
dl->color[1] = 1;
dl->color[2] = 1;
}
V_AddLight (dl->origin, dl->radius,
dl->color[0], dl->color[1], dl->color[2]);
}
}
//PGM
//=====
} }

View File

@ -1831,7 +1831,7 @@ void CL_Shutdown(void)
S_Shutdown(); S_Shutdown();
IN_Shutdown (); IN_Shutdown ();
VID_Shutdown(); VID_FreeRenderer();
} }

View File

@ -24,8 +24,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
extern cparticle_t *active_particles, *free_particles; extern cparticle_t *active_particles, *free_particles;
extern cparticle_t particles[MAX_PARTICLES]; extern cparticle_t particles[MAX_PARTICLES];
extern int cl_numparticles; extern int cl_numparticles;
extern cvar_t *vid_ref;
extern void MakeNormalVectors (vec3_t forward, vec3_t right, vec3_t up); extern void MakeNormalVectors (vec3_t forward, vec3_t right, vec3_t up);
@ -97,14 +96,6 @@ void CL_ColorFlash (vec3_t pos, int ent, int intensity, float r, float g, float
{ {
cdlight_t *dl; cdlight_t *dl;
if((vidref_val == VIDREF_SOFT) && ((r < 0) || (g<0) || (b<0)))
{
intensity = -intensity;
r = -r;
g = -g;
b = -b;
}
dl = CL_AllocDlight (ent); dl = CL_AllocDlight (ent);
VectorCopy (pos, dl->origin); VectorCopy (pos, dl->origin);
dl->radius = intensity; dl->radius = intensity;
@ -547,24 +538,18 @@ void CL_Heatbeam (vec3_t start, vec3_t forward)
VectorSubtract (end, start, vec); VectorSubtract (end, start, vec);
len = VectorNormalize (vec); len = VectorNormalize (vec);
// FIXME - pmm - these might end up using old values?
// MakeNormalVectors (vec, right, up);
VectorCopy (cl.v_right, right); VectorCopy (cl.v_right, right);
VectorCopy (cl.v_up, up); VectorCopy (cl.v_up, up);
if (vidref_val == VIDREF_GL) VectorMA (move, -0.5, right, move);
{ // GL mode VectorMA (move, -0.5, up, move);
VectorMA (move, -0.5, right, move);
VectorMA (move, -0.5, up, move);
}
// otherwise assume SOFT
// otherwise assume SOFT
ltime = (float) cl.time/1000.0; ltime = (float) cl.time/1000.0;
start_pt = fmod(ltime*96.0,step); start_pt = fmod(ltime*96.0,step);
VectorMA (move, start_pt, vec, move); VectorMA (move, start_pt, vec, move);
VectorScale (vec, step, vec); VectorScale (vec, step, vec);
// Msg ("%f\n", ltime);
rstep = M_PI/10.0; rstep = M_PI/10.0;
for (i=start_pt ; i<len ; i+=step) for (i=start_pt ; i<len ; i+=step)
{ {

View File

@ -673,9 +673,8 @@ void Sys_Init (void);
void Sys_Print(const char *pMsg); void Sys_Print(const char *pMsg);
void Sys_AppActivate (void); void Sys_AppActivate (void);
void Sys_UnloadGame (void); void *Sys_LoadGame (const char* procname, void *hinstance, void *parms);
void *Sys_GetGameAPI (const char* procname, void *parms); void Sys_UnloadGame ( void *hinstance );
// loads the game dll and calls the api init function
void Sys_CreateConsole( void ); void Sys_CreateConsole( void );
char *Sys_ConsoleInput (void); char *Sys_ConsoleInput (void);

View File

@ -287,7 +287,6 @@ Cbuf_AddLateCommands
Adds command line parameters as script statements Adds command line parameters as script statements
Commands lead with a + and continue until another + or - Commands lead with a + and continue until another + or -
quake +vid_ref gl +map amlev1
Returns true if any late commands were added, which Returns true if any late commands were added, which
will keep the demoloop from immediately starting will keep the demoloop from immediately starting

View File

@ -406,7 +406,11 @@ byte COM_BlockSequenceCRCByte (byte *base, int length, int sequence)
word crc; word crc;
byte *p, chkb[60 + 4]; byte *p, chkb[60 + 4];
if (sequence < 0) Sys_Error("sequence < 0, this shouldn't happen\n"); if (sequence < 0)
{
MsgWarn("COM_BlockSequenceCRCByte: sequence < 0, this shouldn't happen\n");
sequence = abs(sequence);
}
p = chktbl + (sequence % (sizeof(chktbl) - 4)); p = chktbl + (sequence % (sizeof(chktbl) - 4));

View File

@ -1012,7 +1012,6 @@ CONTROLS MENU
======================================================================= =======================================================================
*/ */
static cvar_t *win_noalttab;
extern cvar_t *in_joystick; extern cvar_t *in_joystick;
static menuframework_s s_options_menu; static menuframework_s s_options_menu;
@ -1020,7 +1019,6 @@ static menuaction_s s_options_defaults_action;
static menuaction_s s_options_customize_options_action; static menuaction_s s_options_customize_options_action;
static menuslider_s s_options_sensitivity_slider; static menuslider_s s_options_sensitivity_slider;
static menulist_s s_options_freelook_box; static menulist_s s_options_freelook_box;
static menulist_s s_options_noalttab_box;
static menulist_s s_options_alwaysrun_box; static menulist_s s_options_alwaysrun_box;
static menulist_s s_options_invertmouse_box; static menulist_s s_options_invertmouse_box;
static menulist_s s_options_lookspring_box; static menulist_s s_options_lookspring_box;
@ -1028,7 +1026,6 @@ static menulist_s s_options_lookstrafe_box;
static menulist_s s_options_crosshair_box; static menulist_s s_options_crosshair_box;
static menuslider_s s_options_sfxvolume_slider; static menuslider_s s_options_sfxvolume_slider;
static menulist_s s_options_joystick_box; static menulist_s s_options_joystick_box;
static menulist_s s_options_cdvolume_box;
static menulist_s s_options_quality_list; static menulist_s s_options_quality_list;
static menulist_s s_options_compatibility_list; static menulist_s s_options_compatibility_list;
static menulist_s s_options_console_action; static menulist_s s_options_console_action;
@ -1063,11 +1060,6 @@ static void MouseSpeedFunc( void *unused )
Cvar_SetValue( "sensitivity", s_options_sensitivity_slider.curvalue / 2.0F ); Cvar_SetValue( "sensitivity", s_options_sensitivity_slider.curvalue / 2.0F );
} }
static void NoAltTabFunc( void *unused )
{
Cvar_SetValue( "win_noalttab", s_options_noalttab_box.curvalue );
}
static float ClampCvar( float min, float max, float value ) static float ClampCvar( float min, float max, float value )
{ {
if ( value < min ) return min; if ( value < min ) return min;
@ -1077,9 +1069,8 @@ static float ClampCvar( float min, float max, float value )
static void ControlsSetMenuItemValues( void ) static void ControlsSetMenuItemValues( void )
{ {
s_options_sfxvolume_slider.curvalue = Cvar_VariableValue( "s_volume" ) * 10; s_options_sfxvolume_slider.curvalue = Cvar_VariableValue( "s_volume" ) * 10;
s_options_cdvolume_box.curvalue = !Cvar_VariableValue("cd_nocd"); s_options_quality_list.curvalue = !Cvar_VariableValue( "s_loadas8bit" );
s_options_quality_list.curvalue = !Cvar_VariableValue( "s_loadas8bit" );
s_options_sensitivity_slider.curvalue = ( sensitivity->value ) * 2; s_options_sensitivity_slider.curvalue = ( sensitivity->value ) * 2;
Cvar_SetValue( "cl_run", ClampCvar( 0, 1, cl_run->value ) ); Cvar_SetValue( "cl_run", ClampCvar( 0, 1, cl_run->value ) );
@ -1101,8 +1092,6 @@ static void ControlsSetMenuItemValues( void )
Cvar_SetValue( "in_joystick", ClampCvar( 0, 1, in_joystick->value ) ); Cvar_SetValue( "in_joystick", ClampCvar( 0, 1, in_joystick->value ) );
s_options_joystick_box.curvalue = in_joystick->value; s_options_joystick_box.curvalue = in_joystick->value;
s_options_noalttab_box.curvalue = win_noalttab->value;
} }
static void ControlsResetDefaultsFunc( void *unused ) static void ControlsResetDefaultsFunc( void *unused )
@ -1133,11 +1122,6 @@ static void UpdateVolumeFunc( void *unused )
Cvar_SetValue( "s_volume", s_options_sfxvolume_slider.curvalue / 10 ); Cvar_SetValue( "s_volume", s_options_sfxvolume_slider.curvalue / 10 );
} }
static void UpdateCDVolumeFunc( void *unused )
{
Cvar_SetValue( "cd_nocd", !s_options_cdvolume_box.curvalue );
}
static void ConsoleFunc( void *unused ) static void ConsoleFunc( void *unused )
{ {
/* /*
@ -1186,12 +1170,6 @@ static void UpdateSoundQualityFunc( void *unused )
void Options_MenuInit( void ) void Options_MenuInit( void )
{ {
static const char *cd_music_items[] =
{
"disabled",
"enabled",
0
};
static const char *quality_items[] = static const char *quality_items[] =
{ {
"low", "high", 0 "low", "high", 0
@ -1218,8 +1196,6 @@ void Options_MenuInit( void )
0 0
}; };
win_noalttab = Cvar_Get( "win_noalttab", "0", CVAR_ARCHIVE );
/* /*
** configure controls menu and menu items ** configure controls menu and menu items
*/ */
@ -1231,22 +1207,14 @@ void Options_MenuInit( void )
s_options_sfxvolume_slider.generic.x = 0; s_options_sfxvolume_slider.generic.x = 0;
s_options_sfxvolume_slider.generic.y = 0; s_options_sfxvolume_slider.generic.y = 0;
s_options_sfxvolume_slider.generic.name = "effects volume"; s_options_sfxvolume_slider.generic.name = "effects volume";
s_options_sfxvolume_slider.generic.callback = UpdateVolumeFunc; s_options_sfxvolume_slider.generic.callback = UpdateVolumeFunc;
s_options_sfxvolume_slider.minvalue = 0; s_options_sfxvolume_slider.minvalue = 0;
s_options_sfxvolume_slider.maxvalue = 10; s_options_sfxvolume_slider.maxvalue = 10;
s_options_sfxvolume_slider.curvalue = Cvar_VariableValue( "s_volume" ) * 10; s_options_sfxvolume_slider.curvalue = Cvar_VariableValue( "s_volume" ) * 10;
s_options_cdvolume_box.generic.type = MTYPE_SPINCONTROL;
s_options_cdvolume_box.generic.x = 0;
s_options_cdvolume_box.generic.y = 10;
s_options_cdvolume_box.generic.name = "CD music";
s_options_cdvolume_box.generic.callback = UpdateCDVolumeFunc;
s_options_cdvolume_box.itemnames = cd_music_items;
s_options_cdvolume_box.curvalue = !Cvar_VariableValue("cd_nocd");
s_options_quality_list.generic.type = MTYPE_SPINCONTROL; s_options_quality_list.generic.type = MTYPE_SPINCONTROL;
s_options_quality_list.generic.x = 0; s_options_quality_list.generic.x = 0;
s_options_quality_list.generic.y = 20;; s_options_quality_list.generic.y = 10;
s_options_quality_list.generic.name = "sound quality"; s_options_quality_list.generic.name = "sound quality";
s_options_quality_list.generic.callback = UpdateSoundQualityFunc; s_options_quality_list.generic.callback = UpdateSoundQualityFunc;
s_options_quality_list.itemnames = quality_items; s_options_quality_list.itemnames = quality_items;
@ -1254,7 +1222,7 @@ void Options_MenuInit( void )
s_options_compatibility_list.generic.type = MTYPE_SPINCONTROL; s_options_compatibility_list.generic.type = MTYPE_SPINCONTROL;
s_options_compatibility_list.generic.x = 0; s_options_compatibility_list.generic.x = 0;
s_options_compatibility_list.generic.y = 30; s_options_compatibility_list.generic.y = 20;
s_options_compatibility_list.generic.name = "sound compatibility"; s_options_compatibility_list.generic.name = "sound compatibility";
s_options_compatibility_list.generic.callback = UpdateSoundQualityFunc; s_options_compatibility_list.generic.callback = UpdateSoundQualityFunc;
s_options_compatibility_list.itemnames = compatibility_items; s_options_compatibility_list.itemnames = compatibility_items;
@ -1262,7 +1230,7 @@ void Options_MenuInit( void )
s_options_sensitivity_slider.generic.type = MTYPE_SLIDER; s_options_sensitivity_slider.generic.type = MTYPE_SLIDER;
s_options_sensitivity_slider.generic.x = 0; s_options_sensitivity_slider.generic.x = 0;
s_options_sensitivity_slider.generic.y = 50; s_options_sensitivity_slider.generic.y = 40;
s_options_sensitivity_slider.generic.name = "mouse speed"; s_options_sensitivity_slider.generic.name = "mouse speed";
s_options_sensitivity_slider.generic.callback = MouseSpeedFunc; s_options_sensitivity_slider.generic.callback = MouseSpeedFunc;
s_options_sensitivity_slider.minvalue = 2; s_options_sensitivity_slider.minvalue = 2;
@ -1270,56 +1238,49 @@ void Options_MenuInit( void )
s_options_alwaysrun_box.generic.type = MTYPE_SPINCONTROL; s_options_alwaysrun_box.generic.type = MTYPE_SPINCONTROL;
s_options_alwaysrun_box.generic.x = 0; s_options_alwaysrun_box.generic.x = 0;
s_options_alwaysrun_box.generic.y = 60; s_options_alwaysrun_box.generic.y = 50;
s_options_alwaysrun_box.generic.name = "always run"; s_options_alwaysrun_box.generic.name = "always run";
s_options_alwaysrun_box.generic.callback = AlwaysRunFunc; s_options_alwaysrun_box.generic.callback = AlwaysRunFunc;
s_options_alwaysrun_box.itemnames = yesno_names; s_options_alwaysrun_box.itemnames = yesno_names;
s_options_invertmouse_box.generic.type = MTYPE_SPINCONTROL; s_options_invertmouse_box.generic.type = MTYPE_SPINCONTROL;
s_options_invertmouse_box.generic.x = 0; s_options_invertmouse_box.generic.x = 0;
s_options_invertmouse_box.generic.y = 70; s_options_invertmouse_box.generic.y = 60;
s_options_invertmouse_box.generic.name = "invert mouse"; s_options_invertmouse_box.generic.name = "invert mouse";
s_options_invertmouse_box.generic.callback = InvertMouseFunc; s_options_invertmouse_box.generic.callback = InvertMouseFunc;
s_options_invertmouse_box.itemnames = yesno_names; s_options_invertmouse_box.itemnames = yesno_names;
s_options_lookspring_box.generic.type = MTYPE_SPINCONTROL; s_options_lookspring_box.generic.type = MTYPE_SPINCONTROL;
s_options_lookspring_box.generic.x = 0; s_options_lookspring_box.generic.x = 0;
s_options_lookspring_box.generic.y = 80; s_options_lookspring_box.generic.y = 70;
s_options_lookspring_box.generic.name = "lookspring"; s_options_lookspring_box.generic.name = "lookspring";
s_options_lookspring_box.generic.callback = LookspringFunc; s_options_lookspring_box.generic.callback = LookspringFunc;
s_options_lookspring_box.itemnames = yesno_names; s_options_lookspring_box.itemnames = yesno_names;
s_options_lookstrafe_box.generic.type = MTYPE_SPINCONTROL; s_options_lookstrafe_box.generic.type = MTYPE_SPINCONTROL;
s_options_lookstrafe_box.generic.x = 0; s_options_lookstrafe_box.generic.x = 0;
s_options_lookstrafe_box.generic.y = 90; s_options_lookstrafe_box.generic.y = 80;
s_options_lookstrafe_box.generic.name = "lookstrafe"; s_options_lookstrafe_box.generic.name = "lookstrafe";
s_options_lookstrafe_box.generic.callback = LookstrafeFunc; s_options_lookstrafe_box.generic.callback = LookstrafeFunc;
s_options_lookstrafe_box.itemnames = yesno_names; s_options_lookstrafe_box.itemnames = yesno_names;
s_options_freelook_box.generic.type = MTYPE_SPINCONTROL; s_options_freelook_box.generic.type = MTYPE_SPINCONTROL;
s_options_freelook_box.generic.x = 0; s_options_freelook_box.generic.x = 0;
s_options_freelook_box.generic.y = 100; s_options_freelook_box.generic.y = 90;
s_options_freelook_box.generic.name = "free look"; s_options_freelook_box.generic.name = "free look";
s_options_freelook_box.generic.callback = FreeLookFunc; s_options_freelook_box.generic.callback = FreeLookFunc;
s_options_freelook_box.itemnames = yesno_names; s_options_freelook_box.itemnames = yesno_names;
s_options_crosshair_box.generic.type = MTYPE_SPINCONTROL; s_options_crosshair_box.generic.type = MTYPE_SPINCONTROL;
s_options_crosshair_box.generic.x = 0; s_options_crosshair_box.generic.x = 0;
s_options_crosshair_box.generic.y = 110; s_options_crosshair_box.generic.y = 100;
s_options_crosshair_box.generic.name = "crosshair"; s_options_crosshair_box.generic.name = "crosshair";
s_options_crosshair_box.generic.callback = CrosshairFunc; s_options_crosshair_box.generic.callback = CrosshairFunc;
s_options_crosshair_box.itemnames = crosshair_names; s_options_crosshair_box.itemnames = crosshair_names;
/*
s_options_noalttab_box.generic.type = MTYPE_SPINCONTROL;
s_options_noalttab_box.generic.x = 0;
s_options_noalttab_box.generic.y = 110;
s_options_noalttab_box.generic.name = "disable alt-tab";
s_options_noalttab_box.generic.callback = NoAltTabFunc;
s_options_noalttab_box.itemnames = yesno_names;
*/
s_options_joystick_box.generic.type = MTYPE_SPINCONTROL; s_options_joystick_box.generic.type = MTYPE_SPINCONTROL;
s_options_joystick_box.generic.x = 0; s_options_joystick_box.generic.x = 0;
s_options_joystick_box.generic.y = 120; s_options_joystick_box.generic.y = 110;
s_options_joystick_box.generic.name = "use joystick"; s_options_joystick_box.generic.name = "use joystick";
s_options_joystick_box.generic.callback = JoystickFunc; s_options_joystick_box.generic.callback = JoystickFunc;
s_options_joystick_box.itemnames = yesno_names; s_options_joystick_box.itemnames = yesno_names;
@ -1331,21 +1292,20 @@ void Options_MenuInit( void )
s_options_customize_options_action.generic.callback = CustomizeControlsFunc; s_options_customize_options_action.generic.callback = CustomizeControlsFunc;
s_options_defaults_action.generic.type = MTYPE_ACTION; s_options_defaults_action.generic.type = MTYPE_ACTION;
s_options_defaults_action.generic.x = 0; s_options_defaults_action.generic.x = 0;
s_options_defaults_action.generic.y = 150; s_options_defaults_action.generic.y = 150;
s_options_defaults_action.generic.name = "reset defaults"; s_options_defaults_action.generic.name = "reset defaults";
s_options_defaults_action.generic.callback = ControlsResetDefaultsFunc; s_options_defaults_action.generic.callback = ControlsResetDefaultsFunc;
s_options_console_action.generic.type = MTYPE_ACTION; s_options_console_action.generic.type = MTYPE_ACTION;
s_options_console_action.generic.x = 0; s_options_console_action.generic.x = 0;
s_options_console_action.generic.y = 160; s_options_console_action.generic.y = 160;
s_options_console_action.generic.name = "go to console"; s_options_console_action.generic.name = "go to console";
s_options_console_action.generic.callback = ConsoleFunc; s_options_console_action.generic.callback = ConsoleFunc;
ControlsSetMenuItemValues(); ControlsSetMenuItemValues();
Menu_AddItem( &s_options_menu, ( void * ) &s_options_sfxvolume_slider ); Menu_AddItem( &s_options_menu, ( void * ) &s_options_sfxvolume_slider );
Menu_AddItem( &s_options_menu, ( void * ) &s_options_cdvolume_box );
Menu_AddItem( &s_options_menu, ( void * ) &s_options_quality_list ); Menu_AddItem( &s_options_menu, ( void * ) &s_options_quality_list );
Menu_AddItem( &s_options_menu, ( void * ) &s_options_compatibility_list ); Menu_AddItem( &s_options_menu, ( void * ) &s_options_compatibility_list );
Menu_AddItem( &s_options_menu, ( void * ) &s_options_sensitivity_slider ); Menu_AddItem( &s_options_menu, ( void * ) &s_options_sensitivity_slider );
@ -2567,7 +2527,10 @@ void StartServer_MenuInit( void )
** load the list of map names ** load the list of map names
*/ */
if(!FS_FileExists("scripts/maps.txt") && !CreateMapsList()) if(!FS_FileExists("scripts/maps.txt") && !CreateMapsList())
Sys_Error("maps not found\n"); {
MsgWarn("StartServer_MenuInit: maps.lst not found\n");
return;
}
fp = FS_Open( "scripts/maps.txt", "rb" ); fp = FS_Open( "scripts/maps.txt", "rb" );
FS_Seek(fp, 0, SEEK_END); FS_Seek(fp, 0, SEEK_END);

View File

@ -28,15 +28,16 @@ typedef struct vrect_s
typedef struct typedef struct
{ {
int width, height; // coordinates from main game int width, height; // coordinates from main game
} viddef_t; } viddef_t;
extern viddef_t viddef; // global video state extern viddef_t viddef; // global video state
// Video module initialisation etc // Video module initialisation etc
void VID_Init (void); void VID_Init (void);
void VID_Shutdown (void); void VID_InitRenderer(void);
void VID_CheckChanges (void); void VID_FreeRenderer(void);
void VID_CheckChanges(void);
void VID_MenuInit( void ); void VID_MenuInit( void );
void VID_MenuDraw( void ); void VID_MenuDraw( void );

View File

@ -44,18 +44,12 @@ void Host_InitPlatform( char *funcname, int argc, char **argv )
pistd.error = Sys_Error; pistd.error = Sys_Error;
if (( platform_dll = LoadLibrary( "bin/platform.dll" )) == 0 ) if (( platform_dll = LoadLibrary( "bin/platform.dll" )) == 0 )
{
Sys_Error( "Couldn't load platform.dll\n" ); Sys_Error( "Couldn't load platform.dll\n" );
return;
}
if (( CreatePlat = (void *)GetProcAddress( platform_dll, "CreateAPI" ) ) == 0 ) if (( CreatePlat = (void *)GetProcAddress( platform_dll, "CreateAPI" ) ) == 0 )
{ Sys_Error("CreateInstance: %s has no valid entry point\n", "platform.dll" );
Sys_Error("can't init platform.dll\n");
return;
}
pi = CreatePlat( pistd );
pi = CreatePlat( pistd );
if(pi->apiversion != PLATFORM_API_VERSION) if(pi->apiversion != PLATFORM_API_VERSION)
Sys_Error("mismatch version (%i should be %i)\n", pi->apiversion, PLATFORM_API_VERSION); Sys_Error("mismatch version (%i should be %i)\n", pi->apiversion, PLATFORM_API_VERSION);
@ -90,8 +84,6 @@ void Host_Init (char *funcname, int argc, char **argv)
char *s; char *s;
global_hInstance = (HINSTANCE)GetModuleHandle( NULL ); global_hInstance = (HINSTANCE)GetModuleHandle( NULL );
if (setjmp (abortframe)) Sys_Error ("Error during initialization");
if(!strcmp(funcname, "host_dedicated"))is_dedicated = true; if(!strcmp(funcname, "host_dedicated"))is_dedicated = true;
Host_InitPlatform( funcname, argc, argv ); Host_InitPlatform( funcname, argc, argv );
@ -111,11 +103,8 @@ void Host_Init (char *funcname, int argc, char **argv)
Cbuf_AddEarlyCommands (false); Cbuf_AddEarlyCommands (false);
Cbuf_Execute (); Cbuf_Execute ();
//FS_InitFilesystem ();
Cbuf_AddText ("exec default.cfg\n"); Cbuf_AddText ("exec default.cfg\n");
Cbuf_AddText ("exec config.cfg\n"); Cbuf_AddText ("exec config.cfg\n");
Cbuf_AddEarlyCommands (true); Cbuf_AddEarlyCommands (true);
Cbuf_Execute (); Cbuf_Execute ();
@ -270,7 +259,6 @@ void Host_Main( void )
newtime = Sys_Milliseconds (); newtime = Sys_Milliseconds ();
time = newtime - oldtime; time = newtime - oldtime;
} while (time < 1); } while (time < 1);
// Msg ("time:%5.2f - %5.2f = %5.2f\n", newtime, oldtime, time);
_controlfp( _PC_24, _MCW_PC ); _controlfp( _PC_24, _MCW_PC );
Host_Frame (time); Host_Frame (time);

View File

@ -24,7 +24,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "server.h" #include "server.h"
game_export_t *ge; game_export_t *ge;
extern HINSTANCE game_library; HINSTANCE sv_library;
/* /*
=============== ===============
@ -305,7 +305,7 @@ void SV_ShutdownGameProgs (void)
{ {
if (!ge) return; if (!ge) return;
ge->Shutdown (); ge->Shutdown ();
Sys_UnloadGame (); Sys_UnloadGame ( sv_library );
ge = NULL; ge = NULL;
} }
@ -387,7 +387,7 @@ void SV_InitGameProgs (void)
import.AreasConnected = CM_AreasConnected; import.AreasConnected = CM_AreasConnected;
//find server.dll //find server.dll
ge = (game_export_t *)Sys_GetGameAPI ("ServerAPI", &import); ge = (game_export_t *)Sys_LoadGame("ServerAPI", sv_library, &import);
if (!ge) Com_Error (ERR_DROP, "failed to load game DLL"); if (!ge) Com_Error (ERR_DROP, "failed to load game DLL");
if (ge->apiversion != GAME_API_VERSION) if (ge->apiversion != GAME_API_VERSION)

View File

@ -207,34 +207,31 @@ sfx_t *S_FindName (char *name, bool create)
int i; int i;
sfx_t *sfx; sfx_t *sfx;
if (!name) if (!name || !name[0]) return NULL;
Com_Error (ERR_FATAL, "S_FindName: NULL\n");
if (!name[0])
Com_Error (ERR_FATAL, "S_FindName: empty name\n");
if (strlen(name) >= MAX_QPATH)
Com_Error (ERR_FATAL, "Sound name too long: %s", name);
// see if already loaded // see if already loaded
for (i=0 ; i < num_sfx ; i++) for (i = 0; i < num_sfx; i++)
{
if (!strcmp(known_sfx[i].name, name)) if (!strcmp(known_sfx[i].name, name))
{ {
return &known_sfx[i]; return &known_sfx[i];
} }
}
if (!create) if (!create) return NULL;
return NULL;
// find a free sfx // find a free sfx
for (i=0 ; i < num_sfx ; i++) for (i = 0; i < num_sfx; i++)
{
if (!known_sfx[i].name[0]) if (!known_sfx[i].name[0])
// registration_sequence < s_registration_sequence)
break; break;
}
if (i == num_sfx) if (i == num_sfx)
{ {
if (num_sfx == MAX_SFX) if (num_sfx == MAX_SFX)
Com_Error (ERR_FATAL, "S_FindName: out of sfx_t"); {
MsgWarn("S_FindName: MAX_SFX limit exceeded\n");
return NULL;
}
num_sfx++; num_sfx++;
} }
@ -270,7 +267,10 @@ sfx_t *S_AliasName (char *aliasname, char *truename)
if (i == num_sfx) if (i == num_sfx)
{ {
if (num_sfx == MAX_SFX) if (num_sfx == MAX_SFX)
Com_Error (ERR_FATAL, "S_FindName: out of sfx_t"); {
MsgWarn("S_AliasName: MAX_SFX limit exceeded\n");
return NULL;
}
num_sfx++; num_sfx++;
} }
@ -306,14 +306,11 @@ sfx_t *S_RegisterSound (char *name)
{ {
sfx_t *sfx; sfx_t *sfx;
if (!sound_started) if (!sound_started) return NULL;
return NULL;
sfx = S_FindName (name, true); sfx = S_FindName (name, true);
sfx->registration_sequence = s_registration_sequence; sfx->registration_sequence = s_registration_sequence;
if (!s_registering) S_LoadSound (sfx);
if (!s_registering)
S_LoadSound (sfx);
return sfx; return sfx;
} }

View File

@ -211,12 +211,10 @@ void FindNextChunk(char *name)
data_p = NULL; data_p = NULL;
return; return;
} }
// if (iff_chunk_len > 1024*1024)
// Sys_Error ("FindNextChunk: %i length is past the 1 meg sanity limit", iff_chunk_len);
data_p -= 8; data_p -= 8;
last_chunk = data_p + 8 + ( (iff_chunk_len + 1) & ~1 ); last_chunk = data_p + 8 + ( (iff_chunk_len + 1) & ~1 );
if (!strncmp(data_p, name, 4)) if (!strncmp(data_p, name, 4)) return;
return;
} }
} }

View File

@ -30,7 +30,6 @@ stdinout_api_t std;
uint sys_msg_time; uint sys_msg_time;
uint sys_frame_time; uint sys_frame_time;
bool s_win95;
int starttime; int starttime;
/* /*
@ -89,10 +88,7 @@ void Sys_Init (void)
vinfo.dwOSVersionInfoSize = sizeof(vinfo); vinfo.dwOSVersionInfoSize = sizeof(vinfo);
if (!GetVersionEx (&vinfo)) Sys_Error ("Couldn't get OS info"); if (!GetVersionEx (&vinfo)) Sys_Error ("Couldn't get OS info");
if (vinfo.dwMajorVersion < 4) Sys_Error ("%s requires windows version 4 or greater", GI.title); if (vinfo.dwMajorVersion < 4) Sys_Error ("%s requires windows version 4 or greater", GI.title);
if (vinfo.dwPlatformId == VER_PLATFORM_WIN32s) Sys_Error ("%s doesn't run on Win32s", GI.title);
else if ( vinfo.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS ) s_win95 = true;
} }
/* /*
@ -199,68 +195,68 @@ GAME DLL
======================================================================== ========================================================================
*/ */
HINSTANCE game_library;
/* /*
================= =================
Sys_UnloadGame Sys_UnloadGame
================= =================
*/ */
void Sys_UnloadGame (void) void Sys_UnloadGame( void *hinstance )
{ {
if (!FreeLibrary (game_library)) if(!hinstance) return;
Com_Error (ERR_FATAL, "FreeLibrary failed for game library"); FreeLibrary(hinstance);
game_library = NULL; hinstance = NULL;
} }
/* /*
================= =================
Sys_GetGameAPI Sys_LoadGame
Loads the game dll Loads the game dll
================= =================
*/ */
void *Sys_GetGameAPI (const char* procname, void *parms) void *Sys_LoadGame (const char* procname, void *hinstance, void *parms)
{ {
void *(*GetGameAPI) (void *); void *(*GetGameAPI) (void *);
char basepath[MAX_SYSPATH]; char basepath[MAX_SYSPATH];
search_t *gamedll; search_t *gamedll;
int i; int i;
if (game_library) Sys_UnloadGame( hinstance );
Com_Error (ERR_FATAL, "Sys_GetGameAPI without Sys_UnloadingGame");
//find server.dll //find server.dll
gamedll = FS_Search( "bin/*.dll" ); gamedll = FS_Search( "bin/*.dll" );
if(!gamedll) Com_Error (ERR_DROP, "can't found game DLL"); if(!gamedll)
{
Com_Error (ERR_DROP, "Can't find game.dll\n");
return NULL;
}
// now run through the search paths // now run through the search paths
for( i = 0; i < gamedll->numfilenames; i++ ) for( i = 0; i < gamedll->numfilenames; i++ )
{ {
sprintf(basepath, "%s/%s", GI.gamedir, gamedll->filenames[i]); sprintf(basepath, "%s/%s", GI.gamedir, gamedll->filenames[i]);
game_library = LoadLibrary ( basepath ); hinstance = LoadLibrary ( basepath );
if (!game_library) if (!hinstance)
{ {
sprintf(basepath, "%s/%s", GI.basedir, gamedll->filenames[i]); sprintf(basepath, "%s/%s", GI.basedir, gamedll->filenames[i]);
game_library = LoadLibrary ( basepath ); hinstance = LoadLibrary ( basepath );
} }
if (game_library) if (hinstance)
{ {
if (( GetGameAPI = (void *)GetProcAddress( game_library, procname )) == 0 ) if (( GetGameAPI = (void *)GetProcAddress( hinstance, procname )) == 0 )
Sys_UnloadGame(); Sys_UnloadGame( hinstance );
else break; else break;
} }
else Msg("Can't loading %s\n", gamedll->filenames[i] ); else MsgWarn("Can't loading %s\n", gamedll->filenames[i] );
} }
GetGameAPI = (void *)GetProcAddress (game_library, procname ); GetGameAPI = (void *)GetProcAddress (hinstance, procname );
if (!GetGameAPI) if (!GetGameAPI)
{ {
Sys_UnloadGame (); Sys_UnloadGame( hinstance );
return NULL; return NULL;
} }
return GetGameAPI (parms); return GetGameAPI (parms);

View File

@ -27,8 +27,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
// Structure containing functions exported from refresh DLL // Structure containing functions exported from refresh DLL
renderer_exp_t *re; renderer_exp_t *re;
cvar_t *win_noalttab;
extern HWND cl_hwnd; extern HWND cl_hwnd;
extern bool ActiveApp, Minimized; extern bool ActiveApp, Minimized;
extern HINSTANCE global_hInstance; extern HINSTANCE global_hInstance;
@ -41,15 +39,15 @@ static UINT MSH_MOUSEWHEEL;
// Console variables that we need to access from this module // Console variables that we need to access from this module
cvar_t *vid_gamma; cvar_t *vid_gamma;
cvar_t *vid_ref; // Name of Refresh DLL loaded cvar_t *vid_ref; // Name of Refresh DLL loaded
cvar_t *vid_xpos; // X coordinate of window position cvar_t *vid_xpos; // X coordinate of window position
cvar_t *vid_ypos; // Y coordinate of window position cvar_t *vid_ypos; // Y coordinate of window position
cvar_t *vid_fullscreen; cvar_t *vid_fullscreen;
// Global variables used internally by this module // Global variables used internally by this module
viddef_t viddef; // global video state; used by other modules viddef_t viddef; // global video state; used by other modules
HINSTANCE reflib_library; // Handle to refresh DLL HINSTANCE renderer_dll; // Handle to refresh DLL
bool reflib_active = 0; bool reflib_active = 0;
HWND cl_hwnd; // Main window handle for life of program HWND cl_hwnd; // Main window handle for life of program
@ -57,54 +55,9 @@ HWND cl_hwnd; // Main window handle for life of program
LONG WINAPI MainWndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); LONG WINAPI MainWndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
static bool s_alttab_disabled;
extern unsigned sys_msg_time; extern unsigned sys_msg_time;
/*
** WIN32 helper functions
*/
extern bool s_win95;
static void WIN_DisableAltTab( void )
{
if ( s_alttab_disabled )
return;
if ( s_win95 )
{
BOOL old;
SystemParametersInfo( SPI_SCREENSAVERRUNNING, 1, &old, 0 );
}
else
{
RegisterHotKey( 0, 0, MOD_ALT, VK_TAB );
RegisterHotKey( 0, 1, MOD_ALT, VK_RETURN );
}
s_alttab_disabled = true;
}
static void WIN_EnableAltTab( void )
{
if ( s_alttab_disabled )
{
if ( s_win95 )
{
BOOL old;
SystemParametersInfo( SPI_SCREENSAVERRUNNING, 0, &old, 0 );
}
else
{
UnregisterHotKey( 0, 0 );
UnregisterHotKey( 0, 1 );
}
s_alttab_disabled = false;
}
}
/* /*
========================================================================== ==========================================================================
@ -247,20 +200,11 @@ void AppActivate(BOOL fActive, BOOL minimize)
{ {
IN_Activate (false); IN_Activate (false);
S_Activate (false); S_Activate (false);
if ( win_noalttab->value )
{
WIN_EnableAltTab();
}
} }
else else
{ {
IN_Activate (true); IN_Activate (true);
S_Activate (true); S_Activate (true);
if ( win_noalttab->value )
{
WIN_DisableAltTab();
}
} }
} }
@ -454,16 +398,13 @@ typedef struct vidmode_s
vidmode_t vid_modes[] = vidmode_t vid_modes[] =
{ {
{ "Mode 0: 320x240", 320, 240, 0 }, { "Mode 0: 320x240", 320, 240, 0 },
{ "Mode 1: 400x300", 400, 300, 1 }, { "Mode 1: 640x480", 640, 480, 1 },
{ "Mode 2: 512x384", 512, 384, 2 }, { "Mode 2: 800x600", 800, 600, 2 },
{ "Mode 3: 640x480", 640, 480, 3 }, { "Mode 3: 1024x768", 1024, 768, 3 },
{ "Mode 4: 800x600", 800, 600, 4 }, { "Mode 4: 1280x960", 1280, 960, 4 },
{ "Mode 5: 960x720", 960, 720, 5 }, { "Mode 5: 1280x1024", 1280, 1024, 5 },
{ "Mode 6: 1024x768", 1024, 768, 6 }, { "Mode 6: 1600x1200", 1600, 1200, 6 },
{ "Mode 7: 1152x864", 1152, 864, 7 }, { "Mode 7: 2048x1536", 2048, 1536, 7 }
{ "Mode 8: 1280x960", 1280, 960, 8 },
{ "Mode 9: 1600x1200", 1600, 1200, 9 },
{ "Mode 10: 2048x1536", 2048, 1536, 10 }
}; };
bool VID_GetModeInfo( int *width, int *height, int mode ) bool VID_GetModeInfo( int *width, int *height, int mode )
@ -513,10 +454,9 @@ void VID_NewWindow ( int width, int height)
void VID_FreeReflib (void) void VID_FreeReflib (void)
{ {
if ( !FreeLibrary( reflib_library ) ) FreeLibrary( renderer_dll );
Com_Error( ERR_FATAL, "Reflib FreeLibrary failed" );
memset (&re, 0, sizeof(re)); memset (&re, 0, sizeof(re));
reflib_library = NULL; renderer_dll = NULL;
reflib_active = false; reflib_active = false;
} }
@ -532,30 +472,16 @@ char *FS_Title( void )
/* /*
============== ==============
VID_LoadRefresh VID_InitRenderer
============== ==============
*/ */
bool VID_LoadRefresh( char *name ) void VID_InitRenderer( void )
{ {
renderer_imp_t ri; renderer_imp_t ri;
renderer_t CreateRender; renderer_t CreateRender;
if ( reflib_active ) VID_FreeRenderer();
{
re->Shutdown();
VID_FreeReflib ();
}
Msg( "------- Loading %s -------\n", name );
if ( ( reflib_library = LoadLibrary( name ) ) == 0 )
{
Msg( "LoadLibrary(\"%s\") failed\n", name );
return false;
}
// load a new game dll
ri.Fs = pi->Fs; ri.Fs = pi->Fs;
ri.VFs = pi->VFs; ri.VFs = pi->VFs;
ri.Mem = pi->Mem; ri.Mem = pi->Mem;
@ -580,42 +506,25 @@ bool VID_LoadRefresh( char *name )
// studio callbacks // studio callbacks
ri.StudioEvent = CL_StudioEvent; ri.StudioEvent = CL_StudioEvent;
if(( renderer_dll = LoadLibrary( "bin/renderer.dll" )) == 0 )
Sys_Error( "Couldn't load renderer.dll\n" );
if ( ( CreateRender = (void *) GetProcAddress( reflib_library, "CreateAPI" ) ) == 0 ) if ( ( CreateRender = (void *) GetProcAddress( renderer_dll, "CreateAPI" )) == 0 )
Com_Error( ERR_FATAL, "GetProcAddress failed on %s", name ); Sys_Error( "CreateInstance: %s has no valid entry point", "renderer.dll" );
re = CreateRender( ri ); re = CreateRender( ri );
if (re->apiversion != RENDERER_API_VERSION) if(re->apiversion != RENDERER_API_VERSION)
{ Sys_Error("mismatch version (%i should be %i)\n", re->apiversion, RENDERER_API_VERSION);
VID_FreeReflib ();
Com_Error (ERR_FATAL, "%s has incompatible api_version", name); if(re->api_size != sizeof(renderer_exp_t))
} Sys_Error("mismatch interface size (%i should be %i)\n", re->api_size, sizeof(renderer_exp_t));
if ( re->Init( global_hInstance, MainWndProc ) == -1 ) if(!re->Init( global_hInstance, MainWndProc ))
{ Sys_Error("can't init renderer.dll\n");
re->Shutdown();
VID_FreeReflib ();
return false;
}
Msg( "------------------------------------\n");
reflib_active = true; reflib_active = true;
//======
//PGM
vidref_val = VIDREF_OTHER;
if(vid_ref)
{
if(!strcmp (vid_ref->string, "gl"))
vidref_val = VIDREF_GL;
else if(!strcmp(vid_ref->string, "soft"))
vidref_val = VIDREF_SOFT;
}
//PGM
//======
return true;
} }
/* /*
@ -629,22 +538,9 @@ update the rendering DLL and/or video mode to match.
*/ */
void VID_CheckChanges (void) void VID_CheckChanges (void)
{ {
if ( win_noalttab->modified )
{
if ( win_noalttab->value )
{
WIN_DisableAltTab();
}
else
{
WIN_EnableAltTab();
}
win_noalttab->modified = false;
}
if ( vid_ref->modified ) if ( vid_ref->modified )
{ {
cl.force_refdef = true; // can't use a paused refdef cl.force_refdef = true; // can't use a paused refdef
S_StopAllSounds(); S_StopAllSounds();
} }
while (vid_ref->modified) while (vid_ref->modified)
@ -657,26 +553,11 @@ void VID_CheckChanges (void)
cl.refresh_prepped = false; cl.refresh_prepped = false;
cls.disable_screen = true; cls.disable_screen = true;
if ( !VID_LoadRefresh( "bin/render.dll" ) ) VID_InitRenderer();
{
if ( strcmp (vid_ref->string, "soft") == 0 )
Com_Error (ERR_FATAL, "Couldn't fall back to software refresh!");
Cvar_Set( "vid_ref", "soft" );
/*
** drop the console if we fail to load a refresh
*/
if ( cls.key_dest != key_console )
{
Con_ToggleConsole_f();
}
}
cls.disable_screen = false; cls.disable_screen = false;
} }
/* // update our window position
** update our window position
*/
if ( vid_xpos->modified || vid_ypos->modified ) if ( vid_xpos->modified || vid_ypos->modified )
{ {
if (!vid_fullscreen->value) if (!vid_fullscreen->value)
@ -695,47 +576,26 @@ VID_Init
void VID_Init (void) void VID_Init (void)
{ {
/* Create the video variables so we know how to start the graphics drivers */ /* Create the video variables so we know how to start the graphics drivers */
vid_ref = Cvar_Get ("vid_ref", "soft", CVAR_ARCHIVE); vid_ref = Cvar_Get ("vid_ref", "gl", CVAR_ARCHIVE);
vid_xpos = Cvar_Get ("vid_xpos", "3", CVAR_ARCHIVE); vid_xpos = Cvar_Get ("vid_xpos", "3", CVAR_ARCHIVE);
vid_ypos = Cvar_Get ("vid_ypos", "22", CVAR_ARCHIVE); vid_ypos = Cvar_Get ("vid_ypos", "22", CVAR_ARCHIVE);
vid_fullscreen = Cvar_Get ("vid_fullscreen", "0", CVAR_ARCHIVE); vid_fullscreen = Cvar_Get ("vid_fullscreen", "0", CVAR_ARCHIVE);
vid_gamma = Cvar_Get( "vid_gamma", "1", CVAR_ARCHIVE ); vid_gamma = Cvar_Get( "vid_gamma", "1", CVAR_ARCHIVE );
win_noalttab = Cvar_Get( "win_noalttab", "0", CVAR_ARCHIVE );
/* Add some console commands that we want to handle */ /* Add some console commands that we want to handle */
Cmd_AddCommand ("vid_restart", VID_Restart_f); Cmd_AddCommand ("vid_restart", VID_Restart_f);
Cmd_AddCommand ("vid_front", VID_Front_f); Cmd_AddCommand ("vid_front", VID_Front_f);
/*
** this is a gross hack but necessary to clamp the mode for 3Dfx
*/
#if 0
{
cvar_t *gl_driver = Cvar_Get( "gl_driver", "opengl32", 0 );
cvar_t *gl_mode = Cvar_Get( "gl_mode", "3", 0 );
if ( stricmp( gl_driver->string, "3dfxgl" ) == 0 )
{
Cvar_SetValue( "gl_mode", 3 );
viddef.width = 640;
viddef.height = 480;
}
}
#endif
/* Disable the 3Dfx splash screen */
putenv("FX_GLIDE_NO_SPLASH=0");
/* Start the graphics mode and load refresh DLL */ // Start the graphics mode and load refresh DLL
VID_CheckChanges(); VID_CheckChanges();
} }
/* /*
============ ============
VID_Shutdown VID_FreeRenderer
============ ============
*/ */
void VID_Shutdown (void) void VID_FreeRenderer (void)
{ {
if ( reflib_active ) if ( reflib_active )
{ {

View File

@ -20,26 +20,15 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "client.h" #include "client.h"
#include "qmenu.h" #include "qmenu.h"
#define REF_SOFT 0
#define REF_OPENGL 1
#define REF_3DFX 2
#define REF_POWERVR 3
#define REF_VERITE 4
extern cvar_t *vid_ref;
extern cvar_t *vid_fullscreen; extern cvar_t *vid_fullscreen;
extern cvar_t *vid_gamma; extern cvar_t *vid_gamma;
extern cvar_t *scr_viewsize; extern cvar_t *scr_viewsize;
static cvar_t *gl_mode; static cvar_t *gl_mode;
static cvar_t *gl_driver;
static cvar_t *gl_picmip; static cvar_t *gl_picmip;
static cvar_t *gl_ext_palettedtexture; static cvar_t *gl_ext_palettedtexture;
static cvar_t *gl_finish; static cvar_t *gl_finish;
static cvar_t *sw_mode;
static cvar_t *sw_stipplealpha;
extern void M_ForceMenuOff( void ); extern void M_ForceMenuOff( void );
/* /*
@ -49,65 +38,31 @@ MENU INTERACTION
==================================================================== ====================================================================
*/ */
#define SOFTWARE_MENU 0
#define OPENGL_MENU 1
static menuframework_s s_software_menu; static menuframework_s s_video_menu;
static menuframework_s s_opengl_menu; static menulist_s s_mode_list;
static menuframework_s *s_current_menu;
static int s_current_menu_index;
static menulist_s s_mode_list[2];
static menulist_s s_ref_list[2];
static menuslider_s s_tq_slider; static menuslider_s s_tq_slider;
static menuslider_s s_screensize_slider[2]; static menuslider_s s_screensize_slider;
static menuslider_s s_brightness_slider[2]; static menuslider_s s_brightness_slider;
static menulist_s s_fs_box[2]; static menulist_s s_fs_box;
static menulist_s s_stipple_box; static menulist_s s_stipple_box;
static menulist_s s_paletted_texture_box; static menulist_s s_paletted_texture_box;
static menulist_s s_finish_box; static menulist_s s_finish_box;
static menuaction_s s_cancel_action[2]; static menuaction_s s_cancel_action;
static menuaction_s s_defaults_action[2]; static menuaction_s s_defaults_action;
static void DriverCallback( void *unused )
{
s_ref_list[!s_current_menu_index].curvalue = s_ref_list[s_current_menu_index].curvalue;
if ( s_ref_list[s_current_menu_index].curvalue == 0 )
{
s_current_menu = &s_software_menu;
s_current_menu_index = 0;
}
else
{
s_current_menu = &s_opengl_menu;
s_current_menu_index = 1;
}
}
static void ScreenSizeCallback( void *s ) static void ScreenSizeCallback( void *s )
{ {
menuslider_s *slider = ( menuslider_s * ) s; menuslider_s *slider = (menuslider_s *)s;
Cvar_SetValue( "viewsize", slider->curvalue * 10 ); Cvar_SetValue( "viewsize", slider->curvalue * 10 );
} }
static void BrightnessCallback( void *s ) static void BrightnessCallback( void *s )
{ {
menuslider_s *slider = ( menuslider_s * ) s; menuslider_s *slider = (menuslider_s *)s;
float gamma = ( 0.8 - ( slider->curvalue / 10.0 - 0.5 ) ) + 0.5;
if ( s_current_menu_index == SOFTWARE_MENU ) Cvar_SetValue( "vid_gamma", gamma );
s_brightness_slider[1].curvalue = s_brightness_slider[0].curvalue;
else
s_brightness_slider[0].curvalue = s_brightness_slider[1].curvalue;
if ( stricmp( vid_ref->string, "soft" ) == 0 )
{
float gamma = ( 0.8 - ( slider->curvalue/10.0 - 0.5 ) ) + 0.5;
Cvar_SetValue( "vid_gamma", gamma );
}
} }
static void ResetDefaults( void *unused ) static void ResetDefaults( void *unused )
@ -117,81 +72,14 @@ static void ResetDefaults( void *unused )
static void ApplyChanges( void *unused ) static void ApplyChanges( void *unused )
{ {
float gamma; extern cvar_t *vid_ref;
/*
** make values consistent
*/
s_fs_box[!s_current_menu_index].curvalue = s_fs_box[s_current_menu_index].curvalue;
s_brightness_slider[!s_current_menu_index].curvalue = s_brightness_slider[s_current_menu_index].curvalue;
s_ref_list[!s_current_menu_index].curvalue = s_ref_list[s_current_menu_index].curvalue;
/*
** invert sense so greater = brighter, and scale to a range of 0.5 to 1.3
*/
gamma = ( 0.8 - ( s_brightness_slider[s_current_menu_index].curvalue/10.0 - 0.5 ) ) + 0.5;
Cvar_SetValue( "vid_gamma", gamma );
Cvar_SetValue( "sw_stipplealpha", s_stipple_box.curvalue );
Cvar_SetValue( "gl_picmip", 3 - s_tq_slider.curvalue ); Cvar_SetValue( "gl_picmip", 3 - s_tq_slider.curvalue );
Cvar_SetValue( "vid_fullscreen", s_fs_box[s_current_menu_index].curvalue ); Cvar_SetValue( "vid_fullscreen", s_fs_box.curvalue );
Cvar_SetValue( "gl_ext_palettedtexture", s_paletted_texture_box.curvalue ); Cvar_SetValue( "gl_ext_palettedtexture", s_paletted_texture_box.curvalue );
Cvar_SetValue( "gl_finish", s_finish_box.curvalue ); Cvar_SetValue( "gl_finish", s_finish_box.curvalue );
Cvar_SetValue( "sw_mode", s_mode_list[SOFTWARE_MENU].curvalue ); Cvar_SetValue( "gl_mode", s_mode_list.curvalue );
Cvar_SetValue( "gl_mode", s_mode_list[OPENGL_MENU].curvalue ); vid_ref->modified = true;
switch ( s_ref_list[s_current_menu_index].curvalue )
{
case REF_SOFT:
Cvar_Set( "vid_ref", "soft" );
break;
case REF_OPENGL:
Cvar_Set( "vid_ref", "gl" );
Cvar_Set( "gl_driver", "opengl32" );
break;
case REF_3DFX:
Cvar_Set( "vid_ref", "gl" );
Cvar_Set( "gl_driver", "3dfxgl" );
break;
case REF_POWERVR:
Cvar_Set( "vid_ref", "gl" );
Cvar_Set( "gl_driver", "pvrgl" );
break;
case REF_VERITE:
Cvar_Set( "vid_ref", "gl" );
Cvar_Set( "gl_driver", "veritegl" );
break;
}
/*
** update appropriate stuff if we're running OpenGL and gamma
** has been modified
*/
if ( stricmp( vid_ref->string, "gl" ) == 0 )
{
if ( vid_gamma->modified )
{
vid_ref->modified = true;
if ( stricmp( gl_driver->string, "3dfxgl" ) == 0 )
{
char envbuffer[1024];
float g;
vid_ref->modified = true;
g = 2.00 * ( 0.8 - ( vid_gamma->value - 0.5 ) ) + 1.0F;
sprintf( envbuffer, "SSTV2_GAMMA=%f", g );
putenv( envbuffer );
sprintf( envbuffer, "SST_GAMMA=%f", g );
putenv( envbuffer );
vid_gamma->modified = false;
}
}
if ( gl_driver->modified )
vid_ref->modified = true;
}
M_ForceMenuOff(); M_ForceMenuOff();
} }
@ -211,190 +99,111 @@ void VID_MenuInit( void )
static const char *resolutions[] = static const char *resolutions[] =
{ {
"[320 240 ]", "[320 240 ]",
"[400 300 ]",
"[512 384 ]",
"[640 480 ]", "[640 480 ]",
"[800 600 ]", "[800 600 ]",
"[960 720 ]",
"[1024 768 ]", "[1024 768 ]",
"[1152 864 ]",
"[1280 960 ]", "[1280 960 ]",
"[1280 1024]",
"[1600 1200]", "[1600 1200]",
"[2048 1536]", "[2048 1536]",
0 0,
};
static const char *refs[] =
{
"[software ]",
"[default OpenGL]",
"[3Dfx OpenGL ]",
"[PowerVR OpenGL]",
// "[Rendition OpenGL]",
0
}; };
static const char *yesno_names[] = static const char *yesno_names[] =
{ {
"no", "no",
"yes", "yes",
0 0,
}; };
int i;
if ( !gl_driver ) if ( !gl_picmip ) gl_picmip = Cvar_Get( "gl_picmip", "0", 0 );
gl_driver = Cvar_Get( "gl_driver", "opengl32", 0 ); if ( !gl_mode ) gl_mode = Cvar_Get( "gl_mode", "3", 0 );
if ( !gl_picmip ) if ( !gl_finish ) gl_finish = Cvar_Get( "gl_finish", "0", CVAR_ARCHIVE );
gl_picmip = Cvar_Get( "gl_picmip", "0", 0 ); if ( !scr_viewsize ) scr_viewsize = Cvar_Get ("viewsize", "100", CVAR_ARCHIVE);
if ( !gl_mode ) if ( !gl_ext_palettedtexture ) gl_ext_palettedtexture = Cvar_Get( "gl_ext_palettedtexture", "1", CVAR_ARCHIVE );
gl_mode = Cvar_Get( "gl_mode", "3", 0 );
if ( !sw_mode )
sw_mode = Cvar_Get( "sw_mode", "0", 0 );
if ( !gl_ext_palettedtexture )
gl_ext_palettedtexture = Cvar_Get( "gl_ext_palettedtexture", "1", CVAR_ARCHIVE );
if ( !gl_finish )
gl_finish = Cvar_Get( "gl_finish", "0", CVAR_ARCHIVE );
if ( !sw_stipplealpha ) s_mode_list.curvalue = gl_mode->value;
sw_stipplealpha = Cvar_Get( "sw_stipplealpha", "0", CVAR_ARCHIVE ); s_screensize_slider.curvalue = scr_viewsize->value/10;
s_mode_list[SOFTWARE_MENU].curvalue = sw_mode->value; s_video_menu.x = viddef.width * 0.50;
s_mode_list[OPENGL_MENU].curvalue = gl_mode->value; s_video_menu.y = viddef.height / 2 - 58;
s_video_menu.nitems = 0;
if ( !scr_viewsize ) s_mode_list.generic.type = MTYPE_SPINCONTROL;
scr_viewsize = Cvar_Get ("viewsize", "100", CVAR_ARCHIVE); s_mode_list.generic.name = "video mode";
s_mode_list.generic.x = 0;
s_mode_list.generic.y = 0;
s_mode_list.itemnames = resolutions;
s_screensize_slider[SOFTWARE_MENU].curvalue = scr_viewsize->value/10; s_screensize_slider.generic.type = MTYPE_SLIDER;
s_screensize_slider[OPENGL_MENU].curvalue = scr_viewsize->value/10; s_screensize_slider.generic.x = 0;
s_screensize_slider.generic.y = 10;
s_screensize_slider.generic.name = "screen size";
s_screensize_slider.minvalue = 3;
s_screensize_slider.maxvalue = 12;
s_screensize_slider.generic.callback = ScreenSizeCallback;
if ( strcmp( vid_ref->string, "soft" ) == 0 ) s_brightness_slider.generic.type = MTYPE_SLIDER;
{ s_brightness_slider.generic.x = 0;
s_current_menu_index = SOFTWARE_MENU; s_brightness_slider.generic.y = 20;
s_ref_list[0].curvalue = s_ref_list[1].curvalue = REF_SOFT; s_brightness_slider.generic.name = "brightness";
} s_brightness_slider.generic.callback = BrightnessCallback;
else if ( strcmp( vid_ref->string, "gl" ) == 0 ) s_brightness_slider.minvalue = 5;
{ s_brightness_slider.maxvalue = 13;
s_current_menu_index = OPENGL_MENU; s_brightness_slider.curvalue = ( 1.3 - vid_gamma->value + 0.5 ) * 10;
if ( strcmp( gl_driver->string, "3dfxgl" ) == 0 )
s_ref_list[s_current_menu_index].curvalue = REF_3DFX;
else if ( strcmp( gl_driver->string, "pvrgl" ) == 0 )
s_ref_list[s_current_menu_index].curvalue = REF_POWERVR;
else if ( strcmp( gl_driver->string, "opengl32" ) == 0 )
s_ref_list[s_current_menu_index].curvalue = REF_OPENGL;
else
// s_ref_list[s_current_menu_index].curvalue = REF_VERITE;
s_ref_list[s_current_menu_index].curvalue = REF_OPENGL;
}
s_software_menu.x = viddef.width * 0.50; s_fs_box.generic.type = MTYPE_SPINCONTROL;
s_software_menu.nitems = 0; s_fs_box.generic.x = 0;
s_opengl_menu.x = viddef.width * 0.50; s_fs_box.generic.y = 30;
s_opengl_menu.nitems = 0; s_fs_box.generic.name = "fullscreen";
s_fs_box.itemnames = yesno_names;
s_fs_box.curvalue = vid_fullscreen->value;
for ( i = 0; i < 2; i++ ) s_tq_slider.generic.type = MTYPE_SLIDER;
{ s_tq_slider.generic.x = 0;
s_ref_list[i].generic.type = MTYPE_SPINCONTROL; s_tq_slider.generic.y = 40;
s_ref_list[i].generic.name = "driver"; s_tq_slider.generic.name = "texture quality";
s_ref_list[i].generic.x = 0;
s_ref_list[i].generic.y = 0;
s_ref_list[i].generic.callback = DriverCallback;
s_ref_list[i].itemnames = refs;
s_mode_list[i].generic.type = MTYPE_SPINCONTROL;
s_mode_list[i].generic.name = "video mode";
s_mode_list[i].generic.x = 0;
s_mode_list[i].generic.y = 10;
s_mode_list[i].itemnames = resolutions;
s_screensize_slider[i].generic.type = MTYPE_SLIDER;
s_screensize_slider[i].generic.x = 0;
s_screensize_slider[i].generic.y = 20;
s_screensize_slider[i].generic.name = "screen size";
s_screensize_slider[i].minvalue = 3;
s_screensize_slider[i].maxvalue = 12;
s_screensize_slider[i].generic.callback = ScreenSizeCallback;
s_brightness_slider[i].generic.type = MTYPE_SLIDER;
s_brightness_slider[i].generic.x = 0;
s_brightness_slider[i].generic.y = 30;
s_brightness_slider[i].generic.name = "brightness";
s_brightness_slider[i].generic.callback = BrightnessCallback;
s_brightness_slider[i].minvalue = 5;
s_brightness_slider[i].maxvalue = 13;
s_brightness_slider[i].curvalue = ( 1.3 - vid_gamma->value + 0.5 ) * 10;
s_fs_box[i].generic.type = MTYPE_SPINCONTROL;
s_fs_box[i].generic.x = 0;
s_fs_box[i].generic.y = 40;
s_fs_box[i].generic.name = "fullscreen";
s_fs_box[i].itemnames = yesno_names;
s_fs_box[i].curvalue = vid_fullscreen->value;
s_defaults_action[i].generic.type = MTYPE_ACTION;
s_defaults_action[i].generic.name = "reset to defaults";
s_defaults_action[i].generic.x = 0;
s_defaults_action[i].generic.y = 90;
s_defaults_action[i].generic.callback = ResetDefaults;
s_cancel_action[i].generic.type = MTYPE_ACTION;
s_cancel_action[i].generic.name = "cancel";
s_cancel_action[i].generic.x = 0;
s_cancel_action[i].generic.y = 100;
s_cancel_action[i].generic.callback = CancelChanges;
}
s_stipple_box.generic.type = MTYPE_SPINCONTROL;
s_stipple_box.generic.x = 0;
s_stipple_box.generic.y = 60;
s_stipple_box.generic.name = "stipple alpha";
s_stipple_box.curvalue = sw_stipplealpha->value;
s_stipple_box.itemnames = yesno_names;
s_tq_slider.generic.type = MTYPE_SLIDER;
s_tq_slider.generic.x = 0;
s_tq_slider.generic.y = 60;
s_tq_slider.generic.name = "texture quality";
s_tq_slider.minvalue = 0; s_tq_slider.minvalue = 0;
s_tq_slider.maxvalue = 3; s_tq_slider.maxvalue = 3;
s_tq_slider.curvalue = 3-gl_picmip->value; s_tq_slider.curvalue = 3 - gl_picmip->value;
s_paletted_texture_box.generic.type = MTYPE_SPINCONTROL; s_paletted_texture_box.generic.type = MTYPE_SPINCONTROL;
s_paletted_texture_box.generic.x = 0; s_paletted_texture_box.generic.x = 0;
s_paletted_texture_box.generic.y = 70; s_paletted_texture_box.generic.y = 50;
s_paletted_texture_box.generic.name = "8-bit textures"; s_paletted_texture_box.generic.name = "8-bit textures";
s_paletted_texture_box.itemnames = yesno_names; s_paletted_texture_box.itemnames = yesno_names;
s_paletted_texture_box.curvalue = gl_ext_palettedtexture->value; s_paletted_texture_box.curvalue = gl_ext_palettedtexture->value;
s_finish_box.generic.type = MTYPE_SPINCONTROL; s_finish_box.generic.type = MTYPE_SPINCONTROL;
s_finish_box.generic.x = 0; s_finish_box.generic.x = 0;
s_finish_box.generic.y = 80; s_finish_box.generic.y = 60;
s_finish_box.generic.name = "sync every frame"; s_finish_box.generic.name = "sync every frame";
s_finish_box.curvalue = gl_finish->value; s_finish_box.curvalue = gl_finish->value;
s_finish_box.itemnames = yesno_names; s_finish_box.itemnames = yesno_names;
Menu_AddItem( &s_software_menu, ( void * ) &s_ref_list[SOFTWARE_MENU] ); s_defaults_action.generic.type = MTYPE_ACTION;
Menu_AddItem( &s_software_menu, ( void * ) &s_mode_list[SOFTWARE_MENU] ); s_defaults_action.generic.name = "reset to defaults";
Menu_AddItem( &s_software_menu, ( void * ) &s_screensize_slider[SOFTWARE_MENU] ); s_defaults_action.generic.x = 0;
Menu_AddItem( &s_software_menu, ( void * ) &s_brightness_slider[SOFTWARE_MENU] ); s_defaults_action.generic.y = 80;
Menu_AddItem( &s_software_menu, ( void * ) &s_fs_box[SOFTWARE_MENU] ); s_defaults_action.generic.callback = ResetDefaults;
Menu_AddItem( &s_software_menu, ( void * ) &s_stipple_box );
Menu_AddItem( &s_opengl_menu, ( void * ) &s_ref_list[OPENGL_MENU] ); s_cancel_action.generic.type = MTYPE_ACTION;
Menu_AddItem( &s_opengl_menu, ( void * ) &s_mode_list[OPENGL_MENU] ); s_cancel_action.generic.name = "cancel";
Menu_AddItem( &s_opengl_menu, ( void * ) &s_screensize_slider[OPENGL_MENU] ); s_cancel_action.generic.x = 0;
Menu_AddItem( &s_opengl_menu, ( void * ) &s_brightness_slider[OPENGL_MENU] ); s_cancel_action.generic.y = 90;
Menu_AddItem( &s_opengl_menu, ( void * ) &s_fs_box[OPENGL_MENU] ); s_cancel_action.generic.callback = CancelChanges;
Menu_AddItem( &s_opengl_menu, ( void * ) &s_tq_slider );
Menu_AddItem( &s_opengl_menu, ( void * ) &s_paletted_texture_box );
Menu_AddItem( &s_opengl_menu, ( void * ) &s_finish_box );
Menu_AddItem( &s_software_menu, ( void * ) &s_defaults_action[SOFTWARE_MENU] ); Menu_AddItem( &s_video_menu, ( void * ) &s_mode_list );
Menu_AddItem( &s_software_menu, ( void * ) &s_cancel_action[SOFTWARE_MENU] ); Menu_AddItem( &s_video_menu, ( void * ) &s_screensize_slider );
Menu_AddItem( &s_opengl_menu, ( void * ) &s_defaults_action[OPENGL_MENU] ); Menu_AddItem( &s_video_menu, ( void * ) &s_brightness_slider );
Menu_AddItem( &s_opengl_menu, ( void * ) &s_cancel_action[OPENGL_MENU] ); Menu_AddItem( &s_video_menu, ( void * ) &s_fs_box );
Menu_AddItem( &s_video_menu, ( void * ) &s_tq_slider );
Menu_AddItem( &s_video_menu, ( void * ) &s_paletted_texture_box );
Menu_AddItem( &s_video_menu, ( void * ) &s_finish_box );
Menu_AddItem( &s_video_menu, ( void * ) &s_defaults_action );
Menu_AddItem( &s_video_menu, ( void * ) &s_cancel_action );
Menu_Center( &s_software_menu ); Menu_Center( &s_video_menu );
Menu_Center( &s_opengl_menu ); s_video_menu.x -= 8;
s_opengl_menu.x -= 8;
s_software_menu.x -= 8;
} }
/* /*
@ -406,26 +215,15 @@ void VID_MenuDraw (void)
{ {
int w, h; int w, h;
if ( s_current_menu_index == 0 ) // draw the banner
s_current_menu = &s_software_menu;
else
s_current_menu = &s_opengl_menu;
/*
** draw the banner
*/
re->DrawGetPicSize( &w, &h, "m_banner_video" ); re->DrawGetPicSize( &w, &h, "m_banner_video" );
re->DrawPic( viddef.width / 2 - w / 2, viddef.height /2 - 110, "m_banner_video" ); re->DrawPic( viddef.width / 2 - w / 2, viddef.height /2 - 110, "m_banner_video" );
/* // move cursor to a reasonable starting position
** move cursor to a reasonable starting position Menu_AdjustCursor( &s_video_menu, 1 );
*/
Menu_AdjustCursor( s_current_menu, 1 );
/* // draw the menu
** draw the menu Menu_Draw( &s_video_menu );
*/
Menu_Draw( s_current_menu );
} }
/* /*
@ -435,7 +233,7 @@ VID_MenuKey
*/ */
const char *VID_MenuKey( int key ) const char *VID_MenuKey( int key )
{ {
menuframework_s *m = s_current_menu; menuframework_s *m = &s_video_menu;
static const char *sound = "misc/menu1.wav"; static const char *sound = "misc/menu1.wav";
switch ( key ) switch ( key )

View File

@ -7,6 +7,7 @@
HINSTANCE base_hInstance; HINSTANCE base_hInstance;
FILE *logfile; FILE *logfile;
char log_path[256];
/* /*
=============================================================================== ===============================================================================
@ -231,7 +232,7 @@ void Sys_PrintW(const char *pMsg)
{ {
if (!logfile) if (!logfile)
{ {
logfile = fopen ("engine.log", "w"); logfile = fopen ( log_path, "w");
fprintf (logfile, "=======================================================================\n" ); fprintf (logfile, "=======================================================================\n" );
fprintf (logfile, "\t\tXash3D started at %s\n", Log_Timestamp()); fprintf (logfile, "\t\tXash3D started at %s\n", Log_Timestamp());
fprintf (logfile, "=======================================================================\n"); fprintf (logfile, "=======================================================================\n");

View File

@ -63,12 +63,14 @@ void LookupInstance( const char *funcname )
//don't show console as default //don't show console as default
if(!debug_mode) show_always = false; if(!debug_mode) show_always = false;
strcpy(dllname, "bin/engine.dll" ); strcpy(dllname, "bin/engine.dll" );
strcpy(log_path, "engine.log" ); // xash3d root directory
} }
else if(!strcmp(progname, "host_dedicated")) else if(!strcmp(progname, "host_dedicated"))
{ {
app_name = HOST_DEDICATED; app_name = HOST_DEDICATED;
console_read_only = false; console_read_only = false;
strcpy(dllname, "bin/engine.dll" ); strcpy(dllname, "bin/engine.dll" );
strcpy(log_path, "engine.log" ); // xash3d root directory
} }
else if(!strcmp(progname, "host_editor")) else if(!strcmp(progname, "host_editor"))
{ {
@ -77,21 +79,25 @@ void LookupInstance( const char *funcname )
//don't show console as default //don't show console as default
if(!debug_mode) show_always = false; if(!debug_mode) show_always = false;
strcpy(dllname, "bin/editor.dll" ); strcpy(dllname, "bin/editor.dll" );
strcpy(log_path, "editor.log" ); // xash3d root directory
} }
else if(!strcmp(progname, "bsplib")) else if(!strcmp(progname, "bsplib"))
{ {
app_name = BSPLIB; app_name = BSPLIB;
strcpy(dllname, "bin/platform.dll" ); strcpy(dllname, "bin/platform.dll" );
strcpy(log_path, "bsplib.log" ); // xash3d root directory
} }
else if(!strcmp(progname, "sprite")) else if(!strcmp(progname, "sprite"))
{ {
app_name = SPRITE; app_name = SPRITE;
strcpy(dllname, "bin/platform.dll" ); strcpy(dllname, "bin/platform.dll" );
sprintf(log_path, "%s/spritegen.log", sys_rootdir ); // same as .exe file
} }
else if(!strcmp(progname, "studio")) else if(!strcmp(progname, "studio"))
{ {
app_name = STUDIO; app_name = STUDIO;
strcpy(dllname, "bin/platform.dll" ); strcpy(dllname, "bin/platform.dll" );
sprintf(log_path, "%s/studiomdl.log", sys_rootdir ); // same as .exe file
} }
else if(!strcmp(progname, "credits")) //easter egg else if(!strcmp(progname, "credits")) //easter egg
{ {
@ -339,6 +345,8 @@ void InitLauncher( char *funcname )
if(CheckParm ("-log")) log_active = true; if(CheckParm ("-log")) log_active = true;
if(abs((short)hStdout) < 100) hooked_out = false; if(abs((short)hStdout) < 100) hooked_out = false;
else hooked_out = true; else hooked_out = true;
UpdateEnvironmentVariables(); // set working directory
//init launcher //init launcher
LookupInstance( funcname ); LookupInstance( funcname );
@ -346,9 +354,6 @@ void InitLauncher( char *funcname )
API_SetConsole(); //initialize system console API_SetConsole(); //initialize system console
Sys_InitConsole(); Sys_InitConsole();
// set working directory
UpdateEnvironmentVariables();
// first text message into console or log // first text message into console or log
Msg("------- Loading bin/launcher.dll [%g] -------\n", LAUNCHER_VERSION ); Msg("------- Loading bin/launcher.dll [%g] -------\n", LAUNCHER_VERSION );
CreateInstance(); CreateInstance();

View File

@ -36,6 +36,8 @@ extern bool debug_mode;
extern bool log_active; extern bool log_active;
extern int com_argc; extern int com_argc;
extern char *com_argv[MAX_NUM_ARGVS]; extern char *com_argv[MAX_NUM_ARGVS];
extern char sys_rootdir[ MAX_SYSPATH ];
extern char log_path[256];
extern bool console_read_only; extern bool console_read_only;
extern bool show_always; extern bool show_always;
char *va(const char *format, ...); char *va(const char *format, ...);

View File

@ -97,7 +97,7 @@ bool AddScriptToStack(const char *name, byte *buffer, int size)
{ {
if (script == &scriptstack[MAX_INCLUDES - 1]) if (script == &scriptstack[MAX_INCLUDES - 1])
{ {
Msg("script file exceeded limit %d", MAX_INCLUDES ); MsgWarn("AddScriptToStack: script file limit exceeded %d\n", MAX_INCLUDES );
return false; return false;
} }
if(!buffer || !size) return false; if(!buffer || !size) return false;
@ -105,7 +105,7 @@ bool AddScriptToStack(const char *name, byte *buffer, int size)
script++; script++;
strcpy (script->filename, name ); strcpy (script->filename, name );
script->buffer = buffer; script->buffer = buffer;
script->line = 1; script->line = scriptline = 1;
script->script_p = script->buffer; script->script_p = script->buffer;
script->end_p = script->buffer + size; script->end_p = script->buffer + size;
@ -121,7 +121,6 @@ bool FS_LoadScript( const char *filename, char *buf, int size )
script = scriptstack; script = scriptstack;
result = AddScriptToStack( filename, buf, size); result = AddScriptToStack( filename, buf, size);
if(result)MsgDev("Load script %s\n", filename );
endofscript = false; endofscript = false;
tokenready = false; tokenready = false;
@ -130,15 +129,9 @@ bool FS_LoadScript( const char *filename, char *buf, int size )
bool FS_AddScript( const char *filename, char *buf, int size ) bool FS_AddScript( const char *filename, char *buf, int size )
{ {
int result; if(!buf || size <= 0)
if(!buf || size <= 0)
buf = FS_LoadFile (filename, &size ); buf = FS_LoadFile (filename, &size );
return AddScriptToStack(filename, buf, size);
result = AddScriptToStack(filename, buf, size);
if(result) MsgDev("Insert script %s\n", filename );
return result;
} }
/* /*
@ -165,6 +158,7 @@ skip_whitespace: // skip whitespace
{ {
if (script->script_p >= script->end_p) if (script->script_p >= script->end_p)
return EndOfScript (newline); return EndOfScript (newline);
if (*script->script_p++ == '\n') if (*script->script_p++ == '\n')
{ {
if (!newline) goto line_incomplete; if (!newline) goto line_incomplete;
@ -180,13 +174,15 @@ skip_whitespace: // skip whitespace
{ {
if (!newline) goto line_incomplete; if (!newline) goto line_incomplete;
//ets+++ // ets+++
if (*script->script_p == '/') script->script_p++; if (*script->script_p == '/') script->script_p++;
if (script->script_p[1] == 'T' && script->script_p[2] == 'X') if (script->script_p[1] == 'T' && script->script_p[2] == 'X')
g_TXcommand = script->script_p[3];//TX#"-style comment g_TXcommand = script->script_p[3];//TX#"-style comment
while (*script->script_p++ != '\n') while (*script->script_p++ != '\n')
{
if (script->script_p >= script->end_p) if (script->script_p >= script->end_p)
return EndOfScript (newline); return EndOfScript (newline);
}
goto skip_whitespace; goto skip_whitespace;
} }
@ -194,12 +190,17 @@ skip_whitespace: // skip whitespace
if (script->script_p[0] == '/' && script->script_p[1] == '*') if (script->script_p[0] == '/' && script->script_p[1] == '*')
{ {
if (!newline) goto line_incomplete; if (!newline) goto line_incomplete;
script->script_p+=2;
script->script_p += 2;
while (script->script_p[0] != '*' && script->script_p[1] != '/') while (script->script_p[0] != '*' && script->script_p[1] != '/')
{ {
script->script_p++;
if (script->script_p >= script->end_p) if (script->script_p >= script->end_p)
return EndOfScript (newline); return EndOfScript (newline);
if (*script->script_p++ == '\n')
{
if (!newline) goto line_incomplete;
scriptline = script->line++;
}
} }
script->script_p += 2; script->script_p += 2;
goto skip_whitespace; goto skip_whitespace;
@ -216,7 +217,7 @@ skip_whitespace: // skip whitespace
{ {
if (token_p == &token[MAX_SYSPATH - 1]) if (token_p == &token[MAX_SYSPATH - 1])
{ {
Msg("GetToken: Token too large on line %i\n", scriptline); MsgWarn("GetToken: Token too large on line %i\n", scriptline);
break; break;
} }
@ -232,7 +233,7 @@ skip_whitespace: // skip whitespace
{ {
if (token_p == &token[MAX_SYSPATH - 1]) if (token_p == &token[MAX_SYSPATH - 1])
{ {
Msg("GetToken: Token too large on line %i\n",scriptline); MsgWarn("GetToken: Token too large on line %i\n",scriptline);
break; break;
} }
@ -254,7 +255,6 @@ skip_whitespace: // skip whitespace
return true; return true;
line_incomplete: line_incomplete:
//invoke error //invoke error
return EndOfScript( newline ); return EndOfScript( newline );
} }
@ -266,8 +266,11 @@ EndOfScript
*/ */
bool EndOfScript (bool newline) bool EndOfScript (bool newline)
{ {
if (!newline) Sys_Error ("Line %i is incomplete\n", scriptline); if (!newline)
{
scriptline = script->line;
Sys_Error ("%s: line %i is incomplete\n", script->filename, scriptline);
}
if (!strcmp (script->filename, "script buffer")) if (!strcmp (script->filename, "script buffer"))
{ {
endofscript = true; endofscript = true;
@ -284,8 +287,6 @@ bool EndOfScript (bool newline)
scriptline = script->line; scriptline = script->line;
endofscript = true; endofscript = true;
MsgDev("returning to %s\n", script->filename);
return false; return false;
} }
@ -325,100 +326,6 @@ SC_ParseToken
Parse a token out of a string Parse a token out of a string
============== ==============
*/ */
#if 0
char *SC_ParseToken(const char **data_p)
{
int c, len;
const char *data;
data = *data_p;
len = 0;
token[0] = 0;
if (!data)
{
*data_p = NULL;
return NULL;
}
// skip whitespace
skipwhite:
while ( (c = *data) <= ' ')
{
if (c == 0)
{
endofscript = true;
*data_p = NULL;
return NULL; // end of file;
}
data++;
}
// skip // comments
if (c=='/' && data[1] == '/')
{
while (*data && *data != '\n')
data++;
goto skipwhite;
}
// skip /* comments
if (c=='/' && data[1] == '*')
{
while (data[1] && (data[0] != '*' || data[1] != '/'))
data++;
data += 2;
goto skipwhite;
}
// handle quoted strings specially
if (c == '\"')
{
data++;
while( 1 )
{
c = *data++;
if (c=='\"'|| c== '\0')
{
token[len] = 0;
*data_p = data;
return token;
}
token[len] = c;
len++;
}
}
// parse single characters
if (c == '{' || c == '}'|| c == ')' || c == '(' || c == '\'' || c == ':' || c == ',')
{
token[len] = c;
len++;
token[len] = 0;
*data_p = data;
return token + 1;
}
// parse a regular word
do
{
token[len] = c;
data++;
len++;
c = *data;
if (c == '{' || c == '}'|| c == ')'|| c == '(' || c == '\'' || c == ':' || c == '\"' || c == ',')
break;
} while(c > 32);
token[len] = 0;
*data_p = data;
return token;
}
#else
char *SC_ParseToken(const char **data_p) char *SC_ParseToken(const char **data_p)
{ {
int c; int c;
@ -435,8 +342,8 @@ char *SC_ParseToken(const char **data_p)
return NULL; return NULL;
} }
// skip whitespace
skipwhite: skipwhite: // skip whitespace
while ( (c = *data) <= ' ') while ( (c = *data) <= ' ')
{ {
if (c == 0) if (c == 0)
@ -447,7 +354,7 @@ skipwhite:
data++; data++;
} }
// skip // comments // skip // comments
if (c=='/' && data[1] == '/') if (c=='/' && data[1] == '/')
{ {
while (*data && *data != '\n') while (*data && *data != '\n')
@ -455,7 +362,7 @@ skipwhite:
goto skipwhite; goto skipwhite;
} }
// handle quoted strings specially // handle quoted strings specially
if (c == '\"') if (c == '\"')
{ {
data++; data++;
@ -476,7 +383,7 @@ skipwhite:
} }
} }
// parse a regular word // parse a regular word
do do
{ {
if (len < MAX_OSPATH) if (len < MAX_OSPATH)
@ -488,17 +395,12 @@ skipwhite:
c = *data; c = *data;
} while (c > 32); } while (c > 32);
if (len == MAX_OSPATH) if (len == MAX_OSPATH) len = 0;
{
// Msg ("Token exceeded %i chars, discarded.\n", MAX_TOKEN_CHARS);
len = 0;
}
token[len] = 0; token[len] = 0;
*data_p = data; *data_p = data;
return token; return token;
} }
#endif
/* /*
============================================================================= =============================================================================
@ -1130,16 +1032,15 @@ used for make sprites and models (old stuff)
================ ================
*/ */
byte *ReadBMP (char *filename, byte **palette, int *width, int *height) byte *ReadBMP (char *filename, byte **palette, int *width, int *height)
{ {
byte *buf_p, *pbBmpBits; byte *buf_p, *pbBmpBits;
byte *buf, *pb, *pbPal = NULL; byte *buf, *pb, *pbPal = NULL;
int i, filesize, columns, rows; int i, filesize, columns, rows;
ULONG cbBmpBits; dword cbBmpBits;
ULONG cbPalBytes; dword cbPalBytes;
ULONG biTrueWidth; dword biTrueWidth;
bmp_t bhdr; bmp_t bhdr;
RGBQUAD rgrgbPalette[256]; RGBQUAD rgrgbPalette[256];
@ -1150,7 +1051,7 @@ byte *ReadBMP (char *filename, byte **palette, int *width, int *height)
//blank_frame //blank_frame
buf_p = (char *)blank_frame; buf_p = (char *)blank_frame;
filesize = sizeof(blank_frame); filesize = sizeof(blank_frame);
Msg("Warning: couldn't load %s\n", filename ); MsgWarn("ReadBMP: couldn't load %s, use blank image\n", filename );
} }
bhdr.id[0] = *buf_p++; bhdr.id[0] = *buf_p++;
@ -1176,21 +1077,21 @@ byte *ReadBMP (char *filename, byte **palette, int *width, int *height)
if (memcmp(bhdr.id, "BM", 2)) if (memcmp(bhdr.id, "BM", 2))
{ {
Msg("ReadBMP: only Windows-style BMP files supported (%s)\n", filename ); MsgWarn("ReadBMP: only Windows-style BMP files supported (%s)\n", filename );
return NULL; return NULL;
} }
// Bogus info header check // Bogus info header check
if (bhdr.fileSize != filesize) if (bhdr.fileSize != filesize)
{ {
Msg("ReadBMP: incorrect file size %i should be %i\n", filesize, bhdr.fileSize); MsgWarn("ReadBMP: incorrect file size %i should be %i\n", filesize, bhdr.fileSize);
return NULL; return NULL;
} }
// Bogus bit depth? Only 8-bit supported. // Bogus bit depth? Only 8-bit supported.
if (bhdr.bitsPerPixel != 8) if (bhdr.bitsPerPixel != 8)
{ {
Msg("ReadBMP: %d not a 8 bit image\n", bhdr.bitsPerPixel ); MsgWarn("ReadBMP: %d not a 8 bit image\n", bhdr.bitsPerPixel );
return NULL; return NULL;
} }
@ -1281,15 +1182,23 @@ static int enter;
void ThreadLock (void) void ThreadLock (void)
{ {
if (!threaded) return; if (!threaded) return;
if (enter)
{
MsgWarn("ThreadLock: recursive call\n");
return;
}
EnterCriticalSection (&crit); EnterCriticalSection (&crit);
if (enter) Sys_Error ("Recursive ThreadLock\n");
enter = 1; enter = 1;
} }
void ThreadUnlock (void) void ThreadUnlock (void)
{ {
if (!threaded) return; if (!threaded) return;
if (!enter) Sys_Error ("ThreadUnlock without lock\n"); if (!enter)
{
MsgWarn("ThreadUnlock: must call ThreadLock first\n");
return;
}
enter = 0; enter = 0;
LeaveCriticalSection (&crit); LeaveCriticalSection (&crit);
} }
@ -1327,7 +1236,7 @@ void ThreadWorkerFunction (int threadnum)
while (1) while (1)
{ {
work = GetThreadWork (); work = GetThreadWork();
if (work == -1) break; if (work == -1) break;
workfunction(work); workfunction(work);
} }
@ -1342,7 +1251,7 @@ void ThreadSetDefault (void)
if (numthreads < 1 || numthreads > MAX_THREADS) if (numthreads < 1 || numthreads > MAX_THREADS)
numthreads = 1; numthreads = 1;
} }
MsgDev("%i thread%s\n", numthreads, numthreads== 1 ? "" : "s" ); MsgDev("%i thread%s\n", numthreads, numthreads == 1 ? "" : "s" );
} }
void RunThreadsOnIndividual (int workcnt, bool showpacifier, void(*func)(int)) void RunThreadsOnIndividual (int workcnt, bool showpacifier, void(*func)(int))

View File

@ -111,7 +111,7 @@ extern char gs_mapname[ 64 ];
extern char gs_basedir[ MAX_SYSPATH ]; extern char gs_basedir[ MAX_SYSPATH ];
extern char g_TXcommand; extern char g_TXcommand;
extern bool endofscript; extern bool endofscript;
extern bool host_debug;
extern int fs_argc; extern int fs_argc;
extern char **fs_argv; extern char **fs_argv;

View File

@ -495,11 +495,11 @@ epair_t *ParseEpair (void)
e = Malloc (sizeof(epair_t)); e = Malloc (sizeof(epair_t));
if (strlen(token) >= MAX_KEY - 1) Sys_Error ("ParseEpar: token too long"); if (strlen(SC_Token()) >= MAX_KEY - 1) Sys_Error ("ParseEpar: token too long");
e->key = copystring(token); e->key = copystring(SC_Token());
SC_GetToken (false); SC_GetToken (false);
if (strlen(token) >= MAX_VALUE - 1) Sys_Error ("ParseEpar: token too long"); if (strlen(SC_Token()) >= MAX_VALUE - 1) Sys_Error ("ParseEpar: token too long");
e->value = copystring(token); e->value = copystring(SC_Token());
// strip trailing spaces // strip trailing spaces
StripTrailing (e->key); StripTrailing (e->key);

View File

@ -559,7 +559,7 @@ void ParseBrush (bsp_entity_t *mapent)
for (j=0 ; j<3 ; j++) for (j=0 ; j<3 ; j++)
{ {
SC_GetToken (false); SC_GetToken (false);
planepts[i][j] = atof(token); planepts[i][j] = atof(SC_Token());
} }
SC_GetToken (false); SC_GetToken (false);
@ -568,37 +568,37 @@ void ParseBrush (bsp_entity_t *mapent)
// read the texturedef // read the texturedef
SC_GetToken (false); SC_GetToken (false);
strcpy (td.name, token); strcpy (td.name, SC_Token());
if(g_mapversion == VALVE_FORMAT) // Worldcraft 2.2+ if(g_mapversion == VALVE_FORMAT) // Worldcraft 2.2+
{ {
// texture U axis // texture U axis
SC_GetToken(false); SC_GetToken(false);
if (strcmp(token, "[")) Sys_Error("missing '[' in texturedef (U)"); if (strcmp(SC_Token(), "[")) Sys_Error("missing '[' in texturedef (U)");
SC_GetToken(false); SC_GetToken(false);
td.vects.valve.UAxis[0] = atof(token); td.vects.valve.UAxis[0] = atof(SC_Token());
SC_GetToken(false); SC_GetToken(false);
td.vects.valve.UAxis[1] = atof(token); td.vects.valve.UAxis[1] = atof(SC_Token());
SC_GetToken(false); SC_GetToken(false);
td.vects.valve.UAxis[2] = atof(token); td.vects.valve.UAxis[2] = atof(SC_Token());
SC_GetToken(false); SC_GetToken(false);
td.vects.valve.shift[0] = atof(token); td.vects.valve.shift[0] = atof(SC_Token());
SC_GetToken(false); SC_GetToken(false);
if (strcmp(token, "]")) Sys_Error("missing ']' in texturedef (U)"); if (strcmp(SC_Token(), "]")) Sys_Error("missing ']' in texturedef (U)");
// texture V axis // texture V axis
SC_GetToken(false); SC_GetToken(false);
if (strcmp(token, "[")) Sys_Error("missing '[' in texturedef (V)"); if (strcmp(SC_Token(), "[")) Sys_Error("missing '[' in texturedef (V)");
SC_GetToken(false); SC_GetToken(false);
td.vects.valve.VAxis[0] = atof(token); td.vects.valve.VAxis[0] = atof(SC_Token());
SC_GetToken(false); SC_GetToken(false);
td.vects.valve.VAxis[1] = atof(token); td.vects.valve.VAxis[1] = atof(SC_Token());
SC_GetToken(false); SC_GetToken(false);
td.vects.valve.VAxis[2] = atof(token); td.vects.valve.VAxis[2] = atof(SC_Token());
SC_GetToken(false); SC_GetToken(false);
td.vects.valve.shift[1] = atof(token); td.vects.valve.shift[1] = atof(SC_Token());
SC_GetToken(false); SC_GetToken(false);
if (strcmp(token, "]")) Sys_Error("missing ']' in texturedef (V)"); if (strcmp(SC_Token(), "]")) Sys_Error("missing ']' in texturedef (V)");
// Texture rotation is implicit in U/V axes. // Texture rotation is implicit in U/V axes.
SC_GetToken(false); SC_GetToken(false);
@ -606,23 +606,23 @@ void ParseBrush (bsp_entity_t *mapent)
// texure scale // texure scale
SC_GetToken(false); SC_GetToken(false);
td.vects.valve.scale[0] = atof(token); td.vects.valve.scale[0] = atof(SC_Token());
SC_GetToken(false); SC_GetToken(false);
td.vects.valve.scale[1] = atof(token); td.vects.valve.scale[1] = atof(SC_Token());
} }
else else
{ {
// Worldcraft 2.1-, Radiant // Worldcraft 2.1-, Radiant
SC_GetToken (false); SC_GetToken (false);
td.vects.valve.shift[0] = atof(token); td.vects.valve.shift[0] = atof(SC_Token());
SC_GetToken (false); SC_GetToken (false);
td.vects.valve.shift[1] = atof(token); td.vects.valve.shift[1] = atof(SC_Token());
SC_GetToken (false); SC_GetToken (false);
td.vects.valve.rotate = atof(token); td.vects.valve.rotate = atof(SC_Token());
SC_GetToken (false); SC_GetToken (false);
td.vects.valve.scale[0] = atof(token); td.vects.valve.scale[0] = atof(SC_Token());
SC_GetToken (false); SC_GetToken (false);
td.vects.valve.scale[1] = atof(token); td.vects.valve.scale[1] = atof(SC_Token());
} }
if ((g_TXcommand == '1' || g_TXcommand == '2')) if ((g_TXcommand == '1' || g_TXcommand == '2'))
@ -680,13 +680,13 @@ void ParseBrush (bsp_entity_t *mapent)
//Msg("flags %d, value %d, contents %d\n", td.flags, td.value, side->contents ); //Msg("flags %d, value %d, contents %d\n", td.flags, td.value, side->contents );
if (SC_TryToken()) //first token will be get automatically if (SC_TryToken()) //first SC_Token() will be get automatically
{ {
side->contents = atoi(token); side->contents = atoi(SC_Token());
SC_GetToken (false); SC_GetToken (false);
side->surf = td.flags = atoi(token); side->surf = td.flags = atoi(SC_Token());
SC_GetToken (false); SC_GetToken (false);
td.value = atoi(token); td.value = atoi(SC_Token());
} }
// translucent objects are automatically classified as detail // translucent objects are automatically classified as detail

View File

@ -27,7 +27,7 @@ char inbase[32], outbase[32];
int fakeplanes; // created planes for origin offset int fakeplanes; // created planes for origin offset
int numbounce = 8; int numbounce;
bool extrasamples; bool extrasamples;
float subdiv = 64; float subdiv = 64;
@ -382,7 +382,7 @@ void BounceLight (void)
} }
} }
for (i=0 ; i<numbounce ; i++) for (i = 0; i < numbounce; i++)
{ {
RunThreadsOnIndividual (num_patches, false, ShootLight); RunThreadsOnIndividual (num_patches, false, ShootLight);
added = CollectLight (); added = CollectLight ();
@ -465,6 +465,13 @@ void WradMain ( bool option )
} }
Msg("---- Radiocity ---- [%s]\n", extrasamples ? "extra" : "normal" ); Msg("---- Radiocity ---- [%s]\n", extrasamples ? "extra" : "normal" );
if( extrasamples )
{
numbounce = 8;
ambient = 100; //FIXME: check result
}
else numbounce = 3;
ParseEntities (); ParseEntities ();
CalcTextureReflectivity (); CalcTextureReflectivity ();

View File

@ -129,7 +129,7 @@ static void ParseShaderFile( char *filename )
if ( !SC_GetToken( true )) break; if ( !SC_GetToken( true )) break;
si = AllocShaderInfo(); si = AllocShaderInfo();
strcpy( si->name, token ); strcpy( si->name, SC_Token() );
SC_GetToken( true ); SC_GetToken( true );
if(!SC_MatchToken( "{" )) if(!SC_MatchToken( "{" ))
@ -141,31 +141,31 @@ static void ParseShaderFile( char *filename )
while ( 1 ) while ( 1 )
{ {
if ( !SC_GetToken( true ) )break; if ( !SC_GetToken( true ) )break;
if ( !strcmp( token, "}" ) ) break; if ( !strcmp( SC_Token(), "}" ) ) break;
// skip internal braced sections // skip internal braced sections
if ( !strcmp( token, "{" ) ) if ( !strcmp( SC_Token(), "{" ) )
{ {
si->hasPasses = true; si->hasPasses = true;
while ( 1 ) while ( 1 )
{ {
if ( !SC_GetToken( true )) break; if ( !SC_GetToken( true )) break;
if ( !strcmp( token, "}" )) break; if ( !strcmp( SC_Token(), "}" )) break;
} }
continue; continue;
} }
if ( !stricmp( token, "nextframe" )) if ( !stricmp( SC_Token(), "nextframe" ))
{ {
SC_GetToken( false ); SC_GetToken( false );
strcpy(si->nextframe, token ); strcpy(si->nextframe, SC_Token() );
} }
if ( !stricmp( token, "surfaceparm" )) if ( !stricmp( SC_Token(), "surfaceparm" ))
{ {
SC_GetToken( false ); SC_GetToken( false );
for ( i = 0 ; i < numInfoParms ; i++ ) for ( i = 0 ; i < numInfoParms ; i++ )
{ {
if ( !stricmp( token, infoParms[i].name )) if ( !stricmp( SC_Token(), infoParms[i].name ))
{ {
si->surfaceFlags |= infoParms[i].surfaceFlags; si->surfaceFlags |= infoParms[i].surfaceFlags;
si->contents |= infoParms[i].contents; si->contents |= infoParms[i].contents;
@ -177,26 +177,26 @@ static void ParseShaderFile( char *filename )
continue; continue;
} }
// light color <value> <value> <value> // light color <value> <value> <value>
if ( !stricmp( token, "radiocity" ) ) if ( !stricmp( SC_Token(), "radiocity" ) )
{ {
SC_GetToken( false ); SC_GetToken( false );
si->color[0] = atof( token ); si->color[0] = atof( SC_Token() );
SC_GetToken( false ); SC_GetToken( false );
si->color[1] = atof( token ); si->color[1] = atof( SC_Token() );
SC_GetToken( false ); SC_GetToken( false );
si->color[2] = atof( token ); si->color[2] = atof( SC_Token() );
continue; continue;
} }
// light intensity <value> // light intensity <value>
if ( !stricmp( token, "intensity" )) if ( !stricmp( SC_Token(), "intensity" ))
{ {
SC_GetToken( false ); SC_GetToken( false );
si->intensity = atoi( token ); si->intensity = atoi( SC_Token() );
continue; continue;
} }
// ignore all other tokens on the line // ignore all other SC_Token()s on the line
while (SC_TryToken()); while (SC_TryToken());
} }
} }

View File

@ -1506,7 +1506,7 @@ file_t* _FS_Open (const char* filepath, const char* mode, bool quiet, bool nonbl
{ {
if (FS_CheckNastyPath(filepath, false)) if (FS_CheckNastyPath(filepath, false))
{ {
Sys_Error("FS_Open(\"%s\", \"%s\", %s): nasty filename rejected\n", filepath, mode, quiet ? "true" : "false"); MsgWarn("FS_Open: (\"%s\", \"%s\"): nasty filename rejected\n", filepath, mode );
return NULL; return NULL;
} }

View File

@ -119,7 +119,7 @@ bool LoadBMP( char *name, char *buffer, int filesize )
*pixbuf++ = 0xff; *pixbuf++ = 0xff;
break; break;
case 16: case 16:
shortPixel = * ( unsigned short *)pixbuf; shortPixel = *(word*)pixbuf;
pixbuf += 2; pixbuf += 2;
*pixbuf++ = ( shortPixel & ( 31 << 10 ) ) >> 7; *pixbuf++ = ( shortPixel & ( 31 << 10 ) ) >> 7;
*pixbuf++ = ( shortPixel & ( 31 << 5 ) ) >> 2; *pixbuf++ = ( shortPixel & ( 31 << 5 ) ) >> 2;

View File

@ -7,6 +7,8 @@
#include "baseutils.h" #include "baseutils.h"
#include "bsplib.h" #include "bsplib.h"
bool host_debug = false;
gameinfo_t Plat_GameInfo( void ) gameinfo_t Plat_GameInfo( void )
{ {
return GI; return GI;
@ -14,8 +16,6 @@ gameinfo_t Plat_GameInfo( void )
bool InitPlatform ( int argc, char **argv ) bool InitPlatform ( int argc, char **argv )
{ {
char parm[64];
Msg("------- Loading bin/platform.dll [%g] -------\n", PLATFORM_VERSION ); Msg("------- Loading bin/platform.dll [%g] -------\n", PLATFORM_VERSION );
InitMemory(); InitMemory();
@ -23,12 +23,9 @@ bool InitPlatform ( int argc, char **argv )
ThreadSetDefault(); ThreadSetDefault();
FS_Init( argc, argv ); FS_Init( argc, argv );
// HACKHACK - bsplib additional cmds if(FS_CheckParm("-debug"))
if(FS_GetParmFromCmdLine("-bounce", parm )) host_debug = true;
numbounce = atoi(parm);
if(FS_GetParmFromCmdLine("-ambient", parm ))
ambient = atof(parm) * 128;
return true; return true;
} }

View File

@ -61,5 +61,6 @@ bool SC_TryToken ( void ); //safe way
void SC_SkipToken( void ); void SC_SkipToken( void );
void SC_FreeToken( void ); void SC_FreeToken( void );
char *SC_ParseToken(const char **data_p); char *SC_ParseToken(const char **data_p);
char *SC_Token( void );
#endif//BASEPLATFORM_H #endif//BASEPLATFORM_H

View File

@ -116,7 +116,7 @@ void WriteSPRFile (void)
{ {
file_t *f; file_t *f;
if(sprite.numframes == 0) Sys_Error ("no frames\n"); if(sprite.numframes == 0) Sys_Error ("%s have no frames\n", spriteoutname );
if((plump - lumpbuffer) > MAX_BUFFER_SIZE) if((plump - lumpbuffer) > MAX_BUFFER_SIZE)
Sys_Error ("Can't write %s, sprite package too big", spriteoutname ); Sys_Error ("Can't write %s, sprite package too big", spriteoutname );
@ -189,20 +189,20 @@ syntax "$load fire01.bmp"
*/ */
void Cmd_Load (void) void Cmd_Load (void)
{ {
static byte origpalette[256*3]; static byte origpalette[256*3];
char *name = SC_GetToken ( false ); char *name = SC_GetToken ( false );
dspriteframe_t *pframe; dspriteframe_t *pframe;
int x, y, w, h, pix; int x, y, w, h, pix;
byte *screen_p; byte *screen_p;
FS_DefaultExtension( name, ".bmp" ); FS_DefaultExtension( name, ".bmp" );
byteimage = ReadBMP (name, &lbmpalette, &byteimagewidth, &byteimageheight); byteimage = ReadBMP (name, &lbmpalette, &byteimagewidth, &byteimageheight);
if(!byteimage) Sys_Error( "unable to load file \"%s\"\n", name ); if(!byteimage) Sys_Error( "unable to load file \"%s\"\n", name );
if(sprite.numframes == 0) memcpy( origpalette, lbmpalette, sizeof( origpalette )); if(sprite.numframes == 0) Mem_Copy( origpalette, lbmpalette, sizeof( origpalette ));
else if (memcmp( origpalette, lbmpalette, sizeof( origpalette ))) else if (memcmp( origpalette, lbmpalette, sizeof( origpalette )))
Msg("Warning: %s doesn't share a pallette with the previous frame\n", name ); MsgWarn("Cmd_Load: %s doesn't share a pallette with the previous frame\n", name );
w = byteimagewidth; w = byteimagewidth;
h = byteimageheight; h = byteimageheight;
@ -280,7 +280,7 @@ void Cmd_Color( void )
g = atoi(SC_GetToken (false)); g = atoi(SC_GetToken (false));
b = atoi(SC_GetToken (false)); b = atoi(SC_GetToken (false));
if (SC_TryToken()) a = atoi(token); if (SC_TryToken()) a = atoi(SC_Token());
else a = 0xFF;//fullbright else a = 0xFF;//fullbright
//pack into one integer //pack into one integer
@ -310,7 +310,7 @@ syntax: "blabla"
*/ */
void Cmd_SpriteUnknown( void ) void Cmd_SpriteUnknown( void )
{ {
MsgDev("Warning: bad command %s\n", token); MsgWarn("Cmd_SpriteUnknown: bad command %s\n", SC_Token());
while(SC_TryToken()); while(SC_TryToken());
} }

View File

@ -15,17 +15,13 @@ char modeloutname[MAX_SYSPATH];
int numrep; int numrep;
int flip_triangles; int flip_triangles;
int dump_hboxes; int dump_hboxes;
int ignore_warnings;
int gflags; int gflags;
int cdtextureset; int cdtextureset;
int maxseqgroupsize;
int split_textures;
int clip_texcoords; int clip_texcoords;
int numseq; int numseq;
int nummirrored; int nummirrored;
int numani; int numani;
int numseqgroups;
int numxnodes; int numxnodes;
int numrenamedbones; int numrenamedbones;
int totalframes = 0; int totalframes = 0;
@ -82,6 +78,7 @@ char mirrored[MAXSTUDIOSRCBONES][64];
s_mesh_t *pmesh; s_mesh_t *pmesh;
studiohdr_t *phdr; studiohdr_t *phdr;
studioseqhdr_t *pseqhdr; studioseqhdr_t *pseqhdr;
s_sequencegroup_t sequencegroup;
s_trianglevert_t (*triangles)[3]; s_trianglevert_t (*triangles)[3];
s_model_t *model[MAXSTUDIOMODELS]; s_model_t *model[MAXSTUDIOMODELS];
s_bbox_t hitbox[MAXSTUDIOSRCBONES]; s_bbox_t hitbox[MAXSTUDIOSRCBONES];
@ -94,7 +91,6 @@ s_bonetable_t bonetable[MAXSTUDIOSRCBONES];
s_attachment_t attachment[MAXSTUDIOSRCBONES]; s_attachment_t attachment[MAXSTUDIOSRCBONES];
s_renamebone_t renamedbone[MAXSTUDIOSRCBONES]; s_renamebone_t renamedbone[MAXSTUDIOSRCBONES];
s_animation_t *panimation[MAXSTUDIOANIMATIONS]; s_animation_t *panimation[MAXSTUDIOANIMATIONS];
s_sequencegroup_t sequencegroup[MAXSTUDIOSEQUENCES];
s_bonecontroller_t bonecontroller[MAXSTUDIOSRCBONES]; s_bonecontroller_t bonecontroller[MAXSTUDIOSRCBONES];
/* /*
@ -312,17 +308,14 @@ void WriteSequenceInfo( void )
// save sequence group info // save sequence group info
pseqgroup = (mstudioseqgroup_t *)pData; pseqgroup = (mstudioseqgroup_t *)pData;
phdr->numseqgroups = numseqgroups; phdr->numseqgroups = 1;
phdr->seqgroupindex = (pData - pStart); phdr->seqgroupindex = (pData - pStart);
pData += phdr->numseqgroups * sizeof( mstudioseqgroup_t ); pData += sizeof( mstudioseqgroup_t );
ALIGN( pData ); ALIGN( pData );
for(i = 0; i < numseqgroups; i++) strcpy( pseqgroup->label, sequencegroup.label );
{ strcpy( pseqgroup->name, sequencegroup.name );
strcpy( pseqgroup[i].label, sequencegroup[i].label );
strcpy( pseqgroup[i].name, sequencegroup[i].name );
}
// save transition graph // save transition graph
ptransition = (byte *)pData; ptransition = (byte *)pData;
@ -348,9 +341,6 @@ byte *WriteAnimations( byte *pData, byte *pStart, int group )
mstudioanim_t *panim; mstudioanim_t *panim;
mstudioanimvalue_t *panimvalue; mstudioanimvalue_t *panimvalue;
// hack for seqgroup 0
// pseqgroup->data = (pData - pStart);
for (i = 0; i < numseq; i++) for (i = 0; i < numseq; i++)
{ {
if (sequence[i].seqgroup == group) if (sequence[i].seqgroup == group)
@ -383,7 +373,7 @@ byte *WriteAnimations( byte *pData, byte *pStart, int group )
} }
} }
} }
if (((byte *)panimvalue - (byte *)panim) > 65535) if (((byte *)panimvalue - (byte *)panim) > 0xffff)
Sys_Error("sequence \"%s\" is greater than 64K\n", sequence[i].name ); Sys_Error("sequence \"%s\" is greater than 64K\n", sequence[i].name );
panim++; panim++;
} }
@ -598,60 +588,11 @@ WriteMDLFile
*/ */
void WriteMDLFile (void) void WriteMDLFile (void)
{ {
int i, total = 0; int total = 0;
pStart = Kalloc( FILEBUFFER ); pStart = Kalloc( FILEBUFFER );
FS_StripExtension( modeloutname ); FS_StripExtension( modeloutname );
for (i = 1; i < numseqgroups; i++)
{
// write the non-default sequence group data to separate files
char groupname[128], localname[128];
sprintf( groupname, "%s%02d.mdl", modeloutname, i );
Msg("writing %s\n", groupname);
pseqhdr = (studioseqhdr_t *)pStart;
pseqhdr->id = IDSEQGRPHEADER;
pseqhdr->version = STUDIO_VERSION;
pData = pStart + sizeof( studioseqhdr_t );
pData = WriteAnimations( pData, pStart, i );
FS_FileBase( groupname, localname );
sprintf( sequencegroup[i].name, "models\\%s.mdl", localname );
strcpy( pseqhdr->name, sequencegroup[i].name );
pseqhdr->length = pData - pStart;
FS_WriteFile( groupname, pStart, pseqhdr->length );
Msg("total %6d\n", pseqhdr->length );
memset( pStart, 0, pseqhdr->length );
}
if (split_textures)
{
// write textures out to a separate file
char texname[128];
sprintf( texname, "%sT.mdl", modeloutname );
Msg ("writing %s\n", texname);
phdr = (studiohdr_t *)pStart;
phdr->id = IDSTUDIOHEADER;
phdr->version = STUDIO_VERSION;
pData = (byte *)phdr + sizeof( studiohdr_t );
WriteTextures( );
phdr->length = pData - pStart;
FS_WriteFile( texname, pStart, phdr->length );
Msg("textures %6d bytes\n", phdr->length );
memset( pStart, 0, phdr->length );
pData = pStart;
}
// write the model output file // write the model output file
FS_DefaultExtension( modeloutname, ".mdl" ); FS_DefaultExtension( modeloutname, ".mdl" );
@ -685,14 +626,10 @@ void WriteMDLFile (void)
Msg("models %6d bytes\n", pData - pStart - total ); Msg("models %6d bytes\n", pData - pStart - total );
total = pData - pStart; total = pData - pStart;
if (!split_textures) WriteTextures();
{ Msg("textures %6d bytes\n", pData - pStart - total );
WriteTextures();
Msg("textures %6d bytes\n", pData - pStart - total );
}
phdr->length = pData - pStart; phdr->length = pData - pStart;
FS_WriteFile( modeloutname, pStart, phdr->length ); FS_WriteFile( modeloutname, pStart, phdr->length );
Msg("total %6d\n", phdr->length ); Msg("total %6d\n", phdr->length );
} }
@ -794,7 +731,7 @@ void SimplifyModel (void)
if (n != m) if (n != m)
{ {
Msg("illegal parent bone replacement in model \"%s\"\n\t\"%s\" has \"%s\", previously was \"%s\"\n", model[i]->name, model[i]->node[j].name, (n != -1) ? bonetable[n].name : "ROOT", (m != -1) ? bonetable[m].name : "ROOT" ); MsgWarn("SimplifyModel: illegal parent bone replacement in model \"%s\"\n\t\"%s\" has \"%s\", previously was \"%s\"\n", model[i]->name, model[i]->node[j].name, (n != -1) ? bonetable[n].name : "ROOT", (m != -1) ? bonetable[m].name : "ROOT" );
iError++; iError++;
} }
} }
@ -806,7 +743,7 @@ void SimplifyModel (void)
} }
//handle errors //handle errors
if (iError && !(ignore_warnings)) Sys_Error("unexpected errors, stop compilation\n"); if (iError && !(host_debug)) Sys_Error("Unexpected errors, stop compilation\nRun with parm \"-debug\" to avoid this");
if (numbones >= MAXSTUDIOBONES) Sys_Error( "Too many bones in model: used %d, max %d\n", numbones, MAXSTUDIOBONES ); if (numbones >= MAXSTUDIOBONES) Sys_Error( "Too many bones in model: used %d, max %d\n", numbones, MAXSTUDIOBONES );
// rename sequence bones if needed // rename sequence bones if needed
@ -845,7 +782,7 @@ void SimplifyModel (void)
if (strcmp(szAnim, szNode)) if (strcmp(szAnim, szNode))
{ {
Msg("illegal parent bone replacement in sequence \"%s\"\n\t\"%s\" has \"%s\", reference has \"%s\"\n", sequence[i].name, sequence[i].panim[0]->node[j].name, szAnim, szNode ); MsgWarn("SimplifyModel: illegal parent bone replacement in sequence \"%s\"\n\t\"%s\" has \"%s\", reference has \"%s\"\n", sequence[i].name, sequence[i].panim[0]->node[j].name, szAnim, szNode );
iError++; iError++;
} }
sequence[i].panim[0]->bonemap[j] = k; sequence[i].panim[0]->bonemap[j] = k;
@ -855,7 +792,7 @@ void SimplifyModel (void)
} }
//handle errors //handle errors
if (iError && !(ignore_warnings)) Sys_Error("unexpected errors, stop compilation\n"); if (iError && !(host_debug)) Sys_Error("unexpected errors, stop compilation\nRun with parm \"-debug\" to avoid this");
// link bonecontrollers // link bonecontrollers
for (i = 0; i < numbonecontrollers; i++) for (i = 0; i < numbonecontrollers; i++)
@ -867,7 +804,7 @@ void SimplifyModel (void)
} }
if (j >= numbones) if (j >= numbones)
{ {
Msg("Warning: unknown bonecontroller link '%s'\n", bonecontroller[i].name ); MsgWarn("SimplifyModel: unknown bonecontroller link '%s'\n", bonecontroller[i].name );
j = numbones - 1; j = numbones - 1;
} }
bonecontroller[i].bone = j; bonecontroller[i].bone = j;
@ -883,7 +820,7 @@ void SimplifyModel (void)
} }
if (j >= numbones) if (j >= numbones)
{ {
Msg("Warning: unknown attachment link '%s'\n", attachment[i].bonename ); MsgWarn("SimplifyModel: unknown attachment link '%s'\n", attachment[i].bonename );
j = numbones - 1; j = numbones - 1;
} }
attachment[i].bone = j; attachment[i].bone = j;
@ -908,7 +845,11 @@ void SimplifyModel (void)
break; break;
} }
} }
if (k >= numbones) Sys_Error( "cannot find bone %s for hitgroup %d\n", hitgroup[j].name, hitgroup[j].group ); if (k >= numbones)
{
MsgWarn( "SimplifyModel: cannot find bone %s for hitgroup %d\n", hitgroup[j].name, hitgroup[j].group );
continue;
}
} }
for (k = 0; k < numbones; k++) for (k = 0; k < numbones; k++)
@ -993,7 +934,11 @@ void SimplifyModel (void)
break; break;
} }
} }
if (k >= numbones) Sys_Error( "cannot find bone %s for bbox\n", hitbox[j].name ); if (k >= numbones)
{
MsgWarn("SimplifyModel: cannot find bone %s for bbox\n", hitbox[j].name );
continue;
}
} }
} }
@ -1250,7 +1195,9 @@ void SimplifyModel (void)
sequence[i].panim[q]->numanim[j][k] = pvalue - data; sequence[i].panim[q]->numanim[j][k] = pvalue - data;
if (sequence[i].panim[q]->numanim[j][k] == 2 && value[0] == 0) if (sequence[i].panim[q]->numanim[j][k] == 2 && value[0] == 0)
{
sequence[i].panim[q]->numanim[j][k] = 0; sequence[i].panim[q]->numanim[j][k] = 0;
}
else else
{ {
sequence[i].panim[q]->anim[j][k] = Kalloc( (pvalue - data) * sizeof( mstudioanimvalue_t )); sequence[i].panim[q]->anim[j][k] = Kalloc( (pvalue - data) * sizeof( mstudioanimvalue_t ));
@ -1261,46 +1208,6 @@ void SimplifyModel (void)
} }
} }
} }
// auto groups
if (numseqgroups == 1 && maxseqgroupsize < 1024 * 1024)
{
int current = 0;
numseqgroups = 2;
for (i = 0; i < numseq; i++)
{
int accum = 0;
if (sequence[i].activity == 0)
{
for (q = 0; q < sequence[i].numblends; q++)
{
for (j = 0; j < numbones; j++)
{
for (k = 0; k < 6; k++)
{
accum += sequence[i].panim[q]->numanim[j][k] * sizeof( mstudioanimvalue_t );
}
}
}
accum += sequence[i].numblends * numbones * sizeof( mstudioanim_t );
if (current && current + accum > maxseqgroupsize)
{
numseqgroups++;
current = accum;
}
else
{
current += accum;
}
sequence[i].seqgroup = numseqgroups - 1;
}
else sequence[i].seqgroup = 0;
}
}
} }
void Grab_Skin ( s_texture_t *ptexture ) void Grab_Skin ( s_texture_t *ptexture )
@ -1445,10 +1352,10 @@ void Grab_Triangles( s_model_t *pmodel )
linecount++; linecount++;
if(SC_MatchToken( "end" )) break;//triangles end if(SC_MatchToken( "end" )) break;//triangles end
else if(!stricmp( ".bmp", &token[strlen(token)-4])) else if(!stricmp( ".bmp", &SC_Token()[strlen(SC_Token())-4]))
{ {
//probably is texture name //probably is texture name
strcpy( texturename, token ); strcpy( texturename, SC_Token());
// funky texture overrides // funky texture overrides
for (i = 0; i < numrep; i++) for (i = 0; i < numrep; i++)
@ -1467,7 +1374,7 @@ void Grab_Triangles( s_model_t *pmodel )
if (strlen(texturename) < 5)//invalid name if (strlen(texturename) < 5)//invalid name
{ {
// weird model problem, skip them // weird model problem, skip them
Msg("Warning: triangle with invalid texname\n"); MsgWarn("Grab_Triangles: triangle with invalid texname\n");
for(i = 0; i < 3; i++) for(i = 0; i < 3; i++)
{ {
if(!SC_GetToken( true )) if(!SC_GetToken( true ))
@ -1492,7 +1399,7 @@ void Grab_Triangles( s_model_t *pmodel )
else ptriv = lookup_triangle( pmesh, pmesh->numtris ) + j; else ptriv = lookup_triangle( pmesh, pmesh->numtris ) + j;
//grab triangle info //grab triangle info
bone = atoi(token); bone = atoi(SC_Token());
p.org[0] = atof(SC_GetToken( false )); p.org[0] = atof(SC_GetToken( false ));
p.org[1] = atof(SC_GetToken( false )); p.org[1] = atof(SC_GetToken( false ));
p.org[2] = atof(SC_GetToken( false )); p.org[2] = atof(SC_GetToken( false ));
@ -1501,6 +1408,9 @@ void Grab_Triangles( s_model_t *pmodel )
normal.org[2] = atof(SC_GetToken( false )); normal.org[2] = atof(SC_GetToken( false ));
ptriv->u = atof(SC_GetToken( false )); ptriv->u = atof(SC_GetToken( false ));
ptriv->v = atof(SC_GetToken( false )); ptriv->v = atof(SC_GetToken( false ));
// skip MilkShape additional info
while(SC_TryToken());
//translate triangles //translate triangles
if (bone < 0 || bone >= pmodel->numbones) if (bone < 0 || bone >= pmodel->numbones)
@ -1562,13 +1472,13 @@ void Grab_Skeleton( s_node_t *pnodes, s_bone_t *pbones )
{ {
//check time //check time
time += atoi(SC_GetToken( false )); time += atoi(SC_GetToken( false ));
if(time > 0) Msg("Grab_Skeleton: Warning! An animation file is probably used as a reference\n"); if(time > 0) MsgWarn("Grab_Skeleton: Warning! An animation file is probably used as a reference\n");
continue; continue;
} }
else else
{ {
//grab skeleton info //grab skeleton info
index = atoi( token ); index = atoi( SC_Token());
pbones[index].pos[0] = atof(SC_GetToken( false )); pbones[index].pos[0] = atof(SC_GetToken( false ));
pbones[index].pos[1] = atof(SC_GetToken( false )); pbones[index].pos[1] = atof(SC_GetToken( false ));
pbones[index].pos[2] = atof(SC_GetToken( false )); pbones[index].pos[2] = atof(SC_GetToken( false ));
@ -1602,7 +1512,7 @@ int Grab_Nodes( s_node_t *pnodes )
//end of nodes description //end of nodes description
if(SC_MatchToken( "end" )) return numbones + 1; if(SC_MatchToken( "end" )) return numbones + 1;
index = atoi(token); //read bone index (we already have filled token) index = atoi(SC_Token()); //read bone index (we already have filled token)
strcpy( name, SC_GetToken( false )); strcpy( name, SC_GetToken( false ));
parent = atoi(SC_GetToken( false )); //read bone parent parent = atoi(SC_GetToken( false )); //read bone parent
@ -1628,7 +1538,7 @@ void Grab_Studio ( s_model_t *pmodel )
FS_DefaultExtension(filename, ".smd" ); FS_DefaultExtension(filename, ".smd" );
load = FS_AddScript( filename, NULL, 0 ); load = FS_AddScript( filename, NULL, 0 );
if(!load)Sys_Error("unable to open %s\n", filename ); if(!load) Sys_Error("unable to open %s\n", filename );
Msg("grabbing %s\n", filename); Msg("grabbing %s\n", filename);
linecount = 0; linecount = 0;
@ -1641,7 +1551,7 @@ void Grab_Studio ( s_model_t *pmodel )
if (SC_MatchToken( "version" )) if (SC_MatchToken( "version" ))
{ {
int option = atoi(SC_GetToken( false )); int option = atoi(SC_GetToken( false ));
if (option != 1) Msg("Warning: %s bad version file\n", filename ); if (option != 1) MsgWarn("Grab_Studio: %s bad version file\n", filename );
} }
else if (SC_MatchToken( "nodes" )) else if (SC_MatchToken( "nodes" ))
{ {
@ -1655,7 +1565,7 @@ void Grab_Studio ( s_model_t *pmodel )
{ {
Grab_Triangles( pmodel ); Grab_Triangles( pmodel );
} }
else Msg("unknown studio command %s at line %d\n", token, linecount ); else MsgWarn("Grab_Studio: unknown studio command %s at line %d\n", SC_Token(), linecount );
} }
} }
@ -1693,7 +1603,7 @@ void Option_Studio( void )
model[nummodels] = Kalloc( sizeof( s_model_t )); model[nummodels] = Kalloc( sizeof( s_model_t ));
bodypart[numbodyparts].pmodel[bodypart[numbodyparts].nummodels] = model[nummodels]; bodypart[numbodyparts].pmodel[bodypart[numbodyparts].nummodels] = model[nummodels];
strncpy( model[nummodels]->name, token, sizeof(model[nummodels]->name)); strncpy( model[nummodels]->name, SC_Token(), sizeof(model[nummodels]->name));
flip_triangles = 1; flip_triangles = 1;
scale_up = default_scale; scale_up = default_scale;
@ -1750,7 +1660,7 @@ void Cmd_Bodygroup( void )
if (numbodyparts == 0) bodypart[numbodyparts].base = 1; if (numbodyparts == 0) bodypart[numbodyparts].base = 1;
else bodypart[numbodyparts].base = bodypart[numbodyparts-1].base * bodypart[numbodyparts-1].nummodels; else bodypart[numbodyparts].base = bodypart[numbodyparts-1].base * bodypart[numbodyparts-1].nummodels;
strncpy( bodypart[numbodyparts].name, token, sizeof(bodypart[numbodyparts].name)); strncpy( bodypart[numbodyparts].name, SC_Token(), sizeof(bodypart[numbodyparts].name));
while( 1 ) while( 1 )
{ {
@ -1781,7 +1691,7 @@ void Cmd_Body( void )
if (numbodyparts == 0) bodypart[numbodyparts].base = 1; if (numbodyparts == 0) bodypart[numbodyparts].base = 1;
else bodypart[numbodyparts].base = bodypart[numbodyparts-1].base * bodypart[numbodyparts-1].nummodels; else bodypart[numbodyparts].base = bodypart[numbodyparts-1].base * bodypart[numbodyparts-1].nummodels;
strncpy(bodypart[numbodyparts].name, token, sizeof(bodypart[numbodyparts].name)); strncpy(bodypart[numbodyparts].name, SC_Token(), sizeof(bodypart[numbodyparts].name));
Option_Studio(); Option_Studio();
numbodyparts++; numbodyparts++;
@ -1823,7 +1733,7 @@ void Grab_Animation( s_animation_t *panim)
} }
else else
{ {
index = atoi(token); index = atoi(SC_Token());
pos[0] = atof(SC_GetToken( false )); pos[0] = atof(SC_GetToken( false ));
pos[1] = atof(SC_GetToken( false )); pos[1] = atof(SC_GetToken( false ));
pos[2] = atof(SC_GetToken( false )); pos[2] = atof(SC_GetToken( false ));
@ -1923,7 +1833,7 @@ void Option_Animation ( char *name, s_animation_t *panim )
} }
else else
{ {
Msg("unknown studio command : %s\n", token ); MsgWarn("Option_Animation: unknown studio command : %s\n", SC_Token() );
while(SC_TryToken());//skip other tokens at line while(SC_TryToken());//skip other tokens at line
} }
} }
@ -1931,7 +1841,7 @@ void Option_Animation ( char *name, s_animation_t *panim )
int Option_Motion ( s_sequence_t *psequence ) int Option_Motion ( s_sequence_t *psequence )
{ {
while (SC_TryToken()) psequence->motiontype |= lookupControl( token ); while (SC_TryToken()) psequence->motiontype |= lookupControl( SC_Token());
return 0; return 0;
} }
@ -1939,7 +1849,7 @@ int Option_Event ( s_sequence_t *psequence )
{ {
if (psequence->numevents + 1 >= MAXSTUDIOEVENTS) if (psequence->numevents + 1 >= MAXSTUDIOEVENTS)
{ {
Msg("Warning: MAXSTUDIOEVENTS limit excedeed.\n"); MsgWarn("Option_Event: MAXSTUDIOEVENTS limit excedeed.\n");
return 0; return 0;
} }
@ -1951,7 +1861,7 @@ int Option_Event ( s_sequence_t *psequence )
if (SC_TryToken()) if (SC_TryToken())
{ {
if (SC_MatchToken( "}" )) return 1; // opps, hit the end if (SC_MatchToken( "}" )) return 1; // opps, hit the end
strcpy( psequence->event[psequence->numevents-1].options, token );// found an option strcpy( psequence->event[psequence->numevents-1].options, SC_Token());// found an option
} }
return 0; return 0;
} }
@ -1992,7 +1902,7 @@ void Cmd_Origin (void)
defaultadjust[1] = atof (SC_GetToken (false)); defaultadjust[1] = atof (SC_GetToken (false));
defaultadjust[2] = atof (SC_GetToken (false)); defaultadjust[2] = atof (SC_GetToken (false));
if (SC_TryToken()) defaultzrotation = (atof( token ) + 90) * (M_PI / 180.0); if (SC_TryToken()) defaultzrotation = (atof( SC_Token()) + 90) * (M_PI / 180.0);
} }
@ -2030,7 +1940,7 @@ syntax: $rotate <value>
void Cmd_Rotate(void) void Cmd_Rotate(void)
{ {
if (!SC_GetToken(false)) return; if (!SC_GetToken(false)) return;
zrotation = (atof(token) + 90) * (M_PI / 180.0); zrotation = (atof(SC_Token()) + 90) * (M_PI / 180.0);
} }
void Option_ScaleUp (void) void Option_ScaleUp (void)
@ -2038,35 +1948,6 @@ void Option_ScaleUp (void)
scale_up = atof (SC_GetToken (false)); scale_up = atof (SC_GetToken (false));
} }
/*
==============
Cmd_SequenceGroup
syntax: $sequencegroup "name"
==============
*/
int Cmd_SequenceGroup( void )
{
strncpy( sequencegroup[numseqgroups].label, SC_GetToken(false), sizeof(sequencegroup[numseqgroups].label));
numseqgroups++;
return 0;
}
/*
==============
Cmd_SequenceGroupSize
syntax: $sequencegroupsize <kbytes>
==============
*/
int Cmd_SequenceGroupSize( void )
{
//in kilobytes
maxseqgroupsize = 1024 * atoi(SC_GetToken(false));
return 0;
}
/* /*
============== ==============
Cmd_Sequence Cmd_Sequence
@ -2101,7 +1982,7 @@ int Cmd_Sequence( void )
if(!SC_GetToken(false)) return 0; if(!SC_GetToken(false)) return 0;
strncpy( sequence[numseq].name, token, sizeof(sequence[numseq].name)); strncpy( sequence[numseq].name, SC_Token(), sizeof(sequence[numseq].name));
VectorCopy( defaultadjust, adjust ); VectorCopy( defaultadjust, adjust );
scale_up = default_scale; scale_up = default_scale;
@ -2109,7 +1990,7 @@ int Cmd_Sequence( void )
//set default values //set default values
zrotation = defaultzrotation; zrotation = defaultzrotation;
sequence[numseq].fps = 30.0; sequence[numseq].fps = 30.0;
sequence[numseq].seqgroup = numseqgroups - 1; sequence[numseq].seqgroup = 0;
sequence[numseq].blendstart[0] = 0.0; sequence[numseq].blendstart[0] = 0.0;
sequence[numseq].blendend[0] = 1.0; sequence[numseq].blendend[0] = 1.0;
@ -2156,37 +2037,37 @@ int Cmd_Sequence( void )
sequence[numseq].exitnode = atoi(SC_GetToken( false )); sequence[numseq].exitnode = atoi(SC_GetToken( false ));
sequence[numseq].nodeflags |= 1; sequence[numseq].nodeflags |= 1;
} }
else if (lookupControl( token ) != -1) else if (lookupControl( SC_Token()) != -1)
{ {
sequence[numseq].motiontype |= lookupControl( token ); sequence[numseq].motiontype |= lookupControl( SC_Token());
} }
else if (SC_MatchToken( "animation" )) else if (SC_MatchToken( "animation" ))
{ {
strncpy( smdfilename[numblends], SC_GetToken( false ), sizeof(smdfilename[numblends])); strncpy( smdfilename[numblends], SC_GetToken( false ), sizeof(smdfilename[numblends]));
numblends++; numblends++;
} }
else if (i = lookupActivity( token )) else if (i = lookupActivity( SC_Token()))
{ {
sequence[numseq].activity = i; sequence[numseq].activity = i;
sequence[numseq].actweight = 1;//default weight sequence[numseq].actweight = 1;//default weight
if(SC_TryToken()) if(SC_TryToken())
{ {
//make sure what is really actweight //make sure what is really actweight
if(!SC_MatchToken("{") && !SC_MatchToken("}") && strlen(token) < 3 && atoi(token) <= 100) if(!SC_MatchToken("{") && !SC_MatchToken("}") && strlen(SC_Token()) < 3 && atoi(SC_Token()) <= 100)
sequence[numseq].actweight = atoi(token); sequence[numseq].actweight = atoi(SC_Token());
else SC_FreeToken();//release token else SC_FreeToken();//release token
} }
} }
else else
{ {
strncpy( smdfilename[numblends], token, sizeof(smdfilename[numblends])); strncpy( smdfilename[numblends], SC_Token(), sizeof(smdfilename[numblends]));
numblends++; numblends++;
} }
if (depth < 0) Sys_Error("missing {\n");
} }
if (numblends == 0) if (numblends == 0)
{ {
Msg("Warning: sequence \"%s\" has no animations. skipped...\n", sequence[numseq].name); MsgWarn("Cmd_Sequence: \"%s\" has no animations. skipped...\n", sequence[numseq].name);
return 0; return 0;
} }
for (i = 0; i < numblends; i++) for (i = 0; i < numblends; i++)
@ -2216,7 +2097,7 @@ int Cmd_Root (void)
{ {
if (SC_GetToken(false)) if (SC_GetToken(false))
{ {
strncpy( pivotname[0], token, sizeof(pivotname)); strncpy( pivotname[0], SC_Token(), sizeof(pivotname));
return 0; return 0;
} }
return 1; return 1;
@ -2233,10 +2114,10 @@ int Cmd_Pivot (void)
{ {
if (SC_GetToken (false)) if (SC_GetToken (false))
{ {
int index = atoi(token); int index = atoi(SC_Token());
if (SC_GetToken(false)) if (SC_GetToken(false))
{ {
strncpy( pivotname[index], token, sizeof(pivotname[index])); strncpy( pivotname[index], SC_Token(), sizeof(pivotname[index]));
return 0; return 0;
} }
} }
@ -2256,16 +2137,16 @@ int Cmd_Controller (void)
{ {
//mouth is hardcoded at four controller //mouth is hardcoded at four controller
if (SC_MatchToken( "mouth" )) bonecontroller[numbonecontrollers].index = 4; if (SC_MatchToken( "mouth" )) bonecontroller[numbonecontrollers].index = 4;
else bonecontroller[numbonecontrollers].index = atoi(token); else bonecontroller[numbonecontrollers].index = atoi(SC_Token());
if (SC_GetToken(false)) if (SC_GetToken(false))
{ {
strncpy( bonecontroller[numbonecontrollers].name, token, sizeof(bonecontroller[numbonecontrollers].name)); strncpy( bonecontroller[numbonecontrollers].name, SC_Token(), sizeof(bonecontroller[numbonecontrollers].name));
SC_GetToken(false); SC_GetToken(false);
if ((bonecontroller[numbonecontrollers].type = lookupControl(token)) == -1) if ((bonecontroller[numbonecontrollers].type = lookupControl(SC_Token())) == -1)
{ {
Msg("Cmd_Controller: unknown bonecontroller type '%s'\n", token ); MsgWarn("Cmd_Controller: unknown bonecontroller type '%s'\n", SC_Token() );
return 0; return 0;
} }
@ -2361,8 +2242,12 @@ int Cmd_TextureGroup( void )
int index = 0; int index = 0;
int group = 0; int group = 0;
if (numtextures == 0) Sys_Error( "texturegroups must follow model loading\n"); if (numtextures == 0)
{
MsgWarn("Cmd_TextureGroup: texturegroups must follow model loading\n");
return 0;
}
if (!SC_GetToken(false)) return 0; if (!SC_GetToken(false)) return 0;
if (numskinref == 0) numskinref = numtextures; if (numskinref == 0) numskinref = numtextures;
@ -2370,7 +2255,7 @@ int Cmd_TextureGroup( void )
{ {
if(!SC_GetToken(true)) if(!SC_GetToken(true))
{ {
if (depth) Sys_Error("missing }\n" ); if (depth)MsgWarn("missing }\n");
break; break;
} }
@ -2384,7 +2269,7 @@ int Cmd_TextureGroup( void )
} }
else if (depth == 2) else if (depth == 2)
{ {
i = lookup_texture( token ); i = lookup_texture( SC_Token());
texturegroup[numtexturegroups][group][index] = i; texturegroup[numtexturegroups][group][index] = i;
if (group != 0) texture[i].parent = texturegroup[numtexturegroups][0][index]; if (group != 0) texture[i].parent = texturegroup[numtexturegroups][0][index];
index++; index++;
@ -2501,7 +2386,7 @@ void Cmd_TexRenderMode( void )
{ {
texture[lookup_texture(tex_name)].flags |= STUDIO_NF_BLENDED; texture[lookup_texture(tex_name)].flags |= STUDIO_NF_BLENDED;
} }
else Msg("Texture '%s' has unknown render mode '%s'!\n", tex_name, token); else MsgWarn("Cmd_TexRenderMode: texture '%s' have unknown render mode '%s'!\n", tex_name, SC_Token());
} }
@ -2561,16 +2446,12 @@ void ResetModelInfo( void )
numrep = 0; numrep = 0;
gamma = 1.8; gamma = 1.8;
flip_triangles = 1; flip_triangles = 1;
maxseqgroupsize = 1024 * 1024;
normal_blend = cos( 2.0 * (M_PI / 180.0)); normal_blend = cos( 2.0 * (M_PI / 180.0));
//make an option //make an option
dump_hboxes = 0; dump_hboxes = 0;
ignore_warnings = 0;
strcpy( sequencegroup[numseqgroups].label, "default" );
numseqgroups = 1;
strcpy( sequencegroup.label, "default" );
FS_ClearSearchPath();//clear all $cd and $cdtexture FS_ClearSearchPath();//clear all $cd and $cdtexture
//set default model parms //set default model parms
@ -2587,7 +2468,7 @@ syntax: "blabla"
*/ */
void Cmd_StudioUnknown( void ) void Cmd_StudioUnknown( void )
{ {
MsgWarn("Cmd_StudioUnknown: skip command \"%s\"\n", token); MsgWarn("Cmd_StudioUnknown: skip command \"%s\"\n", SC_Token());
while(SC_TryToken()); while(SC_TryToken());
} }
@ -2601,7 +2482,7 @@ bool ParseModelScript (void)
if (SC_MatchToken("$modelname")) Cmd_Modelname (); if (SC_MatchToken("$modelname")) Cmd_Modelname ();
else if (SC_MatchToken("$cd")) Cmd_CdSet(); else if (SC_MatchToken("$cd")) Cmd_CdSet();
else if (!strcmp (token, "$cdtexture")) Cmd_CdTextureSet(); else if (SC_MatchToken("$cdtexture")) Cmd_CdTextureSet();
else if (SC_MatchToken("$scale")) Cmd_ScaleUp (); else if (SC_MatchToken("$scale")) Cmd_ScaleUp ();
else if (SC_MatchToken("$rotate")) Cmd_Rotate(); else if (SC_MatchToken("$rotate")) Cmd_Rotate();
else if (SC_MatchToken("$root")) Cmd_Root (); else if (SC_MatchToken("$root")) Cmd_Root ();
@ -2610,8 +2491,6 @@ bool ParseModelScript (void)
else if (SC_MatchToken("$body")) Cmd_Body(); else if (SC_MatchToken("$body")) Cmd_Body();
else if (SC_MatchToken("$bodygroup")) Cmd_Bodygroup(); else if (SC_MatchToken("$bodygroup")) Cmd_Bodygroup();
else if (SC_MatchToken("$sequence")) Cmd_Sequence (); else if (SC_MatchToken("$sequence")) Cmd_Sequence ();
else if (SC_MatchToken("$sequencegroup")) Cmd_SequenceGroup ();
else if (SC_MatchToken("$sequencegroupsize")) Cmd_SequenceGroupSize ();
else if (SC_MatchToken("$eyeposition")) Cmd_Eyeposition (); else if (SC_MatchToken("$eyeposition")) Cmd_Eyeposition ();
else if (SC_MatchToken("$origin")) Cmd_Origin (); else if (SC_MatchToken("$origin")) Cmd_Origin ();
else if (SC_MatchToken("$bbox")) Cmd_BBox (); else if (SC_MatchToken("$bbox")) Cmd_BBox ();
@ -2622,9 +2501,7 @@ bool ParseModelScript (void)
else if (SC_MatchToken("$hgroup")) Cmd_Hitgroup (); else if (SC_MatchToken("$hgroup")) Cmd_Hitgroup ();
else if (SC_MatchToken("$hbox")) Cmd_Hitbox (); else if (SC_MatchToken("$hbox")) Cmd_Hitbox ();
else if (SC_MatchToken("$attachment")) Cmd_Attachment (); else if (SC_MatchToken("$attachment")) Cmd_Attachment ();
else if (SC_MatchToken("$externaltextures")) split_textures = 1;
else if (SC_MatchToken("$cliptotextures")) clip_texcoords = 1; else if (SC_MatchToken("$cliptotextures")) clip_texcoords = 1;
else if (SC_MatchToken("$debug")) ignore_warnings = 1;
else if (SC_MatchToken("$renamebone")) Cmd_Renamebone (); else if (SC_MatchToken("$renamebone")) Cmd_Renamebone ();
else if (SC_MatchToken("$texrendermode")) Cmd_TexRenderMode(); else if (SC_MatchToken("$texrendermode")) Cmd_TexRenderMode();
else if (SC_MatchToken("$replacetexture")) Cmd_Replace(); else if (SC_MatchToken("$replacetexture")) Cmd_Replace();
@ -2653,7 +2530,7 @@ void ClearModel( void )
cdset = false; cdset = false;
cdtextureset = 0; cdtextureset = 0;
numrep = gflags = maxseqgroupsize = numseq = nummirrored = numseqgroups = 0; numrep = gflags = numseq = nummirrored = 0;
numxnodes = numrenamedbones = totalframes = numbones = numhitboxes = 0; numxnodes = numrenamedbones = totalframes = numbones = numhitboxes = 0;
numhitgroups = numattachments = numtextures = numskinref = numskinfamilies = 0; numhitgroups = numattachments = numtextures = numskinref = numskinfamilies = 0;
numbonecontrollers = numtexturegroups = numcommandnodes = numbodyparts = 0; numbonecontrollers = numtexturegroups = numcommandnodes = numbodyparts = 0;

View File

@ -717,7 +717,7 @@ s_mesh_t *lookup_mesh( s_model_t *pmodel, char *texturename )
return pmodel->pmesh[i]; return pmodel->pmesh[i];
} }
if (i >= MAXSTUDIOMESHES) Sys_Error( "too many textures in model: \"%s\"\n", pmodel->name ); if (i >= MAXSTUDIOMESHES) Sys_Error( "too many meshes in model: \"%s\"\n", pmodel->name );
pmodel->nummesh = i + 1; pmodel->nummesh = i + 1;
pmodel->pmesh[i] = Kalloc( sizeof( s_mesh_t ) ); pmodel->pmesh[i] = Kalloc( sizeof( s_mesh_t ) );

View File

@ -1004,17 +1004,6 @@ typedef struct
short stats[MAX_STATS]; // fast status bar updates short stats[MAX_STATS]; // fast status bar updates
} player_state_t; } player_state_t;
// ==================
// PGM
#define VIDREF_GL 1
#define VIDREF_SOFT 2
#define VIDREF_OTHER 3
extern int vidref_val;
// PGM
// ==================
typedef enum typedef enum
{ {
FOOTSTEP_METAL1, FOOTSTEP_METAL1,

View File

@ -20,20 +20,20 @@ Studio models are position independent, so the cache manager can move them.
#define IDSEQGRPHEADER (('Q'<<24)+('S'<<16)+('D'<<8)+'I') // little-endian "IDSQ" #define IDSEQGRPHEADER (('Q'<<24)+('S'<<16)+('D'<<8)+'I') // little-endian "IDSQ"
// studio limits // studio limits
#define MAXSTUDIOTRIANGLES 20000 // TODO: tune this #define MAXSTUDIOTRIANGLES 32768 // max triangles per model
#define MAXSTUDIOVERTS 4096 // max vertices per submodel #define MAXSTUDIOVERTS 4096 // max vertices per submodel
#define MAXSTUDIOSEQUENCES 256 // total animation sequences #define MAXSTUDIOSEQUENCES 256 // total animation sequences
#define MAXSTUDIOSKINS 128 // total textures #define MAXSTUDIOSKINS 128 // total textures
#define MAXSTUDIOSRCBONES 512 // bones allowed at source movement #define MAXSTUDIOSRCBONES 512 // bones allowed at source movement
#define MAXSTUDIOBONES 128 // total bones actually used #define MAXSTUDIOBONES 128 // total bones actually used
#define MAXSTUDIOMODELS 32 // sub-models per model #define MAXSTUDIOMODELS 32 // sub-models per model
#define MAXSTUDIOBODYPARTS 32 #define MAXSTUDIOBODYPARTS 32 // body parts per submodel
#define MAXSTUDIOGROUPS 16 // sequence groups (e.g. barney01.mdl, barney02.mdl, e.t.c) #define MAXSTUDIOGROUPS 16 // sequence groups (e.g. barney01.mdl, barney02.mdl, e.t.c)
#define MAXSTUDIOANIMATIONS 512 // max frames per sequence #define MAXSTUDIOANIMATIONS 512 // max frames per sequence
#define MAXSTUDIOMESHES 256 // max textures per model #define MAXSTUDIOMESHES 256 // max textures per model
#define MAXSTUDIOEVENTS 1024 #define MAXSTUDIOEVENTS 1024 // events per model
#define MAXSTUDIOPIVOTS 256 #define MAXSTUDIOPIVOTS 256 // pivot points
#define MAXSTUDIOBLENDS 2 // TODO: tune this #define MAXSTUDIOBLENDS 8 // max anim blends
#define MAXSTUDIOCONTROLLERS 32 // max controllers per model #define MAXSTUDIOCONTROLLERS 32 // max controllers per model
#define MAXSTUDIOATTACHMENTS 32 // max attachments per model #define MAXSTUDIOATTACHMENTS 32 // max attachments per model

View File

@ -21,7 +21,7 @@ if errorlevel 1 set BUILD_ERROR=1
%MSDEV% platform/platform.dsp %CONFIG%"platform - Win32 Release" %build_target% %MSDEV% platform/platform.dsp %CONFIG%"platform - Win32 Release" %build_target%
if errorlevel 1 set BUILD_ERROR=1 if errorlevel 1 set BUILD_ERROR=1
%MSDEV% render/render.dsp %CONFIG%"render - Win32 Release" %build_target% %MSDEV% renderer/renderer.dsp %CONFIG%"renderer - Win32 Release" %build_target%
if errorlevel 1 set BUILD_ERROR=1 if errorlevel 1 set BUILD_ERROR=1
%MSDEV% server/server.dsp %CONFIG%"server - Win32 Release" %build_target% %MSDEV% server/server.dsp %CONFIG%"server - Win32 Release" %build_target%
@ -49,7 +49,7 @@ rem //delete log files
if exist engine\engine.plg del /f /q engine\engine.plg if exist engine\engine.plg del /f /q engine\engine.plg
if exist launcher\launcher.plg del /f /q launcher\launcher.plg if exist launcher\launcher.plg del /f /q launcher\launcher.plg
if exist platform\platform.plg del /f /q platform\platform.plg if exist platform\platform.plg del /f /q platform\platform.plg
if exist render\render.plg del /f /q render\render.plg if exist renderer\renderer.plg del /f /q renderer\renderer.plg
if exist server\server.plg del /f /q server\server.plg if exist server\server.plg del /f /q server\server.plg
echo Build succeeded! echo Build succeeded!

View File

@ -321,7 +321,6 @@ extern cvar_t *gl_modulate;
extern cvar_t *gl_playermip; extern cvar_t *gl_playermip;
extern cvar_t *gl_drawbuffer; extern cvar_t *gl_drawbuffer;
extern cvar_t *gl_3dlabs_broken; extern cvar_t *gl_3dlabs_broken;
extern cvar_t *gl_driver;
extern cvar_t *gl_swapinterval; extern cvar_t *gl_swapinterval;
extern cvar_t *gl_texturemode; extern cvar_t *gl_texturemode;
extern cvar_t *gl_texturealphamode; extern cvar_t *gl_texturealphamode;

View File

@ -112,7 +112,6 @@ cvar_t *r_motionblur;
cvar_t *gl_log; cvar_t *gl_log;
cvar_t *gl_bitdepth; cvar_t *gl_bitdepth;
cvar_t *gl_drawbuffer; cvar_t *gl_drawbuffer;
cvar_t *gl_driver;
cvar_t *gl_lightmap; cvar_t *gl_lightmap;
cvar_t *gl_shadows; cvar_t *gl_shadows;
cvar_t *gl_mode; cvar_t *gl_mode;
@ -148,7 +147,6 @@ cvar_t *gl_3dlabs_broken;
cvar_t *vid_fullscreen; cvar_t *vid_fullscreen;
cvar_t *vid_gamma; cvar_t *vid_gamma;
cvar_t *vid_ref;
/* /*
================= =================
@ -961,7 +959,6 @@ void R_Register( void )
gl_polyblend = ri.Cvar_Get ("gl_polyblend", "1", 0); gl_polyblend = ri.Cvar_Get ("gl_polyblend", "1", 0);
gl_flashblend = ri.Cvar_Get ("gl_flashblend", "0", 0); gl_flashblend = ri.Cvar_Get ("gl_flashblend", "0", 0);
gl_playermip = ri.Cvar_Get ("gl_playermip", "0", 0); gl_playermip = ri.Cvar_Get ("gl_playermip", "0", 0);
gl_driver = ri.Cvar_Get( "gl_driver", "opengl32", CVAR_ARCHIVE );
gl_texturemode = ri.Cvar_Get( "gl_texturemode", "GL_LINEAR_MIPMAP_NEAREST", CVAR_ARCHIVE ); gl_texturemode = ri.Cvar_Get( "gl_texturemode", "GL_LINEAR_MIPMAP_NEAREST", CVAR_ARCHIVE );
gl_texturealphamode = ri.Cvar_Get( "gl_texturealphamode", "default", CVAR_ARCHIVE ); gl_texturealphamode = ri.Cvar_Get( "gl_texturealphamode", "default", CVAR_ARCHIVE );
gl_texturesolidmode = ri.Cvar_Get( "gl_texturesolidmode", "default", CVAR_ARCHIVE ); gl_texturesolidmode = ri.Cvar_Get( "gl_texturesolidmode", "default", CVAR_ARCHIVE );
@ -984,7 +981,6 @@ void R_Register( void )
vid_fullscreen = ri.Cvar_Get( "vid_fullscreen", "0", CVAR_ARCHIVE ); vid_fullscreen = ri.Cvar_Get( "vid_fullscreen", "0", CVAR_ARCHIVE );
vid_gamma = ri.Cvar_Get( "vid_gamma", "1.0", CVAR_ARCHIVE ); vid_gamma = ri.Cvar_Get( "vid_gamma", "1.0", CVAR_ARCHIVE );
vid_ref = ri.Cvar_Get( "vid_ref", "soft", CVAR_ARCHIVE );
ri.Cmd_AddCommand( "imagelist", R_ImageList_f ); ri.Cmd_AddCommand( "imagelist", R_ImageList_f );
ri.Cmd_AddCommand( "screenshot", GL_ScreenShot_f ); ri.Cmd_AddCommand( "screenshot", GL_ScreenShot_f );
@ -1072,18 +1068,17 @@ int R_Init( void *hinstance, void *hWnd )
R_Register(); R_Register();
// initialize our QGL dynamic bindings // initialize our QGL dynamic bindings
if ( !QGL_Init( gl_driver->string ) ) if ( !QGL_Init( "opengl32" ) )
{ {
QGL_Shutdown(); QGL_Shutdown();
Msg("R_Init() - could not load \"%s\"\n", gl_driver->string ); return false;
return -1;
} }
// initialize OS-specific parts of OpenGL // initialize OS-specific parts of OpenGL
if ( !GLimp_Init( hinstance, hWnd ) ) if ( !GLimp_Init( hinstance, hWnd ) )
{ {
QGL_Shutdown(); QGL_Shutdown();
return -1; return false;
} }
// set our "safe" modes // set our "safe" modes
@ -1094,9 +1089,10 @@ int R_Init( void *hinstance, void *hWnd )
{ {
QGL_Shutdown(); QGL_Shutdown();
Msg( "R_Init() - could not R_SetMode()\n" ); Msg( "R_Init() - could not R_SetMode()\n" );
return -1; return false;
} }
Msg("------- Loading bin/renderer.dll [%g] -------\n", RENDERER_VERSION );
ri.Vid_MenuInit(); ri.Vid_MenuInit();
//get our various GL strings //get our various GL strings
@ -1303,17 +1299,6 @@ void R_BeginFrame( float camera_separation )
gl_state.camera_separation = camera_separation; gl_state.camera_separation = camera_separation;
/*
** change modes if necessary
*/
if ( gl_mode->modified || vid_fullscreen->modified )
{ // FIXME: only restart if CDS is required
cvar_t *ref;
ref = ri.Cvar_Get ("vid_ref", "gl", 0);
ref->modified = true;
}
if ( gl_log->modified ) if ( gl_log->modified )
{ {
GLimp_EnableLogging( gl_log->value ); GLimp_EnableLogging( gl_log->value );

View File

@ -3044,7 +3044,7 @@ bool QGL_Init( const char *dllname )
putenv( envbuffer ); putenv( envbuffer );
} }
if ( ( glw_state.hinstOpenGL = LoadLibrary( dllname ) ) == 0 ) if (( glw_state.hinstOpenGL = LoadLibrary( dllname ) ) == 0 )
{ {
char *buf = NULL; char *buf = NULL;

View File

@ -41,7 +41,6 @@ glwstate_t glw_state;
static char wndname[128]; static char wndname[128];
extern cvar_t *vid_fullscreen; extern cvar_t *vid_fullscreen;
extern cvar_t *vid_ref;
static bool VerifyDriver( void ) static bool VerifyDriver( void )
{ {
@ -427,14 +426,7 @@ bool GLimp_InitGL (void)
gl_state.stereo_enabled = false; gl_state.stereo_enabled = false;
} }
/* glw_state.minidriver = false;
** figure out if we're running on a minidriver or not
*/
if ( strstr( gl_driver->string, "opengl32" ) != 0 )
glw_state.minidriver = false;
else
glw_state.minidriver = true;
/* /*
** Get a DC for the specified window ** Get a DC for the specified window
*/ */

View File

@ -1,24 +1,24 @@
# Microsoft Developer Studio Project File - Name="render" - Package Owner=<4> # Microsoft Developer Studio Project File - Name="renderer" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00 # Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT ** # ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
CFG=render - Win32 Release CFG=renderer - Win32 Release
!MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run !MESSAGE use the Export Makefile command and run
!MESSAGE !MESSAGE
!MESSAGE NMAKE /f "render.mak". !MESSAGE NMAKE /f "renderer.mak".
!MESSAGE !MESSAGE
!MESSAGE You can specify a configuration when running NMAKE !MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE !MESSAGE
!MESSAGE NMAKE /f "render.mak" CFG="render - Win32 Release" !MESSAGE NMAKE /f "renderer.mak" CFG="renderer - Win32 Release"
!MESSAGE !MESSAGE
!MESSAGE Possible choices for configuration are: !MESSAGE Possible choices for configuration are:
!MESSAGE !MESSAGE
!MESSAGE "render - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "renderer - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE "render - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "renderer - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE !MESSAGE
# Begin Project # Begin Project
@ -29,17 +29,17 @@ CPP=cl.exe
MTL=midl.exe MTL=midl.exe
RSC=rc.exe RSC=rc.exe
!IF "$(CFG)" == "render - Win32 Release" !IF "$(CFG)" == "renderer - Win32 Release"
# PROP BASE Use_MFC 0 # PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0 # PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir ".\render__" # PROP BASE Output_Dir ".\renderer__"
# PROP BASE Intermediate_Dir ".\render__" # PROP BASE Intermediate_Dir ".\renderer__"
# PROP BASE Target_Dir "." # PROP BASE Target_Dir "."
# PROP Use_MFC 0 # PROP Use_MFC 0
# PROP Use_Debug_Libraries 0 # PROP Use_Debug_Libraries 0
# PROP Output_Dir "..\temp\render\!release" # PROP Output_Dir "..\temp\renderer\!release"
# PROP Intermediate_Dir "..\temp\render\!release" # PROP Intermediate_Dir "..\temp\renderer\!release"
# PROP Ignore_Export_Lib 1 # PROP Ignore_Export_Lib 1
# PROP Target_Dir "." # PROP Target_Dir "."
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c
@ -57,26 +57,26 @@ LINK32=link.exe
# ADD LINK32 kernel32.lib user32.lib gdi32.lib /nologo /subsystem:windows /dll /pdb:none /machine:I386 /libpath:"../public/libs/" # ADD LINK32 kernel32.lib user32.lib gdi32.lib /nologo /subsystem:windows /dll /pdb:none /machine:I386 /libpath:"../public/libs/"
# SUBTRACT LINK32 /debug # SUBTRACT LINK32 /debug
# Begin Custom Build # Begin Custom Build
TargetDir=\Xash3D\src_main\!source\temp\render\!release TargetDir=\XASH3D\src_main\!source\temp\renderer\!release
InputPath=\Xash3D\src_main\!source\temp\render\!release\render.dll InputPath=\XASH3D\src_main\!source\temp\renderer\!release\renderer.dll
SOURCE="$(InputPath)" SOURCE="$(InputPath)"
"D:\Xash3D\bin\render.dll" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" "D:\Xash3D\bin\renderer.dll" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
copy $(TargetDir)\render.dll "D:\Xash3D\bin\render.dll" copy $(TargetDir)\renderer.dll "D:\Xash3D\bin\renderer.dll"
# End Custom Build # End Custom Build
!ELSEIF "$(CFG)" == "render - Win32 Debug" !ELSEIF "$(CFG)" == "renderer - Win32 Debug"
# PROP BASE Use_MFC 0 # PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1 # PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir ".\render__" # PROP BASE Output_Dir ".\renderer__"
# PROP BASE Intermediate_Dir ".\render__" # PROP BASE Intermediate_Dir ".\renderer__"
# PROP BASE Target_Dir "." # PROP BASE Target_Dir "."
# PROP Use_MFC 0 # PROP Use_MFC 0
# PROP Use_Debug_Libraries 1 # PROP Use_Debug_Libraries 1
# PROP Output_Dir "..\temp\render\!debug" # PROP Output_Dir "..\temp\renderer\!debug"
# PROP Intermediate_Dir "..\temp\render\!debug" # PROP Intermediate_Dir "..\temp\renderer\!debug"
# PROP Ignore_Export_Lib 1 # PROP Ignore_Export_Lib 1
# PROP Target_Dir "." # PROP Target_Dir "."
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c
@ -94,12 +94,12 @@ LINK32=link.exe
# ADD LINK32 kernel32.lib user32.lib gdi32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /nodefaultlib:"libc.lib" /pdbtype:sept /libpath:"../public/libs/" # ADD LINK32 kernel32.lib user32.lib gdi32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /nodefaultlib:"libc.lib" /pdbtype:sept /libpath:"../public/libs/"
# SUBTRACT LINK32 /profile /incremental:no /map # SUBTRACT LINK32 /profile /incremental:no /map
# Begin Custom Build # Begin Custom Build
TargetDir=\Xash3D\src_main\!source\temp\render\!debug TargetDir=\XASH3D\src_main\!source\temp\renderer\!debug
InputPath=\Xash3D\src_main\!source\temp\render\!debug\render.dll InputPath=\XASH3D\src_main\!source\temp\renderer\!debug\renderer.dll
SOURCE="$(InputPath)" SOURCE="$(InputPath)"
"D:\Xash3D\bin\render.dll" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" "D:\Xash3D\bin\renderer.dll" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
copy $(TargetDir)\render.dll "D:\Xash3D\bin\render.dll" copy $(TargetDir)\renderer.dll "D:\Xash3D\bin\renderer.dll"
# End Custom Build # End Custom Build
@ -107,8 +107,8 @@ SOURCE="$(InputPath)"
# Begin Target # Begin Target
# Name "render - Win32 Release" # Name "renderer - Win32 Release"
# Name "render - Win32 Debug" # Name "renderer - Win32 Debug"
# Begin Group "Source Files" # Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90"
@ -226,7 +226,7 @@ SOURCE=..\client\ref.h
# End Source File # End Source File
# Begin Source File # Begin Source File
SOURCE=.\render.h SOURCE=.\renderer.h
# End Source File # End Source File
# Begin Source File # Begin Source File

View File

@ -1,30 +1,4 @@
#include "g_local.h" #include "g_local.h"
//#define DISABLE_FOG
#ifdef DISABLE_FOG
void Fog_Init()
{
}
void Fog(vec3_t viewpoint)
{
}
void Fog_Off()
{
}
void SP_trigger_fog(edict_t *self)
{
G_FreeEdict(self);
}
void SP_target_fog(edict_t *self)
{
G_FreeEdict(self);
}
void Cmd_Fog_f(edict_t *ent)
{
}
#else
#include <windows.h> #include <windows.h>
#define __MSC__ #define __MSC__
#include <gl/gl.h> #include <gl/gl.h>
@ -354,7 +328,6 @@ void GlideFogTable()
float w, dw4; float w, dw4;
if(!hGlide) return; if(!hGlide) return;
if(strcmp(gl_driver->string,"3dfxgl") || strcmp(vid_ref->string,"gl") ) return;
if(last_software_frame + 10 > level.framenum) return; if(last_software_frame + 10 > level.framenum) return;
if(last_opengl_frame + 10 > level.framenum) return; if(last_opengl_frame + 10 > level.framenum) return;
@ -517,19 +490,9 @@ void Fog(vec3_t viewpoint)
edict_t *triggerfog; edict_t *triggerfog;
edict_t *player = &g_edicts[1]; edict_t *player = &g_edicts[1];
if(!gl_driver || !vid_ref)
return;
if(deathmatch->value || coop->value) if(deathmatch->value || coop->value)
return; return;
if(stricmp(vid_ref->string,"gl"))
{
last_software_frame = level.framenum;
level.active_fog = 0;
return;
}
InTriggerFog = false; InTriggerFog = false;
if(level.trigger_fogs) if(level.trigger_fogs)
{ {
@ -942,25 +905,4 @@ void SP_trigger_fog (edict_t *self)
self->solid = SOLID_NOT; self->solid = SOLID_NOT;
gi.setmodel (self, self->model); gi.setmodel (self, self->model);
gi.linkentity(self); gi.linkentity(self);
} }
#endif
/*
void SetChromakey()
{
if(!gl_driver || !vid_ref)
return;
if(stricmp(vid_ref->string,"gl"))
return;
if(!strcmp(gl_driver->string,"3dfxgl"))
{
Glide_grChromakeyMode(GR_CHROMAKEY_ENABLE);
Glide_grChromakeyValue(0xFF);
}
else
{
}
}
*/

View File

@ -3550,25 +3550,16 @@ void use_target_failure (edict_t *self, edict_t *other, edict_t *activator)
gi.sound (activator, CHAN_VOICE|CHAN_RELIABLE, self->noise_index, 1, ATTN_NORM, 0); gi.sound (activator, CHAN_VOICE|CHAN_RELIABLE, self->noise_index, 1, ATTN_NORM, 0);
self->target_ent = activator; self->target_ent = activator;
if(stricmp(vid_ref->string,"gl")) activator->client->fadestart= level.framenum;
{ activator->client->fadein = level.framenum + 40;
self->flags = 12; activator->client->fadehold = activator->client->fadein + 100000;
self->think = target_failure_fade_lights; activator->client->fadeout = 0;
self->nextthink = level.time + FRAMETIME; activator->client->fadecolor[0] = 0;
} activator->client->fadecolor[1] = 0;
else activator->client->fadecolor[2] = 0;
{ activator->client->fadealpha = 1.0;
activator->client->fadestart= level.framenum; self->think = target_failure_think;
activator->client->fadein = level.framenum + 40; self->nextthink = level.time + 4;
activator->client->fadehold = activator->client->fadein + 100000;
activator->client->fadeout = 0;
activator->client->fadecolor[0] = 0;
activator->client->fadecolor[1] = 0;
activator->client->fadecolor[2] = 0;
activator->client->fadealpha = 1.0;
self->think = target_failure_think;
self->nextthink = level.time + 4;
}
activator->deadflag = DEAD_FROZEN; activator->deadflag = DEAD_FROZEN;
gi.linkentity(activator); gi.linkentity(activator);
} }

View File

@ -758,10 +758,9 @@ extern cvar_t *rotate_distance;
extern cvar_t *s_primary; extern cvar_t *s_primary;
extern cvar_t *shift_distance; extern cvar_t *shift_distance;
extern cvar_t *sv_maxgibs; extern cvar_t *sv_maxgibs;
extern cvar_t *tpp; // third person perspective extern cvar_t *tpp; // third person perspective
extern cvar_t *tpp_auto; extern cvar_t *tpp_auto;
extern cvar_t *turn_rider; extern cvar_t *turn_rider;
extern cvar_t *vid_ref;
extern cvar_t *zoomrate; extern cvar_t *zoomrate;
extern cvar_t *zoomsnap; extern cvar_t *zoomsnap;

View File

@ -104,7 +104,6 @@ cvar_t *s_primary;
cvar_t *shift_distance; cvar_t *shift_distance;
cvar_t *sv_maxgibs; cvar_t *sv_maxgibs;
cvar_t *turn_rider; cvar_t *turn_rider;
cvar_t *vid_ref;
cvar_t *zoomrate; cvar_t *zoomrate;
cvar_t *zoomsnap; cvar_t *zoomsnap;
@ -206,7 +205,6 @@ game_export_t DLLEXPORT *ServerAPI (game_import_t *import)
globals.edict_size = sizeof(edict_t); globals.edict_size = sizeof(edict_t);
gl_driver = gi.cvar ("gl_driver", "", 0); gl_driver = gi.cvar ("gl_driver", "", 0);
vid_ref = gi.cvar ("vid_ref", "", 0);
gl_driver_fog = gi.cvar ("gl_driver_fog", "opengl32", CVAR_NOSET | CVAR_ARCHIVE); gl_driver_fog = gi.cvar ("gl_driver_fog", "opengl32", CVAR_NOSET | CVAR_ARCHIVE);
Fog_Init(); Fog_Init();

View File

@ -554,8 +554,7 @@ void SV_CalcBlend (edict_t *ent)
float alpha; float alpha;
// Turn off fade for dead software players or they won't see menu // Turn off fade for dead software players or they won't see menu
if((ent->health <= 0) && (stricmp(vid_ref->string,"gl"))) if(ent->health <= 0) ent->client->fadein = 0;
ent->client->fadein = 0;
if(ent->client->fadein > level.framenum) if(ent->client->fadein > level.framenum)
{ {
@ -580,8 +579,7 @@ void SV_CalcBlend (edict_t *ent)
ent->client->fadecolor[2], ent->client->fadecolor[2],
alpha, ent->client->ps.blend); alpha, ent->client->ps.blend);
} }
else else ent->client->fadein = 0;
ent->client->fadein = 0;
} }
} }

View File

@ -54,11 +54,11 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo # ADD BSC32 /nologo
LINK32=link.exe LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
# ADD LINK32 kernel32.lib user32.lib winmm.lib /nologo /subsystem:windows /dll /pdb:none /machine:I386 /out:"..\temp\render\!release/server.dll" # ADD LINK32 kernel32.lib user32.lib winmm.lib /nologo /subsystem:windows /dll /pdb:none /machine:I386
# SUBTRACT LINK32 /debug # SUBTRACT LINK32 /debug
# Begin Custom Build # Begin Custom Build
TargetDir=\XASH3D\src_main\!source\temp\render\!release TargetDir=\XASH3D\src_main\!source\temp\server\!release
InputPath=\XASH3D\src_main\!source\temp\render\!release\server.dll InputPath=\XASH3D\src_main\!source\temp\server\!release\server.dll
SOURCE="$(InputPath)" SOURCE="$(InputPath)"
"D:\Xash3D\xash\bin\server.dll" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" "D:\Xash3D\xash\bin\server.dll" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
@ -91,11 +91,11 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo # ADD BSC32 /nologo
LINK32=link.exe LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386
# ADD LINK32 kernel32.lib user32.lib winmm.lib /nologo /subsystem:windows /dll /debug /machine:I386 /out:"..\temp\render\!debug/server.dll" # ADD LINK32 kernel32.lib user32.lib winmm.lib /nologo /subsystem:windows /dll /debug /machine:I386
# SUBTRACT LINK32 /incremental:no /map # SUBTRACT LINK32 /incremental:no /map
# Begin Custom Build # Begin Custom Build
TargetDir=\XASH3D\src_main\!source\temp\render\!debug TargetDir=\XASH3D\src_main\!source\temp\server\!debug
InputPath=\XASH3D\src_main\!source\temp\render\!debug\server.dll InputPath=\XASH3D\src_main\!source\temp\server\!debug\server.dll
SOURCE="$(InputPath)" SOURCE="$(InputPath)"
"D:\Xash3D\xash\bin\server.dll" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" "D:\Xash3D\xash\bin\server.dll" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"

View File

@ -51,7 +51,7 @@ Package=<4>
############################################################################### ###############################################################################
Project: "render"=".\render\render.dsp" - Package Owner=<4> Project: "renderer"=".\renderer\renderer.dsp" - Package Owner=<4>
Package=<5> Package=<5>
{{{ {{{