Jedi Outcast Patch v1.03
This commit is contained in:
parent
fdf355590f
commit
6af9b594e1
353 changed files with 34219 additions and 7343 deletions
BIN
CODE-mp/ALut.lib
Normal file
BIN
CODE-mp/ALut.lib
Normal file
Binary file not shown.
BIN
CODE-mp/EaxMan.dll
Normal file
BIN
CODE-mp/EaxMan.dll
Normal file
Binary file not shown.
BIN
CODE-mp/OpenAL32.dll
Normal file
BIN
CODE-mp/OpenAL32.dll
Normal file
Binary file not shown.
BIN
CODE-mp/OpenAL32.lib
Normal file
BIN
CODE-mp/OpenAL32.lib
Normal file
Binary file not shown.
|
@ -38,11 +38,11 @@ RSC=rc.exe
|
|||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 0
|
||||
# PROP Output_Dir "Release"
|
||||
# PROP Intermediate_Dir "Release"
|
||||
# PROP Intermediate_Dir "Release/Dedicated"
|
||||
# PROP Ignore_Export_Lib 0
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
|
||||
# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "DEDICATED" /D "BOTLIB" /YX /FD /c
|
||||
# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "DEDICATED" /D "BOTLIB" /FR /YX /FD /c
|
||||
# ADD BASE RSC /l 0x409 /d "NDEBUG"
|
||||
# ADD RSC /l 0x409 /d "NDEBUG"
|
||||
BSC32=bscmake.exe
|
||||
|
@ -50,7 +50,7 @@ BSC32=bscmake.exe
|
|||
# ADD BSC32 /nologo
|
||||
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 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:console /machine:I386
|
||||
# ADD 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 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib Winmm.lib /nologo /subsystem:console /machine:I386
|
||||
# ADD 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 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib Winmm.lib /nologo /subsystem:console /machine:I386 /out:"Release/jk2Ded.exe"
|
||||
|
||||
!ELSEIF "$(CFG)" == "WinDed - Win32 Debug"
|
||||
|
||||
|
@ -62,11 +62,11 @@ LINK32=link.exe
|
|||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 1
|
||||
# PROP Output_Dir "Debug"
|
||||
# PROP Intermediate_Dir "Debug"
|
||||
# PROP Intermediate_Dir "Debug/dedicated"
|
||||
# PROP Ignore_Export_Lib 0
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
|
||||
# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "DEDICATED" /D "_JK2" /D "BOTLIB" /FD /GZ /c
|
||||
# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "DEDICATED" /D "_JK2" /D "BOTLIB" /FR /FD /GZ /c
|
||||
# SUBTRACT CPP /YX
|
||||
# ADD BASE RSC /l 0x409 /d "_DEBUG"
|
||||
# ADD RSC /l 0x409 /d "_DEBUG"
|
||||
|
@ -75,7 +75,7 @@ BSC32=bscmake.exe
|
|||
# ADD BSC32 /nologo
|
||||
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 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:console /debug /machine:I386 /pdbtype:sept
|
||||
# ADD 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 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib Winmm.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
|
||||
# ADD 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 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib Winmm.lib /nologo /subsystem:console /debug /machine:I386 /out:"Debug/jk2Ded.exe" /pdbtype:sept
|
||||
|
||||
!ENDIF
|
||||
|
||||
|
@ -136,10 +136,6 @@ SOURCE=.\qcommon\cmd.cpp
|
|||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\qcommon\CNetProfile.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\qcommon\common.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
@ -160,30 +156,10 @@ SOURCE=.\qcommon\game_version.h
|
|||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\qcommon\GenericParser2.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\qcommon\GenericParser2.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\qcommon\hstring.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\qcommon\hstring.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\qcommon\huffman.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\qcommon\INetProfile.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\qcommon\md4.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
@ -756,14 +732,6 @@ SOURCE=.\png\png.h
|
|||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\game\q_math.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\game\q_shared.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\game\q_shared.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
|
|
@ -6,114 +6,353 @@
|
|||
--------------------Configuration: WinDed - Win32 Debug--------------------
|
||||
</h3>
|
||||
<h3>Command Lines</h3>
|
||||
Creating temporary file "C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSPB2B.tmp" with contents
|
||||
Creating temporary file "C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP12B4.tmp" with contents
|
||||
[
|
||||
/nologo /MLd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "DEDICATED" /D "_JK2" /D "BOTLIB" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c
|
||||
/nologo /MLd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "DEDICATED" /D "_JK2" /D "BOTLIB" /FR"Debug/dedicated/" /Fo"Debug/dedicated/" /Fd"Debug/dedicated/" /FD /GZ /c
|
||||
"C:\projects\jk2\CODE-mp\qcommon\cm_load.cpp"
|
||||
"C:\projects\jk2\CODE-mp\qcommon\cm_patch.cpp"
|
||||
"C:\projects\jk2\CODE-mp\qcommon\cm_polylib.cpp"
|
||||
"C:\projects\jk2\CODE-mp\qcommon\cm_test.cpp"
|
||||
"C:\projects\jk2\CODE-mp\qcommon\cm_trace.cpp"
|
||||
"C:\projects\jk2\CODE-mp\qcommon\cmd.cpp"
|
||||
"C:\projects\jk2\CODE-mp\qcommon\common.cpp"
|
||||
"C:\projects\jk2\CODE-mp\qcommon\cvar.cpp"
|
||||
"C:\projects\jk2\CODE-mp\qcommon\files.cpp"
|
||||
"C:\projects\jk2\CODE-mp\qcommon\huffman.cpp"
|
||||
"C:\projects\jk2\CODE-mp\qcommon\msg.cpp"
|
||||
"C:\projects\jk2\CODE-mp\qcommon\net_chan.cpp"
|
||||
"C:\projects\jk2\CODE-mp\qcommon\q_math.cpp"
|
||||
"C:\projects\jk2\CODE-mp\qcommon\q_shared.cpp"
|
||||
"C:\projects\jk2\CODE-mp\qcommon\RoffSystem.cpp"
|
||||
"C:\projects\jk2\CODE-mp\qcommon\strip.cpp"
|
||||
"C:\projects\jk2\CODE-mp\qcommon\unzip.cpp"
|
||||
"C:\projects\jk2\CODE-mp\qcommon\vm.cpp"
|
||||
"C:\projects\jk2\CODE-mp\qcommon\vm_interpreted.cpp"
|
||||
"C:\projects\jk2\CODE-mp\qcommon\vm_x86.cpp"
|
||||
"C:\projects\jk2\CODE-mp\ghoul2\G2_API.cpp"
|
||||
"C:\projects\jk2\CODE-mp\ghoul2\G2_bolts.cpp"
|
||||
"C:\projects\jk2\CODE-mp\ghoul2\G2_bones.cpp"
|
||||
"C:\projects\jk2\CODE-mp\ghoul2\G2_misc.cpp"
|
||||
"C:\projects\jk2\CODE-mp\ghoul2\G2_surfaces.cpp"
|
||||
"C:\projects\jk2\CODE-mp\server\sv_bot.cpp"
|
||||
"C:\projects\jk2\CODE-mp\server\sv_ccmds.cpp"
|
||||
"C:\projects\jk2\CODE-mp\server\sv_client.cpp"
|
||||
"C:\projects\jk2\CODE-mp\server\sv_game.cpp"
|
||||
"C:\projects\jk2\CODE-mp\server\sv_init.cpp"
|
||||
"C:\projects\jk2\CODE-mp\server\sv_main.cpp"
|
||||
"C:\projects\jk2\CODE-mp\server\sv_net_chan.cpp"
|
||||
"C:\projects\jk2\CODE-mp\server\sv_snapshot.cpp"
|
||||
"C:\projects\jk2\CODE-mp\server\sv_world.cpp"
|
||||
"C:\projects\jk2\CODE-mp\null\null_client.cpp"
|
||||
"C:\projects\jk2\CODE-mp\null\null_glimp.cpp"
|
||||
"C:\projects\jk2\CODE-mp\null\null_renderer.cpp"
|
||||
"C:\projects\jk2\CODE-mp\null\null_input.cpp"
|
||||
"C:\projects\jk2\CODE-mp\null\null_snddma.cpp"
|
||||
"C:\projects\jk2\CODE-mp\null\win_main.cpp"
|
||||
"C:\projects\jk2\CODE-mp\renderer\tr_backend.cpp"
|
||||
"C:\projects\jk2\CODE-mp\renderer\tr_ghoul2.cpp"
|
||||
"C:\projects\jk2\CODE-mp\renderer\tr_image.cpp"
|
||||
"C:\projects\jk2\CODE-mp\renderer\tr_init.cpp"
|
||||
"C:\projects\jk2\CODE-mp\renderer\tr_main.cpp"
|
||||
"C:\projects\jk2\CODE-mp\renderer\tr_mesh.cpp"
|
||||
"C:\projects\jk2\CODE-mp\renderer\tr_model.cpp"
|
||||
"C:\projects\jk2\CODE-mp\renderer\tr_shader.cpp"
|
||||
"C:\projects\jk2\CODE-mp\win32\win_net.cpp"
|
||||
"C:\projects\jk2\CODE-mp\win32\win_shared.cpp"
|
||||
"C:\projects\jk2\CODE-mp\botlib\be_aas_bspq3.cpp"
|
||||
"C:\projects\jk2\CODE-mp\botlib\be_aas_cluster.cpp"
|
||||
"C:\projects\jk2\CODE-mp\botlib\be_aas_debug.cpp"
|
||||
"C:\projects\jk2\CODE-mp\botlib\be_aas_entity.cpp"
|
||||
"C:\projects\jk2\CODE-mp\botlib\be_aas_file.cpp"
|
||||
"C:\projects\jk2\CODE-mp\botlib\be_aas_main.cpp"
|
||||
"C:\projects\jk2\CODE-mp\botlib\be_aas_move.cpp"
|
||||
"C:\projects\jk2\CODE-mp\botlib\be_aas_optimize.cpp"
|
||||
"C:\projects\jk2\CODE-mp\botlib\be_aas_reach.cpp"
|
||||
"C:\projects\jk2\CODE-mp\botlib\be_aas_route.cpp"
|
||||
"C:\projects\jk2\CODE-mp\botlib\be_aas_routealt.cpp"
|
||||
"C:\projects\jk2\CODE-mp\botlib\be_aas_sample.cpp"
|
||||
"C:\projects\jk2\CODE-mp\botlib\be_ai_char.cpp"
|
||||
"C:\projects\jk2\CODE-mp\botlib\be_ai_chat.cpp"
|
||||
"C:\projects\jk2\CODE-mp\botlib\be_ai_gen.cpp"
|
||||
"C:\projects\jk2\CODE-mp\botlib\be_ai_goal.cpp"
|
||||
"C:\projects\jk2\CODE-mp\botlib\be_ai_move.cpp"
|
||||
"C:\projects\jk2\CODE-mp\botlib\be_ai_weap.cpp"
|
||||
"C:\projects\jk2\CODE-mp\botlib\be_ai_weight.cpp"
|
||||
"C:\projects\jk2\CODE-mp\botlib\be_ea.cpp"
|
||||
"C:\projects\jk2\CODE-mp\botlib\be_interface.cpp"
|
||||
"C:\projects\jk2\CODE-mp\botlib\l_crc.cpp"
|
||||
"C:\projects\jk2\CODE-mp\botlib\l_libvar.cpp"
|
||||
"C:\projects\jk2\CODE-mp\botlib\l_log.cpp"
|
||||
"C:\projects\jk2\CODE-mp\botlib\l_memory.cpp"
|
||||
"C:\projects\jk2\CODE-mp\botlib\l_precomp.cpp"
|
||||
"C:\projects\jk2\CODE-mp\botlib\l_script.cpp"
|
||||
"C:\projects\jk2\CODE-mp\botlib\l_struct.cpp"
|
||||
]
|
||||
Creating command line "cl.exe @C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSPB2B.tmp"
|
||||
Creating temporary file "C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSPB2C.tmp" with contents
|
||||
Creating command line "cl.exe @C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP12B4.tmp"
|
||||
Creating temporary file "C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP12B5.tmp" with contents
|
||||
[
|
||||
kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib Winmm.lib /nologo /subsystem:console /incremental:yes /pdb:"Debug/WinDed.pdb" /debug /machine:I386 /out:"Debug/WinDed.exe" /pdbtype:sept
|
||||
".\Debug\cm_load.obj"
|
||||
".\Debug\cm_patch.obj"
|
||||
".\Debug\cm_polylib.obj"
|
||||
".\Debug\cm_test.obj"
|
||||
".\Debug\cm_trace.obj"
|
||||
".\Debug\cmd.obj"
|
||||
".\Debug\CNetProfile.obj"
|
||||
".\Debug\common.obj"
|
||||
".\Debug\cvar.obj"
|
||||
".\Debug\files.obj"
|
||||
".\Debug\GenericParser2.obj"
|
||||
".\Debug\hstring.obj"
|
||||
".\Debug\huffman.obj"
|
||||
".\Debug\md4.obj"
|
||||
".\Debug\msg.obj"
|
||||
".\Debug\net_chan.obj"
|
||||
".\Debug\q_math.obj"
|
||||
".\Debug\q_shared.obj"
|
||||
".\Debug\RoffSystem.obj"
|
||||
".\Debug\strip.obj"
|
||||
".\Debug\unzip.obj"
|
||||
".\Debug\vm.obj"
|
||||
".\Debug\vm_interpreted.obj"
|
||||
".\Debug\vm_x86.obj"
|
||||
".\Debug\G2_API.obj"
|
||||
".\Debug\G2_bolts.obj"
|
||||
".\Debug\G2_bones.obj"
|
||||
".\Debug\G2_misc.obj"
|
||||
".\Debug\G2_surfaces.obj"
|
||||
".\Debug\sv_bot.obj"
|
||||
".\Debug\sv_ccmds.obj"
|
||||
".\Debug\sv_client.obj"
|
||||
".\Debug\sv_game.obj"
|
||||
".\Debug\sv_init.obj"
|
||||
".\Debug\sv_main.obj"
|
||||
".\Debug\sv_net_chan.obj"
|
||||
".\Debug\sv_snapshot.obj"
|
||||
".\Debug\sv_world.obj"
|
||||
".\Debug\null_client.obj"
|
||||
".\Debug\null_glimp.obj"
|
||||
".\Debug\null_input.obj"
|
||||
".\Debug\null_renderer.obj"
|
||||
".\Debug\null_snddma.obj"
|
||||
".\Debug\win_main.obj"
|
||||
".\Debug\matcomp.obj"
|
||||
".\Debug\tr_backend.obj"
|
||||
".\Debug\tr_ghoul2.obj"
|
||||
".\Debug\tr_image.obj"
|
||||
".\Debug\tr_init.obj"
|
||||
".\Debug\tr_main.obj"
|
||||
".\Debug\tr_mesh.obj"
|
||||
".\Debug\tr_model.obj"
|
||||
".\Debug\tr_shader.obj"
|
||||
".\Debug\win_net.obj"
|
||||
".\Debug\win_shared.obj"
|
||||
".\Debug\be_aas_bspq3.obj"
|
||||
".\Debug\be_aas_cluster.obj"
|
||||
".\Debug\be_aas_debug.obj"
|
||||
".\Debug\be_aas_entity.obj"
|
||||
".\Debug\be_aas_file.obj"
|
||||
".\Debug\be_aas_main.obj"
|
||||
".\Debug\be_aas_move.obj"
|
||||
".\Debug\be_aas_optimize.obj"
|
||||
".\Debug\be_aas_reach.obj"
|
||||
".\Debug\be_aas_route.obj"
|
||||
".\Debug\be_aas_routealt.obj"
|
||||
".\Debug\be_aas_sample.obj"
|
||||
".\Debug\be_ai_char.obj"
|
||||
".\Debug\be_ai_chat.obj"
|
||||
".\Debug\be_ai_gen.obj"
|
||||
".\Debug\be_ai_goal.obj"
|
||||
".\Debug\be_ai_move.obj"
|
||||
".\Debug\be_ai_weap.obj"
|
||||
".\Debug\be_ai_weight.obj"
|
||||
".\Debug\be_ea.obj"
|
||||
".\Debug\be_interface.obj"
|
||||
".\Debug\l_crc.obj"
|
||||
".\Debug\l_libvar.obj"
|
||||
".\Debug\l_log.obj"
|
||||
".\Debug\l_memory.obj"
|
||||
".\Debug\l_precomp.obj"
|
||||
".\Debug\l_script.obj"
|
||||
".\Debug\l_struct.obj"
|
||||
kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib Winmm.lib /nologo /subsystem:console /incremental:yes /pdb:"Debug/jk2Ded.pdb" /debug /machine:I386 /out:"Debug/jk2Ded.exe" /pdbtype:sept
|
||||
".\Debug\dedicated\cm_load.obj"
|
||||
".\Debug\dedicated\cm_patch.obj"
|
||||
".\Debug\dedicated\cm_polylib.obj"
|
||||
".\Debug\dedicated\cm_test.obj"
|
||||
".\Debug\dedicated\cm_trace.obj"
|
||||
".\Debug\dedicated\cmd.obj"
|
||||
".\Debug\dedicated\common.obj"
|
||||
".\Debug\dedicated\cvar.obj"
|
||||
".\Debug\dedicated\files.obj"
|
||||
".\Debug\dedicated\huffman.obj"
|
||||
".\Debug\dedicated\md4.obj"
|
||||
".\Debug\dedicated\msg.obj"
|
||||
".\Debug\dedicated\net_chan.obj"
|
||||
".\Debug\dedicated\q_math.obj"
|
||||
".\Debug\dedicated\q_shared.obj"
|
||||
".\Debug\dedicated\RoffSystem.obj"
|
||||
".\Debug\dedicated\strip.obj"
|
||||
".\Debug\dedicated\unzip.obj"
|
||||
".\Debug\dedicated\vm.obj"
|
||||
".\Debug\dedicated\vm_interpreted.obj"
|
||||
".\Debug\dedicated\vm_x86.obj"
|
||||
".\Debug\dedicated\G2_API.obj"
|
||||
".\Debug\dedicated\G2_bolts.obj"
|
||||
".\Debug\dedicated\G2_bones.obj"
|
||||
".\Debug\dedicated\G2_misc.obj"
|
||||
".\Debug\dedicated\G2_surfaces.obj"
|
||||
".\Debug\dedicated\sv_bot.obj"
|
||||
".\Debug\dedicated\sv_ccmds.obj"
|
||||
".\Debug\dedicated\sv_client.obj"
|
||||
".\Debug\dedicated\sv_game.obj"
|
||||
".\Debug\dedicated\sv_init.obj"
|
||||
".\Debug\dedicated\sv_main.obj"
|
||||
".\Debug\dedicated\sv_net_chan.obj"
|
||||
".\Debug\dedicated\sv_snapshot.obj"
|
||||
".\Debug\dedicated\sv_world.obj"
|
||||
".\Debug\dedicated\null_client.obj"
|
||||
".\Debug\dedicated\null_glimp.obj"
|
||||
".\Debug\dedicated\null_input.obj"
|
||||
".\Debug\dedicated\null_renderer.obj"
|
||||
".\Debug\dedicated\null_snddma.obj"
|
||||
".\Debug\dedicated\win_main.obj"
|
||||
".\Debug\dedicated\matcomp.obj"
|
||||
".\Debug\dedicated\tr_backend.obj"
|
||||
".\Debug\dedicated\tr_ghoul2.obj"
|
||||
".\Debug\dedicated\tr_image.obj"
|
||||
".\Debug\dedicated\tr_init.obj"
|
||||
".\Debug\dedicated\tr_main.obj"
|
||||
".\Debug\dedicated\tr_mesh.obj"
|
||||
".\Debug\dedicated\tr_model.obj"
|
||||
".\Debug\dedicated\tr_shader.obj"
|
||||
".\Debug\dedicated\win_net.obj"
|
||||
".\Debug\dedicated\win_shared.obj"
|
||||
".\Debug\dedicated\be_aas_bspq3.obj"
|
||||
".\Debug\dedicated\be_aas_cluster.obj"
|
||||
".\Debug\dedicated\be_aas_debug.obj"
|
||||
".\Debug\dedicated\be_aas_entity.obj"
|
||||
".\Debug\dedicated\be_aas_file.obj"
|
||||
".\Debug\dedicated\be_aas_main.obj"
|
||||
".\Debug\dedicated\be_aas_move.obj"
|
||||
".\Debug\dedicated\be_aas_optimize.obj"
|
||||
".\Debug\dedicated\be_aas_reach.obj"
|
||||
".\Debug\dedicated\be_aas_route.obj"
|
||||
".\Debug\dedicated\be_aas_routealt.obj"
|
||||
".\Debug\dedicated\be_aas_sample.obj"
|
||||
".\Debug\dedicated\be_ai_char.obj"
|
||||
".\Debug\dedicated\be_ai_chat.obj"
|
||||
".\Debug\dedicated\be_ai_gen.obj"
|
||||
".\Debug\dedicated\be_ai_goal.obj"
|
||||
".\Debug\dedicated\be_ai_move.obj"
|
||||
".\Debug\dedicated\be_ai_weap.obj"
|
||||
".\Debug\dedicated\be_ai_weight.obj"
|
||||
".\Debug\dedicated\be_ea.obj"
|
||||
".\Debug\dedicated\be_interface.obj"
|
||||
".\Debug\dedicated\l_crc.obj"
|
||||
".\Debug\dedicated\l_libvar.obj"
|
||||
".\Debug\dedicated\l_log.obj"
|
||||
".\Debug\dedicated\l_memory.obj"
|
||||
".\Debug\dedicated\l_precomp.obj"
|
||||
".\Debug\dedicated\l_script.obj"
|
||||
".\Debug\dedicated\l_struct.obj"
|
||||
]
|
||||
Creating command line "link.exe @C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSPB2C.tmp"
|
||||
Creating command line "link.exe @C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP12B5.tmp"
|
||||
<h3>Output Window</h3>
|
||||
Compiling...
|
||||
G2_API.cpp
|
||||
Generating Code...
|
||||
Compiling...
|
||||
cm_load.cpp
|
||||
cm_patch.cpp
|
||||
cm_polylib.cpp
|
||||
cm_test.cpp
|
||||
cm_trace.cpp
|
||||
cmd.cpp
|
||||
common.cpp
|
||||
cvar.cpp
|
||||
files.cpp
|
||||
huffman.cpp
|
||||
msg.cpp
|
||||
net_chan.cpp
|
||||
q_math.cpp
|
||||
q_shared.cpp
|
||||
RoffSystem.cpp
|
||||
strip.cpp
|
||||
unzip.cpp
|
||||
vm.cpp
|
||||
vm_interpreted.cpp
|
||||
vm_x86.cpp
|
||||
Generating Code...
|
||||
Compiling...
|
||||
G2_bolts.cpp
|
||||
G2_bones.cpp
|
||||
G2_misc.cpp
|
||||
G2_surfaces.cpp
|
||||
sv_bot.cpp
|
||||
sv_ccmds.cpp
|
||||
sv_client.cpp
|
||||
sv_game.cpp
|
||||
sv_init.cpp
|
||||
sv_main.cpp
|
||||
sv_net_chan.cpp
|
||||
sv_snapshot.cpp
|
||||
sv_world.cpp
|
||||
null_client.cpp
|
||||
null_glimp.cpp
|
||||
null_renderer.cpp
|
||||
null_input.cpp
|
||||
null_snddma.cpp
|
||||
win_main.cpp
|
||||
tr_backend.cpp
|
||||
tr_ghoul2.cpp
|
||||
Generating Code...
|
||||
Compiling...
|
||||
tr_image.cpp
|
||||
tr_init.cpp
|
||||
tr_main.cpp
|
||||
tr_mesh.cpp
|
||||
tr_model.cpp
|
||||
tr_shader.cpp
|
||||
win_net.cpp
|
||||
win_shared.cpp
|
||||
be_aas_bspq3.cpp
|
||||
be_aas_cluster.cpp
|
||||
be_aas_debug.cpp
|
||||
be_aas_entity.cpp
|
||||
be_aas_file.cpp
|
||||
be_aas_main.cpp
|
||||
be_aas_move.cpp
|
||||
be_aas_optimize.cpp
|
||||
be_aas_reach.cpp
|
||||
be_aas_route.cpp
|
||||
be_aas_routealt.cpp
|
||||
be_aas_sample.cpp
|
||||
Generating Code...
|
||||
Compiling...
|
||||
be_ai_char.cpp
|
||||
be_ai_chat.cpp
|
||||
be_ai_gen.cpp
|
||||
be_ai_goal.cpp
|
||||
be_ai_move.cpp
|
||||
be_ai_weap.cpp
|
||||
be_ai_weight.cpp
|
||||
be_ea.cpp
|
||||
be_interface.cpp
|
||||
l_crc.cpp
|
||||
l_libvar.cpp
|
||||
l_log.cpp
|
||||
l_memory.cpp
|
||||
l_precomp.cpp
|
||||
l_script.cpp
|
||||
l_struct.cpp
|
||||
Generating Code...
|
||||
Linking...
|
||||
Creating temporary file "C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP12B8.tmp" with contents
|
||||
[
|
||||
/nologo /o"Debug/WinDed.bsc"
|
||||
".\Debug\dedicated\cm_load.sbr"
|
||||
".\Debug\dedicated\cm_patch.sbr"
|
||||
".\Debug\dedicated\cm_polylib.sbr"
|
||||
".\Debug\dedicated\cm_test.sbr"
|
||||
".\Debug\dedicated\cm_trace.sbr"
|
||||
".\Debug\dedicated\cmd.sbr"
|
||||
".\Debug\dedicated\common.sbr"
|
||||
".\Debug\dedicated\cvar.sbr"
|
||||
".\Debug\dedicated\files.sbr"
|
||||
".\Debug\dedicated\huffman.sbr"
|
||||
".\Debug\dedicated\md4.sbr"
|
||||
".\Debug\dedicated\msg.sbr"
|
||||
".\Debug\dedicated\net_chan.sbr"
|
||||
".\Debug\dedicated\q_math.sbr"
|
||||
".\Debug\dedicated\q_shared.sbr"
|
||||
".\Debug\dedicated\RoffSystem.sbr"
|
||||
".\Debug\dedicated\strip.sbr"
|
||||
".\Debug\dedicated\unzip.sbr"
|
||||
".\Debug\dedicated\vm.sbr"
|
||||
".\Debug\dedicated\vm_interpreted.sbr"
|
||||
".\Debug\dedicated\vm_x86.sbr"
|
||||
".\Debug\dedicated\G2_API.sbr"
|
||||
".\Debug\dedicated\G2_bolts.sbr"
|
||||
".\Debug\dedicated\G2_bones.sbr"
|
||||
".\Debug\dedicated\G2_misc.sbr"
|
||||
".\Debug\dedicated\G2_surfaces.sbr"
|
||||
".\Debug\dedicated\sv_bot.sbr"
|
||||
".\Debug\dedicated\sv_ccmds.sbr"
|
||||
".\Debug\dedicated\sv_client.sbr"
|
||||
".\Debug\dedicated\sv_game.sbr"
|
||||
".\Debug\dedicated\sv_init.sbr"
|
||||
".\Debug\dedicated\sv_main.sbr"
|
||||
".\Debug\dedicated\sv_net_chan.sbr"
|
||||
".\Debug\dedicated\sv_snapshot.sbr"
|
||||
".\Debug\dedicated\sv_world.sbr"
|
||||
".\Debug\dedicated\null_client.sbr"
|
||||
".\Debug\dedicated\null_glimp.sbr"
|
||||
".\Debug\dedicated\null_input.sbr"
|
||||
".\Debug\dedicated\null_renderer.sbr"
|
||||
".\Debug\dedicated\null_snddma.sbr"
|
||||
".\Debug\dedicated\win_main.sbr"
|
||||
".\Debug\dedicated\matcomp.sbr"
|
||||
".\Debug\dedicated\tr_backend.sbr"
|
||||
".\Debug\dedicated\tr_ghoul2.sbr"
|
||||
".\Debug\dedicated\tr_image.sbr"
|
||||
".\Debug\dedicated\tr_init.sbr"
|
||||
".\Debug\dedicated\tr_main.sbr"
|
||||
".\Debug\dedicated\tr_mesh.sbr"
|
||||
".\Debug\dedicated\tr_model.sbr"
|
||||
".\Debug\dedicated\tr_shader.sbr"
|
||||
".\Debug\dedicated\win_net.sbr"
|
||||
".\Debug\dedicated\win_shared.sbr"
|
||||
".\Debug\dedicated\be_aas_bspq3.sbr"
|
||||
".\Debug\dedicated\be_aas_cluster.sbr"
|
||||
".\Debug\dedicated\be_aas_debug.sbr"
|
||||
".\Debug\dedicated\be_aas_entity.sbr"
|
||||
".\Debug\dedicated\be_aas_file.sbr"
|
||||
".\Debug\dedicated\be_aas_main.sbr"
|
||||
".\Debug\dedicated\be_aas_move.sbr"
|
||||
".\Debug\dedicated\be_aas_optimize.sbr"
|
||||
".\Debug\dedicated\be_aas_reach.sbr"
|
||||
".\Debug\dedicated\be_aas_route.sbr"
|
||||
".\Debug\dedicated\be_aas_routealt.sbr"
|
||||
".\Debug\dedicated\be_aas_sample.sbr"
|
||||
".\Debug\dedicated\be_ai_char.sbr"
|
||||
".\Debug\dedicated\be_ai_chat.sbr"
|
||||
".\Debug\dedicated\be_ai_gen.sbr"
|
||||
".\Debug\dedicated\be_ai_goal.sbr"
|
||||
".\Debug\dedicated\be_ai_move.sbr"
|
||||
".\Debug\dedicated\be_ai_weap.sbr"
|
||||
".\Debug\dedicated\be_ai_weight.sbr"
|
||||
".\Debug\dedicated\be_ea.sbr"
|
||||
".\Debug\dedicated\be_interface.sbr"
|
||||
".\Debug\dedicated\l_crc.sbr"
|
||||
".\Debug\dedicated\l_libvar.sbr"
|
||||
".\Debug\dedicated\l_log.sbr"
|
||||
".\Debug\dedicated\l_memory.sbr"
|
||||
".\Debug\dedicated\l_precomp.sbr"
|
||||
".\Debug\dedicated\l_script.sbr"
|
||||
".\Debug\dedicated\l_struct.sbr"]
|
||||
Creating command line "bscmake.exe @C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP12B8.tmp"
|
||||
Creating browse info file...
|
||||
<h3>Output Window</h3>
|
||||
|
||||
|
||||
|
||||
<h3>Results</h3>
|
||||
WinDed.exe - 0 error(s), 0 warning(s)
|
||||
jk2Ded.exe - 0 error(s), 0 warning(s)
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
||||
|
|
16
CODE-mp/botlib/botlib.plg
Normal file
16
CODE-mp/botlib/botlib.plg
Normal file
|
@ -0,0 +1,16 @@
|
|||
<html>
|
||||
<body>
|
||||
<pre>
|
||||
<h1>Build Log</h1>
|
||||
<h3>
|
||||
--------------------Configuration: botlib - Win32 Final JK2--------------------
|
||||
</h3>
|
||||
<h3>Command Lines</h3>
|
||||
|
||||
|
||||
|
||||
<h3>Results</h3>
|
||||
botlib.lib - 0 error(s), 0 warning(s)
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
Binary file not shown.
|
@ -8,6 +8,7 @@ stringID_table_t animTable [MAX_ANIMATIONS+1] =
|
|||
//=================================================
|
||||
//ANIMS IN WHICH UPPER AND LOWER OBJECTS ARE IN MD3
|
||||
//=================================================
|
||||
ENUM2STRING(BOTH_1CRUFTFORGIL), //# G2 cannot have a reverse anim at beginning of file
|
||||
//# #sep ENUM2STRING(BOTH_ DEATHS
|
||||
ENUM2STRING(BOTH_DEATH1), //# First Death anim
|
||||
ENUM2STRING(BOTH_DEATH2), //# Second Death anim
|
||||
|
@ -23,13 +24,17 @@ stringID_table_t animTable [MAX_ANIMATIONS+1] =
|
|||
ENUM2STRING(BOTH_DEATH12), //#
|
||||
ENUM2STRING(BOTH_DEATH13), //#
|
||||
ENUM2STRING(BOTH_DEATH14), //#
|
||||
ENUM2STRING(BOTH_DEATH14_UNGRIP), //# Desann's end death (cin #35)
|
||||
ENUM2STRING(BOTH_DEATH14_SITUP), //# Tavion sitting up after having been thrown (cin #23)
|
||||
ENUM2STRING(BOTH_DEATH15), //#
|
||||
ENUM2STRING(BOTH_DEATH16), //#
|
||||
ENUM2STRING(BOTH_DEATH17), //#
|
||||
ENUM2STRING(BOTH_DEATH18), //#
|
||||
ENUM2STRING(BOTH_DEATH19), //#
|
||||
ENUM2STRING(BOTH_DEATH20), //#
|
||||
ENUM2STRING(BOTH_DEATH21), //#
|
||||
ENUM2STRING(BOTH_DEATH22), //#
|
||||
ENUM2STRING(BOTH_DEATH23), //#
|
||||
ENUM2STRING(BOTH_DEATH24), //#
|
||||
ENUM2STRING(BOTH_DEATH25), //#
|
||||
|
||||
ENUM2STRING(BOTH_DEATHFORWARD1), //# First Death in which they get thrown forward
|
||||
ENUM2STRING(BOTH_DEATHFORWARD2), //# Second Death in which they get thrown forward
|
||||
|
@ -73,6 +78,12 @@ stringID_table_t animTable [MAX_ANIMATIONS+1] =
|
|||
ENUM2STRING(BOTH_DEAD17), //#
|
||||
ENUM2STRING(BOTH_DEAD18), //#
|
||||
ENUM2STRING(BOTH_DEAD19), //#
|
||||
ENUM2STRING(BOTH_DEAD20), //#
|
||||
ENUM2STRING(BOTH_DEAD21), //#
|
||||
ENUM2STRING(BOTH_DEAD22), //#
|
||||
ENUM2STRING(BOTH_DEAD23), //#
|
||||
ENUM2STRING(BOTH_DEAD24), //#
|
||||
ENUM2STRING(BOTH_DEAD25), //#
|
||||
ENUM2STRING(BOTH_DEADFORWARD1), //# First thrown forward death finished pose
|
||||
ENUM2STRING(BOTH_DEADFORWARD2), //# Second thrown forward death finished pose
|
||||
ENUM2STRING(BOTH_DEADBACKWARD1), //# First thrown backward death finished pose
|
||||
|
@ -124,6 +135,7 @@ stringID_table_t animTable [MAX_ANIMATIONS+1] =
|
|||
//# #sep ENUM2STRING(BOTH_ ATTACKS
|
||||
ENUM2STRING(BOTH_ATTACK1), //# Attack with stun baton
|
||||
ENUM2STRING(BOTH_ATTACK2), //# Attack with one-handed pistol
|
||||
ENUM2STRING(BOTH_ATTACK2IDLE1), //# Idle with one-handed pistol
|
||||
ENUM2STRING(BOTH_ATTACK3), //# Attack with blaster rifle
|
||||
ENUM2STRING(BOTH_ATTACK4), //# Attack with disruptor
|
||||
ENUM2STRING(BOTH_ATTACK5), //# Attack with bow caster
|
||||
|
@ -607,19 +619,29 @@ stringID_table_t animTable [MAX_ANIMATIONS+1] =
|
|||
ENUM2STRING(BOTH_CCWCIRCLEBREAK), //#
|
||||
ENUM2STRING(BOTH_CWCIRCLELOCK), //#
|
||||
ENUM2STRING(BOTH_CCWCIRCLELOCK), //#
|
||||
//other saber anims/attacks
|
||||
ENUM2STRING(BOTH_SABERFAST_STANCE),
|
||||
ENUM2STRING(BOTH_SABERSLOW_STANCE),
|
||||
ENUM2STRING(BOTH_A2_STABBACK1), //# Stab saber backward
|
||||
ENUM2STRING(BOTH_ATTACK_BACK), //# Swing around backwards and attack
|
||||
ENUM2STRING(BOTH_JUMPFLIPSLASHDOWN1),//#
|
||||
ENUM2STRING(BOTH_JUMPFLIPSTABDOWN),//#
|
||||
ENUM2STRING(BOTH_FORCELEAP2_T__B_),//#
|
||||
ENUM2STRING(BOTH_LUNGE2_B__T_),//#
|
||||
ENUM2STRING(BOTH_CROUCHATTACKBACK1),//#
|
||||
|
||||
//# #sep ENUM2STRING(BOTH_ STANDING
|
||||
ENUM2STRING(BOTH_STAND1), //# Standing idle), no weapon), hands down
|
||||
ENUM2STRING(BOTH_STAND1_RANDOM1), //# Random standing idle
|
||||
ENUM2STRING(BOTH_STAND1_RANDOM2), //# Random standing idle
|
||||
ENUM2STRING(BOTH_STAND2), //# Standing idle with a weapon
|
||||
ENUM2STRING(BOTH_STAND2_RANDOM1), //# Random standing idle
|
||||
ENUM2STRING(BOTH_STAND2_RANDOM2), //# Random standing idle
|
||||
ENUM2STRING(BOTH_STAND2_RANDOM3), //# Random standing idle
|
||||
ENUM2STRING(BOTH_STAND2_RANDOM4), //# Random standing idle
|
||||
ENUM2STRING(BOTH_STAND3), //# Standing hands behind back), at ease), etc.
|
||||
ENUM2STRING(BOTH_STAND1), //# Standing idle, no weapon, hands down
|
||||
ENUM2STRING(BOTH_STAND1IDLE1), //# Random standing idle
|
||||
ENUM2STRING(BOTH_STAND2), //# Standing idle with a saber
|
||||
ENUM2STRING(BOTH_STAND2IDLE1), //# Random standing idle
|
||||
ENUM2STRING(BOTH_STAND2IDLE2),
|
||||
ENUM2STRING(BOTH_STAND3), //# Standing idle with 2-handed weapon
|
||||
ENUM2STRING(BOTH_STAND3IDLE1), //# Random standing idle
|
||||
ENUM2STRING(BOTH_STAND4), //# hands clasp behind back
|
||||
ENUM2STRING(BOTH_STAND5), //# standing idle), no weapon), hand down), back straight
|
||||
ENUM2STRING(BOTH_STAND4IDLE1), //# Random standing idle
|
||||
ENUM2STRING(BOTH_STAND5), //# standing idle, no weapon, hand down, back straight
|
||||
ENUM2STRING(BOTH_STAND5IDLE1), //# Random standing idle
|
||||
ENUM2STRING(BOTH_STAND6), //# one handed), gun at side), relaxed stand
|
||||
ENUM2STRING(BOTH_STAND7), //# both hands on hips (female)
|
||||
ENUM2STRING(BOTH_STAND8), //# both hands on hips (male)
|
||||
|
@ -638,8 +660,21 @@ stringID_table_t animTable [MAX_ANIMATIONS+1] =
|
|||
ENUM2STRING(BOTH_STAND5_REELO), //# Reelo in his stand5 position (cin #18)
|
||||
ENUM2STRING(BOTH_STAND1TOSTAND5), //# Transition from stand1 to stand5
|
||||
ENUM2STRING(BOTH_STAND5TOSTAND1), //# Transition from stand5 to stand1
|
||||
ENUM2STRING(BOTH_STAND5TOAIM), //# Transition of Kye aiming his gun at Desann (cin #9)
|
||||
ENUM2STRING(BOTH_STAND5STARTLEDLOOKLEFT), //# Kyle turning to watch the bridge drop (cin #9)
|
||||
ENUM2STRING(BOTH_STARTLEDLOOKLEFTTOSTAND5), //# Kyle returning to stand 5 from watching the bridge drop (cin #9)
|
||||
ENUM2STRING(BOTH_STAND5TOSTAND8), //# Transition from stand5 to stand8
|
||||
ENUM2STRING(BOTH_STAND7TOSTAND8), //# Tavion putting hands on back of chair (cin #11)
|
||||
ENUM2STRING(BOTH_STAND8TOSTAND5), //# Transition from stand8 to stand5
|
||||
ENUM2STRING(BOTH_STAND5SHIFTWEIGHT), //# Weightshift from stand5 to side and back to stand5
|
||||
ENUM2STRING(BOTH_STAND5SHIFTWEIGHTSTART), //# From stand5 to side
|
||||
ENUM2STRING(BOTH_STAND5SHIFTWEIGHTSTOP), //# From side to stand5
|
||||
ENUM2STRING(BOTH_STAND5TURNLEFTSTART), //# Start turning left from stand5
|
||||
ENUM2STRING(BOTH_STAND5TURNLEFTSTOP), //# Stop turning left from stand5
|
||||
ENUM2STRING(BOTH_STAND5TURNRIGHTSTART), //# Start turning right from stand5
|
||||
ENUM2STRING(BOTH_STAND5TURNRIGHTSTOP), //# Stop turning right from stand5
|
||||
ENUM2STRING(BOTH_STAND5LOOK180LEFTSTART), //# Start looking over left shoulder (cin #17)
|
||||
ENUM2STRING(BOTH_STAND5LOOK180LEFTSTOP), //# Stop looking over left shoulder (cin #17)
|
||||
|
||||
ENUM2STRING(BOTH_CONSOLE1START), //# typing at a console
|
||||
ENUM2STRING(BOTH_CONSOLE1), //# typing at a console
|
||||
|
@ -647,6 +682,8 @@ stringID_table_t animTable [MAX_ANIMATIONS+1] =
|
|||
ENUM2STRING(BOTH_CONSOLE2START), //# typing at a console with comm link in hand (cin #5)
|
||||
ENUM2STRING(BOTH_CONSOLE2), //# typing at a console with comm link in hand (cin #5)
|
||||
ENUM2STRING(BOTH_CONSOLE2STOP), //# typing at a console with comm link in hand (cin #5)
|
||||
ENUM2STRING(BOTH_CONSOLE2HOLDCOMSTART), //# lean in to type at console while holding comm link in hand (cin #5)
|
||||
ENUM2STRING(BOTH_CONSOLE2HOLDCOMSTOP), //# lean away after typing at console while holding comm link in hand (cin #5)
|
||||
|
||||
ENUM2STRING(BOTH_GUARD_LOOKAROUND1), //# Cradling weapon and looking around
|
||||
ENUM2STRING(BOTH_GUARD_IDLE1), //# Cradling weapon and standing
|
||||
|
@ -654,6 +691,53 @@ stringID_table_t animTable [MAX_ANIMATIONS+1] =
|
|||
ENUM2STRING(BOTH_GESTURE1), //# Generic gesture), non-specific
|
||||
ENUM2STRING(BOTH_GESTURE2), //# Generic gesture), non-specific
|
||||
ENUM2STRING(BOTH_GESTURE3), //# Generic gesture), non-specific
|
||||
ENUM2STRING(BOTH_WALK1TALKCOMM1), //# Talking into coom link while walking
|
||||
ENUM2STRING(BOTH_TALK1), //# Generic talk anim
|
||||
ENUM2STRING(BOTH_TALK2), //# Generic talk anim
|
||||
ENUM2STRING(BOTH_TALKCOMM1START), //# Start talking into a comm link
|
||||
ENUM2STRING(BOTH_TALKCOMM1), //# Talking into a comm link
|
||||
ENUM2STRING(BOTH_TALKCOMM1STOP), //# Stop talking into a comm link
|
||||
ENUM2STRING(BOTH_TALKGESTURE1), //# Generic talk anim
|
||||
ENUM2STRING(BOTH_TALKGESTURE2), //# Generic talk anim
|
||||
ENUM2STRING(BOTH_TALKGESTURE3), //# Generic talk anim
|
||||
|
||||
ENUM2STRING(BOTH_TALKGESTURE4START), //# Beginning talk anim 4
|
||||
ENUM2STRING(BOTH_TALKGESTURE4), //# Talk gesture 4
|
||||
ENUM2STRING(BOTH_TALKGESTURE4STOP), //# Ending talk anim 4
|
||||
ENUM2STRING(BOTH_TALKGESTURE5START), //# Start hand on chin
|
||||
ENUM2STRING(BOTH_TALKGESTURE5), //# Hand on chin
|
||||
ENUM2STRING(BOTH_TALKGESTURE5STOP), //# Stop hand on chin
|
||||
ENUM2STRING(BOTH_TALKGESTURE6START), //# Starting Motions to self
|
||||
ENUM2STRING(BOTH_TALKGESTURE6), //# Pointing at self
|
||||
ENUM2STRING(BOTH_TALKGESTURE6STOP), //# Ending Motions to self
|
||||
ENUM2STRING(BOTH_TALKGESTURE7START), //# Start touches Kyle on shoulder
|
||||
ENUM2STRING(BOTH_TALKGESTURE7), //# Hold touches Kyle on shoulder
|
||||
ENUM2STRING(BOTH_TALKGESTURE7STOP), //# Ending touches Kyle on shoulder
|
||||
ENUM2STRING(BOTH_TALKGESTURE8START), //# Lando's chin hold
|
||||
ENUM2STRING(BOTH_TALKGESTURE8), //# Lando's chin hold
|
||||
ENUM2STRING(BOTH_TALKGESTURE8STOP), //# Lando's chin hold
|
||||
ENUM2STRING(BOTH_TALKGESTURE9), //# Same as gesture 2 but with the right hand
|
||||
ENUM2STRING(BOTH_TALKGESTURE10), //# Shoulder shrug
|
||||
ENUM2STRING(BOTH_TALKGESTURE11START), //# Arms folded across chest
|
||||
ENUM2STRING(BOTH_TALKGESTURE11STOP), //# Arms folded across chest
|
||||
ENUM2STRING(BOTH_TALKGESTURE12), //# Tavion taunting Kyle
|
||||
ENUM2STRING(BOTH_TALKGESTURE13START), //# Luke warning Kyle
|
||||
ENUM2STRING(BOTH_TALKGESTURE13), //# Luke warning Kyle
|
||||
ENUM2STRING(BOTH_TALKGESTURE13STOP), //# Luke warning Kyle
|
||||
ENUM2STRING(BOTH_TALKGESTURE14), //# Luke gesturing to Kyle
|
||||
|
||||
ENUM2STRING(BOTH_TALKGESTURE15START), //# Desann taunting Kyle
|
||||
ENUM2STRING(BOTH_TALKGESTURE15), //# Desann taunting Kyle
|
||||
ENUM2STRING(BOTH_TALKGESTURE15STOP), //# Desann taunting Kyle
|
||||
ENUM2STRING(BOTH_TALKGESTURE16), //# Bartender gesture cin #15
|
||||
ENUM2STRING(BOTH_TALKGESTURE17), //# Bartender gesture cin #15
|
||||
ENUM2STRING(BOTH_TALKGESTURE18), //# Bartender gesture cin #15
|
||||
ENUM2STRING(BOTH_TALKGESTURE19START), //# Desann lifting his arm "Join me" (cin #34)
|
||||
ENUM2STRING(BOTH_TALKGESTURE19STOP), //# Desann lifting his arm "Join me" (cin #34)
|
||||
ENUM2STRING(BOTH_TALKGESTURE20START), //# Kyle lifting his arm "Join us" (cin #34)
|
||||
ENUM2STRING(BOTH_TALKGESTURE21), //# generic talk gesture from stand3
|
||||
ENUM2STRING(BOTH_TALKGESTURE22), //# generic talk gesture from stand3
|
||||
ENUM2STRING(BOTH_TALKGESTURE23), //# generic talk gesture from stand3
|
||||
ENUM2STRING(BOTH_PAUSE1START), //# Luke pauses to warn Kyle (cin #24) start
|
||||
ENUM2STRING(BOTH_PAUSE1STOP), //# Luke pauses to warn Kyle (cin #24) stop
|
||||
|
||||
|
@ -670,6 +754,8 @@ stringID_table_t animTable [MAX_ANIMATIONS+1] =
|
|||
ENUM2STRING(BOTH_SITHEADTILTRSTOP), //# Head tilt to right from seated position
|
||||
ENUM2STRING(BOTH_SITHEADNOD), //# Head shake YES from seated position
|
||||
ENUM2STRING(BOTH_SITHEADSHAKE), //# Head shake NO from seated position
|
||||
ENUM2STRING(BOTH_SIT2HEADTILTLSTART), //# Head tilt to left from seated position 2
|
||||
ENUM2STRING(BOTH_SIT2HEADTILTLSTOP), //# Head tilt to left from seated position 2
|
||||
|
||||
ENUM2STRING(BOTH_REACH1START), //# Monmothma reaching for crystal
|
||||
ENUM2STRING(BOTH_REACH1STOP), //# Monmothma reaching for crystal
|
||||
|
@ -684,13 +770,6 @@ stringID_table_t animTable [MAX_ANIMATIONS+1] =
|
|||
ENUM2STRING(BOTH_EXAMINE3), //# Hold Lando looking around corner
|
||||
ENUM2STRING(BOTH_EXAMINE3STOP), //# End Lando looking around corner
|
||||
|
||||
ENUM2STRING(BOTH_THROW1START), //# Kyle thrown to the right
|
||||
ENUM2STRING(BOTH_THROW1), //# Kyle thrown to the right
|
||||
ENUM2STRING(BOTH_THROW1STOP), //# Kyle thrown to the right
|
||||
ENUM2STRING(BOTH_THROW2START), //# Kyle thrown to the left
|
||||
ENUM2STRING(BOTH_THROW2), //# Kyle thrown to the left
|
||||
ENUM2STRING(BOTH_THROW3), //# Kyle thrown backwards in cin #9
|
||||
|
||||
ENUM2STRING(BOTH_LEANLEFT2START), //# Start leaning left in chair
|
||||
ENUM2STRING(BOTH_LEANLEFT2STOP), //# Stop leaning left in chair
|
||||
ENUM2STRING(BOTH_LEANRIGHT3START), //# Start Lando leaning on wall
|
||||
|
@ -726,6 +805,26 @@ stringID_table_t animTable [MAX_ANIMATIONS+1] =
|
|||
ENUM2STRING(BOTH_LAUGH1STOP), //# Reelo laughing (cin #18)
|
||||
ENUM2STRING(BOTH_ESCAPEPOD_LEAVE1), //# Kyle leaving escape pod (cin #33)
|
||||
ENUM2STRING(BOTH_ESCAPEPOD_LEAVE2), //# Jan leaving escape pod (cin #33)
|
||||
ENUM2STRING(BOTH_HUGGER1), //# Kyle hugging Jan (cin #29)
|
||||
ENUM2STRING(BOTH_HUGGERSTOP1), //# Kyle stop hugging Jan but don't let her go (cin #29)
|
||||
ENUM2STRING(BOTH_HUGGERSTOP2), //# Kyle let go of Jan and step back (cin #29)
|
||||
ENUM2STRING(BOTH_HUGGEE1), //# Jan being hugged (cin #29)
|
||||
ENUM2STRING(BOTH_HUGGEESTOP1), //# Jan stop being hugged but don't let go (cin #29)
|
||||
ENUM2STRING(BOTH_HUGGEESTOP2), //# Jan released from hug (cin #29)
|
||||
ENUM2STRING(BOTH_KISSER1), //# Temp until the Kiss anim gets split up
|
||||
ENUM2STRING(BOTH_KISSER1START1), //# Kyle start kissing Jan
|
||||
ENUM2STRING(BOTH_KISSER1START2), //# Kyle start kissing Jan
|
||||
ENUM2STRING(BOTH_KISSER1LOOP), //# Kyle loop kissing Jan
|
||||
ENUM2STRING(BOTH_KISSER1STOP), //# Temp until the Kiss anim gets split up
|
||||
ENUM2STRING(BOTH_KISSER1STOP1), //# Kyle stop kissing but don't let go
|
||||
ENUM2STRING(BOTH_KISSER1STOP2), //# Kyle step back from Jan
|
||||
ENUM2STRING(BOTH_KISSEE1), //# Temp until the Kiss anim gets split up
|
||||
ENUM2STRING(BOTH_KISSEE1START1), //# Jan start being kissed
|
||||
ENUM2STRING(BOTH_KISSEE1START2), //# Jan start2 being kissed
|
||||
ENUM2STRING(BOTH_KISSEE1LOOP), //# Jan loop being kissed
|
||||
ENUM2STRING(BOTH_KISSEE1STOP), //# Temp until the Kiss anim gets split up
|
||||
ENUM2STRING(BOTH_KISSEE1STOP1), //# Jan stop being kissed but don't let go
|
||||
ENUM2STRING(BOTH_KISSEE1STOP2), //# Jan wait for Kyle to step back
|
||||
ENUM2STRING(BOTH_BARTENDER_IDLE1), //# Bartender idle in cin #15
|
||||
ENUM2STRING(BOTH_BARTENDER_THROW1), //# Bartender throws glass in cin #15
|
||||
ENUM2STRING(BOTH_BARTENDER_COWERSTART), //# Start of Bartender raising both hands up in surrender (cin #16)
|
||||
|
@ -735,6 +834,7 @@ stringID_table_t animTable [MAX_ANIMATIONS+1] =
|
|||
ENUM2STRING(BOTH_THREATEN1), //# Kyle threatening Bartender with lightsaber (cin #16)
|
||||
ENUM2STRING(BOTH_RADIO_ONOFF), //# Mech Galak turning on his suit radio (cin #32)
|
||||
ENUM2STRING(BOTH_TRIUMPHANT1START), //# Mech Galak raising his arms in victory (cin #32)
|
||||
ENUM2STRING(BOTH_TRIUMPHANT1STARTGESTURE), //# Mech Galak raising his arms in victory (cin #32)
|
||||
ENUM2STRING(BOTH_TRIUMPHANT1STOP), //# Mech Galak lowering his arms in victory (cin #32)
|
||||
|
||||
ENUM2STRING(BOTH_SABERTHROW1START), //# Desann throwing his light saber (cin #26)
|
||||
|
@ -758,6 +858,8 @@ stringID_table_t animTable [MAX_ANIMATIONS+1] =
|
|||
|
||||
ENUM2STRING(BOTH_SIT2TO3), //# Trans from sit2 to sit3?
|
||||
ENUM2STRING(BOTH_SIT2TOSTAND5), //# Transition from sit 2 to stand 5
|
||||
ENUM2STRING(BOTH_STAND5TOSIT2), //# Transition from stand 5 to sit 2
|
||||
ENUM2STRING(BOTH_SIT2TOSIT4), //# Trans from sit2 to sit4 (cin #12) Luke leaning back from lotus position.
|
||||
ENUM2STRING(BOTH_SIT3TO1), //# Trans from sit3 to sit1?
|
||||
ENUM2STRING(BOTH_SIT3TO2), //# Trans from sit3 to sit2?
|
||||
ENUM2STRING(BOTH_SIT3TOSTAND5), //# transition from sit 3 to stand 5
|
||||
|
@ -778,23 +880,22 @@ stringID_table_t animTable [MAX_ANIMATIONS+1] =
|
|||
ENUM2STRING(BOTH_UNCROUCH1), //# Transition from crouch to standing
|
||||
ENUM2STRING(BOTH_CROUCH2IDLE), //# crouch and resting on back righ heel), no weapon
|
||||
ENUM2STRING(BOTH_CROUCH2TOSTAND1), //# going from crouch2 to stand1
|
||||
ENUM2STRING(BOTH_UNCROUCH3), //# Desann uncrouching down to Kyle (cin 9)
|
||||
ENUM2STRING(BOTH_CROUCH3), //# Desann crouching down to Kyle (cin 9)
|
||||
ENUM2STRING(BOTH_UNCROUCH3), //# Desann uncrouching down to Kyle (cin 9)
|
||||
ENUM2STRING(BOTH_CROUCH4), //# Slower version of crouch1 for cinematics
|
||||
ENUM2STRING(BOTH_UNCROUCH4), //# Slower version of uncrouch1 for cinematics
|
||||
ENUM2STRING(BOTH_GET_UP1), //# Get up from the ground), face down
|
||||
ENUM2STRING(BOTH_GET_UP2), //# Get up from the ground), face up
|
||||
|
||||
ENUM2STRING(BOTH_COCKPIT_CONSOLE1), //# work console1 while sitting in a cockpit.
|
||||
ENUM2STRING(BOTH_COCKPIT_CONSOLE2), //# work console2 while sitting in a cockpit.
|
||||
ENUM2STRING(BOTH_COCKPIT_SIT), //# sit in a cockpit.
|
||||
|
||||
ENUM2STRING(BOTH_GUNSIT1), //# sitting on an emplaced gun.
|
||||
|
||||
ENUM2STRING(BOTH_DEATH14_UNGRIP), //# Desann's end death (cin #35)
|
||||
ENUM2STRING(BOTH_DEATH14_SITUP), //# Tavion sitting up after having been thrown (cin #23)
|
||||
ENUM2STRING(BOTH_KNEES1), //# Tavion on her knees
|
||||
ENUM2STRING(BOTH_KNEES2), //# Tavion on her knees looking down
|
||||
ENUM2STRING(BOTH_KNEES2TO1), //# Transition of KNEES2 to KNEES1
|
||||
ENUM2STRING(BOTH_STRUGGLE1START), //# Kyle struggling under crate
|
||||
ENUM2STRING(BOTH_STRUGGLE1), //# Kyle struggling under crate
|
||||
ENUM2STRING(BOTH_STRUGGLE1STOP), //# Kyle struggling under crate
|
||||
|
||||
ENUM2STRING(BOTH_RUMMAGE1START), //# Kyle rummaging for crystal (cin 2)
|
||||
ENUM2STRING(BOTH_RUMMAGE1), //# Kyle rummaging for crystal (cin 2)
|
||||
|
@ -812,6 +913,9 @@ stringID_table_t animTable [MAX_ANIMATIONS+1] =
|
|||
ENUM2STRING(BOTH_WALK5), //# Tavion taunting Kyle (cin 22)
|
||||
ENUM2STRING(BOTH_WALK6), //# Slow walk for Luke (cin 12)
|
||||
ENUM2STRING(BOTH_WALK7), //# Fast walk
|
||||
ENUM2STRING(BOTH_WALK8), //# Normal walk with hands behind back (Luke in cin#12)
|
||||
ENUM2STRING(BOTH_WALK9), //# Lando walk (cin #17)
|
||||
ENUM2STRING(BOTH_WALK10), //# Lando walk (cin #17)
|
||||
ENUM2STRING(BOTH_WALKTORUN1), //# transition from walk to run
|
||||
ENUM2STRING(BOTH_RUN1), //# Full run
|
||||
ENUM2STRING(BOTH_RUN1START), //# Start into full run1
|
||||
|
@ -824,10 +928,12 @@ stringID_table_t animTable [MAX_ANIMATIONS+1] =
|
|||
ENUM2STRING(BOTH_RUNSTRAFE_RIGHT1), //# Sidestep right), should loop
|
||||
ENUM2STRING(BOTH_TURN_LEFT1), //# Turn left), should loop
|
||||
ENUM2STRING(BOTH_TURN_RIGHT1), //# Turn right), should loop
|
||||
ENUM2STRING(BOTH_TURNSTAND1), //# Turn from STAND1 position
|
||||
ENUM2STRING(BOTH_TURNSTAND2), //# Turn from STAND2 position
|
||||
ENUM2STRING(BOTH_TURNSTAND3), //# Turn from STAND3 position
|
||||
ENUM2STRING(BOTH_TURNSTAND4), //# Turn from STAND4 position
|
||||
ENUM2STRING(BOTH_TURNSTAND5), //# Turn from STAND5 position
|
||||
ENUM2STRING(BOTH_TURNCROUCH1), //# Turn from CROUCH1 position
|
||||
ENUM2STRING(BOTH_RUNAWAY1), //# Running scared
|
||||
ENUM2STRING(BOTH_SWIM1), //# Swimming
|
||||
|
||||
|
@ -898,16 +1004,7 @@ stringID_table_t animTable [MAX_ANIMATIONS+1] =
|
|||
|
||||
ENUM2STRING(BOTH_DIVE1), //# Dive!
|
||||
|
||||
ENUM2STRING(BOTH_SABERFAST_STANCE),
|
||||
ENUM2STRING(BOTH_SABERSLOW_STANCE),
|
||||
ENUM2STRING(BOTH_ENGAGETAUNT),
|
||||
ENUM2STRING(BOTH_A2_STABBACK1), //# Stab saber backward
|
||||
ENUM2STRING(BOTH_ATTACK_BACK), //# Swing around backwards and attack
|
||||
ENUM2STRING(BOTH_JUMPFLIPSLASHDOWN1),//#
|
||||
ENUM2STRING(BOTH_JUMPFLIPSTABDOWN),//#
|
||||
ENUM2STRING(BOTH_FORCELEAP2_T__B_),//#
|
||||
ENUM2STRING(BOTH_LUNGE2_B__T_),//#
|
||||
ENUM2STRING(BOTH_CROUCHATTACKBACK1),//#
|
||||
ENUM2STRING(BOTH_ARIAL_LEFT), //#
|
||||
ENUM2STRING(BOTH_ARIAL_RIGHT), //#
|
||||
ENUM2STRING(BOTH_CARTWHEEL_LEFT), //#
|
||||
|
@ -963,10 +1060,6 @@ stringID_table_t animTable [MAX_ANIMATIONS+1] =
|
|||
ENUM2STRING(BOTH_ARIAL_F1),//#
|
||||
ENUM2STRING(BOTH_BUTTERFLY_FR1),//#
|
||||
ENUM2STRING(BOTH_BUTTERFLY_FL1),//#
|
||||
ENUM2STRING(BOTH_POSE1),//#
|
||||
ENUM2STRING(BOTH_POSE2),//#
|
||||
ENUM2STRING(BOTH_POSE3),//#
|
||||
ENUM2STRING(BOTH_POSE4),//#
|
||||
|
||||
//# #sep BOTH_ MISC MOVEMENT
|
||||
ENUM2STRING(BOTH_HIT1), //# Kyle hit by crate in cin #9
|
||||
|
@ -999,12 +1092,7 @@ stringID_table_t animTable [MAX_ANIMATIONS+1] =
|
|||
|
||||
//# #sep BOTH_ SWIMMING
|
||||
ENUM2STRING(BOTH_SWIM_IDLE1), //# Swimming Idle 1
|
||||
ENUM2STRING(BOTH_SWIMFORWARDSTART), //# Swim forward start
|
||||
ENUM2STRING(BOTH_SWIMFORWARD), //# Swim forward loop
|
||||
ENUM2STRING(BOTH_SWIMFORWARDSTOP), //# Swim forward end
|
||||
ENUM2STRING(BOTH_SWIMBACKWARDSTART),//# Swim backward start
|
||||
ENUM2STRING(BOTH_SWIMBACKWARD), //# Swim backward loop
|
||||
ENUM2STRING(BOTH_SWIMBACKWARDSTOP), //# Swim backward end
|
||||
|
||||
//# #sep ENUM2STRING(BOTH_ LYING
|
||||
ENUM2STRING(BOTH_LIE_DOWN1), //# From a stand position), get down on ground), face down
|
||||
|
@ -1030,6 +1118,26 @@ stringID_table_t animTable [MAX_ANIMATIONS+1] =
|
|||
ENUM2STRING(BOTH_PROPUP1), //# Kyle getting up from having been knocked down (cin #9 end)
|
||||
ENUM2STRING(BOTH_CRAWLBACK1), //# Lying on back), crawling backwards with elbows
|
||||
ENUM2STRING(BOTH_SITWALL1), //# Sitting against a wall
|
||||
ENUM2STRING(BOTH_SLEEP1), //# laying on back-rknee up-rhand on torso
|
||||
ENUM2STRING(BOTH_SLEEP2), //# on floor-back against wall-arms crossed
|
||||
ENUM2STRING(BOTH_SLEEP3), //# Sleeping in a chair
|
||||
ENUM2STRING(BOTH_SLEEP4), //# Sleeping slumped over table
|
||||
ENUM2STRING(BOTH_SLEEP5), //# Laying on side sleeping on flat sufrace
|
||||
ENUM2STRING(BOTH_SLEEP6START), //# Kyle leaning back to sleep (cin 20)
|
||||
ENUM2STRING(BOTH_SLEEP6STOP), //# Kyle waking up and shaking his head (cin 21)
|
||||
ENUM2STRING(BOTH_SLEEP1GETUP), //# alarmed and getting up out of sleep1 pose to stand
|
||||
ENUM2STRING(BOTH_SLEEP1GETUP2), //#
|
||||
ENUM2STRING(BOTH_SLEEP2GETUP), //# alarmed and getting up out of sleep2 pose to stand
|
||||
ENUM2STRING(BOTH_SLEEP3GETUP), //# alarmed and getting up out of sleep3 pose to stand
|
||||
ENUM2STRING(BOTH_SLEEP3DEATH), //# death in chair), from sleep3 idle
|
||||
ENUM2STRING(BOTH_SLEEP3DEAD), //# death in chair), from sleep3 idle
|
||||
|
||||
ENUM2STRING(BOTH_SLEEP_IDLE1), //# rub face and nose while asleep from sleep pose 1
|
||||
ENUM2STRING(BOTH_SLEEP_IDLE2), //# shift position while asleep - stays in sleep2
|
||||
ENUM2STRING(BOTH_SLEEP_IDLE3), //# Idle anim from sleep pose 3
|
||||
ENUM2STRING(BOTH_SLEEP_IDLE4), //# Idle anim from sleep pose 4
|
||||
ENUM2STRING(BOTH_SLEEP1_NOSE), //# Scratch nose from SLEEP1 pose
|
||||
ENUM2STRING(BOTH_SLEEP2_SHIFT), //# Shift in sleep from SLEEP2 pose
|
||||
ENUM2STRING(BOTH_RESTRAINED1), //# Telsia tied to medical table
|
||||
ENUM2STRING(BOTH_RESTRAINED1POINT), //# Telsia tied to medical table pointing at Munro
|
||||
ENUM2STRING(BOTH_LIFTED1), //# Fits with ENUM2STRING(BOTH_LIFT1), lifted on shoulder
|
||||
|
@ -1060,6 +1168,7 @@ stringID_table_t animTable [MAX_ANIMATIONS+1] =
|
|||
ENUM2STRING(BOTH_MINDTRICK1), //# Use off-hand to do mind trick
|
||||
ENUM2STRING(BOTH_MINDTRICK2), //# Use off-hand to do distraction
|
||||
ENUM2STRING(BOTH_FORCELIGHTNING), //# Use off-hand to do lightning
|
||||
ENUM2STRING(BOTH_FORCELIGHTNING_START), //# Use off-hand to do lightning - start
|
||||
ENUM2STRING(BOTH_FORCELIGHTNING_HOLD), //# Use off-hand to do lightning - hold
|
||||
ENUM2STRING(BOTH_FORCELIGHTNING_RELEASE),//# Use off-hand to do lightning - release
|
||||
ENUM2STRING(BOTH_FORCEHEAL_START), //# Healing meditation pose start
|
||||
|
@ -1067,13 +1176,51 @@ stringID_table_t animTable [MAX_ANIMATIONS+1] =
|
|||
ENUM2STRING(BOTH_FORCEHEAL_QUICK), //# Healing meditation gesture
|
||||
ENUM2STRING(BOTH_SABERPULL), //# Use off-hand to do force power.
|
||||
ENUM2STRING(BOTH_FORCEGRIP1), //# force-gripping (no anim?)
|
||||
ENUM2STRING(BOTH_FORCEGRIP2), //# force-gripping (?)
|
||||
ENUM2STRING(BOTH_FORCEGRIP3), //# force-gripping (right-hand)
|
||||
ENUM2STRING(BOTH_FORCEGRIP3THROW), //# throwing while force-gripping (right hand)
|
||||
ENUM2STRING(BOTH_FORCEGRIP_HOLD), //# Use off-hand to do grip - hold
|
||||
ENUM2STRING(BOTH_FORCEGRIP_RELEASE),//# Use off-hand to do grip - release
|
||||
ENUM2STRING(BOTH_TOSS1), //# throwing to left after force gripping
|
||||
ENUM2STRING(BOTH_TOSS2), //# throwing to right after force gripping
|
||||
|
||||
ENUM2STRING(BOTH_COCKPIT_TALKR1START), //# turn head from straight forward to looking full right
|
||||
ENUM2STRING(BOTH_COCKPIT_TALKR1STARTTOMID), //# from TALKR1START to looking at hologram (cin #1)
|
||||
ENUM2STRING(BOTH_COCKPIT_TALKR1MIDTOSTART), //# from looking at hologram to TALKR1START (cin #1)
|
||||
ENUM2STRING(BOTH_COCKPIT_TALKR1STOP), //# return head to straight forward from BOTH_COCKPIT_TALKR1
|
||||
ENUM2STRING(BOTH_COCKPIT_TALKR1STOPTOMID), //# from TALKR1STOP to TALKR1MID
|
||||
ENUM2STRING(BOTH_COCKPIT_TALKR1MIDTOSTOP), //# from looking at hologram to TALKR1STOP (cin #1)
|
||||
ENUM2STRING(BOTH_COCKPIT_TALKR1), //# talk to right side
|
||||
|
||||
ENUM2STRING(BOTH_COCKPIT_TALKL1START), //# turn head from straight forward to looking full left
|
||||
ENUM2STRING(BOTH_COCKPIT_TALKL1STARTTOMID), //# from TALKL1START to looking at hologram (cin #1)
|
||||
ENUM2STRING(BOTH_COCKPIT_TALKL1MIDTOSTART), //# from looking at hologram to TALKL1START (cin #1)
|
||||
ENUM2STRING(BOTH_COCKPIT_TALKL1STOP), //# return head to straight forward from BOTH_COCKPIT_TALKL1
|
||||
ENUM2STRING(BOTH_COCKPIT_TALKL1STOPTOMID), //# from TALKL1STOP to TALKL1MID
|
||||
ENUM2STRING(BOTH_COCKPIT_TALKL1MIDTOSTOP), //# from looking at hologram to TALKL1STOP (cin #1)
|
||||
ENUM2STRING(BOTH_COCKPIT_TALKL1), //# talk to left side
|
||||
|
||||
ENUM2STRING(BOTH_COCKPIT_CONSOLE1), //# type at controls
|
||||
ENUM2STRING(BOTH_COCKPIT_CONSOLE2), //# type at controls
|
||||
ENUM2STRING(BOTH_COCKPIT_CONSOLE2_PARTIAL), //# last part of console2 anim (cin #1) used by Jan
|
||||
|
||||
ENUM2STRING(BOTH_COCKPIT_HEADNOD), //# nod head yes while sitting
|
||||
ENUM2STRING(BOTH_COCKPIT_HEADSHAKE), //# shake head no while sitting
|
||||
|
||||
ENUM2STRING(BOTH_COCKPIT_HEADTILTLSTART), //# start tilt head left while sitting
|
||||
ENUM2STRING(BOTH_COCKPIT_HEADTILTLSTOP), //# stop tilt head left while sitting
|
||||
ENUM2STRING(BOTH_COCKPIT_HEADTILTRSTART), //# start tilt head right while sitting
|
||||
ENUM2STRING(BOTH_COCKPIT_HEADTILTRSTOP), //# stop tilt head right while sitting
|
||||
|
||||
ENUM2STRING(BOTH_COCKPIT_TALKGESTURE7START), //# Lando's supporting hand to Kyle (cin #21)
|
||||
ENUM2STRING(BOTH_COCKPIT_TALKGESTURE7STOP), //# Lando's supporting hand away from Kyle (cin #21)
|
||||
ENUM2STRING(BOTH_COCKPIT_TALKGESTURE8START), //# Hand to Lando's chin (cin #21)
|
||||
ENUM2STRING(BOTH_COCKPIT_TALKGESTURE8STOP), //# hand away from Lando's chin *cin #21)
|
||||
ENUM2STRING(BOTH_COCKPIT_TALKGESTURE11START), //#
|
||||
ENUM2STRING(BOTH_COCKPIT_TALKGESTURE11STOP), //#
|
||||
|
||||
ENUM2STRING(BOTH_COCKPIT_SLEEP6START), //#
|
||||
ENUM2STRING(BOTH_COCKPIT_SLEEP6STOP), //#
|
||||
|
||||
//=================================================
|
||||
//ANIMS IN WHICH ONLY THE UPPER OBJECTS ARE IN MD3
|
||||
//=================================================
|
||||
|
@ -1114,22 +1261,6 @@ stringID_table_t animTable [MAX_ANIMATIONS+1] =
|
|||
//# #sep ENUM2STRING(TORSO_ USING NON-WEAPON OBJECTS
|
||||
|
||||
//# #sep ENUM2STRING(TORSO_ MISC
|
||||
ENUM2STRING(TORSO_TALKR1START), //# begin turning head for ENUM2STRING(BOTH_ENUM2STRING(TORSO_TALKR
|
||||
ENUM2STRING(TORSO_TALKR1HOLD), //# non-looping version of talk to right side
|
||||
ENUM2STRING(TORSO_TALKR1STOP), //# return head to straight forward from ENUM2STRING(BOTH_ENUM2STRING(TORSO_TALKL
|
||||
ENUM2STRING(TORSO_TALKR1), //# talk to right side
|
||||
ENUM2STRING(TORSO_TALKL1START), //# begin turning head for ENUM2STRING(BOTH_ENUM2STRING(TORSO_TALKL
|
||||
ENUM2STRING(TORSO_TALKL1HOLD), //# non-looping version of talk to left side
|
||||
ENUM2STRING(TORSO_TALKL1STOP), //# return head to straight forward from ENUM2STRING(BOTH_ENUM2STRING(TORSO_TALKL
|
||||
ENUM2STRING(TORSO_TALKL1), //# talk to left side
|
||||
ENUM2STRING(TORSO_LOOKL1), //# looking left
|
||||
ENUM2STRING(TORSO_LOOKR1), //# looking right
|
||||
ENUM2STRING(TORSO_LOOKR2START), //# turn not so far as TALKR1
|
||||
ENUM2STRING(TORSO_LOOKR2STOP), //# turn not so far as TALKR1
|
||||
ENUM2STRING(TORSO_LOOKR2), //# looking right - not so far as LOOKR1
|
||||
ENUM2STRING(TORSO_LOOKL2START), //# turn not so far as TALKL1
|
||||
ENUM2STRING(TORSO_LOOKL2STOP), //# turn not so far as TALKL1
|
||||
ENUM2STRING(TORSO_LOOKL2), //# looking right - not so far as LOOKL1
|
||||
ENUM2STRING(TORSO_HANDGESTURE1), //# gestures to left one hand
|
||||
ENUM2STRING(TORSO_HANDGESTURE2), //# gestures to right one hand
|
||||
ENUM2STRING(TORSO_HANDGESTURE3), //# gestures to the left both hands
|
||||
|
|
|
@ -30,24 +30,24 @@ char teamChat2[256];
|
|||
|
||||
char *showPowersName[] =
|
||||
{
|
||||
"Heal",//FP_HEAL
|
||||
"Jump",//FP_LEVITATION
|
||||
"Speed",//FP_SPEED
|
||||
"Push",//FP_PUSH
|
||||
"Pull",//FP_PULL
|
||||
"Mind Trick",//FP_TELEPTAHY
|
||||
"Grip",//FP_GRIP
|
||||
"Lightning",//FP_LIGHTNING
|
||||
"Dark Rage",//FP_RAGE
|
||||
"Protect",//FP_PROTECT
|
||||
"Absorb",//FP_ABSORB
|
||||
"Team Heal",//FP_TEAM_HEAL
|
||||
"Team Replenish",//FP_TEAM_FORCE
|
||||
"Drain",//FP_DRAIN
|
||||
"Seeing",//FP_SEE
|
||||
"Saber Attack",//FP_SABERATTACK
|
||||
"Saber Defend",//FP_SABERDEFEND
|
||||
"Saber Throw",//FP_SABERTHROW
|
||||
"HEAL2",//FP_HEAL
|
||||
"JUMP2",//FP_LEVITATION
|
||||
"SPEED2",//FP_SPEED
|
||||
"PUSH2",//FP_PUSH
|
||||
"PULL2",//FP_PULL
|
||||
"MINDTRICK2",//FP_TELEPTAHY
|
||||
"GRIP2",//FP_GRIP
|
||||
"LIGHTNING2",//FP_LIGHTNING
|
||||
"DARK_RAGE2",//FP_RAGE
|
||||
"PROTECT2",//FP_PROTECT
|
||||
"ABSORB2",//FP_ABSORB
|
||||
"TEAM_HEAL2",//FP_TEAM_HEAL
|
||||
"TEAM_REPLENISH2",//FP_TEAM_FORCE
|
||||
"DRAIN2",//FP_DRAIN
|
||||
"SEEING2",//FP_SEE
|
||||
"SABER_OFFENSE2",//FP_SABERATTACK
|
||||
"SABER_DEFENSE2",//FP_SABERDEFEND
|
||||
"SABER_THROW2",//FP_SABERTHROW
|
||||
NULL
|
||||
};
|
||||
|
||||
|
@ -1134,7 +1134,12 @@ void CG_DrawHUD(centity_t *cent)
|
|||
}
|
||||
|
||||
//scoreStr = va("Score: %i", cgs.clientinfo[cg.snap->ps.clientNum].score);
|
||||
if (0 && cgs.gametype < GT_TEAM )
|
||||
if ( cgs.gametype == GT_TOURNAMENT )
|
||||
{//A duel that requires more than one kill to knock the current enemy back to the queue
|
||||
//show current kills out of how many needed
|
||||
scoreStr = va("Score: %i/%i", cg.snap->ps.persistant[PERS_SCORE], cgs.fraglimit);
|
||||
}
|
||||
else if (0 && cgs.gametype < GT_TEAM )
|
||||
{ // This is a teamless mode, draw the score bias.
|
||||
scoreBias = cg.snap->ps.persistant[PERS_SCORE] - cgs.scores1;
|
||||
if (scoreBias == 0)
|
||||
|
@ -1358,7 +1363,7 @@ void CG_DrawForceSelect( void )
|
|||
|
||||
if ( showPowersName[cg.forceSelect] )
|
||||
{
|
||||
UI_DrawProportionalString(320, y + 30, showPowersName[cg.forceSelect], UI_CENTER | UI_SMALLFONT, colorTable[CT_ICON_BLUE]);
|
||||
UI_DrawProportionalString(320, y + 30, CG_GetStripEdString("INGAME", showPowersName[cg.forceSelect]), UI_CENTER | UI_SMALLFONT, colorTable[CT_ICON_BLUE]);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1664,7 +1669,7 @@ static float CG_DrawMiniScoreboard ( float y )
|
|||
Q_strcat ( temp, MAX_QPATH, " 2nd: " );
|
||||
Q_strcat ( temp, MAX_QPATH, cgs.scores2==SCORE_NOT_PRESENT?"-":(va("%i",cgs.scores2)) );
|
||||
|
||||
CG_Text_Paint( 630 - CG_Text_Width ( temp, 0.75f, FONT_SMALL ), y, 0.75f, colorWhite, temp, 0, 0, ITEM_TEXTSTYLE_SHADOWEDMORE, FONT_MEDIUM );
|
||||
CG_Text_Paint( 630 - CG_Text_Width ( temp, 0.7f, FONT_SMALL ), y, 0.7f, colorWhite, temp, 0, 0, ITEM_TEXTSTYLE_SHADOWEDMORE, FONT_MEDIUM );
|
||||
y += 15;
|
||||
*/
|
||||
//rww - no longer doing this. Since the attacker now shows who is first, we print the score there.
|
||||
|
@ -1698,13 +1703,16 @@ static float CG_DrawEnemyInfo ( float y )
|
|||
|
||||
if ( cgs.gametype == GT_JEDIMASTER )
|
||||
{
|
||||
title = "Jedi Master";
|
||||
//title = "Jedi Master";
|
||||
title = CG_GetStripEdString("INGAMETEXT", "MASTERY7");
|
||||
clientNum = cgs.jediMaster;
|
||||
|
||||
if ( clientNum < 0 )
|
||||
{
|
||||
//return y;
|
||||
title = "Get Saber!";
|
||||
// title = "Get Saber!";
|
||||
title = CG_GetStripEdString("INGAMETEXT", "GET_SABER");
|
||||
|
||||
|
||||
size = ICON_SIZE * 1.25;
|
||||
y += 5;
|
||||
|
@ -1714,23 +1722,25 @@ static float CG_DrawEnemyInfo ( float y )
|
|||
y += size;
|
||||
|
||||
/*
|
||||
CG_Text_Paint( 630 - CG_Text_Width ( ci->name, 0.75f, FONT_MEDIUM ), y, 0.75f, colorWhite, ci->name, 0, 0, 0, FONT_MEDIUM );
|
||||
CG_Text_Paint( 630 - CG_Text_Width ( ci->name, 0.7f, FONT_MEDIUM ), y, 0.7f, colorWhite, ci->name, 0, 0, 0, FONT_MEDIUM );
|
||||
y += 15;
|
||||
*/
|
||||
|
||||
CG_Text_Paint( 630 - CG_Text_Width ( title, 0.75f, FONT_MEDIUM ), y, 0.75f, colorWhite, title, 0, 0, 0, FONT_MEDIUM );
|
||||
CG_Text_Paint( 630 - CG_Text_Width ( title, 0.7f, FONT_MEDIUM ), y, 0.7f, colorWhite, title, 0, 0, 0, FONT_MEDIUM );
|
||||
|
||||
return y + BIGCHAR_HEIGHT + 2;
|
||||
}
|
||||
}
|
||||
else if ( cg.snap->ps.duelInProgress )
|
||||
{
|
||||
title = "Dueling";
|
||||
// title = "Dueling";
|
||||
title = CG_GetStripEdString("INGAMETEXT", "DUELING");
|
||||
clientNum = cg.snap->ps.duelIndex;
|
||||
}
|
||||
else if ( cgs.gametype == GT_TOURNAMENT && cgs.clientinfo[cg.snap->ps.clientNum].team != TEAM_SPECTATOR)
|
||||
{
|
||||
title = "Dueling";
|
||||
// title = "Dueling";
|
||||
title = CG_GetStripEdString("INGAMETEXT", "DUELING");
|
||||
if (cg.snap->ps.clientNum == cgs.duelist1)
|
||||
{
|
||||
clientNum = cgs.duelist2;
|
||||
|
@ -1785,7 +1795,7 @@ static float CG_DrawEnemyInfo ( float y )
|
|||
|
||||
ci = &cgs.clientinfo[ clientNum ];
|
||||
|
||||
if (!ci || !ci->modelIcon)
|
||||
if ( !ci )
|
||||
{
|
||||
return y;
|
||||
}
|
||||
|
@ -1793,14 +1803,25 @@ static float CG_DrawEnemyInfo ( float y )
|
|||
size = ICON_SIZE * 1.25;
|
||||
y += 5;
|
||||
|
||||
if ( ci->modelIcon )
|
||||
{
|
||||
CG_DrawPic( 640 - size - 5, y, size, size, ci->modelIcon );
|
||||
}
|
||||
|
||||
y += size;
|
||||
|
||||
CG_Text_Paint( 630 - CG_Text_Width ( ci->name, 0.75f, FONT_MEDIUM ), y, 0.75f, colorWhite, ci->name, 0, 0, 0, FONT_MEDIUM );
|
||||
CG_Text_Paint( 630 - CG_Text_Width ( ci->name, 0.7f, FONT_MEDIUM ), y, 0.7f, colorWhite, ci->name, 0, 0, 0, FONT_MEDIUM );
|
||||
|
||||
y += 15;
|
||||
CG_Text_Paint( 630 - CG_Text_Width ( title, 0.75f, FONT_MEDIUM ), y, 0.75f, colorWhite, title, 0, 0, 0, FONT_MEDIUM );
|
||||
CG_Text_Paint( 630 - CG_Text_Width ( title, 0.7f, FONT_MEDIUM ), y, 0.7f, colorWhite, title, 0, 0, 0, FONT_MEDIUM );
|
||||
|
||||
if ( cgs.gametype == GT_TOURNAMENT && cgs.clientinfo[cg.snap->ps.clientNum].team != TEAM_SPECTATOR)
|
||||
{//also print their score
|
||||
char text[1024];
|
||||
y += 15;
|
||||
Com_sprintf(text, sizeof(text), "%i/%i", cgs.clientinfo[clientNum].score, cgs.fraglimit );
|
||||
CG_Text_Paint( 630 - CG_Text_Width ( text, 0.7f, FONT_MEDIUM ), y, 0.7f, colorWhite, text, 0, 0, 0, FONT_MEDIUM );
|
||||
}
|
||||
|
||||
return y + BIGCHAR_HEIGHT + 2;
|
||||
}
|
||||
|
@ -2664,6 +2685,12 @@ static void CG_DrawCrosshair( vec3_t worldPoint, int chEntValid ) {
|
|||
ecolor[1] = 0.0;//G
|
||||
ecolor[2] = 0.0;//B
|
||||
}
|
||||
else if (crossEnt->currentState.eType == ET_GRAPPLE)
|
||||
{
|
||||
ecolor[0] = 1.0;//R
|
||||
ecolor[1] = 0.0;//G
|
||||
ecolor[2] = 0.0;//B
|
||||
}
|
||||
}
|
||||
|
||||
ecolor[3] = 1.0;
|
||||
|
@ -3266,7 +3293,7 @@ CG_DrawSpectator
|
|||
static void CG_DrawSpectator(void)
|
||||
{
|
||||
const char* s;
|
||||
s = "SPECTATOR";
|
||||
s = CG_GetStripEdString("INGAMETEXT", "SPECTATOR");
|
||||
if (cgs.gametype == GT_TOURNAMENT &&
|
||||
cgs.duelist1 != -1 &&
|
||||
cgs.duelist2 != -1)
|
||||
|
@ -3278,13 +3305,20 @@ static void CG_DrawSpectator(void)
|
|||
CG_Text_Paint ( 320 - CG_Text_Width ( text, 1.0f, 3 ) / 2, 420, 1.0f, colorWhite, text, 0, 0, 0, 3 );
|
||||
|
||||
|
||||
if (cgs.clientinfo[cgs.duelist1].modelIcon &&
|
||||
cgs.clientinfo[cgs.duelist2].modelIcon)
|
||||
{
|
||||
trap_R_SetColor( colorTable[CT_WHITE] );
|
||||
if ( cgs.clientinfo[cgs.duelist1].modelIcon )
|
||||
{
|
||||
CG_DrawPic( 10, SCREEN_HEIGHT-(size*1.5), size, size, cgs.clientinfo[cgs.duelist1].modelIcon );
|
||||
}
|
||||
if ( cgs.clientinfo[cgs.duelist2].modelIcon )
|
||||
{
|
||||
CG_DrawPic( SCREEN_WIDTH-size-10, SCREEN_HEIGHT-(size*1.5), size, size, cgs.clientinfo[cgs.duelist2].modelIcon );
|
||||
}
|
||||
Com_sprintf(text, sizeof(text), "%i/%i", cgs.clientinfo[cgs.duelist1].score, cgs.fraglimit );
|
||||
CG_Text_Paint( 42 - CG_Text_Width( text, 1.0f, 2 ) / 2, SCREEN_HEIGHT-(size*1.5) + 64, 1.0f, colorWhite, text, 0, 0, 0, 2 );
|
||||
|
||||
Com_sprintf(text, sizeof(text), "%i/%i", cgs.clientinfo[cgs.duelist2].score, cgs.fraglimit );
|
||||
CG_Text_Paint( SCREEN_WIDTH-size+22 - CG_Text_Width( text, 1.0f, 2 ) / 2, SCREEN_HEIGHT-(size*1.5) + 64, 1.0f, colorWhite, text, 0, 0, 0, 2 );
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -3293,7 +3327,7 @@ static void CG_DrawSpectator(void)
|
|||
|
||||
if ( cgs.gametype == GT_TOURNAMENT )
|
||||
{
|
||||
s = "waiting to play";
|
||||
s = CG_GetStripEdString("INGAMETEXT", "WAITING_TO_PLAY"); // "waiting to play";
|
||||
CG_Text_Paint ( 320 - CG_Text_Width ( s, 1.0f, 3 ) / 2, 440, 1.0f, colorWhite, s, 0, 0, 0, 3 );
|
||||
}
|
||||
else //if ( cgs.gametype >= GT_TEAM )
|
||||
|
@ -3509,7 +3543,8 @@ static qboolean CG_DrawFollow( void )
|
|||
return qfalse;
|
||||
}
|
||||
|
||||
s = "following";
|
||||
// s = "following";
|
||||
s = CG_GetStripEdString("INGAMETEXT", "FOLLOWING");
|
||||
CG_Text_Paint ( 320 - CG_Text_Width ( s, 1.0f, FONT_MEDIUM ) / 2, 60, 1.0f, colorWhite, s, 0, 0, 0, FONT_MEDIUM );
|
||||
|
||||
s = cgs.clientinfo[ cg.snap->ps.clientNum ].name;
|
||||
|
@ -3601,7 +3636,8 @@ static void CG_DrawWarmup( void ) {
|
|||
}
|
||||
|
||||
if ( sec < 0 ) {
|
||||
s = "Waiting for players";
|
||||
// s = "Waiting for players";
|
||||
s = CG_GetStripEdString("INGAMETEXT", "WAITING_FOR_PLAYERS");
|
||||
w = CG_DrawStrlen( s ) * BIGCHAR_WIDTH;
|
||||
CG_DrawBigString(320 - w / 2, 24, s, 1.0F);
|
||||
cg.warmupCount = 0;
|
||||
|
@ -3654,7 +3690,8 @@ static void CG_DrawWarmup( void ) {
|
|||
cg.warmup = 0;
|
||||
sec = 0;
|
||||
}
|
||||
s = va( "Starts in: %i", sec + 1 );
|
||||
// s = va( "Starts in: %i", sec + 1 );
|
||||
s = va( "%s: %i",CG_GetStripEdString("INGAMETEXT", "STARTS_IN"), sec + 1 );
|
||||
if ( sec != cg.warmupCount ) {
|
||||
cg.warmupCount = sec;
|
||||
switch ( sec ) {
|
||||
|
@ -4254,6 +4291,7 @@ static void CG_Draw2D( void ) {
|
|||
CG_DrawSpectator();
|
||||
CG_DrawCrosshair(NULL, 0);
|
||||
CG_DrawCrosshairNames();
|
||||
CG_SaberClashFlare();
|
||||
} else {
|
||||
// don't draw any status if dead or the scoreboard is being explicitly shown
|
||||
if ( !cg.showScores && cg.snap->ps.stats[STAT_HEALTH] > 0 ) {
|
||||
|
|
|
@ -726,15 +726,69 @@ Throws specified debris from within a given bounding box in the world
|
|||
#define DEBRIS_SPECIALCASE_CHUNKS -2
|
||||
#define DEBRIS_SPECIALCASE_WOOD -3
|
||||
#define DEBRIS_SPECIALCASE_GLASS -4
|
||||
|
||||
#define NUM_DEBRIS_MODELS_GLASS 8
|
||||
#define NUM_DEBRIS_MODELS_WOOD 8
|
||||
#define NUM_DEBRIS_MODELS_CHUNKS 3
|
||||
#define NUM_DEBRIS_MODELS_ROCKS 4 //12
|
||||
|
||||
int dbModels_Glass[NUM_DEBRIS_MODELS_GLASS];
|
||||
int dbModels_Wood[NUM_DEBRIS_MODELS_WOOD];
|
||||
int dbModels_Chunks[NUM_DEBRIS_MODELS_CHUNKS];
|
||||
int dbModels_Rocks[NUM_DEBRIS_MODELS_ROCKS];
|
||||
|
||||
void CG_CreateDebris(int entnum, vec3_t org, vec3_t mins, vec3_t maxs, int debrissound, int debrismodel)
|
||||
{
|
||||
vec3_t velocity, a, shardorg, dif, difx;
|
||||
float windowmass;
|
||||
float shardsthrow = 0;
|
||||
char chunkname[256];
|
||||
int rfact = 0;
|
||||
int omodel = debrismodel;
|
||||
|
||||
if (omodel == DEBRIS_SPECIALCASE_GLASS && !dbModels_Glass[0])
|
||||
{ //glass no longer exists, using it for metal.
|
||||
dbModels_Glass[0] = trap_R_RegisterModel("models/chunks/metal/metal1_1.md3");
|
||||
dbModels_Glass[1] = trap_R_RegisterModel("models/chunks/metal/metal1_2.md3");
|
||||
dbModels_Glass[2] = trap_R_RegisterModel("models/chunks/metal/metal1_3.md3");
|
||||
dbModels_Glass[3] = trap_R_RegisterModel("models/chunks/metal/metal1_4.md3");
|
||||
dbModels_Glass[4] = trap_R_RegisterModel("models/chunks/metal/metal2_1.md3");
|
||||
dbModels_Glass[5] = trap_R_RegisterModel("models/chunks/metal/metal2_2.md3");
|
||||
dbModels_Glass[6] = trap_R_RegisterModel("models/chunks/metal/metal2_3.md3");
|
||||
dbModels_Glass[7] = trap_R_RegisterModel("models/chunks/metal/metal2_4.md3");
|
||||
}
|
||||
if (omodel == DEBRIS_SPECIALCASE_WOOD && !dbModels_Wood[0])
|
||||
{
|
||||
dbModels_Wood[0] = trap_R_RegisterModel("models/chunks/crate/crate1_1.md3");
|
||||
dbModels_Wood[1] = trap_R_RegisterModel("models/chunks/crate/crate1_2.md3");
|
||||
dbModels_Wood[2] = trap_R_RegisterModel("models/chunks/crate/crate1_3.md3");
|
||||
dbModels_Wood[3] = trap_R_RegisterModel("models/chunks/crate/crate1_4.md3");
|
||||
dbModels_Wood[4] = trap_R_RegisterModel("models/chunks/crate/crate2_1.md3");
|
||||
dbModels_Wood[5] = trap_R_RegisterModel("models/chunks/crate/crate2_2.md3");
|
||||
dbModels_Wood[6] = trap_R_RegisterModel("models/chunks/crate/crate2_3.md3");
|
||||
dbModels_Wood[7] = trap_R_RegisterModel("models/chunks/crate/crate2_4.md3");
|
||||
}
|
||||
if (omodel == DEBRIS_SPECIALCASE_CHUNKS && !dbModels_Chunks[0])
|
||||
{
|
||||
dbModels_Chunks[0] = trap_R_RegisterModel("models/chunks/generic/chunks_1.md3");
|
||||
dbModels_Chunks[1] = trap_R_RegisterModel("models/chunks/generic/chunks_2.md3");
|
||||
}
|
||||
if (omodel == DEBRIS_SPECIALCASE_ROCK && !dbModels_Rocks[0])
|
||||
{
|
||||
dbModels_Rocks[0] = trap_R_RegisterModel("models/chunks/rock/rock1_1.md3");
|
||||
dbModels_Rocks[1] = trap_R_RegisterModel("models/chunks/rock/rock1_2.md3");
|
||||
dbModels_Rocks[2] = trap_R_RegisterModel("models/chunks/rock/rock1_3.md3");
|
||||
dbModels_Rocks[3] = trap_R_RegisterModel("models/chunks/rock/rock1_4.md3");
|
||||
/*
|
||||
dbModels_Rocks[4] = trap_R_RegisterModel("models/chunks/rock/rock2_1.md3");
|
||||
dbModels_Rocks[5] = trap_R_RegisterModel("models/chunks/rock/rock2_2.md3");
|
||||
dbModels_Rocks[6] = trap_R_RegisterModel("models/chunks/rock/rock2_3.md3");
|
||||
dbModels_Rocks[7] = trap_R_RegisterModel("models/chunks/rock/rock2_4.md3");
|
||||
dbModels_Rocks[8] = trap_R_RegisterModel("models/chunks/rock/rock3_1.md3");
|
||||
dbModels_Rocks[9] = trap_R_RegisterModel("models/chunks/rock/rock3_2.md3");
|
||||
dbModels_Rocks[10] = trap_R_RegisterModel("models/chunks/rock/rock3_3.md3");
|
||||
dbModels_Rocks[11] = trap_R_RegisterModel("models/chunks/rock/rock3_4.md3");
|
||||
*/
|
||||
}
|
||||
|
||||
VectorSubtract(maxs, mins, a);
|
||||
|
||||
windowmass = VectorLength(a); //should give us some idea of how big the chunk of glass is
|
||||
|
@ -747,35 +801,19 @@ void CG_CreateDebris(int entnum, vec3_t org, vec3_t mins, vec3_t maxs, int debri
|
|||
|
||||
if (omodel == DEBRIS_SPECIALCASE_GLASS)
|
||||
{
|
||||
Com_sprintf(chunkname, sizeof(chunkname), "models/chunks/glass/glchunks_%i.md3", Q_irand(1, 6));
|
||||
debrismodel = trap_R_RegisterModel(chunkname);
|
||||
debrismodel = dbModels_Glass[Q_irand(0, NUM_DEBRIS_MODELS_GLASS-1)];
|
||||
}
|
||||
else if (omodel == DEBRIS_SPECIALCASE_WOOD)
|
||||
{
|
||||
Com_sprintf(chunkname, sizeof(chunkname), "models/chunks/generic/wood_%i.md3", Q_irand(1, 3));
|
||||
debrismodel = trap_R_RegisterModel(chunkname);
|
||||
debrismodel = dbModels_Wood[Q_irand(0, NUM_DEBRIS_MODELS_WOOD-1)];
|
||||
}
|
||||
else if (omodel == DEBRIS_SPECIALCASE_CHUNKS)
|
||||
{
|
||||
Com_sprintf(chunkname, sizeof(chunkname), "models/chunks/generic/chunks_%i.md3", Q_irand(1, 6));
|
||||
debrismodel = trap_R_RegisterModel(chunkname);
|
||||
debrismodel = dbModels_Chunks[Q_irand(0, NUM_DEBRIS_MODELS_CHUNKS-1)];
|
||||
}
|
||||
else if (omodel == DEBRIS_SPECIALCASE_ROCK)
|
||||
{
|
||||
rfact = Q_irand(1, 3);
|
||||
if (rfact == 1)
|
||||
{
|
||||
Com_sprintf(chunkname, sizeof(chunkname), "models/chunks/rock/rock_small.md3");
|
||||
}
|
||||
else if (rfact == 2)
|
||||
{
|
||||
Com_sprintf(chunkname, sizeof(chunkname), "models/chunks/rock/rock_med.md3");
|
||||
}
|
||||
else
|
||||
{
|
||||
Com_sprintf(chunkname, sizeof(chunkname), "models/chunks/rock/rock_big.md3");
|
||||
}
|
||||
debrismodel = trap_R_RegisterModel(chunkname);
|
||||
debrismodel = dbModels_Rocks[Q_irand(0, NUM_DEBRIS_MODELS_ROCKS-1)];
|
||||
}
|
||||
|
||||
VectorCopy(org, shardorg);
|
||||
|
@ -1158,168 +1196,3 @@ void CG_LaunchGib( vec3_t origin, vec3_t velocity, qhandle_t hModel ) {
|
|||
le->leBounceSoundType = LEBS_BLOOD;
|
||||
le->leMarkType = LEMT_BLOOD;
|
||||
}
|
||||
|
||||
/*
|
||||
===================
|
||||
CG_GibPlayer
|
||||
|
||||
Generated a bunch of gibs launching out from the bodies location
|
||||
===================
|
||||
*/
|
||||
#define GIB_VELOCITY 250
|
||||
#define GIB_JUMP 250
|
||||
void CG_GibPlayer( vec3_t playerOrigin ) {
|
||||
vec3_t origin, velocity;
|
||||
|
||||
if ( !cg_blood.integer ) {
|
||||
return;
|
||||
}
|
||||
|
||||
VectorCopy( playerOrigin, origin );
|
||||
velocity[0] = crandom()*GIB_VELOCITY;
|
||||
velocity[1] = crandom()*GIB_VELOCITY;
|
||||
velocity[2] = GIB_JUMP + crandom()*GIB_VELOCITY;
|
||||
if ( rand() & 1 ) {
|
||||
// CG_LaunchGib( origin, velocity, cgs.media.gibSkull );
|
||||
} else {
|
||||
// CG_LaunchGib( origin, velocity, cgs.media.gibBrain );
|
||||
}
|
||||
|
||||
// allow gibs to be turned off for speed
|
||||
if ( !cg_gibs.integer ) {
|
||||
return;
|
||||
}
|
||||
|
||||
VectorCopy( playerOrigin, origin );
|
||||
velocity[0] = crandom()*GIB_VELOCITY;
|
||||
velocity[1] = crandom()*GIB_VELOCITY;
|
||||
velocity[2] = GIB_JUMP + crandom()*GIB_VELOCITY;
|
||||
// CG_LaunchGib( origin, velocity, cgs.media.gibAbdomen );
|
||||
|
||||
VectorCopy( playerOrigin, origin );
|
||||
velocity[0] = crandom()*GIB_VELOCITY;
|
||||
velocity[1] = crandom()*GIB_VELOCITY;
|
||||
velocity[2] = GIB_JUMP + crandom()*GIB_VELOCITY;
|
||||
// CG_LaunchGib( origin, velocity, cgs.media.gibArm );
|
||||
|
||||
VectorCopy( playerOrigin, origin );
|
||||
velocity[0] = crandom()*GIB_VELOCITY;
|
||||
velocity[1] = crandom()*GIB_VELOCITY;
|
||||
velocity[2] = GIB_JUMP + crandom()*GIB_VELOCITY;
|
||||
// CG_LaunchGib( origin, velocity, cgs.media.gibChest );
|
||||
|
||||
VectorCopy( playerOrigin, origin );
|
||||
velocity[0] = crandom()*GIB_VELOCITY;
|
||||
velocity[1] = crandom()*GIB_VELOCITY;
|
||||
velocity[2] = GIB_JUMP + crandom()*GIB_VELOCITY;
|
||||
// CG_LaunchGib( origin, velocity, cgs.media.gibFist );
|
||||
|
||||
VectorCopy( playerOrigin, origin );
|
||||
velocity[0] = crandom()*GIB_VELOCITY;
|
||||
velocity[1] = crandom()*GIB_VELOCITY;
|
||||
velocity[2] = GIB_JUMP + crandom()*GIB_VELOCITY;
|
||||
// CG_LaunchGib( origin, velocity, cgs.media.gibFoot );
|
||||
|
||||
VectorCopy( playerOrigin, origin );
|
||||
velocity[0] = crandom()*GIB_VELOCITY;
|
||||
velocity[1] = crandom()*GIB_VELOCITY;
|
||||
velocity[2] = GIB_JUMP + crandom()*GIB_VELOCITY;
|
||||
// CG_LaunchGib( origin, velocity, cgs.media.gibForearm );
|
||||
|
||||
VectorCopy( playerOrigin, origin );
|
||||
velocity[0] = crandom()*GIB_VELOCITY;
|
||||
velocity[1] = crandom()*GIB_VELOCITY;
|
||||
velocity[2] = GIB_JUMP + crandom()*GIB_VELOCITY;
|
||||
// CG_LaunchGib( origin, velocity, cgs.media.gibIntestine );
|
||||
|
||||
VectorCopy( playerOrigin, origin );
|
||||
velocity[0] = crandom()*GIB_VELOCITY;
|
||||
velocity[1] = crandom()*GIB_VELOCITY;
|
||||
velocity[2] = GIB_JUMP + crandom()*GIB_VELOCITY;
|
||||
// CG_LaunchGib( origin, velocity, cgs.media.gibLeg );
|
||||
|
||||
VectorCopy( playerOrigin, origin );
|
||||
velocity[0] = crandom()*GIB_VELOCITY;
|
||||
velocity[1] = crandom()*GIB_VELOCITY;
|
||||
velocity[2] = GIB_JUMP + crandom()*GIB_VELOCITY;
|
||||
// CG_LaunchGib( origin, velocity, cgs.media.gibLeg );
|
||||
}
|
||||
|
||||
/*
|
||||
==================
|
||||
CG_LaunchGib
|
||||
==================
|
||||
*/
|
||||
void CG_LaunchExplode( vec3_t origin, vec3_t velocity, qhandle_t hModel ) {
|
||||
localEntity_t *le;
|
||||
refEntity_t *re;
|
||||
|
||||
le = CG_AllocLocalEntity();
|
||||
re = &le->refEntity;
|
||||
|
||||
le->leType = LE_FRAGMENT;
|
||||
le->startTime = cg.time;
|
||||
le->endTime = le->startTime + 10000 + random() * 6000;
|
||||
|
||||
VectorCopy( origin, re->origin );
|
||||
AxisCopy( axisDefault, re->axis );
|
||||
re->hModel = hModel;
|
||||
|
||||
le->pos.trType = TR_GRAVITY;
|
||||
VectorCopy( origin, le->pos.trBase );
|
||||
VectorCopy( velocity, le->pos.trDelta );
|
||||
le->pos.trTime = cg.time;
|
||||
|
||||
le->bounceFactor = 0.1f;
|
||||
|
||||
le->leBounceSoundType = LEBS_BRASS;
|
||||
le->leMarkType = LEMT_NONE;
|
||||
}
|
||||
|
||||
#define EXP_VELOCITY 100
|
||||
#define EXP_JUMP 150
|
||||
/*
|
||||
===================
|
||||
CG_GibPlayer
|
||||
|
||||
Generated a bunch of gibs launching out from the bodies location
|
||||
===================
|
||||
*/
|
||||
void CG_BigExplode( vec3_t playerOrigin ) {
|
||||
vec3_t origin, velocity;
|
||||
|
||||
if ( !cg_blood.integer ) {
|
||||
return;
|
||||
}
|
||||
|
||||
VectorCopy( playerOrigin, origin );
|
||||
velocity[0] = crandom()*EXP_VELOCITY;
|
||||
velocity[1] = crandom()*EXP_VELOCITY;
|
||||
velocity[2] = EXP_JUMP + crandom()*EXP_VELOCITY;
|
||||
// CG_LaunchExplode( origin, velocity, cgs.media.smoke2 );
|
||||
|
||||
VectorCopy( playerOrigin, origin );
|
||||
velocity[0] = crandom()*EXP_VELOCITY;
|
||||
velocity[1] = crandom()*EXP_VELOCITY;
|
||||
velocity[2] = EXP_JUMP + crandom()*EXP_VELOCITY;
|
||||
// CG_LaunchExplode( origin, velocity, cgs.media.smoke2 );
|
||||
|
||||
VectorCopy( playerOrigin, origin );
|
||||
velocity[0] = crandom()*EXP_VELOCITY*1.5;
|
||||
velocity[1] = crandom()*EXP_VELOCITY*1.5;
|
||||
velocity[2] = EXP_JUMP + crandom()*EXP_VELOCITY;
|
||||
// CG_LaunchExplode( origin, velocity, cgs.media.smoke2 );
|
||||
|
||||
VectorCopy( playerOrigin, origin );
|
||||
velocity[0] = crandom()*EXP_VELOCITY*2.0;
|
||||
velocity[1] = crandom()*EXP_VELOCITY*2.0;
|
||||
velocity[2] = EXP_JUMP + crandom()*EXP_VELOCITY;
|
||||
// CG_LaunchExplode( origin, velocity, cgs.media.smoke2 );
|
||||
|
||||
VectorCopy( playerOrigin, origin );
|
||||
velocity[0] = crandom()*EXP_VELOCITY*2.5;
|
||||
velocity[1] = crandom()*EXP_VELOCITY*2.5;
|
||||
velocity[2] = EXP_JUMP + crandom()*EXP_VELOCITY;
|
||||
// CG_LaunchExplode( origin, velocity, cgs.media.smoke2 );
|
||||
}
|
||||
|
||||
|
|
|
@ -492,6 +492,7 @@ static void CG_General( centity_t *cent ) {
|
|||
int beamID;
|
||||
vec3_t beamOrg;
|
||||
mdxaBone_t matrix;
|
||||
qboolean doNotSetModel = qfalse;
|
||||
|
||||
if (cent->currentState.modelGhoul2 == 127)
|
||||
{ //not ready to be drawn or initialized..
|
||||
|
@ -512,9 +513,20 @@ static void CG_General( centity_t *cent ) {
|
|||
cent->currentState.modelindex < MAX_CLIENTS &&
|
||||
cent->currentState.weapon == G2_MODEL_PART)
|
||||
{ //special case for client limbs
|
||||
centity_t *clEnt = &cg_entities[cent->currentState.modelindex];
|
||||
centity_t *clEnt;
|
||||
int dismember_settings = cg_dismember.integer;
|
||||
|
||||
doNotSetModel = qtrue;
|
||||
|
||||
if (cent->currentState.modelindex >= 0)
|
||||
{
|
||||
clEnt = &cg_entities[cent->currentState.modelindex];
|
||||
}
|
||||
else
|
||||
{
|
||||
clEnt = &cg_entities[cent->currentState.modelindex2];
|
||||
}
|
||||
|
||||
if (!dismember_settings)
|
||||
{ //This client does not wish to see dismemberment.
|
||||
return;
|
||||
|
@ -551,9 +563,8 @@ static void CG_General( centity_t *cent ) {
|
|||
cent->bolt4 = -1;
|
||||
cent->trailTime = 0;
|
||||
|
||||
switch (cent->currentState.modelGhoul2)
|
||||
if (cent->currentState.modelGhoul2 == G2_MODELPART_HEAD)
|
||||
{
|
||||
case G2_MODELPART_HEAD:
|
||||
limbBone = "cervical";
|
||||
rotateBone = "cranium";
|
||||
limbName = "head";
|
||||
|
@ -562,8 +573,9 @@ static void CG_General( centity_t *cent ) {
|
|||
limbTagName = "*head_cap_torso";
|
||||
stubTagName = "*torso_cap_head";
|
||||
limb_anim = BOTH_DISMEMBER_HEAD1;
|
||||
break;
|
||||
case G2_MODELPART_WAIST:
|
||||
}
|
||||
else if (cent->currentState.modelGhoul2 == G2_MODELPART_WAIST)
|
||||
{
|
||||
limbBone = "pelvis";
|
||||
rotateBone = "thoracic";
|
||||
limbName = "torso";
|
||||
|
@ -572,8 +584,9 @@ static void CG_General( centity_t *cent ) {
|
|||
limbTagName = "*torso_cap_hips";
|
||||
stubTagName = "*hips_cap_torso";
|
||||
limb_anim = BOTH_DISMEMBER_TORSO1;
|
||||
break;
|
||||
case G2_MODELPART_LARM:
|
||||
}
|
||||
else if (cent->currentState.modelGhoul2 == G2_MODELPART_LARM)
|
||||
{
|
||||
limbBone = "lhumerus";
|
||||
rotateBone = "lradius";
|
||||
limbName = "l_arm";
|
||||
|
@ -582,8 +595,9 @@ static void CG_General( centity_t *cent ) {
|
|||
limbTagName = "*l_arm_cap_torso";
|
||||
stubTagName = "*torso_cap_l_arm";
|
||||
limb_anim = BOTH_DISMEMBER_LARM;
|
||||
break;
|
||||
case G2_MODELPART_RARM:
|
||||
}
|
||||
else if (cent->currentState.modelGhoul2 == G2_MODELPART_RARM)
|
||||
{
|
||||
limbBone = "rhumerus";
|
||||
rotateBone = "rradius";
|
||||
limbName = "r_arm";
|
||||
|
@ -592,8 +606,20 @@ static void CG_General( centity_t *cent ) {
|
|||
limbTagName = "*r_arm_cap_torso";
|
||||
stubTagName = "*torso_cap_r_arm";
|
||||
limb_anim = BOTH_DISMEMBER_RARM;
|
||||
break;
|
||||
case G2_MODELPART_LLEG:
|
||||
}
|
||||
else if (cent->currentState.modelGhoul2 == G2_MODELPART_RHAND)
|
||||
{
|
||||
limbBone = "rradiusX";
|
||||
rotateBone = "rhand";
|
||||
limbName = "r_hand";
|
||||
limbCapName = "r_hand_cap_r_arm_off";
|
||||
stubCapName = "r_arm_cap_r_hand_off";
|
||||
limbTagName = "*r_hand_cap_r_arm";
|
||||
stubTagName = "*r_arm_cap_r_hand";
|
||||
limb_anim = BOTH_DISMEMBER_RARM;
|
||||
}
|
||||
else if (cent->currentState.modelGhoul2 == G2_MODELPART_LLEG)
|
||||
{
|
||||
limbBone = "lfemurYZ";
|
||||
rotateBone = "ltibia";
|
||||
limbName = "l_leg";
|
||||
|
@ -602,8 +628,9 @@ static void CG_General( centity_t *cent ) {
|
|||
limbTagName = "*l_leg_cap_hips";
|
||||
stubTagName = "*hips_cap_l_leg";
|
||||
limb_anim = BOTH_DISMEMBER_LLEG;
|
||||
break;
|
||||
case G2_MODELPART_RLEG:
|
||||
}
|
||||
else if (cent->currentState.modelGhoul2 == G2_MODELPART_RLEG)
|
||||
{
|
||||
limbBone = "rfemurYZ";
|
||||
rotateBone = "rtibia";
|
||||
limbName = "r_leg";
|
||||
|
@ -612,8 +639,9 @@ static void CG_General( centity_t *cent ) {
|
|||
limbTagName = "*r_leg_cap_hips";
|
||||
stubTagName = "*hips_cap_r_leg";
|
||||
limb_anim = BOTH_DISMEMBER_RLEG;
|
||||
break;
|
||||
default:
|
||||
}
|
||||
else
|
||||
{
|
||||
limbBone = "rfemurYZ";
|
||||
rotateBone = "rtibia";
|
||||
limbName = "r_leg";
|
||||
|
@ -622,7 +650,6 @@ static void CG_General( centity_t *cent ) {
|
|||
limbTagName = "*r_leg_cap_hips";
|
||||
stubTagName = "*hips_cap_r_leg";
|
||||
limb_anim = BOTH_DISMEMBER_RLEG;
|
||||
break;
|
||||
}
|
||||
|
||||
if (clEnt && clEnt->ghoul2)
|
||||
|
@ -632,28 +659,35 @@ static void CG_General( centity_t *cent ) {
|
|||
int flags=BONE_ANIM_OVERRIDE_FREEZE;
|
||||
clientInfo_t *ci;
|
||||
|
||||
if (clEnt->currentState.number < MAX_CLIENTS)
|
||||
{
|
||||
ci = &cgs.clientinfo[ clEnt->currentState.number ];
|
||||
}
|
||||
else
|
||||
{
|
||||
ci = NULL;
|
||||
}
|
||||
|
||||
if (ci)
|
||||
{
|
||||
/*
|
||||
if (cent->currentState.modelGhoul2 == G2_MODELPART_WAIST)
|
||||
{
|
||||
anim = &ci->animations[ cent->currentState.modelindex2 ];
|
||||
//anim = &bgGlobalAnimations[ limb_anim ];
|
||||
//I guess it looks better to continue the body anim on the severed limb. If not a bit strange. It's what
|
||||
//SP seems to do anyway.
|
||||
anim = &bgGlobalAnimations[ (clEnt->currentState.torsoAnim&~ANIM_TOGGLEBIT) ];
|
||||
}
|
||||
else
|
||||
*/
|
||||
{
|
||||
{ //a g2anim ent, maybe? For those, we can settle for generic limb anims.
|
||||
anim = &bgGlobalAnimations[ limb_anim ];
|
||||
}
|
||||
}
|
||||
|
||||
trap_G2API_DuplicateGhoul2Instance(clEnt->ghoul2, ¢->ghoul2);
|
||||
|
||||
if (anim)
|
||||
{
|
||||
int aNum;
|
||||
animSpeed = 50.0f / anim->frameLerp;
|
||||
|
||||
/*
|
||||
if (cent->currentState.modelGhoul2 == G2_MODELPART_WAIST)
|
||||
{
|
||||
trap_G2API_SetBoneAnim(cent->ghoul2, 0, "upper_lumbar", anim->firstFrame, anim->firstFrame + anim->numFrames, flags, animSpeed, cg.time, -1, 0);
|
||||
|
@ -664,6 +698,31 @@ static void CG_General( centity_t *cent ) {
|
|||
trap_G2API_SetBoneAnim(cent->ghoul2, 0, "upper_lumbar", anim->firstFrame + anim->numFrames-1, anim->firstFrame + anim->numFrames, flags, animSpeed, cg.time, -1, 0);
|
||||
trap_G2API_SetBoneAnim(cent->ghoul2, 0, "model_root", anim->firstFrame + anim->numFrames-1, anim->firstFrame + anim->numFrames, flags, animSpeed, cg.time, -1, 0);
|
||||
}
|
||||
*/
|
||||
//I guess it looks better to continue the body anim on the severed limb. If not a bit strange. It's what
|
||||
//SP seems to do anyway.
|
||||
if (ci)
|
||||
{
|
||||
aNum = ci->frame+1;
|
||||
|
||||
while (aNum >= anim->firstFrame+anim->numFrames)
|
||||
{
|
||||
aNum--;
|
||||
}
|
||||
|
||||
if (aNum < anim->firstFrame-1)
|
||||
{ //wrong animation...?
|
||||
aNum = (anim->firstFrame+anim->numFrames)-1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
aNum = anim->firstFrame;
|
||||
}
|
||||
|
||||
trap_G2API_SetBoneAnim(cent->ghoul2, 0, "upper_lumbar", aNum, anim->firstFrame + anim->numFrames, flags, animSpeed, cg.time, -1, 150);
|
||||
trap_G2API_SetBoneAnim(cent->ghoul2, 0, "model_root", aNum, anim->firstFrame + anim->numFrames, flags, animSpeed, cg.time, -1, 150);
|
||||
trap_G2API_SetBoneAnim(cent->ghoul2, 0, "Motion", aNum, anim->firstFrame + anim->numFrames, flags, animSpeed, cg.time, -1, 150);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -709,7 +768,7 @@ static void CG_General( centity_t *cent ) {
|
|||
trap_FX_PlayEffectID(trap_FX_RegisterEffect("blaster/smoke_bolton"), boltOrg, boltAng);
|
||||
}
|
||||
|
||||
if (cent->currentState.modelGhoul2 == G2_MODELPART_RARM || cent->currentState.modelGhoul2 == G2_MODELPART_WAIST)
|
||||
if (cent->currentState.modelGhoul2 == G2_MODELPART_RARM || cent->currentState.modelGhoul2 == G2_MODELPART_RHAND || cent->currentState.modelGhoul2 == G2_MODELPART_WAIST)
|
||||
{ //Cut his weapon holding arm off, so remove the weapon
|
||||
if (trap_G2API_HasGhoul2ModelOnIndex(&(clEnt->ghoul2), 1))
|
||||
{
|
||||
|
@ -989,7 +1048,7 @@ Ghoul2 Insert End
|
|||
VectorCopy( cg.autoAngles, cent->lerpAngles );
|
||||
AxisCopy( cg.autoAxis, ent.axis );
|
||||
}
|
||||
else
|
||||
else if (!doNotSetModel)
|
||||
{
|
||||
ent.hModel = cgs.gameModels[s1->modelindex];
|
||||
}
|
||||
|
@ -1076,6 +1135,13 @@ Ghoul2 Insert End
|
|||
cent->dustTrailTime = 0;
|
||||
}
|
||||
|
||||
if (cent->currentState.modelGhoul2 &&
|
||||
!ent.ghoul2 &&
|
||||
!ent.hModel)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// add to refresh list
|
||||
trap_R_AddRefEntityToScene (&ent);
|
||||
|
||||
|
@ -2294,10 +2360,16 @@ static void CG_TeamBase( centity_t *cent ) {
|
|||
else {
|
||||
model.hModel = cgs.media.neutralFlagBaseModel;
|
||||
}
|
||||
|
||||
if (cent->currentState.eType != ET_GRAPPLE)
|
||||
{ //do not do this for g2animents
|
||||
trap_R_AddRefEntityToScene( &model );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CG_G2Animated( centity_t *cent );
|
||||
|
||||
/*
|
||||
===============
|
||||
CG_AddCEntity
|
||||
|
@ -2366,6 +2438,8 @@ Ghoul2 Insert End
|
|||
case ET_SPEAKER:
|
||||
CG_Speaker( cent );
|
||||
break;
|
||||
case ET_GRAPPLE: //An entity that wants to be able to use ghoul2 humanoid anims. Like a player, but not.
|
||||
CG_G2Animated( cent );
|
||||
case ET_TEAM:
|
||||
CG_TeamBase( cent );
|
||||
break;
|
||||
|
|
|
@ -640,6 +640,10 @@ void CG_ReattachLimb(centity_t *source)
|
|||
limbName = "r_arm";
|
||||
stubCapName = "torso_cap_r_arm_off";
|
||||
break;
|
||||
case G2_MODELPART_RHAND:
|
||||
limbName = "r_hand";
|
||||
stubCapName = "r_arm_cap_r_hand_off";
|
||||
break;
|
||||
case G2_MODELPART_LLEG:
|
||||
limbName = "l_leg";
|
||||
stubCapName = "hips_cap_l_leg_off";
|
||||
|
@ -649,9 +653,9 @@ void CG_ReattachLimb(centity_t *source)
|
|||
stubCapName = "hips_cap_r_leg_off";
|
||||
break;
|
||||
default:
|
||||
limbName = "r_leg";
|
||||
stubCapName = "hips_cap_r_leg_off";
|
||||
break;
|
||||
source->torsoBolt = 0;
|
||||
source->ghoul2weapon = NULL;
|
||||
return;
|
||||
}
|
||||
|
||||
trap_G2API_SetSurfaceOnOff(source->ghoul2, limbName, 0);
|
||||
|
@ -1014,7 +1018,7 @@ void CG_EntityEvent( centity_t *cent, vec3_t position ) {
|
|||
cl_ent->isATST = 0;
|
||||
cl_ent->atstFootClang = 0;
|
||||
cl_ent->atstSwinging = 0;
|
||||
cl_ent->torsoBolt = 0;
|
||||
// cl_ent->torsoBolt = 0;
|
||||
cl_ent->bolt1 = 0;
|
||||
cl_ent->bolt2 = 0;
|
||||
cl_ent->bolt3 = 0;
|
||||
|
@ -1231,7 +1235,7 @@ void CG_EntityEvent( centity_t *cent, vec3_t position ) {
|
|||
const char *strText = CG_GetStripEdString("INGAMETEXT", "PICKUPLINE");
|
||||
|
||||
//Com_Printf("%s %s\n", strText, showPowersName[index]);
|
||||
CG_CenterPrint( va("%s %s\n", strText, showPowersName[index]), SCREEN_HEIGHT * 0.30, BIGCHAR_WIDTH );
|
||||
CG_CenterPrint( va("%s %s\n", strText, CG_GetStripEdString("INGAME",showPowersName[index])), SCREEN_HEIGHT * 0.30, BIGCHAR_WIDTH );
|
||||
}
|
||||
|
||||
//Show the player their force selection bar in case picking the holocron up changed the current selection
|
||||
|
@ -1340,7 +1344,7 @@ void CG_EntityEvent( centity_t *cent, vec3_t position ) {
|
|||
break;
|
||||
case EV_FIRE_WEAPON:
|
||||
DEBUGNAME("EV_FIRE_WEAPON");
|
||||
if (cent->currentState.number >= MAX_CLIENTS)
|
||||
if (cent->currentState.number >= MAX_CLIENTS && cent->currentState.eType != ET_GRAPPLE)
|
||||
{ //special case for turret firing
|
||||
vec3_t gunpoint, gunangle;
|
||||
mdxaBone_t matrix;
|
||||
|
@ -1431,7 +1435,23 @@ void CG_EntityEvent( centity_t *cent, vec3_t position ) {
|
|||
|
||||
case EV_SABER_HIT:
|
||||
DEBUGNAME("EV_SABER_HIT");
|
||||
if (es->eventParm)
|
||||
if (es->eventParm == 16)
|
||||
{ //Make lots of sparks, something special happened
|
||||
vec3_t fxDir;
|
||||
VectorCopy(es->angles, fxDir);
|
||||
if (!fxDir[0] && !fxDir[1] && !fxDir[2])
|
||||
{
|
||||
fxDir[1] = 1;
|
||||
}
|
||||
trap_S_StartSound(es->origin, es->number, CHAN_AUTO, trap_S_RegisterSound("sound/weapons/saber/saberhit.wav"));
|
||||
trap_FX_PlayEffectID( trap_FX_RegisterEffect("saber/blood_sparks.efx"), es->origin, fxDir );
|
||||
trap_FX_PlayEffectID( trap_FX_RegisterEffect("saber/blood_sparks.efx"), es->origin, fxDir );
|
||||
trap_FX_PlayEffectID( trap_FX_RegisterEffect("saber/blood_sparks.efx"), es->origin, fxDir );
|
||||
trap_FX_PlayEffectID( trap_FX_RegisterEffect("saber/blood_sparks.efx"), es->origin, fxDir );
|
||||
trap_FX_PlayEffectID( trap_FX_RegisterEffect("saber/blood_sparks.efx"), es->origin, fxDir );
|
||||
trap_FX_PlayEffectID( trap_FX_RegisterEffect("saber/blood_sparks.efx"), es->origin, fxDir );
|
||||
}
|
||||
else if (es->eventParm)
|
||||
{ //hit a person
|
||||
vec3_t fxDir;
|
||||
VectorCopy(es->angles, fxDir);
|
||||
|
@ -1611,6 +1631,13 @@ void CG_EntityEvent( centity_t *cent, vec3_t position ) {
|
|||
break;
|
||||
case PDSOUND_ABSORBHIT:
|
||||
sID = trap_S_RegisterSound("sound/weapons/force/absorbhit.mp3");
|
||||
if (es->trickedentindex >= 0 && es->trickedentindex < MAX_CLIENTS)
|
||||
{
|
||||
int clnum = es->trickedentindex;
|
||||
|
||||
cg_entities[clnum].teamPowerEffectTime = cg.time + 1000;
|
||||
cg_entities[clnum].teamPowerType = 3;
|
||||
}
|
||||
break;
|
||||
case PDSOUND_ABSORB:
|
||||
sID = trap_S_RegisterSound("sound/weapons/force/absorb.mp3");
|
||||
|
@ -2265,7 +2292,7 @@ void CG_EntityEvent( centity_t *cent, vec3_t position ) {
|
|||
case EV_GIB_PLAYER:
|
||||
DEBUGNAME("EV_GIB_PLAYER");
|
||||
//trap_S_StartSound( NULL, es->number, CHAN_BODY, cgs.media.gibSound );
|
||||
CG_GibPlayer( cent->lerpOrigin );
|
||||
//CG_GibPlayer( cent->lerpOrigin );
|
||||
break;
|
||||
|
||||
case EV_STARTLOOPINGSOUND:
|
||||
|
|
|
@ -106,6 +106,7 @@ void CG_DrawInformation( void ) {
|
|||
int value, valueNOFP;
|
||||
qhandle_t levelshot;
|
||||
char buf[1024];
|
||||
int iPropHeight = 18; // I know, this is total crap, but as a post release asian-hack.... -Ste
|
||||
|
||||
info = CG_ConfigString( CS_SERVERINFO );
|
||||
sysInfo = CG_ConfigString( CS_SYSTEMINFO );
|
||||
|
@ -147,14 +148,15 @@ void CG_DrawInformation( void ) {
|
|||
Q_CleanStr(buf);
|
||||
UI_DrawProportionalString( 320, y, buf,
|
||||
UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite );
|
||||
y += PROP_HEIGHT;
|
||||
y += iPropHeight;
|
||||
|
||||
// pure server
|
||||
s = Info_ValueForKey( sysInfo, "sv_pure" );
|
||||
if ( s[0] == '1' ) {
|
||||
UI_DrawProportionalString( 320, y, "Pure Server",
|
||||
const char *psPure = CG_GetStripEdString("INGAMETEXT", "PURE_SERVER");
|
||||
UI_DrawProportionalString( 320, y, psPure,
|
||||
UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite );
|
||||
y += PROP_HEIGHT;
|
||||
y += iPropHeight;
|
||||
}
|
||||
|
||||
// server-specific message of the day
|
||||
|
@ -162,7 +164,7 @@ void CG_DrawInformation( void ) {
|
|||
if ( s[0] ) {
|
||||
UI_DrawProportionalString( 320, y, s,
|
||||
UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite );
|
||||
y += PROP_HEIGHT;
|
||||
y += iPropHeight;
|
||||
}
|
||||
|
||||
// some extra space after hostname and motd
|
||||
|
@ -174,7 +176,7 @@ void CG_DrawInformation( void ) {
|
|||
if ( s[0] ) {
|
||||
UI_DrawProportionalString( 320, y, s,
|
||||
UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite );
|
||||
y += PROP_HEIGHT;
|
||||
y += iPropHeight;
|
||||
}
|
||||
|
||||
// cheats warning
|
||||
|
@ -182,7 +184,7 @@ void CG_DrawInformation( void ) {
|
|||
if ( s[0] == '1' ) {
|
||||
UI_DrawProportionalString( 320, y, CG_GetStripEdString("INGAMETEXT", "CHEATSAREENABLED"),
|
||||
UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite );
|
||||
y += PROP_HEIGHT;
|
||||
y += iPropHeight;
|
||||
}
|
||||
|
||||
// game type
|
||||
|
@ -220,13 +222,13 @@ void CG_DrawInformation( void ) {
|
|||
}
|
||||
UI_DrawProportionalString( 320, y, s,
|
||||
UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite );
|
||||
y += PROP_HEIGHT;
|
||||
y += iPropHeight;
|
||||
|
||||
value = atoi( Info_ValueForKey( info, "timelimit" ) );
|
||||
if ( value ) {
|
||||
UI_DrawProportionalString( 320, y, va( "%s %i", CG_GetStripEdString("INGAMETEXT", "TIMELIMIT"), value ),
|
||||
UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite );
|
||||
y += PROP_HEIGHT;
|
||||
y += iPropHeight;
|
||||
}
|
||||
|
||||
if (cgs.gametype < GT_CTF ) {
|
||||
|
@ -234,7 +236,7 @@ void CG_DrawInformation( void ) {
|
|||
if ( value ) {
|
||||
UI_DrawProportionalString( 320, y, va( "%s %i", CG_GetStripEdString("INGAMETEXT", "FRAGLIMIT"), value ),
|
||||
UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite );
|
||||
y += PROP_HEIGHT;
|
||||
y += iPropHeight;
|
||||
}
|
||||
|
||||
if (cgs.gametype == GT_TOURNAMENT)
|
||||
|
@ -243,7 +245,7 @@ void CG_DrawInformation( void ) {
|
|||
if ( value ) {
|
||||
UI_DrawProportionalString( 320, y, va( "%s %i", CG_GetStripEdString("INGAMETEXT", "WINLIMIT"), value ),
|
||||
UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite );
|
||||
y += PROP_HEIGHT;
|
||||
y += iPropHeight;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -253,7 +255,7 @@ void CG_DrawInformation( void ) {
|
|||
if ( value ) {
|
||||
UI_DrawProportionalString( 320, y, va( "%s %i", CG_GetStripEdString("INGAMETEXT", "CAPTURELIMIT"), value ),
|
||||
UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite );
|
||||
y += PROP_HEIGHT;
|
||||
y += iPropHeight;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -263,7 +265,7 @@ void CG_DrawInformation( void ) {
|
|||
if ( value ) {
|
||||
UI_DrawProportionalString( 320, y, CG_GetStripEdString("INGAMETEXT", "FORCEBASEDTEAMS"),
|
||||
UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite );
|
||||
y += PROP_HEIGHT;
|
||||
y += iPropHeight;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -277,7 +279,7 @@ void CG_DrawInformation( void ) {
|
|||
|
||||
UI_DrawProportionalString( 320, y, va( "%s %s", fmStr, CG_GetStripEdString("INGAMETEXT", forceMasteryLevels[value]) ),
|
||||
UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite );
|
||||
y += PROP_HEIGHT;
|
||||
y += iPropHeight;
|
||||
}
|
||||
else if (!valueNOFP)
|
||||
{
|
||||
|
@ -286,7 +288,7 @@ void CG_DrawInformation( void ) {
|
|||
|
||||
UI_DrawProportionalString( 320, y, va( "%s %s", fmStr, (char *)CG_GetStripEdString("INGAMETEXT", forceMasteryLevels[7]) ),
|
||||
UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite );
|
||||
y += PROP_HEIGHT;
|
||||
y += iPropHeight;
|
||||
}
|
||||
|
||||
if (cgs.gametype == GT_TOURNAMENT)
|
||||
|
@ -300,75 +302,75 @@ void CG_DrawInformation( void ) {
|
|||
if ( cgs.gametype != GT_JEDIMASTER && value ) {
|
||||
UI_DrawProportionalString( 320, y, va( "%s", (char *)CG_GetStripEdString("INGAMETEXT", "SABERONLYSET") ),
|
||||
UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite );
|
||||
y += PROP_HEIGHT;
|
||||
y += iPropHeight;
|
||||
}
|
||||
|
||||
if ( valueNOFP ) {
|
||||
UI_DrawProportionalString( 320, y, va( "%s", (char *)CG_GetStripEdString("INGAMETEXT", "NOFPSET") ),
|
||||
UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite );
|
||||
y += PROP_HEIGHT;
|
||||
y += iPropHeight;
|
||||
}
|
||||
|
||||
|
||||
// Display the rules based on type
|
||||
y += PROP_HEIGHT;
|
||||
y += iPropHeight;
|
||||
switch ( cgs.gametype ) {
|
||||
case GT_FFA:
|
||||
UI_DrawProportionalString( 320, y, va( "%s", (char *)CG_GetStripEdString("INGAMETEXT", "RULES_FFA_1")),
|
||||
UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite );
|
||||
y += PROP_HEIGHT;
|
||||
y += iPropHeight;
|
||||
break;
|
||||
case GT_HOLOCRON:
|
||||
UI_DrawProportionalString( 320, y, va( "%s", (char *)CG_GetStripEdString("INGAMETEXT", "RULES_HOLO_1")),
|
||||
UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite );
|
||||
y += PROP_HEIGHT;
|
||||
y += iPropHeight;
|
||||
UI_DrawProportionalString( 320, y, va( "%s", (char *)CG_GetStripEdString("INGAMETEXT", "RULES_HOLO_2")),
|
||||
UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite );
|
||||
y += PROP_HEIGHT;
|
||||
y += iPropHeight;
|
||||
break;
|
||||
case GT_JEDIMASTER:
|
||||
UI_DrawProportionalString( 320, y, va( "%s", (char *)CG_GetStripEdString("INGAMETEXT", "RULES_JEDI_1")),
|
||||
UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite );
|
||||
y += PROP_HEIGHT;
|
||||
y += iPropHeight;
|
||||
UI_DrawProportionalString( 320, y, va( "%s", (char *)CG_GetStripEdString("INGAMETEXT", "RULES_JEDI_2")),
|
||||
UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite );
|
||||
y += PROP_HEIGHT;
|
||||
y += iPropHeight;
|
||||
break;
|
||||
case GT_SINGLE_PLAYER:
|
||||
break;
|
||||
case GT_TOURNAMENT:
|
||||
UI_DrawProportionalString( 320, y, va( "%s", (char *)CG_GetStripEdString("INGAMETEXT", "RULES_DUEL_1")),
|
||||
UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite );
|
||||
y += PROP_HEIGHT;
|
||||
y += iPropHeight;
|
||||
UI_DrawProportionalString( 320, y, va( "%s", (char *)CG_GetStripEdString("INGAMETEXT", "RULES_DUEL_2")),
|
||||
UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite );
|
||||
y += PROP_HEIGHT;
|
||||
y += iPropHeight;
|
||||
break;
|
||||
case GT_TEAM:
|
||||
UI_DrawProportionalString( 320, y, va( "%s", (char *)CG_GetStripEdString("INGAMETEXT", "RULES_TEAM_1")),
|
||||
UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite );
|
||||
y += PROP_HEIGHT;
|
||||
y += iPropHeight;
|
||||
UI_DrawProportionalString( 320, y, va( "%s", (char *)CG_GetStripEdString("INGAMETEXT", "RULES_TEAM_2")),
|
||||
UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite );
|
||||
y += PROP_HEIGHT;
|
||||
y += iPropHeight;
|
||||
break;
|
||||
case GT_SAGA:
|
||||
break;
|
||||
case GT_CTF:
|
||||
UI_DrawProportionalString( 320, y, va( "%s", (char *)CG_GetStripEdString("INGAMETEXT", "RULES_CTF_1")),
|
||||
UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite );
|
||||
y += PROP_HEIGHT;
|
||||
y += iPropHeight;
|
||||
UI_DrawProportionalString( 320, y, va( "%s", (char *)CG_GetStripEdString("INGAMETEXT", "RULES_CTF_2")),
|
||||
UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite );
|
||||
y += PROP_HEIGHT;
|
||||
y += iPropHeight;
|
||||
break;
|
||||
case GT_CTY:
|
||||
UI_DrawProportionalString( 320, y, va( "%s", (char *)CG_GetStripEdString("INGAMETEXT", "RULES_CTY_1")),
|
||||
UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite );
|
||||
y += PROP_HEIGHT;
|
||||
y += iPropHeight;
|
||||
UI_DrawProportionalString( 320, y, va( "%s", (char *)CG_GetStripEdString("INGAMETEXT", "RULES_CTY_2")),
|
||||
UI_CENTER|UI_INFOFONT|UI_DROPSHADOW, colorWhite );
|
||||
y += PROP_HEIGHT;
|
||||
y += iPropHeight;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
|
|
@ -76,9 +76,8 @@
|
|||
#define TEAM_OVERLAY_MAXNAME_WIDTH 12
|
||||
#define TEAM_OVERLAY_MAXLOCATION_WIDTH 16
|
||||
|
||||
#define DEFAULT_MODEL "kyle/default"
|
||||
#define DEFAULT_TEAM_MODEL "kyle/default"
|
||||
#define DEFAULT_TEAM_HEAD "kyle/default"
|
||||
#define DEFAULT_MODEL "kyle"
|
||||
#define DEFAULT_TEAM_MODEL "kyle"
|
||||
|
||||
#define DEFAULT_FORCEPOWERS "5-1-000000000000000000"
|
||||
//"rank-side-heal.lev.speed.push.pull.tele.grip.lightning.rage.protect.absorb.teamheal.teamforce.drain.see"
|
||||
|
@ -236,7 +235,7 @@ typedef struct centity_s {
|
|||
int trickAlphaTime;
|
||||
|
||||
int teamPowerEffectTime;
|
||||
qboolean teamPowerType; //0 regen, 1 heal, 2 drain
|
||||
qboolean teamPowerType; //0 regen, 1 heal, 2 drain, 3 absorb
|
||||
} centity_t;
|
||||
|
||||
|
||||
|
@ -957,9 +956,9 @@ typedef struct {
|
|||
qhandle_t teamRedShader;
|
||||
qhandle_t teamBlueShader;
|
||||
|
||||
qhandle_t balloonShader;
|
||||
qhandle_t connectionShader;
|
||||
|
||||
qhandle_t selectShader;
|
||||
qhandle_t viewBloodShader;
|
||||
qhandle_t tracerShader;
|
||||
qhandle_t crosshairShader[NUM_CROSSHAIRS];
|
||||
|
@ -968,9 +967,6 @@ typedef struct {
|
|||
qhandle_t noammoShader;
|
||||
|
||||
qhandle_t smokePuffShader;
|
||||
qhandle_t smokePuffRageProShader;
|
||||
qhandle_t shotgunSmokePuffShader;
|
||||
qhandle_t plasmaBallShader;
|
||||
qhandle_t waterBubbleShader;
|
||||
qhandle_t bloodTrailShader;
|
||||
|
||||
|
@ -1414,7 +1410,6 @@ extern vmCvar_t cg_bobpitch;
|
|||
extern vmCvar_t cg_bobroll;
|
||||
//extern vmCvar_t cg_swingSpeed;
|
||||
extern vmCvar_t cg_shadows;
|
||||
extern vmCvar_t cg_gibs;
|
||||
extern vmCvar_t cg_drawTimer;
|
||||
extern vmCvar_t cg_drawFPS;
|
||||
extern vmCvar_t cg_drawSnapshot;
|
||||
|
@ -1461,9 +1456,15 @@ extern vmCvar_t cg_zoomFov;
|
|||
|
||||
extern vmCvar_t cg_swingAngles;
|
||||
|
||||
#ifdef G2_COLLISION_ENABLED
|
||||
extern vmCvar_t cg_saberModelTraceEffect;
|
||||
#endif
|
||||
|
||||
extern vmCvar_t cg_saberContact;
|
||||
extern vmCvar_t cg_saberTrail;
|
||||
|
||||
extern vmCvar_t cg_duelHeadAngles;
|
||||
|
||||
extern vmCvar_t cg_speedTrail;
|
||||
extern vmCvar_t cg_auraShell;
|
||||
|
||||
|
@ -1789,9 +1790,6 @@ void CG_GlassShatter(int entnum, vec3_t dmgPt, vec3_t dmgDir, float dmgRadius, i
|
|||
void CG_CreateDebris(int entnum, vec3_t org, vec3_t mins, vec3_t maxs, int debrissound, int debrismodel);
|
||||
void CG_ScorePlum( int client, vec3_t org, int score );
|
||||
|
||||
void CG_GibPlayer( vec3_t playerOrigin );
|
||||
void CG_BigExplode( vec3_t playerOrigin );
|
||||
|
||||
void CG_Bleed( vec3_t origin, int entityNum );
|
||||
|
||||
localEntity_t *CG_MakeExplosion( vec3_t origin, vec3_t dir,
|
||||
|
@ -1964,7 +1962,9 @@ int trap_R_Font_StrLenPixels(const char *text, const int iFontIndex, const flo
|
|||
int trap_R_Font_StrLenChars(const char *text);
|
||||
int trap_R_Font_HeightPixels(const int iFontIndex, const float scale);
|
||||
void trap_R_Font_DrawString(int ox, int oy, const char *text, const float *rgba, const int setIndex, int iCharLimit, const float scale);
|
||||
unsigned trap_AnyLanguage_ReadCharFromString( const char **ppText );
|
||||
qboolean trap_Language_IsAsian(void);
|
||||
qboolean trap_Language_UsesSpaces(void);
|
||||
unsigned trap_AnyLanguage_ReadCharFromString( const char *psText, int *piAdvanceCount, qboolean *pbIsTrailingPunctuation/* = NULL*/ );
|
||||
|
||||
|
||||
// a scene is built up by calls to R_ClearScene and the various R_Add functions.
|
||||
|
@ -2171,6 +2171,8 @@ void FX_BlasterWeaponHitWall( vec3_t origin, vec3_t normal );
|
|||
void FX_BlasterWeaponHitPlayer( vec3_t origin, vec3_t normal, qboolean humanoid );
|
||||
|
||||
|
||||
void trap_G2API_CollisionDetect ( CollisionRecord_t *collRecMap, void* ghoul2, const vec3_t angles, const vec3_t position,int frameNumber, int entNum, const vec3_t rayStart, const vec3_t rayEnd, const vec3_t scale, int traceFlags, int useLod, float fRadius );
|
||||
|
||||
|
||||
/*
|
||||
Ghoul2 Insert Start
|
||||
|
@ -2184,6 +2186,8 @@ qboolean trap_G2API_GetBoltMatrix(void *ghoul2, const int modelIndex, const int
|
|||
const vec3_t angles, const vec3_t position, const int frameNum, qhandle_t *modelList, vec3_t scale);
|
||||
qboolean trap_G2API_GetBoltMatrix_NoReconstruct(void *ghoul2, const int modelIndex, const int boltIndex, mdxaBone_t *matrix,
|
||||
const vec3_t angles, const vec3_t position, const int frameNum, qhandle_t *modelList, vec3_t scale);
|
||||
qboolean trap_G2API_GetBoltMatrix_NoRecNoRot(void *ghoul2, const int modelIndex, const int boltIndex, mdxaBone_t *matrix,
|
||||
const vec3_t angles, const vec3_t position, const int frameNum, qhandle_t *modelList, vec3_t scale);
|
||||
int trap_G2API_InitGhoul2Model(void **ghoul2Ptr, const char *fileName, int modelIndex, qhandle_t customSkin,
|
||||
qhandle_t customShader, int modelFlags, int lodBias);
|
||||
|
||||
|
|
|
@ -365,7 +365,6 @@ vmCvar_t cg_bobpitch;
|
|||
vmCvar_t cg_bobroll;
|
||||
//vmCvar_t cg_swingSpeed;
|
||||
vmCvar_t cg_shadows;
|
||||
vmCvar_t cg_gibs;
|
||||
vmCvar_t cg_drawTimer;
|
||||
vmCvar_t cg_drawFPS;
|
||||
vmCvar_t cg_drawSnapshot;
|
||||
|
@ -411,9 +410,15 @@ vmCvar_t cg_zoomFov;
|
|||
|
||||
vmCvar_t cg_swingAngles;
|
||||
|
||||
#ifdef G2_COLLISION_ENABLED
|
||||
vmCvar_t cg_saberModelTraceEffect;
|
||||
#endif
|
||||
|
||||
vmCvar_t cg_saberContact;
|
||||
vmCvar_t cg_saberTrail;
|
||||
|
||||
vmCvar_t cg_duelHeadAngles;
|
||||
|
||||
vmCvar_t cg_speedTrail;
|
||||
vmCvar_t cg_auraShell;
|
||||
|
||||
|
@ -505,7 +510,6 @@ static cvarTable_t cvarTable[] = { // bk001129
|
|||
{ &cg_viewsize, "cg_viewsize", "100", CVAR_ARCHIVE },
|
||||
{ &cg_stereoSeparation, "cg_stereoSeparation", "0.4", CVAR_ARCHIVE },
|
||||
{ &cg_shadows, "cg_shadows", "1", CVAR_ARCHIVE },
|
||||
{ &cg_gibs, "cg_gibs", "1", CVAR_ARCHIVE },
|
||||
{ &cg_draw2D, "cg_draw2D", "1", CVAR_ARCHIVE },
|
||||
{ &cg_drawStatus, "cg_drawStatus", "1", CVAR_ARCHIVE },
|
||||
{ &cg_drawTimer, "cg_drawTimer", "0", CVAR_ARCHIVE },
|
||||
|
@ -553,15 +557,21 @@ static cvarTable_t cvarTable[] = { // bk001129
|
|||
|
||||
{ &cg_swingAngles, "cg_swingAngles", "1", 0 },
|
||||
|
||||
#ifdef G2_COLLISION_ENABLED
|
||||
{ &cg_saberModelTraceEffect, "cg_saberModelTraceEffect", "0", 0 },
|
||||
#endif
|
||||
|
||||
{ &cg_saberContact, "cg_saberContact", "1", 0 },
|
||||
{ &cg_saberTrail, "cg_saberTrail", "1", 0 },
|
||||
|
||||
{ &cg_duelHeadAngles, "cg_duelHeadAngles", "0", 0 },
|
||||
|
||||
{ &cg_speedTrail, "cg_speedTrail", "1", 0 },
|
||||
{ &cg_auraShell, "cg_auraShell", "1", 0 },
|
||||
|
||||
{ &cg_animBlend, "cg_animBlend", "1", 0 },
|
||||
|
||||
{ &cg_dismember, "cg_dismember", "0", 0 },
|
||||
{ &cg_dismember, "cg_dismember", "0", CVAR_ARCHIVE },
|
||||
|
||||
{ &cg_thirdPerson, "cg_thirdPerson", "0", 0 },
|
||||
{ &cg_thirdPersonRange, "cg_thirdPersonRange", "80", CVAR_CHEAT },
|
||||
|
@ -1267,22 +1277,20 @@ static void CG_RegisterGraphics( void ) {
|
|||
cgs.media.chunkyNumberShaders[i] = trap_R_RegisterShaderNoMip( sb_c_nums[i] );
|
||||
}
|
||||
|
||||
cgs.media.balloonShader = trap_R_RegisterShader( "gfx/mp/chat_icon" );
|
||||
|
||||
cgs.media.viewBloodShader = trap_R_RegisterShader( "viewBloodBlend" );
|
||||
|
||||
cgs.media.deferShader = trap_R_RegisterShaderNoMip( "gfx/2d/defer.tga" );
|
||||
|
||||
cgs.media.smokePuffShader = trap_R_RegisterShader( "smokePuff" );
|
||||
cgs.media.smokePuffRageProShader = trap_R_RegisterShader( "smokePuffRagePro" );
|
||||
cgs.media.shotgunSmokePuffShader = trap_R_RegisterShader( "shotgunSmokePuff" );
|
||||
cgs.media.plasmaBallShader = trap_R_RegisterShader( "sprites/plasma1" );
|
||||
cgs.media.bloodTrailShader = trap_R_RegisterShader( "bloodTrail" );
|
||||
cgs.media.lagometerShader = trap_R_RegisterShader("gfx/2d/lag" );
|
||||
cgs.media.connectionShader = trap_R_RegisterShader( "disconnected" );
|
||||
cgs.media.lagometerShader = trap_R_RegisterShaderNoMip("gfx/2d/lag" );
|
||||
cgs.media.connectionShader = trap_R_RegisterShaderNoMip( "gfx/2d/net" );
|
||||
|
||||
cgs.media.waterBubbleShader = trap_R_RegisterShader( "waterBubble" );
|
||||
|
||||
cgs.media.tracerShader = trap_R_RegisterShader( "gfx/misc/tracer" );
|
||||
cgs.media.selectShader = trap_R_RegisterShader( "gfx/2d/select" );
|
||||
|
||||
Com_Printf( S_COLOR_CYAN "---------- Fx System Initialization ---------\n" );
|
||||
trap_FX_InitSystem();
|
||||
|
@ -2005,14 +2013,15 @@ static clientInfo_t * CG_InfoFromScoreIndex(int index, int team, int *scoreIndex
|
|||
return &cgs.clientinfo[ cg.scores[index].client ];
|
||||
}
|
||||
|
||||
static const char *CG_FeederItemText(float feederID, int index, int column, qhandle_t *handle) {
|
||||
static const char *CG_FeederItemText(float feederID, int index, int column,
|
||||
qhandle_t *handle1, qhandle_t *handle2, qhandle_t *handle3) {
|
||||
gitem_t *item;
|
||||
int scoreIndex = 0;
|
||||
clientInfo_t *info = NULL;
|
||||
int team = -1;
|
||||
score_t *sp = NULL;
|
||||
|
||||
*handle = -1;
|
||||
*handle1 = *handle2 = *handle3 = -1;
|
||||
|
||||
if (feederID == FEEDER_REDTEAM_LIST) {
|
||||
team = TEAM_RED;
|
||||
|
@ -2028,17 +2037,17 @@ static const char *CG_FeederItemText(float feederID, int index, int column, qhan
|
|||
case 0:
|
||||
if ( info->powerups & ( 1 << PW_NEUTRALFLAG ) ) {
|
||||
item = BG_FindItemForPowerup( PW_NEUTRALFLAG );
|
||||
*handle = cg_items[ ITEM_INDEX(item) ].icon;
|
||||
*handle1 = cg_items[ ITEM_INDEX(item) ].icon;
|
||||
} else if ( info->powerups & ( 1 << PW_REDFLAG ) ) {
|
||||
item = BG_FindItemForPowerup( PW_REDFLAG );
|
||||
*handle = cg_items[ ITEM_INDEX(item) ].icon;
|
||||
*handle1 = cg_items[ ITEM_INDEX(item) ].icon;
|
||||
} else if ( info->powerups & ( 1 << PW_BLUEFLAG ) ) {
|
||||
item = BG_FindItemForPowerup( PW_BLUEFLAG );
|
||||
*handle = cg_items[ ITEM_INDEX(item) ].icon;
|
||||
*handle1 = cg_items[ ITEM_INDEX(item) ].icon;
|
||||
} else {
|
||||
/*
|
||||
if ( info->botSkill > 0 && info->botSkill <= 5 ) {
|
||||
*handle = cgs.media.botSkillShaders[ info->botSkill - 1 ];
|
||||
*handle1 = cgs.media.botSkillShaders[ info->botSkill - 1 ];
|
||||
} else if ( info->handicap < 100 ) {
|
||||
return va("%i", info->handicap );
|
||||
}
|
||||
|
@ -2049,7 +2058,7 @@ static const char *CG_FeederItemText(float feederID, int index, int column, qhan
|
|||
if (team == -1) {
|
||||
return "";
|
||||
} else {
|
||||
*handle = CG_StatusHandle(info->teamTask);
|
||||
*handle1 = CG_StatusHandle(info->teamTask);
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
|
@ -2194,6 +2203,8 @@ void CG_LoadHudMenu()
|
|||
cgDC.Font_StrLenChars = &trap_R_Font_StrLenChars;
|
||||
cgDC.Font_HeightPixels = &trap_R_Font_HeightPixels;
|
||||
cgDC.Font_DrawString = &trap_R_Font_DrawString;
|
||||
cgDC.Language_IsAsian = &trap_Language_IsAsian;
|
||||
cgDC.Language_UsesSpaces = &trap_Language_UsesSpaces;
|
||||
cgDC.AnyLanguage_ReadCharFromString = &trap_AnyLanguage_ReadCharFromString;
|
||||
cgDC.ownerDrawItem = &CG_OwnerDraw;
|
||||
cgDC.getValue = &CG_GetValue;
|
||||
|
|
|
@ -379,6 +379,8 @@ extern int MenuFontToHandle(int iMenuFont);
|
|||
//
|
||||
static void CG_Text_Paint_Limit(float *maxX, float x, float y, float scale, vec4_t color, const char* text, float adjust, int limit, int iMenuFont)
|
||||
{
|
||||
qboolean bIsTrailingPunctuation;
|
||||
|
||||
// this is kinda dirty, but...
|
||||
//
|
||||
int iFontIndex = MenuFontToHandle(iMenuFont);
|
||||
|
@ -400,9 +402,12 @@ static void CG_Text_Paint_Limit(float *maxX, float x, float y, float scale, vec4
|
|||
&& psOut < &sTemp[sizeof(sTemp)-1] // sanity
|
||||
)
|
||||
{
|
||||
int iAdvanceCount;
|
||||
psOutLastGood = psOut;
|
||||
|
||||
uiLetter = trap_AnyLanguage_ReadCharFromString(&psText);
|
||||
uiLetter = trap_AnyLanguage_ReadCharFromString(psText, &iAdvanceCount, &bIsTrailingPunctuation);
|
||||
psText += iAdvanceCount;
|
||||
|
||||
if (uiLetter > 255)
|
||||
{
|
||||
*psOut++ = uiLetter>>8;
|
||||
|
@ -967,7 +972,7 @@ void CG_KeyEvent(int key, qboolean down) {
|
|||
if (cgs.capturedItem) {
|
||||
cgs.capturedItem = NULL;
|
||||
} else {
|
||||
if (key == K_MOUSE2 && down) {
|
||||
if (key == A_MOUSE2 && down) {
|
||||
cgs.capturedItem = Display_CaptureItem(cgs.cursorX, cgs.cursorY);
|
||||
}
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -49,7 +49,7 @@ functions imported from the main executable
|
|||
==================================================================
|
||||
*/
|
||||
|
||||
#define CGAME_IMPORT_API_VERSION 4
|
||||
#define CGAME_IMPORT_API_VERSION 5
|
||||
|
||||
typedef enum {
|
||||
CG_PRINT = 0,
|
||||
|
@ -104,6 +104,8 @@ typedef enum {
|
|||
CG_R_FONT_STRLENCHARS,
|
||||
CG_R_FONT_STRHEIGHTPIXELS,
|
||||
CG_R_FONT_DRAWSTRING,
|
||||
CG_LANGUAGE_ISASIAN,
|
||||
CG_LANGUAGE_USESSPACES,
|
||||
CG_ANYLANGUAGE_READCHARFROMSTRING,
|
||||
|
||||
CGAME_MEMSET = 100,
|
||||
|
@ -216,7 +218,9 @@ Ghoul2 Insert Start
|
|||
CG_G2_GIVEMEVECTORFROMMATRIX,
|
||||
CG_G2_GETBOLT,
|
||||
CG_G2_GETBOLT_NOREC,
|
||||
CG_G2_GETBOLT_NOREC_NOROT,
|
||||
CG_G2_INITGHOUL2MODEL,
|
||||
CG_G2_COLLISIONDETECT,
|
||||
CG_G2_CLEANMODELS,
|
||||
CG_G2_ANGLEOVERRIDE,
|
||||
CG_G2_PLAYANIM,
|
||||
|
|
|
@ -173,7 +173,7 @@ static void CG_DrawClientScore( int y, score_t *score, float *color, float fade,
|
|||
// add the "ready" marker for intermission exiting
|
||||
if ( cg.snap->ps.stats[ STAT_CLIENTS_READY ] & ( 1 << score->client ) )
|
||||
{
|
||||
CG_Text_Paint (SB_NAME_X - 64, y + 2, 0.7f * scale, colorWhite, "READY" ,0, 0, ITEM_TEXTSTYLE_OUTLINED, FONT_MEDIUM );
|
||||
CG_Text_Paint (SB_NAME_X - 64, y + 2, 0.7f * scale, colorWhite, CG_GetStripEdString("INGAMETEXT", "READY"),0, 0, ITEM_TEXTSTYLE_OUTLINED, FONT_MEDIUM );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -257,11 +257,6 @@ qboolean CG_DrawOldScoreboard( void ) {
|
|||
return qfalse;
|
||||
}
|
||||
|
||||
if ( cgs.gametype == GT_SINGLE_PLAYER && cg.predictedPlayerState.pm_type == PM_INTERMISSION ) {
|
||||
cg.deferredPlayerLoading = 0;
|
||||
return qfalse;
|
||||
}
|
||||
|
||||
// don't draw scoreboard during death while warmup up
|
||||
if ( cg.warmup && !cg.showScores ) {
|
||||
return qfalse;
|
||||
|
@ -371,7 +366,10 @@ qboolean CG_DrawOldScoreboard( void ) {
|
|||
CG_Text_Paint ( SB_NAME_X, y, 1.0f, colorWhite, "Name", 0, 0, ITEM_TEXTSTYLE_OUTLINED, FONT_MEDIUM );
|
||||
if (cgs.gametype == GT_TOURNAMENT)
|
||||
{
|
||||
CG_Text_Paint ( SB_SCORE_X, y, 1.0f, colorWhite, "W/L", 0, 0, ITEM_TEXTSTYLE_OUTLINED, FONT_MEDIUM );
|
||||
char sWL[100];
|
||||
trap_SP_GetStringTextString("INGAMETEXT_W_L", sWL, sizeof(sWL));
|
||||
|
||||
CG_Text_Paint ( SB_SCORE_X, y, 1.0f, colorWhite, sWL, 0, 0, ITEM_TEXTSTYLE_OUTLINED, FONT_MEDIUM );
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -61,6 +61,8 @@ static void CG_ParseScores( void ) {
|
|||
cg.numScores = MAX_CLIENTS;
|
||||
}
|
||||
|
||||
cg.numScores = readScores;
|
||||
|
||||
cg.teamScores[0] = atoi( CG_Argv( 2 ) );
|
||||
cg.teamScores[1] = atoi( CG_Argv( 3 ) );
|
||||
|
||||
|
@ -525,7 +527,7 @@ void CG_KillCEntityInstances()
|
|||
cg_entities[i].frame_minus2_refreshed = 0;
|
||||
cg_entities[i].dustTrailTime = 0;
|
||||
cg_entities[i].ghoul2weapon = NULL;
|
||||
cg_entities[i].torsoBolt = 0;
|
||||
// cg_entities[i].torsoBolt = 0;
|
||||
cg_entities[i].trailTime = 0;
|
||||
cg_entities[i].frame_hold_time = 0;
|
||||
cg_entities[i].frame_hold_refreshed = 0;
|
||||
|
|
|
@ -52,7 +52,9 @@ equ trap_R_Font_StrLenPixels -49 ; CG_R_FONT_STRLENPIXELS
|
|||
equ trap_R_Font_StrLenChars -50 ; CG_R_FONT_STRLENCHARS
|
||||
equ trap_R_Font_HeightPixels -51 ; CG_R_FONT_STRHEIGHTPIXELS
|
||||
equ trap_R_Font_DrawString -52 ; CG_R_FONT_DRAWSTRING
|
||||
equ trap_AnyLanguage_ReadCharFromString -53 ; CG_ANYLANGUAGE_READCHARFROMSTRING
|
||||
equ trap_Language_IsAsian -53 ; CG_LANGUAGE_ISASIAN
|
||||
equ trap_Language_UsesSpaces -54 ; CG_LANGUAGE_USESSPACES
|
||||
equ trap_AnyLanguage_ReadCharFromString -55 ; CG_ANYLANGUAGE_READCHARFROMSTRING
|
||||
equ trap_R_ClearScene -201 ; CG_R_CLEARSCENE
|
||||
equ trap_R_AddRefEntityToScene -202 ; CG_R_ADDREFENTITYTOSCENE
|
||||
equ trap_R_AddPolyToScene -203 ; CG_R_ADDPOLYTOSCENE
|
||||
|
@ -136,22 +138,24 @@ equ trap_G2_HaveWeGhoul2Models -282 ; CG_G2_HAVEWEGHOULMODELS
|
|||
equ trap_G2API_GiveMeVectorFromMatrix -283 ; CG_G2_GIVEMEVECTORFROMMATRIX
|
||||
equ trap_G2API_GetBoltMatrix -284 ; CG_G2_GETBOLT
|
||||
equ trap_G2API_GetBoltMatrix_NoReconstruct -285 ; CG_G2_GETBOLT_NOREC
|
||||
equ trap_G2API_InitGhoul2Model -286 ; CG_G2_INITGHOUL2MODEL
|
||||
equ trap_G2API_CleanGhoul2Models -287 ; CG_G2_CLEANMODELS
|
||||
equ trap_G2API_SetBoneAngles -288 ; CG_G2_ANGLEOVERRIDE
|
||||
equ trap_G2API_SetBoneAnim -289 ; CG_G2_PLAYANIM
|
||||
equ trap_G2API_GetGLAName -290 ; CG_G2_GETGLANAME
|
||||
equ trap_G2API_CopyGhoul2Instance -291 ; CG_G2_COPYGHOUL2INSTANCE
|
||||
equ trap_G2API_CopySpecificGhoul2Model -292 ; CG_G2_COPYSPECIFICGHOUL2MODEL
|
||||
equ trap_G2API_DuplicateGhoul2Instance -293 ; CG_G2_DUPLICATEGHOUL2INSTANCE
|
||||
equ trap_G2API_HasGhoul2ModelOnIndex -294 ; CG_G2_HASGHOUL2MODELONINDEX
|
||||
equ trap_G2API_RemoveGhoul2Model -295 ; CG_G2_REMOVEGHOUL2MODEL
|
||||
equ trap_G2API_AddBolt -296 ; CG_G2_ADDBOLT
|
||||
equ trap_G2API_SetBoltInfo -297 ; CG_G2_SETBOLTON
|
||||
equ trap_G2API_SetRootSurface -298 ; CG_G2_SETROOTSURFACE
|
||||
equ trap_G2API_SetSurfaceOnOff -299 ; CG_G2_SETSURFACEONOFF
|
||||
equ trap_G2API_SetNewOrigin -300 ; CG_G2_SETNEWORIGIN
|
||||
equ trap_CG_RegisterSharedMemory -301 ; CG_SET_SHARED_BUFFER
|
||||
equ trap_G2API_GetBoltMatrix_NoRecNoRot -286 ; CG_G2_GETBOLT_NOREC_NOROT
|
||||
equ trap_G2API_InitGhoul2Model -287 ; CG_G2_INITGHOUL2MODEL
|
||||
equ trap_G2API_CollisionDetect -288 ; CG_G2_COLLISIONDETECT
|
||||
equ trap_G2API_CleanGhoul2Models -289 ; CG_G2_CLEANMODELS
|
||||
equ trap_G2API_SetBoneAngles -290 ; CG_G2_ANGLEOVERRIDE
|
||||
equ trap_G2API_SetBoneAnim -291 ; CG_G2_PLAYANIM
|
||||
equ trap_G2API_GetGLAName -292 ; CG_G2_GETGLANAME
|
||||
equ trap_G2API_CopyGhoul2Instance -293 ; CG_G2_COPYGHOUL2INSTANCE
|
||||
equ trap_G2API_CopySpecificGhoul2Model -294 ; CG_G2_COPYSPECIFICGHOUL2MODEL
|
||||
equ trap_G2API_DuplicateGhoul2Instance -295 ; CG_G2_DUPLICATEGHOUL2INSTANCE
|
||||
equ trap_G2API_HasGhoul2ModelOnIndex -296 ; CG_G2_HASGHOUL2MODELONINDEX
|
||||
equ trap_G2API_RemoveGhoul2Model -297 ; CG_G2_REMOVEGHOUL2MODEL
|
||||
equ trap_G2API_AddBolt -298 ; CG_G2_ADDBOLT
|
||||
equ trap_G2API_SetBoltInfo -299 ; CG_G2_SETBOLTON
|
||||
equ trap_G2API_SetRootSurface -300 ; CG_G2_SETROOTSURFACE
|
||||
equ trap_G2API_SetSurfaceOnOff -301 ; CG_G2_SETSURFACEONOFF
|
||||
equ trap_G2API_SetNewOrigin -302 ; CG_G2_SETNEWORIGIN
|
||||
equ trap_CG_RegisterSharedMemory -303 ; CG_SET_SHARED_BUFFER
|
||||
|
||||
|
||||
; hardcoded functions
|
||||
|
|
|
@ -244,9 +244,19 @@ void trap_R_Font_DrawString(int ox, int oy, const char *text, const float *rgba,
|
|||
syscall( CG_R_FONT_DRAWSTRING, ox, oy, text, rgba, setIndex, iCharLimit, PASSFLOAT(scale));
|
||||
}
|
||||
|
||||
unsigned int trap_AnyLanguage_ReadCharFromString( const char **ppText )
|
||||
qboolean trap_Language_IsAsian(void)
|
||||
{
|
||||
return syscall( CG_ANYLANGUAGE_READCHARFROMSTRING, ppText);
|
||||
return syscall( CG_LANGUAGE_ISASIAN );
|
||||
}
|
||||
|
||||
qboolean trap_Language_UsesSpaces(void)
|
||||
{
|
||||
return syscall( CG_LANGUAGE_USESSPACES );
|
||||
}
|
||||
|
||||
unsigned int trap_AnyLanguage_ReadCharFromString( const char *psText, int *piAdvanceCount, qboolean *pbIsTrailingPunctuation/* = NULL*/ )
|
||||
{
|
||||
return syscall( CG_ANYLANGUAGE_READCHARFROMSTRING, psText, piAdvanceCount, pbIsTrailingPunctuation);
|
||||
}
|
||||
|
||||
void trap_R_ClearScene( void ) {
|
||||
|
@ -659,12 +669,36 @@ qboolean trap_G2API_GetBoltMatrix_NoReconstruct(void *ghoul2, const int modelInd
|
|||
return (qboolean)(syscall(CG_G2_GETBOLT_NOREC, ghoul2, modelIndex, boltIndex, matrix, angles, position, frameNum, modelList, scale));
|
||||
}
|
||||
|
||||
qboolean trap_G2API_GetBoltMatrix_NoRecNoRot(void *ghoul2, const int modelIndex, const int boltIndex, mdxaBone_t *matrix,
|
||||
const vec3_t angles, const vec3_t position, const int frameNum, qhandle_t *modelList, vec3_t scale)
|
||||
{ //Same as above but force it to not reconstruct the skeleton before getting the bolt position
|
||||
return (qboolean)(syscall(CG_G2_GETBOLT_NOREC_NOROT, ghoul2, modelIndex, boltIndex, matrix, angles, position, frameNum, modelList, scale));
|
||||
}
|
||||
|
||||
int trap_G2API_InitGhoul2Model(void **ghoul2Ptr, const char *fileName, int modelIndex, qhandle_t customSkin,
|
||||
qhandle_t customShader, int modelFlags, int lodBias)
|
||||
{
|
||||
return syscall(CG_G2_INITGHOUL2MODEL, ghoul2Ptr, fileName, modelIndex, customSkin, customShader, modelFlags, lodBias);
|
||||
}
|
||||
|
||||
void trap_G2API_CollisionDetect (
|
||||
CollisionRecord_t *collRecMap,
|
||||
void* ghoul2,
|
||||
const vec3_t angles,
|
||||
const vec3_t position,
|
||||
int frameNumber,
|
||||
int entNum,
|
||||
const vec3_t rayStart,
|
||||
const vec3_t rayEnd,
|
||||
const vec3_t scale,
|
||||
int traceFlags,
|
||||
int useLod,
|
||||
float fRadius
|
||||
)
|
||||
{
|
||||
syscall ( CG_G2_COLLISIONDETECT, collRecMap, ghoul2, angles, position, frameNumber, entNum, rayStart, rayEnd, scale, traceFlags, useLod, PASSFLOAT(fRadius) );
|
||||
}
|
||||
|
||||
void trap_G2API_CleanGhoul2Models(void **ghoul2Ptr)
|
||||
{
|
||||
syscall(CG_G2_CLEANMODELS, ghoul2Ptr);
|
||||
|
|
|
@ -1417,50 +1417,36 @@ void CG_Weapon_f( void ) {
|
|||
|
||||
if (num >= WP_THERMAL)
|
||||
{
|
||||
int prenum = 0;
|
||||
int loopback = 0;
|
||||
int weap, i = 0;
|
||||
|
||||
if (cg.snap->ps.weapon >= WP_THERMAL &&
|
||||
cg.snap->ps.weapon <= WP_DET_PACK)
|
||||
{
|
||||
num = cg.snap->ps.weapon;
|
||||
prenum = num;
|
||||
num++;
|
||||
// already in cycle range so start with next cycle item
|
||||
weap = cg.snap->ps.weapon + 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
prenum = num;
|
||||
// not in cycle range, so start with thermal detonator
|
||||
weap = WP_THERMAL;
|
||||
}
|
||||
|
||||
if (num > WP_DET_PACK)
|
||||
// prevent an endless loop
|
||||
while ( i <= 4 )
|
||||
{
|
||||
num = WP_THERMAL;
|
||||
if (weap > WP_DET_PACK)
|
||||
{
|
||||
weap = WP_THERMAL;
|
||||
}
|
||||
|
||||
while (prenum != num || !loopback)
|
||||
{
|
||||
if (num > WP_DET_PACK)
|
||||
{
|
||||
num = WP_THERMAL;
|
||||
loopback = 1;
|
||||
}
|
||||
|
||||
if (CG_WeaponSelectable(num))
|
||||
if (CG_WeaponSelectable(weap))
|
||||
{
|
||||
num = weap;
|
||||
break;
|
||||
}
|
||||
|
||||
if (num == prenum)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
num++;
|
||||
}
|
||||
|
||||
if (num > WP_DET_PACK)
|
||||
{
|
||||
num = WP_THERMAL;
|
||||
weap++;
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Binary file not shown.
490
CODE-mp/client/OpenAL/al.h
Normal file
490
CODE-mp/client/OpenAL/al.h
Normal file
|
@ -0,0 +1,490 @@
|
|||
#ifndef _AL_H_
|
||||
#define _AL_H_
|
||||
|
||||
/**
|
||||
* OpenAL cross platform audio library
|
||||
* Copyright (C) 1999-2000 by authors.
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
* Or go to http://www.gnu.org/copyleft/lgpl.html
|
||||
*/
|
||||
#include "altypes.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifdef _WIN32
|
||||
#ifdef _OPENAL32LIB
|
||||
#define ALAPI __declspec(dllexport)
|
||||
#else
|
||||
#define ALAPI __declspec(dllimport)
|
||||
#endif
|
||||
#define ALAPIENTRY __cdecl
|
||||
#define AL_CALLBACK
|
||||
#else
|
||||
#ifdef TARGET_OS_MAC
|
||||
#if TARGET_OS_MAC
|
||||
#pragma export on
|
||||
#endif
|
||||
#endif
|
||||
#define ALAPI
|
||||
#define ALAPIENTRY __cdecl
|
||||
#define AL_CALLBACK
|
||||
#endif
|
||||
|
||||
#define OPENAL
|
||||
|
||||
#ifndef AL_NO_PROTOTYPES
|
||||
|
||||
/**
|
||||
* OpenAL Maintenance Functions
|
||||
* Initialization and exiting.
|
||||
* State Management and Query.
|
||||
* Error Handling.
|
||||
* Extension Support.
|
||||
*/
|
||||
|
||||
/** State management. */
|
||||
ALAPI ALvoid ALAPIENTRY alEnable( ALenum capability );
|
||||
ALAPI ALvoid ALAPIENTRY alDisable( ALenum capability );
|
||||
ALAPI ALboolean ALAPIENTRY alIsEnabled( ALenum capability );
|
||||
|
||||
/** Application preferences for driver performance choices. */
|
||||
ALAPI ALvoid ALAPIENTRY alHint( ALenum target, ALenum mode );
|
||||
|
||||
/** State retrieval. */
|
||||
ALAPI ALboolean ALAPIENTRY alGetBoolean( ALenum param );
|
||||
ALAPI ALint ALAPIENTRY alGetInteger( ALenum param );
|
||||
ALAPI ALfloat ALAPIENTRY alGetFloat( ALenum param );
|
||||
ALAPI ALdouble ALAPIENTRY alGetDouble( ALenum param );
|
||||
ALAPI ALvoid ALAPIENTRY alGetBooleanv( ALenum param, ALboolean* data );
|
||||
ALAPI ALvoid ALAPIENTRY alGetIntegerv( ALenum param, ALint* data );
|
||||
ALAPI ALvoid ALAPIENTRY alGetFloatv( ALenum param, ALfloat* data );
|
||||
ALAPI ALvoid ALAPIENTRY alGetDoublev( ALenum param, ALdouble* data );
|
||||
ALAPI ALubyte* ALAPIENTRY alGetString( ALenum param );
|
||||
|
||||
/**
|
||||
* Error support.
|
||||
* Obtain the most recent error generated in the AL state machine.
|
||||
*/
|
||||
ALAPI ALenum ALAPIENTRY alGetError( ALvoid );
|
||||
|
||||
|
||||
/**
|
||||
* Extension support.
|
||||
* Obtain the address of a function (usually an extension)
|
||||
* with the name fname. All addresses are context-independent.
|
||||
*/
|
||||
ALAPI ALboolean ALAPIENTRY alIsExtensionPresent( ALubyte* fname );
|
||||
|
||||
|
||||
/**
|
||||
* Extension support.
|
||||
* Obtain the address of a function (usually an extension)
|
||||
* with the name fname. All addresses are context-independent.
|
||||
*/
|
||||
ALAPI ALvoid* ALAPIENTRY alGetProcAddress( ALubyte* fname );
|
||||
|
||||
|
||||
/**
|
||||
* Extension support.
|
||||
* Obtain the integer value of an enumeration (usually an extension) with the name ename.
|
||||
*/
|
||||
ALAPI ALenum ALAPIENTRY alGetEnumValue( ALubyte* ename );
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* LISTENER
|
||||
* Listener is the sample position for a given context.
|
||||
* The multi-channel (usually stereo) output stream generated
|
||||
* by the mixer is parametrized by this Listener object:
|
||||
* its position and velocity relative to Sources, within
|
||||
* occluder and reflector geometry.
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Listener Environment: default 0.
|
||||
*/
|
||||
ALAPI ALvoid ALAPIENTRY alListeneri( ALenum param, ALint value );
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Listener Gain: default 1.0f.
|
||||
*/
|
||||
ALAPI ALvoid ALAPIENTRY alListenerf( ALenum param, ALfloat value );
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Listener Position.
|
||||
* Listener Velocity.
|
||||
*/
|
||||
ALAPI ALvoid ALAPIENTRY alListener3f( ALenum param, ALfloat v1, ALfloat v2, ALfloat v3 );
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Listener Position: ALfloat[3]
|
||||
* Listener Velocity: ALfloat[3]
|
||||
* Listener Orientation: ALfloat[6] (forward and up vector).
|
||||
*/
|
||||
ALAPI ALvoid ALAPIENTRY alListenerfv( ALenum param, ALfloat* values );
|
||||
|
||||
ALAPI ALvoid ALAPIENTRY alGetListeneri( ALenum param, ALint* value );
|
||||
ALAPI ALvoid ALAPIENTRY alGetListenerf( ALenum param, ALfloat* value );
|
||||
ALAPI ALvoid ALAPIENTRY alGetListener3f( ALenum param, ALfloat* v1, ALfloat* v2, ALfloat* v3 );
|
||||
ALAPI ALvoid ALAPIENTRY alGetListenerfv( ALenum param, ALfloat* values );
|
||||
|
||||
|
||||
/**
|
||||
* SOURCE
|
||||
* Source objects are by default localized. Sources
|
||||
* take the PCM data provided in the specified Buffer,
|
||||
* apply Source-specific modifications, and then
|
||||
* submit them to be mixed according to spatial
|
||||
* arrangement etc.
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/** Create Source objects. */
|
||||
ALAPI ALvoid ALAPIENTRY alGenSources( ALsizei n, ALuint* sources );
|
||||
|
||||
/** Delete Source objects. */
|
||||
ALAPI ALvoid ALAPIENTRY alDeleteSources( ALsizei n, ALuint* sources );
|
||||
|
||||
/** Verify a handle is a valid Source. */
|
||||
ALAPI ALboolean ALAPIENTRY alIsSource( ALuint id );
|
||||
|
||||
/** Set an integer parameter for a Source object. */
|
||||
ALAPI ALvoid ALAPIENTRY alSourcei( ALuint source, ALenum param, ALint value );
|
||||
ALAPI ALvoid ALAPIENTRY alSourcef( ALuint source, ALenum param, ALfloat value );
|
||||
ALAPI ALvoid ALAPIENTRY alSource3f( ALuint source, ALenum param, ALfloat v1, ALfloat v2, ALfloat v3 );
|
||||
ALAPI ALvoid ALAPIENTRY alSourcefv( ALuint source, ALenum param, ALfloat* values );
|
||||
|
||||
/** Get an integer parameter for a Source object. */
|
||||
ALAPI ALvoid ALAPIENTRY alGetSourcei( ALuint source, ALenum param, ALint* value );
|
||||
ALAPI ALvoid ALAPIENTRY alGetSourcef( ALuint source, ALenum param, ALfloat* value );
|
||||
ALAPI ALvoid ALAPIENTRY alGetSource3f( ALuint source, ALenum param, ALfloat* v1, ALfloat* v2, ALfloat* v3 );
|
||||
ALAPI ALvoid ALAPIENTRY alGetSourcefv( ALuint source, ALenum param, ALfloat* values );
|
||||
|
||||
ALAPI ALvoid ALAPIENTRY alSourcePlayv( ALsizei n, ALuint *sources );
|
||||
ALAPI ALvoid ALAPIENTRY alSourcePausev( ALsizei n, ALuint *sources );
|
||||
ALAPI ALvoid ALAPIENTRY alSourceStopv( ALsizei n, ALuint *sources );
|
||||
ALAPI ALvoid ALAPIENTRY alSourceRewindv(ALsizei n,ALuint *sources);
|
||||
|
||||
/** Activate a source, start replay. */
|
||||
ALAPI ALvoid ALAPIENTRY alSourcePlay( ALuint source );
|
||||
|
||||
/**
|
||||
* Pause a source,
|
||||
* temporarily remove it from the mixer list.
|
||||
*/
|
||||
ALAPI ALvoid ALAPIENTRY alSourcePause( ALuint source );
|
||||
|
||||
/**
|
||||
* Stop a source,
|
||||
* temporarily remove it from the mixer list,
|
||||
* and reset its internal state to pre-Play.
|
||||
* To remove a Source completely, it has to be
|
||||
* deleted following Stop, or before Play.
|
||||
*/
|
||||
ALAPI ALvoid ALAPIENTRY alSourceStop( ALuint source );
|
||||
|
||||
/**
|
||||
* Rewinds a source,
|
||||
* temporarily remove it from the mixer list,
|
||||
* and reset its internal state to pre-Play.
|
||||
*/
|
||||
ALAPI ALvoid ALAPIENTRY alSourceRewind( ALuint source );
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* BUFFER
|
||||
* Buffer objects are storage space for sample data.
|
||||
* Buffers are referred to by Sources. There can be more than
|
||||
* one Source using the same Buffer data. If Buffers have
|
||||
* to be duplicated on a per-Source basis, the driver has to
|
||||
* take care of allocation, copying, and deallocation as well
|
||||
* as propagating buffer data changes.
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
/** Buffer object generation. */
|
||||
ALAPI ALvoid ALAPIENTRY alGenBuffers( ALsizei n, ALuint* buffers );
|
||||
ALAPI ALvoid ALAPIENTRY alDeleteBuffers( ALsizei n, ALuint* buffers );
|
||||
ALAPI ALboolean ALAPIENTRY alIsBuffer( ALuint buffer );
|
||||
|
||||
/**
|
||||
* Specify the data to be filled into a buffer.
|
||||
*/
|
||||
ALAPI ALvoid ALAPIENTRY alBufferData( ALuint buffer,
|
||||
ALenum format,
|
||||
ALvoid* data,
|
||||
ALsizei size,
|
||||
ALsizei freq );
|
||||
|
||||
|
||||
ALAPI ALvoid ALAPIENTRY alGetBufferi( ALuint buffer, ALenum param, ALint* value );
|
||||
ALAPI ALvoid ALAPIENTRY alGetBufferf( ALuint buffer, ALenum param, ALfloat* value );
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Queue stuff
|
||||
*/
|
||||
|
||||
ALAPI ALvoid ALAPIENTRY alSourceQueueBuffers( ALuint source, ALsizei n, ALuint* buffers );
|
||||
ALAPI ALvoid ALAPIENTRY alSourceUnqueueBuffers( ALuint source, ALsizei n, ALuint* buffers );
|
||||
|
||||
/**
|
||||
* Knobs and dials
|
||||
*/
|
||||
ALAPI ALvoid ALAPIENTRY alDistanceModel( ALenum value );
|
||||
ALAPI ALvoid ALAPIENTRY alDopplerFactor( ALfloat value );
|
||||
ALAPI ALvoid ALAPIENTRY alDopplerVelocity( ALfloat value );
|
||||
|
||||
#else /* AL_NO_PROTOTYPES */
|
||||
|
||||
/**
|
||||
* OpenAL Maintenance Functions
|
||||
* Initialization and exiting.
|
||||
* State Management and Query.
|
||||
* Error Handling.
|
||||
* Extension Support.
|
||||
*/
|
||||
|
||||
/** State management. */
|
||||
ALAPI ALvoid ALAPIENTRY (*alEnable)( ALenum capability );
|
||||
ALAPI ALvoid ALAPIENTRY (*alDisable)( ALenum capability );
|
||||
ALAPI ALboolean ALAPIENTRY (*alIsEnabled)( ALenum capability );
|
||||
|
||||
/** Application preferences for driver performance choices. */
|
||||
ALAPI ALvoid ALAPIENTRY (*alHint)( ALenum target, ALenum mode );
|
||||
|
||||
/** State retrieval. */
|
||||
ALAPI ALboolean ALAPIENTRY (*alGetBoolean)( ALenum param );
|
||||
ALAPI ALint ALAPIENTRY (*alGetInteger)( ALenum param );
|
||||
ALAPI ALfloat ALAPIENTRY (*alGetFloat)( ALenum param );
|
||||
ALAPI ALdouble ALAPIENTRY (*alGetDouble)( ALenum param );
|
||||
ALAPI ALvoid ALAPIENTRY (*alGetBooleanv)( ALenum param, ALboolean* data );
|
||||
ALAPI ALvoid ALAPIENTRY (*alGetIntegerv)( ALenum param, ALint* data );
|
||||
ALAPI ALvoid ALAPIENTRY (*alGetFloatv)( ALenum param, ALfloat* data );
|
||||
ALAPI ALvoid ALAPIENTRY (*alGetDoublev)( ALenum param, ALdouble* data );
|
||||
ALAPI ALubyte* ALAPIENTRY (*alGetString)( ALenum param );
|
||||
|
||||
/**
|
||||
* Error support.
|
||||
* Obtain the most recent error generated in the AL state machine.
|
||||
*/
|
||||
ALAPI ALenum ALAPIENTRY (*alGetError)( ALvoid );
|
||||
|
||||
|
||||
/**
|
||||
* Extension support.
|
||||
* Obtain the address of a function (usually an extension)
|
||||
* with the name fname. All addresses are context-independent.
|
||||
*/
|
||||
ALAPI ALboolean ALAPIENTRY (*alIsExtensionPresent)( ALubyte* fname );
|
||||
|
||||
|
||||
/**
|
||||
* Extension support.
|
||||
* Obtain the address of a function (usually an extension)
|
||||
* with the name fname. All addresses are context-independent.
|
||||
*/
|
||||
ALAPI ALvoid* ALAPIENTRY (*alGetProcAddress)( ALubyte* fname );
|
||||
|
||||
|
||||
/**
|
||||
* Extension support.
|
||||
* Obtain the integer value of an enumeration (usually an extension) with the name ename.
|
||||
*/
|
||||
ALAPI ALenum ALAPIENTRY (*alGetEnumValue)( ALubyte* ename );
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* LISTENER
|
||||
* Listener is the sample position for a given context.
|
||||
* The multi-channel (usually stereo) output stream generated
|
||||
* by the mixer is parametrized by this Listener object:
|
||||
* its position and velocity relative to Sources, within
|
||||
* occluder and reflector geometry.
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Listener Environment: default 0.
|
||||
*/
|
||||
ALAPI ALvoid ALAPIENTRY (*alListeneri)( ALenum param, ALint value );
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Listener Gain: default 1.0f.
|
||||
*/
|
||||
ALAPI ALvoid ALAPIENTRY (*alListenerf)( ALenum param, ALfloat value );
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Listener Position.
|
||||
* Listener Velocity.
|
||||
*/
|
||||
ALAPI ALvoid ALAPIENTRY (*alListener3f)( ALenum param, ALfloat v1, ALfloat v2, ALfloat v3 );
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Listener Position: ALfloat[3]
|
||||
* Listener Velocity: ALfloat[3]
|
||||
* Listener Orientation: ALfloat[6] (forward and up vector).
|
||||
*/
|
||||
ALAPI ALvoid ALAPIENTRY (*alListenerfv)( ALenum param, ALfloat* values );
|
||||
|
||||
ALAPI ALvoid ALAPIENTRY (*alGetListeneri)( ALenum param, ALint* value );
|
||||
ALAPI ALvoid ALAPIENTRY (*alGetListenerf)( ALenum param, ALfloat* value );
|
||||
ALAPI ALvoid ALAPIENTRY (*alGetListener3f)( ALenum param, ALfloat* v1, ALfloat* v2, ALfloat* v3 );
|
||||
ALAPI ALvoid ALAPIENTRY (*alGetListenerfv)( ALenum param, ALfloat* values );
|
||||
|
||||
|
||||
/**
|
||||
* SOURCE
|
||||
* Source objects are by default localized. Sources
|
||||
* take the PCM data provided in the specified Buffer,
|
||||
* apply Source-specific modifications, and then
|
||||
* submit them to be mixed according to spatial
|
||||
* arrangement etc.
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/** Create Source objects. */
|
||||
ALAPI ALvoid ALAPIENTRY (*alGenSources)( ALsizei n, ALuint* sources );
|
||||
|
||||
/** Delete Source objects. */
|
||||
ALAPI ALvoid ALAPIENTRY (*alDeleteSources)( ALsizei n, ALuint* sources );
|
||||
|
||||
/** Verify a handle is a valid Source. */
|
||||
ALAPI ALboolean ALAPIENTRY (*alIsSource)( ALuint id );
|
||||
|
||||
/** Set an integer parameter for a Source object. */
|
||||
ALAPI ALvoid ALAPIENTRY (*alSourcei)( ALuint source, ALenum param, ALint value );
|
||||
ALAPI ALvoid ALAPIENTRY (*alSourcef)( ALuint source, ALenum param, ALfloat value );
|
||||
ALAPI ALvoid ALAPIENTRY (*alSource3f)( ALuint source, ALenum param, ALfloat v1, ALfloat v2, ALfloat v3 );
|
||||
ALAPI ALvoid ALAPIENTRY (*alSourcefv)( ALuint source, ALenum param, ALfloat* values );
|
||||
|
||||
/** Get an integer parameter for a Source object. */
|
||||
ALAPI ALvoid ALAPIENTRY (*alGetSourcei)( ALuint source, ALenum param, ALint* value );
|
||||
ALAPI ALvoid ALAPIENTRY (*alGetSourcef)( ALuint source, ALenum param, ALfloat* value );
|
||||
ALAPI ALvoid ALAPIENTRY (*alGetSourcefv)( ALuint source, ALenum param, ALfloat* values );
|
||||
|
||||
ALAPI ALvoid ALAPIENTRY (*alSourcePlayv)( ALsizei n, ALuint *sources );
|
||||
ALAPI ALvoid ALAPIENTRY (*alSourceStopv)( ALsizei n, ALuint *sources );
|
||||
|
||||
/** Activate a source, start replay. */
|
||||
ALAPI ALvoid ALAPIENTRY (*alSourcePlay)( ALuint source );
|
||||
|
||||
/**
|
||||
* Pause a source,
|
||||
* temporarily remove it from the mixer list.
|
||||
*/
|
||||
ALAPI ALvoid ALAPIENTRY (*alSourcePause)( ALuint source );
|
||||
|
||||
/**
|
||||
* Stop a source,
|
||||
* temporarily remove it from the mixer list,
|
||||
* and reset its internal state to pre-Play.
|
||||
* To remove a Source completely, it has to be
|
||||
* deleted following Stop, or before Play.
|
||||
*/
|
||||
ALAPI ALvoid ALAPIENTRY (*alSourceStop)( ALuint source );
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* BUFFER
|
||||
* Buffer objects are storage space for sample data.
|
||||
* Buffers are referred to by Sources. There can be more than
|
||||
* one Source using the same Buffer data. If Buffers have
|
||||
* to be duplicated on a per-Source basis, the driver has to
|
||||
* take care of allocation, copying, and deallocation as well
|
||||
* as propagating buffer data changes.
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
/** Buffer object generation. */
|
||||
ALAPI ALvoid ALAPIENTRY (*alGenBuffers)( ALsizei n, ALuint* buffers );
|
||||
ALAPI ALvoid ALAPIENTRY (*alDeleteBuffers)( ALsizei n, ALuint* buffers );
|
||||
ALAPI ALboolean ALAPIENTRY (*alIsBuffer)( ALuint buffer );
|
||||
|
||||
/**
|
||||
* Specify the data to be filled into a buffer.
|
||||
*/
|
||||
ALAPI ALvoid ALAPIENTRY (*alBufferData)( ALuint buffer,
|
||||
ALenum format,
|
||||
ALvoid* data,
|
||||
ALsizei size,
|
||||
ALsizei freq );
|
||||
|
||||
ALAPI ALvoid ALAPIENTRY (*alGetBufferi)( ALuint buffer, ALenum param, ALint* value );
|
||||
ALAPI ALvoid ALAPIENTRY (*alGetBufferf)( ALuint buffer, ALenum param, ALfloat* value );
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Queue stuff
|
||||
*/
|
||||
ALAPI ALvoid ALAPIENTRY (*alSourceQueueBuffers)( ALuint source, ALsizei n, ALuint* buffers );
|
||||
ALAPI ALvoid ALAPIENTRY (*alSourceUnqueueBuffers)( ALuint source, ALsizei n, ALuint* buffers );
|
||||
|
||||
/**
|
||||
* Knobs and dials
|
||||
*/
|
||||
ALAPI ALvoid ALAPIENTRY (*alDistanceModel)( ALenum value );
|
||||
ALAPI ALvoid ALAPIENTRY (*alDopplerFactor)( ALfloat value );
|
||||
ALAPI ALvoid ALAPIENTRY (*alDopplerVelocity)( ALfloat value );
|
||||
|
||||
#endif /* AL_NO_PROTOTYPES */
|
||||
|
||||
#ifdef TARGET_OS_MAC
|
||||
#if TARGET_OS_MAC
|
||||
#pragma export off
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
90
CODE-mp/client/OpenAL/alc.h
Normal file
90
CODE-mp/client/OpenAL/alc.h
Normal file
|
@ -0,0 +1,90 @@
|
|||
#ifndef _ALC_H_
|
||||
#define _ALC_H_
|
||||
|
||||
#include "altypes.h"
|
||||
#include "alctypes.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifdef _WIN32
|
||||
#ifdef _OPENAL32LIB
|
||||
#define ALCAPI __declspec(dllexport)
|
||||
#else
|
||||
#define ALCAPI __declspec(dllimport)
|
||||
#endif
|
||||
|
||||
typedef struct ALCdevice_struct ALCdevice;
|
||||
typedef struct ALCcontext_struct ALCcontext;
|
||||
|
||||
#define ALCAPIENTRY __cdecl
|
||||
#else
|
||||
#ifdef TARGET_OS_MAC
|
||||
#if TARGET_OS_MAC
|
||||
#pragma export on
|
||||
#endif
|
||||
#endif
|
||||
#define ALCAPI
|
||||
#define ALCAPIENTRY __cdecl
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#ifndef ALC_NO_PROTOTYPES
|
||||
|
||||
ALCAPI ALCubyte* ALCAPIENTRY alcGetString(ALCdevice *device,ALCenum param);
|
||||
ALCAPI ALCvoid ALCAPIENTRY alcGetIntegerv(ALCdevice *device,ALCenum param,ALCsizei size,ALCint *data);
|
||||
|
||||
ALCAPI ALCdevice* ALCAPIENTRY alcOpenDevice(ALCubyte *deviceName);
|
||||
ALCAPI ALCvoid ALCAPIENTRY alcCloseDevice(ALCdevice *device);
|
||||
|
||||
ALCAPI ALCcontext*ALCAPIENTRY alcCreateContext(ALCdevice *device,ALCint *attrList);
|
||||
ALCAPI ALCboolean ALCAPIENTRY alcMakeContextCurrent(ALCcontext *context);
|
||||
ALCAPI ALCvoid ALCAPIENTRY alcProcessContext(ALCcontext *context);
|
||||
ALCAPI ALCcontext*ALCAPIENTRY alcGetCurrentContext(ALCvoid);
|
||||
ALCAPI ALCdevice* ALCAPIENTRY alcGetContextsDevice(ALCcontext *context);
|
||||
ALCAPI ALCvoid ALCAPIENTRY alcSuspendContext(ALCcontext *context);
|
||||
ALCAPI ALCvoid ALCAPIENTRY alcDestroyContext(ALCcontext *context);
|
||||
|
||||
ALCAPI ALCenum ALCAPIENTRY alcGetError(ALCdevice *device);
|
||||
|
||||
ALCAPI ALCboolean ALCAPIENTRY alcIsExtensionPresent(ALCdevice *device,ALCubyte *extName);
|
||||
ALCAPI ALCvoid * ALCAPIENTRY alcGetProcAddress(ALCdevice *device,ALCubyte *funcName);
|
||||
ALCAPI ALCenum ALCAPIENTRY alcGetEnumValue(ALCdevice *device,ALCubyte *enumName);
|
||||
|
||||
#else /* AL_NO_PROTOTYPES */
|
||||
|
||||
ALCAPI ALCubyte* ALCAPIENTRY (*alcGetString)(ALCdevice *device,ALCenum param);
|
||||
ALCAPI ALCvoid ALCAPIENTRY (*alcGetIntegerv)(ALCdevice * device,ALCenum param,ALCsizei size,ALCint *data);
|
||||
|
||||
ALCAPI ALCdevice* ALCAPIENTRY (*alcOpenDevice)(ALubyte *deviceName);
|
||||
ALCAPI ALCvoid ALCAPIENTRY (*alcCloseDevice)(ALCdevice *device);
|
||||
|
||||
ALCAPI ALCcontext*ALCAPIENTRY (*alcCreateContext)(ALCdevice *device,ALCint *attrList);
|
||||
ALCAPI ALCboolean ALCAPIENTRY (*alcMakeContextCurrent)(ALCcontext *context);
|
||||
ALCAPI ALCvoid ALCAPIENTRY (*alcProcessContext)(ALCcontext *context);
|
||||
ALCAPI ALCcontext*ALCAPIENTRY (*alcGetCurrentContext)(ALCvoid);
|
||||
ALCAPI ALCdevice* ALCAPIENTRY (*alcGetContextsDevice)(ALCcontext *context);
|
||||
ALCAPI ALCvoid ALCAPIENTRY (*alcSuspendContext)(ALCcontext *context);
|
||||
ALCAPI ALCvoid ALCAPIENTRY (*alcDestroyContext)(ALCcontext *context);
|
||||
|
||||
ALCAPI ALCenum ALCAPIENTRY (*alcGetError)(ALCdevice *device);
|
||||
|
||||
ALCAPI ALCboolean ALCAPIENTRY (*alcIsExtensionPresent)(ALCdevice *device,ALCubyte *extName);
|
||||
ALCAPI ALCvoid * ALCAPIENTRY (*alcGetProcAddress)(ALCdevice *device,ALCubyte *funcName);
|
||||
ALCAPI ALCenum ALCAPIENTRY (*alcGetEnumValue)(ALCdevice *device,ALCubyte *enumName);
|
||||
|
||||
#endif /* AL_NO_PROTOTYPES */
|
||||
|
||||
#ifdef TARGET_OS_MAC
|
||||
#if TARGET_OS_MAC
|
||||
#pragma export off
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
125
CODE-mp/client/OpenAL/alctypes.h
Normal file
125
CODE-mp/client/OpenAL/alctypes.h
Normal file
|
@ -0,0 +1,125 @@
|
|||
#ifndef _ALCTYPES_H_
|
||||
#define _ALCTYPES_H_
|
||||
|
||||
/**
|
||||
* OpenAL cross platform audio library
|
||||
* Copyright (C) 1999-2000 by authors.
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
* Or go to http://www.gnu.org/copyleft/lgpl.html
|
||||
*/
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/** ALC boolean type. */
|
||||
typedef char ALCboolean;
|
||||
|
||||
/** ALC 8bit signed byte. */
|
||||
typedef char ALCbyte;
|
||||
|
||||
/** ALC 8bit unsigned byte. */
|
||||
typedef unsigned char ALCubyte;
|
||||
|
||||
/** ALC 16bit signed short integer type. */
|
||||
typedef short ALCshort;
|
||||
|
||||
/** ALC 16bit unsigned short integer type. */
|
||||
typedef unsigned short ALCushort;
|
||||
|
||||
/** ALC 32bit unsigned integer type. */
|
||||
typedef unsigned ALCuint;
|
||||
|
||||
/** ALC 32bit signed integer type. */
|
||||
typedef int ALCint;
|
||||
|
||||
/** ALC 32bit floating point type. */
|
||||
typedef float ALCfloat;
|
||||
|
||||
/** ALC 64bit double point type. */
|
||||
typedef double ALCdouble;
|
||||
|
||||
/** ALC 32bit type. */
|
||||
typedef unsigned int ALCsizei;
|
||||
|
||||
/** ALC void type */
|
||||
typedef void ALCvoid;
|
||||
|
||||
/** ALC enumerations. */
|
||||
typedef int ALCenum;
|
||||
|
||||
/* Bad value. */
|
||||
#define ALC_INVALID (-1)
|
||||
|
||||
/* Boolean False. */
|
||||
#define ALC_FALSE 0
|
||||
|
||||
/* Boolean True. */
|
||||
#define ALC_TRUE 1
|
||||
|
||||
/** Errors: No Error. */
|
||||
#define ALC_NO_ERROR ALC_FALSE
|
||||
|
||||
#define ALC_MAJOR_VERSION 0x1000
|
||||
#define ALC_MINOR_VERSION 0x1001
|
||||
#define ALC_ATTRIBUTES_SIZE 0x1002
|
||||
#define ALC_ALL_ATTRIBUTES 0x1003
|
||||
|
||||
#define ALC_DEFAULT_DEVICE_SPECIFIER 0x1004
|
||||
#define ALC_DEVICE_SPECIFIER 0x1005
|
||||
#define ALC_EXTENSIONS 0x1006
|
||||
|
||||
#define ALC_FREQUENCY 0x1007
|
||||
#define ALC_REFRESH 0x1008
|
||||
#define ALC_SYNC 0x1009
|
||||
|
||||
/**
|
||||
* The device argument does not name a valid dvice.
|
||||
*/
|
||||
#define ALC_INVALID_DEVICE 0xA001
|
||||
|
||||
/**
|
||||
* The context argument does not name a valid context.
|
||||
*/
|
||||
#define ALC_INVALID_CONTEXT 0xA002
|
||||
|
||||
/**
|
||||
* A function was called at inappropriate time,
|
||||
* or in an inappropriate way, causing an illegal state.
|
||||
* This can be an incompatible ALenum, object ID,
|
||||
* and/or function.
|
||||
*/
|
||||
#define ALC_INVALID_ENUM 0xA003
|
||||
|
||||
/**
|
||||
* Illegal value passed as an argument to an AL call.
|
||||
* Applies to parameter values, but not to enumerations.
|
||||
*/
|
||||
#define ALC_INVALID_VALUE 0xA004
|
||||
|
||||
/**
|
||||
* A function could not be completed,
|
||||
* because there is not enough memory available.
|
||||
*/
|
||||
#define ALC_OUT_OF_MEMORY 0xA005
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
332
CODE-mp/client/OpenAL/altypes.h
Normal file
332
CODE-mp/client/OpenAL/altypes.h
Normal file
|
@ -0,0 +1,332 @@
|
|||
#ifndef _ALTYPES_H_
|
||||
#define _ALTYPES_H_
|
||||
|
||||
/**
|
||||
* OpenAL cross platform audio library
|
||||
* Copyright (C) 1999-2000 by authors.
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
* Or go to http://www.gnu.org/copyleft/lgpl.html
|
||||
*/
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/** OpenAL boolean type. */
|
||||
typedef char ALboolean;
|
||||
|
||||
/** OpenAL 8bit signed byte. */
|
||||
typedef char ALbyte;
|
||||
|
||||
/** OpenAL 8bit unsigned byte. */
|
||||
typedef unsigned char ALubyte;
|
||||
|
||||
/** OpenAL 16bit signed short integer type. */
|
||||
typedef short ALshort;
|
||||
|
||||
/** OpenAL 16bit unsigned short integer type. */
|
||||
typedef unsigned short ALushort;
|
||||
|
||||
/** OpenAL 32bit unsigned integer type. */
|
||||
typedef unsigned ALuint;
|
||||
|
||||
/** OpenAL 32bit signed integer type. */
|
||||
typedef int ALint;
|
||||
|
||||
/** OpenAL 32bit floating point type. */
|
||||
typedef float ALfloat;
|
||||
|
||||
/** OpenAL 64bit double point type. */
|
||||
typedef double ALdouble;
|
||||
|
||||
/** OpenAL 32bit type. */
|
||||
typedef unsigned int ALsizei;
|
||||
|
||||
/** OpenAL void type */
|
||||
typedef void ALvoid;
|
||||
|
||||
/** OpenAL enumerations. */
|
||||
typedef int ALenum;
|
||||
|
||||
/* Bad value. */
|
||||
#define AL_INVALID (-1)
|
||||
|
||||
/* Disable value. */
|
||||
#define AL_NONE 0
|
||||
|
||||
/* Boolean False. */
|
||||
#define AL_FALSE 0
|
||||
|
||||
/* Boolean True. */
|
||||
#define AL_TRUE 1
|
||||
|
||||
/**
|
||||
* Indicate the type of AL_SOURCE.
|
||||
* Sources can be spatialized
|
||||
*/
|
||||
#define AL_SOURCE_TYPE 0x200
|
||||
|
||||
/** Indicate source has absolute coordinates. */
|
||||
#define AL_SOURCE_ABSOLUTE 0x201
|
||||
|
||||
/** Indicate Source has listener relative coordinates. */
|
||||
#define AL_SOURCE_RELATIVE 0x202
|
||||
|
||||
/**
|
||||
* Directional source, inner cone angle, in degrees.
|
||||
* Range: [0-360]
|
||||
* Default: 360
|
||||
*/
|
||||
#define AL_CONE_INNER_ANGLE 0x1001
|
||||
|
||||
/**
|
||||
* Directional source, outer cone angle, in degrees.
|
||||
* Range: [0-360]
|
||||
* Default: 360
|
||||
*/
|
||||
#define AL_CONE_OUTER_ANGLE 0x1002
|
||||
|
||||
/**
|
||||
* Specify the pitch to be applied, either at source,
|
||||
* or on mixer results, at listener.
|
||||
* Range: [0.5-2.0]
|
||||
* Default: 1.0
|
||||
*/
|
||||
#define AL_PITCH 0x1003
|
||||
|
||||
/**
|
||||
* Specify the current location in three dimensional space.
|
||||
* OpenAL, like OpenGL, uses a right handed coordinate system,
|
||||
* where in a frontal default view X (thumb) points right,
|
||||
* Y points up (index finger), and Z points towards the
|
||||
* viewer/camera (middle finger).
|
||||
* To switch from a left handed coordinate system, flip the
|
||||
* sign on the Z coordinate.
|
||||
* Listener position is always in the world coordinate system.
|
||||
*/
|
||||
#define AL_POSITION 0x1004
|
||||
|
||||
/** Specify the current direction as forward vector. */
|
||||
#define AL_DIRECTION 0x1005
|
||||
|
||||
/** Specify the current velocity in three dimensional space. */
|
||||
#define AL_VELOCITY 0x1006
|
||||
|
||||
/**
|
||||
* Indicate whether source has to loop infinite.
|
||||
* Type: ALboolean
|
||||
* Range: [AL_TRUE, AL_FALSE]
|
||||
* Default: AL_FALSE
|
||||
*/
|
||||
#define AL_LOOPING 0x1007
|
||||
|
||||
/**
|
||||
* Indicate the buffer to provide sound samples.
|
||||
* Type: ALuint.
|
||||
* Range: any valid Buffer id.
|
||||
*/
|
||||
#define AL_BUFFER 0x1009
|
||||
|
||||
/**
|
||||
* Indicate the gain (volume amplification) applied.
|
||||
* Type: ALfloat.
|
||||
* Range: ]0.0- ]
|
||||
* A value of 1.0 means un-attenuated/unchanged.
|
||||
* Each division by 2 equals an attenuation of -6dB.
|
||||
* Each multiplicaton with 2 equals an amplification of +6dB.
|
||||
* A value of 0.0 is meaningless with respect to a logarithmic
|
||||
* scale; it is interpreted as zero volume - the channel
|
||||
* is effectively disabled.
|
||||
*/
|
||||
#define AL_GAIN 0x100A
|
||||
|
||||
/**
|
||||
* Indicate minimum source attenuation.
|
||||
* Type: ALfloat
|
||||
* Range: [0.0 - 1.0]
|
||||
*/
|
||||
#define AL_MIN_GAIN 0x100D
|
||||
|
||||
/**
|
||||
* Indicate maximum source attenuation.
|
||||
* Type: ALfloat
|
||||
* Range: [0.0 - 1.0]
|
||||
*/
|
||||
#define AL_MAX_GAIN 0x100E
|
||||
|
||||
/**
|
||||
* Specify the current orientation.
|
||||
* Type: ALfv6 (at/up)
|
||||
* Range: N/A
|
||||
*/
|
||||
#define AL_ORIENTATION 0x100F
|
||||
|
||||
/* byte offset into source (in canon format). -1 if source
|
||||
* is not playing. Don't set this, get this.
|
||||
*
|
||||
* Type: ALfloat
|
||||
* Range: [0.0 - ]
|
||||
* Default: 1.0
|
||||
*/
|
||||
#define AL_REFERENCE_DISTANCE 0x1020
|
||||
|
||||
/**
|
||||
* Indicate the rolloff factor for the source.
|
||||
* Type: ALfloat
|
||||
* Range: [0.0 - ]
|
||||
* Default: 1.0
|
||||
*/
|
||||
#define AL_ROLLOFF_FACTOR 0x1021
|
||||
|
||||
/**
|
||||
* Indicate the gain (volume amplification) applied.
|
||||
* Type: ALfloat.
|
||||
* Range: ]0.0- ]
|
||||
* A value of 1.0 means un-attenuated/unchanged.
|
||||
* Each division by 2 equals an attenuation of -6dB.
|
||||
* Each multiplicaton with 2 equals an amplification of +6dB.
|
||||
* A value of 0.0 is meaningless with respect to a logarithmic
|
||||
* scale; it is interpreted as zero volume - the channel
|
||||
* is effectively disabled.
|
||||
*/
|
||||
#define AL_CONE_OUTER_GAIN 0x1022
|
||||
|
||||
/**
|
||||
* Specify the maximum distance.
|
||||
* Type: ALfloat
|
||||
* Range: [0.0 - ]
|
||||
*/
|
||||
#define AL_MAX_DISTANCE 0x1023
|
||||
|
||||
/**
|
||||
* Specify the channel mask. (Creative)
|
||||
* Type: ALuint
|
||||
* Range: [0 - 255]
|
||||
*/
|
||||
#define AL_CHANNEL_MASK 0x3000
|
||||
|
||||
/**
|
||||
* Source state information
|
||||
*/
|
||||
#define AL_SOURCE_STATE 0x1010
|
||||
#define AL_INITIAL 0x1011
|
||||
#define AL_PLAYING 0x1012
|
||||
#define AL_PAUSED 0x1013
|
||||
#define AL_STOPPED 0x1014
|
||||
|
||||
/**
|
||||
* Buffer Queue params
|
||||
*/
|
||||
#define AL_BUFFERS_QUEUED 0x1015
|
||||
#define AL_BUFFERS_PROCESSED 0x1016
|
||||
|
||||
/** Sound buffers: format specifier. */
|
||||
#define AL_FORMAT_MONO8 0x1100
|
||||
#define AL_FORMAT_MONO16 0x1101
|
||||
#define AL_FORMAT_STEREO8 0x1102
|
||||
#define AL_FORMAT_STEREO16 0x1103
|
||||
|
||||
/**
|
||||
* Sound buffers: frequency, in units of Hertz [Hz].
|
||||
* This is the number of samples per second. Half of the
|
||||
* sample frequency marks the maximum significant
|
||||
* frequency component.
|
||||
*/
|
||||
#define AL_FREQUENCY 0x2001
|
||||
#define AL_BITS 0x2002
|
||||
#define AL_CHANNELS 0x2003
|
||||
#define AL_SIZE 0x2004
|
||||
#define AL_DATA 0x2005
|
||||
|
||||
/**
|
||||
* Buffer state.
|
||||
*
|
||||
* Not supported for public use (yet).
|
||||
*/
|
||||
#define AL_UNUSED 0x2010
|
||||
#define AL_PENDING 0x2011
|
||||
#define AL_PROCESSED 0x2012
|
||||
|
||||
/** Errors: No Error. */
|
||||
#define AL_NO_ERROR AL_FALSE
|
||||
|
||||
/**
|
||||
* Illegal name passed as an argument to an AL call.
|
||||
*/
|
||||
#define AL_INVALID_NAME 0xA001
|
||||
|
||||
/**
|
||||
* Illegal enum passed as an argument to an AL call.
|
||||
*/
|
||||
#define AL_INVALID_ENUM 0xA002
|
||||
/**
|
||||
* Illegal value passed as an argument to an AL call.
|
||||
* Applies to parameter values, but not to enumerations.
|
||||
*/
|
||||
#define AL_INVALID_VALUE 0xA003
|
||||
|
||||
/**
|
||||
* A function was called at inappropriate time,
|
||||
* or in an inappropriate way, causing an illegal state.
|
||||
* This can be an incompatible ALenum, object ID,
|
||||
* and/or function.
|
||||
*/
|
||||
#define AL_INVALID_OPERATION 0xA004
|
||||
|
||||
/**
|
||||
* A function could not be completed,
|
||||
* because there is not enough memory available.
|
||||
*/
|
||||
#define AL_OUT_OF_MEMORY 0xA005
|
||||
|
||||
/** Context strings: Vendor Name. */
|
||||
#define AL_VENDOR 0xB001
|
||||
#define AL_VERSION 0xB002
|
||||
#define AL_RENDERER 0xB003
|
||||
#define AL_EXTENSIONS 0xB004
|
||||
|
||||
/** Global tweakage. */
|
||||
|
||||
/**
|
||||
* Doppler scale. Default 1.0
|
||||
*/
|
||||
#define AL_DOPPLER_FACTOR 0xC000
|
||||
|
||||
/**
|
||||
* Doppler velocity. Default 1.0
|
||||
*/
|
||||
#define AL_DOPPLER_VELOCITY 0xC001
|
||||
|
||||
/**
|
||||
* Distance model. Default AL_INVERSE_DISTANCE_CLAMPED
|
||||
*/
|
||||
#define AL_DISTANCE_MODEL 0xD000
|
||||
|
||||
/** Distance models. */
|
||||
|
||||
#define AL_INVERSE_DISTANCE 0xD001
|
||||
#define AL_INVERSE_DISTANCE_CLAMPED 0xD002
|
||||
|
||||
/**
|
||||
* enables
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
34
CODE-mp/client/OpenAL/alu.h
Normal file
34
CODE-mp/client/OpenAL/alu.h
Normal file
|
@ -0,0 +1,34 @@
|
|||
#ifndef _ALU_H_
|
||||
#define _ALU_H_
|
||||
|
||||
#define ALUAPI
|
||||
#define ALUAPIENTRY __cdecl
|
||||
|
||||
#define BUFFERSIZE 48000
|
||||
#define FRACTIONBITS 14
|
||||
#define FRACTIONMASK ((1L<<FRACTIONBITS)-1)
|
||||
#define OUTPUTCHANNELS 2
|
||||
|
||||
#include "altypes.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
ALUAPI ALint ALUAPIENTRY aluF2L(ALfloat value);
|
||||
ALUAPI ALshort ALUAPIENTRY aluF2S(ALfloat value);
|
||||
ALUAPI ALvoid ALUAPIENTRY aluCrossproduct(ALfloat *inVector1,ALfloat *inVector2,ALfloat *outVector);
|
||||
ALUAPI ALfloat ALUAPIENTRY aluDotproduct(ALfloat *inVector1,ALfloat *inVector2);
|
||||
ALUAPI ALvoid ALUAPIENTRY aluNormalize(ALfloat *inVector);
|
||||
ALUAPI ALvoid ALUAPIENTRY aluMatrixVector(ALfloat matrix[3][3],ALfloat *vector);
|
||||
ALUAPI ALvoid ALUAPIENTRY aluCalculateSourceParameters(ALuint source,ALuint channels,ALfloat *drysend,ALfloat *wetsend,ALfloat *pitch);
|
||||
ALUAPI ALvoid ALUAPIENTRY aluMixData(ALvoid *context,ALvoid *buffer,ALsizei size,ALenum format);
|
||||
ALUAPI ALvoid ALUAPIENTRY aluSetReverb(ALvoid *Reverb,ALuint Environment);
|
||||
ALUAPI ALvoid ALUAPIENTRY aluReverb(ALvoid *Reverb,ALfloat Buffer[][2],ALsizei BufferSize);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
24
CODE-mp/client/OpenAL/alut.h
Normal file
24
CODE-mp/client/OpenAL/alut.h
Normal file
|
@ -0,0 +1,24 @@
|
|||
#ifndef _ALUT_H_
|
||||
#define _ALUT_H_
|
||||
|
||||
#define ALUTAPI
|
||||
#define ALUTAPIENTRY __cdecl
|
||||
|
||||
#include "al.h"
|
||||
#include "alu.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
ALUTAPI ALvoid ALUTAPIENTRY alutInit(ALint *argc,ALbyte **argv);
|
||||
ALUTAPI ALvoid ALUTAPIENTRY alutExit(ALvoid);
|
||||
ALUTAPI ALvoid ALUTAPIENTRY alutLoadWAVFile(ALbyte *file,ALenum *format,ALvoid **data,ALsizei *size,ALsizei *freq,ALboolean *loop);
|
||||
ALUTAPI ALvoid ALUTAPIENTRY alutLoadWAVMemory(ALbyte *memory,ALenum *format,ALvoid **data,ALsizei *size,ALsizei *freq,ALboolean *loop);
|
||||
ALUTAPI ALvoid ALUTAPIENTRY alutUnloadWAV(ALenum format,ALvoid *data,ALsizei size,ALsizei freq);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
BIN
CODE-mp/client/OpenAL/vssver.scc
Normal file
BIN
CODE-mp/client/OpenAL/vssver.scc
Normal file
Binary file not shown.
|
@ -28,6 +28,10 @@ Ghoul2 Insert Start
|
|||
|
||||
#include "../qcommon/strip.h"
|
||||
|
||||
#ifdef G2_COLLISION_ENABLED
|
||||
extern CMiniHeap *G2VertSpaceClient;
|
||||
#endif
|
||||
|
||||
/*
|
||||
Ghoul2 Insert End
|
||||
*/
|
||||
|
@ -635,8 +639,12 @@ int CL_CgameSystemCalls( int *args ) {
|
|||
case CG_R_FONT_DRAWSTRING:
|
||||
re.Font_DrawString( args[1], args[2], (const char *)VMA(3), (const float *) VMA(4), args[5], args[6], VMF(7) );
|
||||
return 0;
|
||||
case CG_LANGUAGE_ISASIAN:
|
||||
return re.Language_IsAsian();
|
||||
case CG_LANGUAGE_USESSPACES:
|
||||
return re.Language_UsesSpaces();
|
||||
case CG_ANYLANGUAGE_READCHARFROMSTRING:
|
||||
return re.AnyLanguage_ReadCharFromString( (const char **)VMA(1) );
|
||||
return re.AnyLanguage_ReadCharFromString( (const char *) VMA(1), (int *) VMA(2), (qboolean *) VMA(3) );
|
||||
case CG_R_CLEARSCENE:
|
||||
re.ClearScene();
|
||||
return 0;
|
||||
|
@ -994,11 +1002,34 @@ Ghoul2 Insert Start
|
|||
gG2_GBMNoReconstruct = qtrue;
|
||||
return G2API_GetBoltMatrix(*((CGhoul2Info_v *)args[1]), args[2], args[3], (mdxaBone_t *)VMA(4), (const float *)VMA(5),(const float *)VMA(6), args[7], (qhandle_t *)VMA(8), (float *)VMA(9));
|
||||
|
||||
case CG_G2_GETBOLT_NOREC_NOROT:
|
||||
gG2_GBMNoReconstruct = qtrue;
|
||||
gG2_GBMUseSPMethod = qtrue;
|
||||
return G2API_GetBoltMatrix(*((CGhoul2Info_v *)args[1]), args[2], args[3], (mdxaBone_t *)VMA(4), (const float *)VMA(5),(const float *)VMA(6), args[7], (qhandle_t *)VMA(8), (float *)VMA(9));
|
||||
|
||||
case CG_G2_INITGHOUL2MODEL:
|
||||
RicksCrazyOnServer=false;
|
||||
return G2API_InitGhoul2Model((CGhoul2Info_v **)VMA(1), (const char *)VMA(2), args[3], (qhandle_t) args[4],
|
||||
(qhandle_t) args[5], args[6], args[7]);
|
||||
|
||||
|
||||
case CG_G2_COLLISIONDETECT:
|
||||
#ifdef G2_COLLISION_ENABLED
|
||||
G2API_CollisionDetect ( (CollisionRecord_t*)VMA(1), *((CGhoul2Info_v *)args[2]),
|
||||
(const float*)VMA(3),
|
||||
(const float*)VMA(4),
|
||||
args[5],
|
||||
args[6],
|
||||
(float*)VMA(7),
|
||||
(float*)VMA(8),
|
||||
(float*)VMA(9),
|
||||
G2VertSpaceClient,
|
||||
args[10],
|
||||
args[11],
|
||||
VMF(12) );
|
||||
#endif
|
||||
return 0;
|
||||
|
||||
case CG_G2_ANGLEOVERRIDE:
|
||||
return G2API_SetBoneAngles(*((CGhoul2Info_v *)args[1]), args[2], (const char *)VMA(3), (float *)VMA(4), args[5],
|
||||
(const Eorientations) args[6], (const Eorientations) args[7], (const Eorientations) args[8],
|
||||
|
|
|
@ -30,8 +30,8 @@ void Con_ToggleConsole_f (void) {
|
|||
return;
|
||||
}
|
||||
|
||||
Field_Clear( &g_consoleField );
|
||||
g_consoleField.widthInChars = g_console_field_width;
|
||||
Field_Clear( &kg.g_consoleField );
|
||||
kg.g_consoleField.widthInChars = g_console_field_width;
|
||||
|
||||
Con_ClearNotify ();
|
||||
cls.keyCatchers ^= KEYCATCH_CONSOLE;
|
||||
|
@ -130,7 +130,7 @@ void Con_Dump_f (void)
|
|||
|
||||
if (Cmd_Argc() != 2)
|
||||
{
|
||||
Com_Printf(SP_GetStringText(CON_TEXT_DUMP_USAGE));
|
||||
Com_Printf (SP_GetStringText(CON_TEXT_DUMP_USAGE));
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -139,7 +139,7 @@ void Con_Dump_f (void)
|
|||
f = FS_FOpenFileWrite( Cmd_Argv( 1 ) );
|
||||
if (!f)
|
||||
{
|
||||
Com_Printf ("ERROR: couldn't open.\n");
|
||||
Com_Printf (S_COLOR_RED"ERROR: couldn't open.\n");
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -277,11 +277,11 @@ void Con_Init (void) {
|
|||
con_notifytime = Cvar_Get ("con_notifytime", "3", 0);
|
||||
con_conspeed = Cvar_Get ("scr_conspeed", "3", 0);
|
||||
|
||||
Field_Clear( &g_consoleField );
|
||||
g_consoleField.widthInChars = g_console_field_width;
|
||||
Field_Clear( &kg.g_consoleField );
|
||||
kg.g_consoleField.widthInChars = g_console_field_width;
|
||||
for ( i = 0 ; i < COMMAND_HISTORY ; i++ ) {
|
||||
Field_Clear( &historyEditLines[i] );
|
||||
historyEditLines[i].widthInChars = g_console_field_width;
|
||||
Field_Clear( &kg.historyEditLines[i] );
|
||||
kg.historyEditLines[i].widthInChars = g_console_field_width;
|
||||
}
|
||||
|
||||
Cmd_AddCommand ("toggleconsole", Con_ToggleConsole_f);
|
||||
|
@ -424,17 +424,19 @@ void Con_DrawInput (void) {
|
|||
return;
|
||||
}
|
||||
|
||||
y = con.vislines - ( SMALLCHAR_HEIGHT * 2 );
|
||||
y = con.vislines - ( SMALLCHAR_HEIGHT * (re.Language_IsAsian() ? 1.5 : 2) );
|
||||
|
||||
re.SetColor( con.color );
|
||||
|
||||
SCR_DrawSmallChar( (int)(con.xadjust + 1 * SMALLCHAR_WIDTH), y, ']' );
|
||||
|
||||
Field_Draw( &g_consoleField, (int)(con.xadjust + 2 * SMALLCHAR_WIDTH), y,
|
||||
Field_Draw( &kg.g_consoleField, (int)(con.xadjust + 2 * SMALLCHAR_WIDTH), y,
|
||||
SCREEN_WIDTH - 3 * SMALLCHAR_WIDTH, qtrue );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
================
|
||||
Con_DrawNotify
|
||||
|
@ -471,6 +473,42 @@ void Con_DrawNotify (void)
|
|||
continue;
|
||||
}
|
||||
|
||||
|
||||
if (!cl_conXOffset)
|
||||
{
|
||||
cl_conXOffset = Cvar_Get ("cl_conXOffset", "0", 0);
|
||||
}
|
||||
|
||||
// asian language needs to use the new font system to print glyphs...
|
||||
//
|
||||
// (ignore colours since we're going to print the whole thing as one string)
|
||||
//
|
||||
if (re.Language_IsAsian())
|
||||
{
|
||||
static int iFontIndex = re.RegisterFont("ocr_a"); // this seems naughty
|
||||
const float fFontScale = 0.75f*con.yadjust;
|
||||
const int iPixelHeightToAdvance = 2+(1.3/con.yadjust) * re.Font_HeightPixels(iFontIndex, fFontScale); // for asian spacing, since we don't want glyphs to touch.
|
||||
|
||||
// concat the text to be printed...
|
||||
//
|
||||
char sTemp[4096]={0}; // ott
|
||||
for (x = 0 ; x < con.linewidth ; x++)
|
||||
{
|
||||
if ( ( (text[x]>>8)&7 ) != currentColor ) {
|
||||
currentColor = (text[x]>>8)&7;
|
||||
strcat(sTemp,va("^%i", (text[x]>>8)&7) );
|
||||
}
|
||||
strcat(sTemp,va("%c",text[x] & 0xFF));
|
||||
}
|
||||
//
|
||||
// and print...
|
||||
//
|
||||
re.Font_DrawString(cl_conXOffset->integer + con.xadjust*(con.xadjust + (1*SMALLCHAR_WIDTH/*aesthetics*/)), con.yadjust*(v), sTemp, g_color_table[currentColor], iFontIndex, -1, fFontScale);
|
||||
|
||||
v += iPixelHeightToAdvance;
|
||||
}
|
||||
else
|
||||
{
|
||||
for (x = 0 ; x < con.linewidth ; x++) {
|
||||
if ( ( text[x] & 0xff ) == ' ' ) {
|
||||
continue;
|
||||
|
@ -488,6 +526,7 @@ void Con_DrawNotify (void)
|
|||
|
||||
v += SMALLCHAR_HEIGHT;
|
||||
}
|
||||
}
|
||||
|
||||
re.SetColor( NULL );
|
||||
|
||||
|
@ -589,7 +628,19 @@ void Con_DrawSolidConsole( float frac ) {
|
|||
currentColor = 7;
|
||||
re.SetColor( g_color_table[currentColor] );
|
||||
|
||||
for (i=0 ; i<rows ; i++, y -= SMALLCHAR_HEIGHT, row--)
|
||||
static int iFontIndexForAsian = 0;
|
||||
const float fFontScaleForAsian = 0.75f*con.yadjust;
|
||||
int iPixelHeightToAdvance = SMALLCHAR_HEIGHT;
|
||||
if (re.Language_IsAsian())
|
||||
{
|
||||
if (!iFontIndexForAsian)
|
||||
{
|
||||
iFontIndexForAsian = re.RegisterFont("ocr_a");
|
||||
}
|
||||
iPixelHeightToAdvance = (1.3/con.yadjust) * re.Font_HeightPixels(iFontIndexForAsian, fFontScaleForAsian); // for asian spacing, since we don't want glyphs to touch.
|
||||
}
|
||||
|
||||
for (i=0 ; i<rows ; i++, y -= iPixelHeightToAdvance, row--)
|
||||
{
|
||||
if (row < 0)
|
||||
break;
|
||||
|
@ -600,6 +651,30 @@ void Con_DrawSolidConsole( float frac ) {
|
|||
|
||||
text = con.text + (row % con.totallines)*con.linewidth;
|
||||
|
||||
// asian language needs to use the new font system to print glyphs...
|
||||
//
|
||||
// (ignore colours since we're going to print the whole thing as one string)
|
||||
//
|
||||
if (re.Language_IsAsian())
|
||||
{
|
||||
// concat the text to be printed...
|
||||
//
|
||||
char sTemp[4096]={0}; // ott
|
||||
for (x = 0 ; x < con.linewidth ; x++)
|
||||
{
|
||||
if ( ( (text[x]>>8)&7 ) != currentColor ) {
|
||||
currentColor = (text[x]>>8)&7;
|
||||
strcat(sTemp,va("^%i", (text[x]>>8)&7) );
|
||||
}
|
||||
strcat(sTemp,va("%c",text[x] & 0xFF));
|
||||
}
|
||||
//
|
||||
// and print...
|
||||
//
|
||||
re.Font_DrawString(con.xadjust*(con.xadjust + (1*SMALLCHAR_WIDTH/*(aesthetics)*/)), con.yadjust*(y), sTemp, g_color_table[currentColor], iFontIndexForAsian, -1, fFontScaleForAsian);
|
||||
}
|
||||
else
|
||||
{
|
||||
for (x=0 ; x<con.linewidth ; x++) {
|
||||
if ( ( text[x] & 0xff ) == ' ' ) {
|
||||
continue;
|
||||
|
@ -612,6 +687,7 @@ void Con_DrawSolidConsole( float frac ) {
|
|||
SCR_DrawSmallChar( (int) (con.xadjust + (x+1)*SMALLCHAR_WIDTH), y, text[x] & 0xff );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// draw the input prompt, user text, and cursor if desired
|
||||
Con_DrawInput ();
|
||||
|
@ -712,7 +788,7 @@ void Con_Close( void ) {
|
|||
if ( !com_cl_running->integer ) {
|
||||
return;
|
||||
}
|
||||
Field_Clear( &g_consoleField );
|
||||
Field_Clear( &kg.g_consoleField );
|
||||
Con_ClearNotify ();
|
||||
cls.keyCatchers &= ~KEYCATCH_CONSOLE;
|
||||
con.finalFrac = 0; // none visible
|
||||
|
|
|
@ -586,12 +586,12 @@ void CL_CmdButtons( usercmd_t *cmd ) {
|
|||
}
|
||||
|
||||
if ( cls.keyCatchers ) {
|
||||
// cmd->buttons |= BUTTON_TALK;
|
||||
cmd->buttons |= BUTTON_TALK;
|
||||
}
|
||||
|
||||
// allow the game to know if any key at all is
|
||||
// currently pressed, even if it isn't bound to anything
|
||||
if ( anykeydown && !cls.keyCatchers ) {
|
||||
if ( kg.anykeydown && !cls.keyCatchers ) {
|
||||
cmd->buttons |= BUTTON_ANY;
|
||||
}
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -9,6 +9,12 @@
|
|||
#include "..\ghoul2\G2_local.h"
|
||||
#endif
|
||||
|
||||
#ifdef G2_COLLISION_ENABLED
|
||||
#if !defined (MINIHEAP_H_INC)
|
||||
#include "../qcommon/miniheap.h"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef _DONETPROFILE_
|
||||
#include "../qcommon/INetProfile.h"
|
||||
#endif
|
||||
|
@ -93,6 +99,10 @@ typedef struct serverStatus_s
|
|||
serverStatus_t cl_serverStatusList[MAX_SERVERSTATUSREQUESTS];
|
||||
int serverStatusCount;
|
||||
|
||||
#ifdef G2_COLLISION_ENABLED
|
||||
CMiniHeap *G2VertSpaceClient = 0;
|
||||
#endif
|
||||
|
||||
#if defined __USEA3D && defined __A3D_GEOM
|
||||
void hA3Dg_ExportRenderGeom (refexport_t *incoming_re);
|
||||
#endif
|
||||
|
@ -514,13 +524,7 @@ void CL_PlayDemo_f( void ) {
|
|||
if (!clc.demofile) {
|
||||
if (!Q_stricmp(arg, "(null)"))
|
||||
{
|
||||
extern cvar_t *sp_language;
|
||||
switch (sp_language->integer)
|
||||
{
|
||||
case SP_LANGUAGE_GERMAN: Com_Error( ERR_DROP, "Kein demo ausgewählt." ); break;
|
||||
case SP_LANGUAGE_FRENCH: Com_Error( ERR_DROP, "Aucun demo choisi." ); break;
|
||||
default: Com_Error( ERR_DROP, "No demo selected." ); break;
|
||||
}
|
||||
Com_Error( ERR_DROP, SP_GetStringTextString("CON_TEXT_NO_DEMO_SELECTED") );
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -758,9 +762,6 @@ void CL_Disconnect( qboolean showMainMenu ) {
|
|||
|
||||
cls.state = CA_DISCONNECTED;
|
||||
|
||||
// allow cheats locally
|
||||
Cvar_Set( "sv_cheats", "1" );
|
||||
|
||||
// not connected to a pure server anymore
|
||||
cl_connectedToPureServer = qfalse;
|
||||
}
|
||||
|
@ -1033,23 +1034,7 @@ void CL_Connect_f( void ) {
|
|||
|
||||
if ( !Cvar_VariableValue("fs_restrict") && !Sys_CheckCD() )
|
||||
{
|
||||
int iLanguage = Cvar_VariableValue("sp_language");
|
||||
//rww - we don't have an actual cvar object for sp_language to use here.
|
||||
|
||||
if (iLanguage) // dunno if SP files are loaded at this point if no CD...
|
||||
{
|
||||
switch (iLanguage)
|
||||
{
|
||||
case SP_LANGUAGE_GERMAN:
|
||||
Com_Error( ERR_NEED_CD, "Spiel CD nicht im Laufwerk" );
|
||||
break; // keep compiler happy
|
||||
case SP_LANGUAGE_FRENCH:
|
||||
Com_Error( ERR_NEED_CD, "CD de jeu pas dans le lecteur" );
|
||||
break; // keep compiler happy
|
||||
}
|
||||
}
|
||||
|
||||
Com_Error( ERR_NEED_CD, "Game CD not in drive" );
|
||||
Com_Error( ERR_NEED_CD, SP_GetStringTextString("CON_TEXT_NEED_CD") ); //"Game CD not in drive" );
|
||||
}
|
||||
|
||||
if ( Cmd_Argc() != 2 ) {
|
||||
|
@ -1238,6 +1223,7 @@ void CL_Vid_Restart_f( void ) {
|
|||
|
||||
// if not running a server clear the whole hunk
|
||||
if ( !com_sv_running->integer ) {
|
||||
CM_ClearMap();
|
||||
// clear the whole hunk
|
||||
Hunk_Clear();
|
||||
}
|
||||
|
@ -1665,7 +1651,11 @@ void CL_InitServerInfo( serverInfo_t *server, serverAddress_t *address ) {
|
|||
server->game[0] = '\0';
|
||||
server->gameType = 0;
|
||||
server->netType = 0;
|
||||
server->allowAnonymous = 0;
|
||||
server->needPassword = qfalse;
|
||||
server->trueJedi = 0;
|
||||
server->weaponDisable = 0;
|
||||
server->forceDisable = 0;
|
||||
//server->pure = qfalse;
|
||||
}
|
||||
|
||||
#define MAX_SERVERSPERPACKET 256
|
||||
|
@ -2096,6 +2086,10 @@ void CL_CheckUserinfo( void ) {
|
|||
|
||||
}
|
||||
|
||||
#ifdef G2_COLLISION_ENABLED
|
||||
extern CMiniHeap *G2VertSpaceServer;
|
||||
#endif
|
||||
|
||||
/*
|
||||
==================
|
||||
CL_Frame
|
||||
|
@ -2125,10 +2119,14 @@ void CL_Frame ( int msec ) {
|
|||
if ( cl_avidemo->integer && msec) {
|
||||
// save the current screen
|
||||
if ( cls.state == CA_ACTIVE || cl_forceavidemo->integer) {
|
||||
if (cl_avidemo->integer > 0) {
|
||||
Cbuf_ExecuteText( EXEC_NOW, "screenshot silent\n" );
|
||||
} else {
|
||||
Cbuf_ExecuteText( EXEC_NOW, "screenshot_tga silent\n" );
|
||||
}
|
||||
}
|
||||
// fixed time for next frame'
|
||||
msec = (1000 / cl_avidemo->integer) * com_timescale->value;
|
||||
msec = (1000 / abs(cl_avidemo->integer)) * com_timescale->value;
|
||||
if (msec == 0) {
|
||||
msec = 1;
|
||||
}
|
||||
|
@ -2194,7 +2192,13 @@ void CL_Frame ( int msec ) {
|
|||
SCR_RunCinematic();
|
||||
|
||||
Con_RunConsole();
|
||||
|
||||
#ifdef G2_COLLISION_ENABLED
|
||||
// reset the heap for Ghoul2 vert transform space gameside
|
||||
if (G2VertSpaceServer)
|
||||
{
|
||||
G2VertSpaceServer->ResetHeap();
|
||||
}
|
||||
#endif
|
||||
cls.framecount++;
|
||||
}
|
||||
|
||||
|
@ -2260,7 +2264,7 @@ void CL_InitRenderer( void ) {
|
|||
cls.whiteShader = re.RegisterShader( "white" );
|
||||
cls.consoleShader = re.RegisterShader( "console" );
|
||||
g_console_field_width = cls.glconfig.vidWidth / SMALLCHAR_WIDTH - 2;
|
||||
g_consoleField.widthInChars = g_console_field_width;
|
||||
kg.g_consoleField.widthInChars = g_console_field_width;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -2401,19 +2405,9 @@ void CL_SetForcePowers_f( void ) {
|
|||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
=======================
|
||||
Register_StringPackets
|
||||
=======================
|
||||
*/
|
||||
void Register_StringPackets (void)
|
||||
{
|
||||
SP_Register("con_text", SP_REGISTER_REQUIRED); //reference is CON_TEXT
|
||||
SP_Register("mp_ingame",SP_REGISTER_REQUIRED); //reference is INGAMETEXT
|
||||
SP_Register("mp_svgame",SP_REGISTER_REQUIRED); //reference is SVINGAME
|
||||
SP_Register("sp_ingame",SP_REGISTER_REQUIRED); //reference is INGAME , needed for item pickups
|
||||
}
|
||||
|
||||
#ifdef G2_COLLISION_ENABLED
|
||||
#define G2_VERT_SPACE_CLIENT_SIZE 256
|
||||
#endif
|
||||
|
||||
/*
|
||||
====================
|
||||
|
@ -2423,8 +2417,6 @@ CL_Init
|
|||
void CL_Init( void ) {
|
||||
Com_Printf( "----- Client Initialization -----\n" );
|
||||
|
||||
Register_StringPackets();
|
||||
|
||||
Con_Init ();
|
||||
|
||||
CL_ClearState ();
|
||||
|
@ -2565,6 +2557,10 @@ void CL_Init( void ) {
|
|||
|
||||
Cvar_Set( "cl_running", "1" );
|
||||
|
||||
#ifdef G2_COLLISION_ENABLED
|
||||
G2VertSpaceClient = new CMiniHeap(G2_VERT_SPACE_CLIENT_SIZE * 1024);
|
||||
#endif
|
||||
|
||||
Com_Printf( "----- Client Initialization Complete -----\n" );
|
||||
}
|
||||
|
||||
|
@ -2586,6 +2582,14 @@ void CL_Shutdown( void ) {
|
|||
}
|
||||
recursive = qtrue;
|
||||
|
||||
#ifdef G2_COLLISION_ENABLED
|
||||
if (G2VertSpaceClient)
|
||||
{
|
||||
delete G2VertSpaceClient;
|
||||
G2VertSpaceClient = 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
CL_Disconnect( qtrue );
|
||||
|
||||
CL_ShutdownRef(); //must be before shutdown all so the images get dumped in RE_Shutdown
|
||||
|
@ -2639,7 +2643,12 @@ static void CL_SetServerInfo(serverInfo_t *server, const char *info, int ping) {
|
|||
server->netType = atoi(Info_ValueForKey(info, "nettype"));
|
||||
server->minPing = atoi(Info_ValueForKey(info, "minping"));
|
||||
server->maxPing = atoi(Info_ValueForKey(info, "maxping"));
|
||||
server->allowAnonymous = atoi(Info_ValueForKey(info, "sv_allowAnonymous"));
|
||||
// server->allowAnonymous = atoi(Info_ValueForKey(info, "sv_allowAnonymous"));
|
||||
server->needPassword = (qboolean)atoi(Info_ValueForKey(info, "needpass" ));
|
||||
server->trueJedi = atoi(Info_ValueForKey(info, "truejedi" ));
|
||||
server->weaponDisable = atoi(Info_ValueForKey(info, "wdisable" ));
|
||||
server->forceDisable = atoi(Info_ValueForKey(info, "fdisable" ));
|
||||
// server->pure = (qboolean)atoi(Info_ValueForKey(info, "pure" ));
|
||||
}
|
||||
server->ping = ping;
|
||||
}
|
||||
|
@ -2770,7 +2779,12 @@ void CL_ServerInfoPacket( netadr_t from, msg_t *msg ) {
|
|||
cls.localServers[i].game[0] = '\0';
|
||||
cls.localServers[i].gameType = 0;
|
||||
cls.localServers[i].netType = from.type;
|
||||
cls.localServers[i].allowAnonymous = 0;
|
||||
// cls.localServers[i].allowAnonymous = 0;
|
||||
cls.localServers[i].needPassword = qfalse;
|
||||
cls.localServers[i].trueJedi = 0;
|
||||
cls.localServers[i].weaponDisable = 0;
|
||||
cls.localServers[i].forceDisable = 0;
|
||||
// cls.localServers[i].pure = qfalse;
|
||||
|
||||
Q_strncpyz( info, MSG_ReadString( msg ), MAX_INFO_STRING );
|
||||
if (strlen(info)) {
|
||||
|
|
|
@ -152,10 +152,19 @@ static int LAN_AddServer(int source, const char *name, const char *address) {
|
|||
case AS_FAVORITES :
|
||||
count = &cls.numfavoriteservers;
|
||||
servers = &cls.favoriteServers[0];
|
||||
/* if (!name || !*name)
|
||||
{
|
||||
name = "?";
|
||||
}
|
||||
*/
|
||||
break;
|
||||
}
|
||||
if (servers && *count < max) {
|
||||
NET_StringToAdr( address, &adr );
|
||||
if (adr.type == NA_BAD)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
for ( i = 0; i < *count; i++ ) {
|
||||
if (NET_CompareAdr(servers[i].adr, adr)) {
|
||||
break;
|
||||
|
@ -204,7 +213,7 @@ static void LAN_RemoveServer(int source, const char *addr) {
|
|||
netadr_t comp;
|
||||
NET_StringToAdr( addr, &comp );
|
||||
for (i = 0; i < *count; i++) {
|
||||
if (NET_CompareAdr( comp, servers[i].adr)) {
|
||||
if (servers[i].adr.type==NA_BAD || NET_CompareAdr( comp, servers[i].adr)) {
|
||||
int j = i;
|
||||
while (j < *count - 1) {
|
||||
Com_Memcpy(&servers[j], &servers[j+1], sizeof(servers[j]));
|
||||
|
@ -320,7 +329,12 @@ static void LAN_GetServerInfo( int source, int n, char *buf, int buflen ) {
|
|||
Info_SetValueForKey( info, "gametype", va("%i",server->gameType));
|
||||
Info_SetValueForKey( info, "nettype", va("%i",server->netType));
|
||||
Info_SetValueForKey( info, "addr", NET_AdrToString(server->adr));
|
||||
Info_SetValueForKey( info, "sv_allowAnonymous", va("%i", server->allowAnonymous));
|
||||
// Info_SetValueForKey( info, "sv_allowAnonymous", va("%i", server->allowAnonymous));
|
||||
Info_SetValueForKey( info, "needpass", va("%i", server->needPassword ) );
|
||||
Info_SetValueForKey( info, "truejedi", va("%i", server->trueJedi ) );
|
||||
Info_SetValueForKey( info, "wdisable", va("%i", server->weaponDisable ) );
|
||||
Info_SetValueForKey( info, "fdisable", va("%i", server->forceDisable ) );
|
||||
// Info_SetValueForKey( info, "pure", va("%i", server->pure ) );
|
||||
Q_strncpyz(buf, info, buflen);
|
||||
} else {
|
||||
if (buf) {
|
||||
|
@ -640,10 +654,21 @@ static void GetClipboardData( char *buf, int buflen ) {
|
|||
Key_KeynumToStringBuf
|
||||
====================
|
||||
*/
|
||||
static void Key_KeynumToStringBuf( int keynum, char *buf, int buflen ) {
|
||||
Q_strncpyz( buf, Key_KeynumToString( keynum, qtrue ), buflen );
|
||||
// only ever called by binding-display code, therefore returns non-technical "friendly" names
|
||||
// in any language that don't necessarily match those in the config file...
|
||||
//
|
||||
void Key_KeynumToStringBuf( int keynum, char *buf, int buflen )
|
||||
{
|
||||
const char *psKeyName = Key_KeynumToString( keynum/*, qtrue */);
|
||||
|
||||
// see if there's a more friendly (or localised) name...
|
||||
//
|
||||
const char *psKeyNameFriendly = SP_GetStringTextString( va("KEYNAMES_KEYNAME_%s",psKeyName) );
|
||||
|
||||
Q_strncpyz( buf, (psKeyNameFriendly && psKeyNameFriendly[0]) ? psKeyNameFriendly : psKeyName, buflen );
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
====================
|
||||
Key_GetBindingBuf
|
||||
|
@ -1045,8 +1070,14 @@ int CL_UISystemCalls( int *args ) {
|
|||
re.Font_DrawString( args[1], args[2], (const char *)VMA(3), (const float *) VMA(4), args[5], args[6], VMF(7) );
|
||||
return 0;
|
||||
|
||||
case UI_LANGUAGE_ISASIAN:
|
||||
return re.Language_IsAsian();
|
||||
|
||||
case UI_LANGUAGE_USESSPACES:
|
||||
return re.Language_UsesSpaces();
|
||||
|
||||
case UI_ANYLANGUAGE_READCHARFROMSTRING:
|
||||
return re.AnyLanguage_ReadCharFromString( (const char **)VMA(1) );
|
||||
return re.AnyLanguage_ReadCharFromString( (const char *)VMA(1), (int *) VMA(2), (qboolean *) VMA(3) );
|
||||
|
||||
case UI_MEMSET:
|
||||
Com_Memset( VMA(1), args[2], args[3] );
|
||||
|
@ -1181,7 +1212,6 @@ void CL_ShutdownUI( void ) {
|
|||
CL_InitUI
|
||||
====================
|
||||
*/
|
||||
#define UI_OLD_API_VERSION 4
|
||||
|
||||
void CL_InitUI( void ) {
|
||||
int v;
|
||||
|
@ -1202,12 +1232,7 @@ void CL_InitUI( void ) {
|
|||
|
||||
// sanity check
|
||||
v = VM_Call( uivm, UI_GETAPIVERSION );
|
||||
if (v == UI_OLD_API_VERSION) {
|
||||
// Com_Printf(S_COLOR_YELLOW "WARNING: loading old Quake III Arena User Interface version %d\n", v );
|
||||
// init for this gamestate
|
||||
VM_Call( uivm, UI_INIT, (cls.state >= CA_AUTHORIZING && cls.state < CA_ACTIVE));
|
||||
}
|
||||
else if (v != UI_API_VERSION) {
|
||||
if (v != UI_API_VERSION) {
|
||||
Com_Error( ERR_DROP, "User Interface is version %d, expected %d", v, UI_API_VERSION );
|
||||
cls.uiStarted = qfalse;
|
||||
}
|
||||
|
|
|
@ -234,7 +234,12 @@ typedef struct {
|
|||
int maxPing;
|
||||
int ping;
|
||||
qboolean visible;
|
||||
int allowAnonymous;
|
||||
// int allowAnonymous;
|
||||
qboolean needPassword;
|
||||
int trueJedi;
|
||||
int weaponDisable;
|
||||
int forceDisable;
|
||||
// qboolean pure;
|
||||
} serverInfo_t;
|
||||
|
||||
typedef struct {
|
||||
|
@ -437,7 +442,7 @@ void IN_CenterView (void);
|
|||
void CL_VerifyCode( void );
|
||||
|
||||
float CL_KeyState (kbutton_t *key);
|
||||
char *Key_KeynumToString( int keynum, qboolean bTranslate ); //note: translate is only called for menu display not configs
|
||||
const char *Key_KeynumToString( int keynum/*, qboolean bTranslate */ ); //note: translate is only called for menu display not configs
|
||||
|
||||
//
|
||||
// cl_parse.c
|
||||
|
|
165
CODE-mp/client/eax/EaxMan.h
Normal file
165
CODE-mp/client/eax/EaxMan.h
Normal file
|
@ -0,0 +1,165 @@
|
|||
/*
|
||||
*/
|
||||
#ifndef __EAXMANH
|
||||
#define __EAXMANH
|
||||
|
||||
#define COM_NO_WINDOWS_H
|
||||
#include <objbase.h>
|
||||
#include "eax.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif // __cplusplus
|
||||
|
||||
#define CLSID_EAXMANAGER CLSID_EAX20_Manager
|
||||
#define IID_IEaxManager IID_EAX20_Manager
|
||||
#define EM_MAX_NAME 32
|
||||
|
||||
#define EMFLAG_IDDEFAULT (-1)
|
||||
#define EMFLAG_IDNONE (-2)
|
||||
#define EMFLAG_LOCKPOSITION 1
|
||||
#define EMFLAG_LOADFROMMEMORY 2
|
||||
#define EMFLAG_NODIFFRACTION 4
|
||||
|
||||
typedef struct _EMPOINT {
|
||||
float fX;
|
||||
float fY;
|
||||
float fZ;
|
||||
} EMPOINT;
|
||||
typedef EMPOINT FAR *LPEMPOINT;
|
||||
|
||||
typedef struct _LISTENERATTRIBUTES {
|
||||
float fDistanceFactor;
|
||||
float fRolloffFactor;
|
||||
float fDopplerFactor;
|
||||
} LISTENERATTRIBUTES;
|
||||
typedef LISTENERATTRIBUTES FAR *LPLISTENERATTRIBUTES;
|
||||
|
||||
typedef struct _SOURCEATTRIBUTES {
|
||||
EAXBUFFERPROPERTIES eaxAttributes;
|
||||
unsigned long ulInsideConeAngle;
|
||||
unsigned long ulOutsideConeAngle;
|
||||
long lConeOutsideVolume;
|
||||
float fConeXdir;
|
||||
float fConeYdir;
|
||||
float fConeZdir;
|
||||
float fMinDistance;
|
||||
float fMaxDistance;
|
||||
long lDupCount;
|
||||
long lPriority;
|
||||
} SOURCEATTRIBUTES;
|
||||
typedef SOURCEATTRIBUTES FAR *LPSOURCEATTRIBUTES;
|
||||
|
||||
typedef struct _MATERIALATTRIBUTES {
|
||||
long lLevel;
|
||||
float fLFRatio;
|
||||
float fRoomRatio;
|
||||
DWORD dwFlags;
|
||||
} MATERIALATTRIBUTES;
|
||||
typedef MATERIALATTRIBUTES FAR *LPMATERIALATTRIBUTES;
|
||||
|
||||
#define EMMATERIAL_OBSTRUCTS 1
|
||||
#define EMMATERIAL_OCCLUDES 3
|
||||
|
||||
typedef struct _DIFFRACTIONBOX {
|
||||
long lSubspaceID;
|
||||
EMPOINT empMin;
|
||||
EMPOINT empMax;
|
||||
} DIFFRACTIONBOX;
|
||||
typedef DIFFRACTIONBOX FAR *LPDIFFRACTIONBOX;
|
||||
|
||||
// {7CE4D6E6-562F-11d3-8812-005004062F83}
|
||||
DEFINE_GUID(CLSID_EAXMANAGER, 0x60b721a1, 0xf7c8, 0x11d2, 0xa0, 0x2e, 0x0, 0x50, 0x4, 0x6, 0x18, 0xb8);
|
||||
|
||||
#ifdef __cplusplus
|
||||
struct IEaxManager;
|
||||
#endif // __cplusplus
|
||||
|
||||
typedef struct IEaxManager *LPEAXMANAGER;
|
||||
|
||||
// {7CE4D6E8-562F-11d3-8812-005004062F83}
|
||||
DEFINE_GUID(IID_IEaxManager, 0x60b721a2, 0xf7c8, 0x11d2, 0xa0, 0x2e, 0x0, 0x50, 0x4, 0x6, 0x18, 0xb8);
|
||||
|
||||
#undef INTERFACE
|
||||
#define INTERFACE IEaxManager
|
||||
|
||||
extern HRESULT __stdcall EaxManagerCreate(LPEAXMANAGER*);
|
||||
typedef HRESULT (__stdcall *LPEAXMANAGERCREATE)(LPEAXMANAGER*);
|
||||
|
||||
DECLARE_INTERFACE_(IEaxManager, IUnknown)
|
||||
{
|
||||
// IUnknown methods
|
||||
STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE;
|
||||
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
|
||||
STDMETHOD_(ULONG,Release) (THIS) PURE;
|
||||
|
||||
STDMETHOD(GetDataSetSize) (THIS_ unsigned long*, DWORD) PURE;
|
||||
STDMETHOD(LoadDataSet) (THIS_ char*, DWORD) PURE;
|
||||
STDMETHOD(FreeDataSet) (THIS_ DWORD) PURE;
|
||||
STDMETHOD(GetListenerAttributes) (THIS_ LPLISTENERATTRIBUTES) PURE;
|
||||
STDMETHOD(GetSourceID) (THIS_ char*, long*) PURE;
|
||||
STDMETHOD(GetSourceAttributes) (THIS_ long, LPSOURCEATTRIBUTES) PURE;
|
||||
STDMETHOD(GetSourceNumInstances) (THIS_ long, long*) PURE;
|
||||
STDMETHOD(GetSourceInstancePos) (THIS_ long, long, LPEMPOINT) PURE;
|
||||
STDMETHOD(GetEnvironmentID) (THIS_ char*, long*) PURE;
|
||||
STDMETHOD(GetEnvironmentAttributes) (THIS_ long, LPEAXLISTENERPROPERTIES) PURE;
|
||||
STDMETHOD(GetMaterialID) (THIS_ char*, long*) PURE;
|
||||
STDMETHOD(GetMaterialAttributes) (THIS_ long, LPMATERIALATTRIBUTES) PURE;
|
||||
STDMETHOD(GetGeometrySetID) (THIS_ char*, long*) PURE;
|
||||
STDMETHOD(GetListenerDynamicAttributes) (THIS_ long, LPEMPOINT, long*, DWORD) PURE;
|
||||
STDMETHOD(GetSourceDynamicAttributes) (THIS_ long, LPEMPOINT, long*, float*, long*, float*, float*, LPEMPOINT, DWORD) PURE;
|
||||
};
|
||||
|
||||
#if !defined(__cplusplus) || defined(CINTERFACE)
|
||||
#define IEaxManager_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
|
||||
#define IEaxManager_AddRef(p) (p)->lpVtbl->AddRef(p)
|
||||
#define IEaxManager_Release(p) (p)->lpVtbl->Release(p)
|
||||
#define IEaxManager_GetDataSetSize(p,a,b) (p)->lpVtbl->GetDataSetSize(p,a,b)
|
||||
#define IEaxManager_LoadDataSet(p,a,b) (p)->lpVtbl->LoadDataSet(p,a,b)
|
||||
#define IEaxManager_FreeDataSet(p,a) (p)->lpVtbl->FreeDataSet(p,a)
|
||||
#define IEaxManager_GetListenerAttributes(p,a) (p)->lpVtbl->GetListenerAttributes(p,a)
|
||||
#define IEaxManager_GetSourceID(p,a,b) (p)->lpVtbl->GetSourceID(p,a,b)
|
||||
#define IEaxManager_GetSourceAttributes(p,a,b) (p)->lpVtbl->GetSourceAttributes(p,a,b)
|
||||
#define IEaxManager_GetSourceNumInstances(p,a,b) (p)->lpVtbl->GetSourceNumInstances(p,a,b)
|
||||
#define IEaxManager_GetSourceInstancePos(p,a,b,c) (p)->lpVtbl->GetSourceInstancePos(p,a,b,c)
|
||||
#define IEaxManager_GetEnvironmentID(p,a,b) (p)->lpVtbl->GetEnvironmentID(p,a,b)
|
||||
#define IEaxManager_GetEnvironmentAttributes(p,a,b) (p)->lpVtbl->GetEnvironmentAttributes(p,a,b)
|
||||
#define IEaxManager_GetMaterialID(p,a,b) (p)->lpVtbl->GetMaterialID(p,a,b)
|
||||
#define IEaxManager_GetMaterialAttributes(p,a,b) (p)->lpVtbl->GetMaterialAttributes(p,a,b)
|
||||
#define IEaxManager_GetGeometrySetID(p,a,b) (p)->lpVtbl->GetGeometrySetID(p,a,b)
|
||||
#define IEaxManager_GetListenerDynamicAttributes(p,a,b,c,d) (p)->lpVtbl->GetListenerDynamicAttributes(p,a,b,c,d)
|
||||
#define IEaxManager_GetSourceDynamicAttributes(p,a,b,c,d,e,f,g,h,i) (p)->lpVtbl->GetSourceDynamicAttributes(p,a,b,c,d,e,f,g,h,i)
|
||||
#else
|
||||
#define IEaxManager_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
|
||||
#define IEaxManager_AddRef(p) (p)->AddRef()
|
||||
#define IEaxManager_Release(p) (p)->Release()
|
||||
#define IEaxManager_GetDataSetSize(p,a,b) (p)->GetDataSetSize(a,b)
|
||||
#define IEaxManager_LoadDataSet(p,a,b) (p)->LoadDataSet(a,b)
|
||||
#define IEaxManager_FreeDataSet(p,a) (p)->FreeDataSet(a)
|
||||
#define IEaxManager_GetListenerAttributes(p,a) (p)->GetListenerAttributes(a)
|
||||
#define IEaxManager_GetSourceID(p,a,b) (p)->GetSourceID(a,b)
|
||||
#define IEaxManager_GetSourceAttributes(p,a,b) (p)->GetSourceAttributes(a,b)
|
||||
#define IEaxManager_GetSourceNumInstances(p,a,b) (p)->GetSourceNumInstances(a,b)
|
||||
#define IEaxManager_GetSourceInstancePos(p,a,b,c) (p)->GetSourceInstancePos(a,b,c)
|
||||
#define IEaxManager_GetEnvironmentID(p,a,b) (p)->GetEnvironmentID(a,b)
|
||||
#define IEaxManager_GetEnvironmentAttributes(p,a,b) (p)->GetEnvironmentAttributes(a,b)
|
||||
#define IEaxManager_GetMaterialID(p,a,b) (p)->GetMaterialID(a,b)
|
||||
#define IEaxManager_GetMaterialAttributes(p,a,b) (p)->GetMaterialAttributes(a,b)
|
||||
#define IEaxManager_GetGeometrySetID(p,a,b) (p)->GetGeometrySetID(a,b)
|
||||
#define IEaxManager_GetListenerDynamicAttributes(p,a,b,c,d) (p)->GetListenerDynamicAttributes(a,b,c,d)
|
||||
#define IEaxManager_GetSourceDynamicAttributes(p,a,b,c,d,e,f,g,h,i) (p)->GetSourceDynamicAttributes(a,b,c,d,e,f,g,h,i)
|
||||
#endif
|
||||
|
||||
#define EM_OK 0
|
||||
#define EM_INVALIDID MAKE_HRESULT(1, FACILITY_ITF, 1)
|
||||
#define EM_IDNOTFOUND MAKE_HRESULT(1, FACILITY_ITF, 2)
|
||||
#define EM_FILENOTFOUND MAKE_HRESULT(1, FACILITY_ITF, 3)
|
||||
#define EM_FILEINVALID MAKE_HRESULT(1, FACILITY_ITF, 4)
|
||||
#define EM_VERSIONINVALID MAKE_HRESULT(1, FACILITY_ITF, 5)
|
||||
#define EM_INSTANCENOTFOUND MAKE_HRESULT(1, FACILITY_ITF, 6)
|
||||
|
||||
#ifdef __cplusplus
|
||||
};
|
||||
#endif // __cplusplus
|
||||
|
||||
#endif
|
531
CODE-mp/client/eax/eax.h
Normal file
531
CODE-mp/client/eax/eax.h
Normal file
|
@ -0,0 +1,531 @@
|
|||
/*******************************************************************\
|
||||
* *
|
||||
* EAX.H - Environmental Audio Extensions version 3.0 *
|
||||
* for OpenAL and DirectSound3D *
|
||||
* *
|
||||
********************************************************************/
|
||||
|
||||
#ifndef EAX_H_INCLUDED
|
||||
#define EAX_H_INCLUDED
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif // __cplusplus
|
||||
|
||||
#ifndef OPENAL
|
||||
#include <dsound.h>
|
||||
|
||||
/*
|
||||
* EAX Wrapper Interface (using Direct X 7) {4FF53B81-1CE0-11d3-AAB8-00A0C95949D5}
|
||||
*/
|
||||
DEFINE_GUID(CLSID_EAXDirectSound,
|
||||
0x4ff53b81,
|
||||
0x1ce0,
|
||||
0x11d3,
|
||||
0xaa, 0xb8, 0x0, 0xa0, 0xc9, 0x59, 0x49, 0xd5);
|
||||
|
||||
/*
|
||||
* EAX Wrapper Interface (using Direct X 8) {CA503B60-B176-11d4-A094-D0C0BF3A560C}
|
||||
*/
|
||||
DEFINE_GUID(CLSID_EAXDirectSound8,
|
||||
0xca503b60,
|
||||
0xb176,
|
||||
0x11d4,
|
||||
0xa0, 0x94, 0xd0, 0xc0, 0xbf, 0x3a, 0x56, 0xc);
|
||||
|
||||
|
||||
|
||||
#ifdef DIRECTSOUND_VERSION
|
||||
#if DIRECTSOUND_VERSION == 0x0800
|
||||
__declspec(dllimport) HRESULT WINAPI EAXDirectSoundCreate8(GUID*, LPDIRECTSOUND8*, IUnknown FAR *);
|
||||
typedef HRESULT (FAR PASCAL *LPEAXDIRECTSOUNDCREATE8)(GUID*, LPDIRECTSOUND8*, IUnknown FAR*);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
__declspec(dllimport) HRESULT WINAPI EAXDirectSoundCreate(GUID*, LPDIRECTSOUND*, IUnknown FAR *);
|
||||
typedef HRESULT (FAR PASCAL *LPEAXDIRECTSOUNDCREATE)(GUID*, LPDIRECTSOUND*, IUnknown FAR*);
|
||||
|
||||
#else // OPENAL
|
||||
#include "../OpenAl/al.h"
|
||||
|
||||
#ifndef GUID_DEFINED
|
||||
#define GUID_DEFINED
|
||||
typedef struct _GUID
|
||||
{
|
||||
unsigned long Data1;
|
||||
unsigned short Data2;
|
||||
unsigned short Data3;
|
||||
unsigned char Data4[8];
|
||||
} GUID;
|
||||
#endif // !GUID_DEFINED
|
||||
|
||||
#ifndef DEFINE_GUID
|
||||
#ifndef INITGUID
|
||||
#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
|
||||
extern const GUID /*FAR*/ name
|
||||
#else
|
||||
#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
|
||||
extern const GUID name = { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }
|
||||
#endif // INITGUID
|
||||
#endif // DEFINE_GUID
|
||||
|
||||
|
||||
/*
|
||||
* EAX OpenAL Extension
|
||||
*/
|
||||
typedef ALenum (*EAXSet)(const GUID*, ALuint, ALuint, ALvoid*, ALuint);
|
||||
typedef ALenum (*EAXGet)(const GUID*, ALuint, ALuint, ALvoid*, ALuint);
|
||||
#endif
|
||||
|
||||
#pragma pack(push, 4)
|
||||
|
||||
/*
|
||||
* EAX 3.0 listener property set {A8FA6880-B476-11d3-BDB9-00C0F02DDF87}
|
||||
*/
|
||||
DEFINE_GUID(DSPROPSETID_EAX30_ListenerProperties,
|
||||
0xa8fa6882,
|
||||
0xb476,
|
||||
0x11d3,
|
||||
0xbd, 0xb9, 0x00, 0xc0, 0xf0, 0x2d, 0xdf, 0x87);
|
||||
|
||||
// For compatibility with future EAX versions:
|
||||
#define DSPROPSETID_EAX_ListenerProperties DSPROPSETID_EAX30_ListenerProperties
|
||||
|
||||
typedef enum
|
||||
{
|
||||
DSPROPERTY_EAXLISTENER_NONE,
|
||||
DSPROPERTY_EAXLISTENER_ALLPARAMETERS,
|
||||
DSPROPERTY_EAXLISTENER_ENVIRONMENT,
|
||||
DSPROPERTY_EAXLISTENER_ENVIRONMENTSIZE,
|
||||
DSPROPERTY_EAXLISTENER_ENVIRONMENTDIFFUSION,
|
||||
DSPROPERTY_EAXLISTENER_ROOM,
|
||||
DSPROPERTY_EAXLISTENER_ROOMHF,
|
||||
DSPROPERTY_EAXLISTENER_ROOMLF,
|
||||
DSPROPERTY_EAXLISTENER_DECAYTIME,
|
||||
DSPROPERTY_EAXLISTENER_DECAYHFRATIO,
|
||||
DSPROPERTY_EAXLISTENER_DECAYLFRATIO,
|
||||
DSPROPERTY_EAXLISTENER_REFLECTIONS,
|
||||
DSPROPERTY_EAXLISTENER_REFLECTIONSDELAY,
|
||||
DSPROPERTY_EAXLISTENER_REFLECTIONSPAN,
|
||||
DSPROPERTY_EAXLISTENER_REVERB,
|
||||
DSPROPERTY_EAXLISTENER_REVERBDELAY,
|
||||
DSPROPERTY_EAXLISTENER_REVERBPAN,
|
||||
DSPROPERTY_EAXLISTENER_ECHOTIME,
|
||||
DSPROPERTY_EAXLISTENER_ECHODEPTH,
|
||||
DSPROPERTY_EAXLISTENER_MODULATIONTIME,
|
||||
DSPROPERTY_EAXLISTENER_MODULATIONDEPTH,
|
||||
DSPROPERTY_EAXLISTENER_AIRABSORPTIONHF,
|
||||
DSPROPERTY_EAXLISTENER_HFREFERENCE,
|
||||
DSPROPERTY_EAXLISTENER_LFREFERENCE,
|
||||
DSPROPERTY_EAXLISTENER_ROOMROLLOFFFACTOR,
|
||||
DSPROPERTY_EAXLISTENER_FLAGS
|
||||
} DSPROPERTY_EAX_LISTENERPROPERTY;
|
||||
|
||||
// OR these flags with property id
|
||||
#define DSPROPERTY_EAXLISTENER_IMMEDIATE 0x00000000 // changes take effect immediately
|
||||
#define DSPROPERTY_EAXLISTENER_DEFERRED 0x80000000 // changes take effect later
|
||||
#define DSPROPERTY_EAXLISTENER_COMMITDEFERREDSETTINGS (DSPROPERTY_EAXLISTENER_NONE | \
|
||||
DSPROPERTY_EAXLISTENER_IMMEDIATE)
|
||||
|
||||
typedef struct _EAXVECTOR {
|
||||
float x;
|
||||
float y;
|
||||
float z;
|
||||
} EAXVECTOR;
|
||||
|
||||
// Use this structure for DSPROPERTY_EAXLISTENER_ALLPARAMETERS
|
||||
// - all levels are hundredths of decibels
|
||||
// - all times and delays are in seconds
|
||||
//
|
||||
// NOTE: This structure may change in future EAX versions.
|
||||
// It is recommended to initialize fields by name:
|
||||
// myListener.lRoom = -1000;
|
||||
// myListener.lRoomHF = -100;
|
||||
// ...
|
||||
// myListener.dwFlags = myFlags /* see EAXLISTENERFLAGS below */ ;
|
||||
// instead of:
|
||||
// myListener = { -1000, -100, ... , 0x00000009 };
|
||||
// If you want to save and load presets in binary form, you
|
||||
// should define your own structure to insure future compatibility.
|
||||
//
|
||||
typedef struct _EAXLISTENERPROPERTIES
|
||||
{
|
||||
unsigned long ulEnvironment; // sets all listener properties
|
||||
float flEnvironmentSize; // environment size in meters
|
||||
float flEnvironmentDiffusion; // environment diffusion
|
||||
long lRoom; // room effect level (at mid frequencies)
|
||||
long lRoomHF; // relative room effect level at high frequencies
|
||||
long lRoomLF; // relative room effect level at low frequencies
|
||||
float flDecayTime; // reverberation decay time at mid frequencies
|
||||
float flDecayHFRatio; // high-frequency to mid-frequency decay time ratio
|
||||
float flDecayLFRatio; // low-frequency to mid-frequency decay time ratio
|
||||
long lReflections; // early reflections level relative to room effect
|
||||
float flReflectionsDelay; // initial reflection delay time
|
||||
EAXVECTOR vReflectionsPan; // early reflections panning vector
|
||||
long lReverb; // late reverberation level relative to room effect
|
||||
float flReverbDelay; // late reverberation delay time relative to initial reflection
|
||||
EAXVECTOR vReverbPan; // late reverberation panning vector
|
||||
float flEchoTime; // echo time
|
||||
float flEchoDepth; // echo depth
|
||||
float flModulationTime; // modulation time
|
||||
float flModulationDepth; // modulation depth
|
||||
float flAirAbsorptionHF; // change in level per meter at high frequencies
|
||||
float flHFReference; // reference high frequency
|
||||
float flLFReference; // reference low frequency
|
||||
float flRoomRolloffFactor; // like DS3D flRolloffFactor but for room effect
|
||||
unsigned long ulFlags; // modifies the behavior of properties
|
||||
} EAXLISTENERPROPERTIES, *LPEAXLISTENERPROPERTIES;
|
||||
|
||||
// used by DSPROPERTY_EAXLISTENER_ENVIRONMENT
|
||||
enum
|
||||
{
|
||||
EAX_ENVIRONMENT_GENERIC,
|
||||
EAX_ENVIRONMENT_PADDEDCELL,
|
||||
EAX_ENVIRONMENT_ROOM,
|
||||
EAX_ENVIRONMENT_BATHROOM,
|
||||
EAX_ENVIRONMENT_LIVINGROOM,
|
||||
EAX_ENVIRONMENT_STONEROOM,
|
||||
EAX_ENVIRONMENT_AUDITORIUM,
|
||||
EAX_ENVIRONMENT_CONCERTHALL,
|
||||
EAX_ENVIRONMENT_CAVE,
|
||||
EAX_ENVIRONMENT_ARENA,
|
||||
EAX_ENVIRONMENT_HANGAR,
|
||||
EAX_ENVIRONMENT_CARPETEDHALLWAY,
|
||||
EAX_ENVIRONMENT_HALLWAY,
|
||||
EAX_ENVIRONMENT_STONECORRIDOR,
|
||||
EAX_ENVIRONMENT_ALLEY,
|
||||
EAX_ENVIRONMENT_FOREST,
|
||||
EAX_ENVIRONMENT_CITY,
|
||||
EAX_ENVIRONMENT_MOUNTAINS,
|
||||
EAX_ENVIRONMENT_QUARRY,
|
||||
EAX_ENVIRONMENT_PLAIN,
|
||||
EAX_ENVIRONMENT_PARKINGLOT,
|
||||
EAX_ENVIRONMENT_SEWERPIPE,
|
||||
EAX_ENVIRONMENT_UNDERWATER,
|
||||
EAX_ENVIRONMENT_DRUGGED,
|
||||
EAX_ENVIRONMENT_DIZZY,
|
||||
EAX_ENVIRONMENT_PSYCHOTIC,
|
||||
|
||||
EAX_ENVIRONMENT_UNDEFINED,
|
||||
|
||||
EAX_ENVIRONMENT_COUNT
|
||||
};
|
||||
|
||||
// Used by DSPROPERTY_EAXLISTENER_FLAGS
|
||||
//
|
||||
// Note: The number and order of flags may change in future EAX versions.
|
||||
// It is recommended to use the flag defines as follows:
|
||||
// myFlags = EAXLISTENERFLAGS_DECAYTIMESCALE | EAXLISTENERFLAGS_REVERBSCALE;
|
||||
// instead of:
|
||||
// myFlags = 0x00000009;
|
||||
//
|
||||
// These flags determine what properties are affected by environment size.
|
||||
#define EAXLISTENERFLAGS_DECAYTIMESCALE 0x00000001 // reverberation decay time
|
||||
#define EAXLISTENERFLAGS_REFLECTIONSSCALE 0x00000002 // reflection level
|
||||
#define EAXLISTENERFLAGS_REFLECTIONSDELAYSCALE 0x00000004 // initial reflection delay time
|
||||
#define EAXLISTENERFLAGS_REVERBSCALE 0x00000008 // reflections level
|
||||
#define EAXLISTENERFLAGS_REVERBDELAYSCALE 0x00000010 // late reverberation delay time
|
||||
#define EAXLISTENERFLAGS_ECHOTIMESCALE 0x00000040 // echo time
|
||||
#define EAXLISTENERFLAGS_MODULATIONTIMESCALE 0x00000080 // modulation time
|
||||
|
||||
// This flag limits high-frequency decay time according to air absorption.
|
||||
#define EAXLISTENERFLAGS_DECAYHFLIMIT 0x00000020
|
||||
|
||||
#define EAXLISTENERFLAGS_RESERVED 0xFFFFFF00 // reserved future use
|
||||
|
||||
// Property ranges and defaults:
|
||||
|
||||
#define EAXLISTENER_MINENVIRONMENT 0
|
||||
#define EAXLISTENER_MAXENVIRONMENT (EAX_ENVIRONMENT_COUNT-1)
|
||||
#define EAXLISTENER_DEFAULTENVIRONMENT EAX_ENVIRONMENT_GENERIC
|
||||
|
||||
#define EAXLISTENER_MINENVIRONMENTSIZE 1.0f
|
||||
#define EAXLISTENER_MAXENVIRONMENTSIZE 100.0f
|
||||
#define EAXLISTENER_DEFAULTENVIRONMENTSIZE 7.5f
|
||||
|
||||
#define EAXLISTENER_MINENVIRONMENTDIFFUSION 0.0f
|
||||
#define EAXLISTENER_MAXENVIRONMENTDIFFUSION 1.0f
|
||||
#define EAXLISTENER_DEFAULTENVIRONMENTDIFFUSION 1.0f
|
||||
|
||||
#define EAXLISTENER_MINROOM (-10000)
|
||||
#define EAXLISTENER_MAXROOM 0
|
||||
#define EAXLISTENER_DEFAULTROOM (-1000)
|
||||
|
||||
#define EAXLISTENER_MINROOMHF (-10000)
|
||||
#define EAXLISTENER_MAXROOMHF 0
|
||||
#define EAXLISTENER_DEFAULTROOMHF (-100)
|
||||
|
||||
#define EAXLISTENER_MINROOMLF (-10000)
|
||||
#define EAXLISTENER_MAXROOMLF 0
|
||||
#define EAXLISTENER_DEFAULTROOMLF 0
|
||||
|
||||
#define EAXLISTENER_MINDECAYTIME 0.1f
|
||||
#define EAXLISTENER_MAXDECAYTIME 20.0f
|
||||
#define EAXLISTENER_DEFAULTDECAYTIME 1.49f
|
||||
|
||||
#define EAXLISTENER_MINDECAYHFRATIO 0.1f
|
||||
#define EAXLISTENER_MAXDECAYHFRATIO 2.0f
|
||||
#define EAXLISTENER_DEFAULTDECAYHFRATIO 0.83f
|
||||
|
||||
#define EAXLISTENER_MINDECAYLFRATIO 0.1f
|
||||
#define EAXLISTENER_MAXDECAYLFRATIO 2.0f
|
||||
#define EAXLISTENER_DEFAULTDECAYLFRATIO 1.00f
|
||||
|
||||
#define EAXLISTENER_MINREFLECTIONS (-10000)
|
||||
#define EAXLISTENER_MAXREFLECTIONS 1000
|
||||
#define EAXLISTENER_DEFAULTREFLECTIONS (-2602)
|
||||
|
||||
#define EAXLISTENER_MINREFLECTIONSDELAY 0.0f
|
||||
#define EAXLISTENER_MAXREFLECTIONSDELAY 0.3f
|
||||
#define EAXLISTENER_DEFAULTREFLECTIONSDELAY 0.007f
|
||||
|
||||
#define EAXLISTENER_MINREVERB (-10000)
|
||||
#define EAXLISTENER_MAXREVERB 2000
|
||||
#define EAXLISTENER_DEFAULTREVERB 200
|
||||
|
||||
#define EAXLISTENER_MINREVERBDELAY 0.0f
|
||||
#define EAXLISTENER_MAXREVERBDELAY 0.1f
|
||||
#define EAXLISTENER_DEFAULTREVERBDELAY 0.011f
|
||||
|
||||
#define EAXLISTENER_MINECHOTIME 0.075f
|
||||
#define EAXLISTENER_MAXECHOTIME 0.25f
|
||||
#define EAXLISTENER_DEFAULTECHOTIME 0.25f
|
||||
|
||||
#define EAXLISTENER_MINECHODEPTH 0.0f
|
||||
#define EAXLISTENER_MAXECHODEPTH 1.0f
|
||||
#define EAXLISTENER_DEFAULTECHODEPTH 0.0f
|
||||
|
||||
#define EAXLISTENER_MINMODULATIONTIME 0.04f
|
||||
#define EAXLISTENER_MAXMODULATIONTIME 4.0f
|
||||
#define EAXLISTENER_DEFAULTMODULATIONTIME 0.25f
|
||||
|
||||
#define EAXLISTENER_MINMODULATIONDEPTH 0.0f
|
||||
#define EAXLISTENER_MAXMODULATIONDEPTH 1.0f
|
||||
#define EAXLISTENER_DEFAULTMODULATIONDEPTH 0.0f
|
||||
|
||||
#define EAXLISTENER_MINAIRABSORPTIONHF (-100.0f)
|
||||
#define EAXLISTENER_MAXAIRABSORPTIONHF 0.0f
|
||||
#define EAXLISTENER_DEFAULTAIRABSORPTIONHF (-5.0f)
|
||||
|
||||
#define EAXLISTENER_MINHFREFERENCE 1000.0f
|
||||
#define EAXLISTENER_MAXHFREFERENCE 20000.0f
|
||||
#define EAXLISTENER_DEFAULTHFREFERENCE 5000.0f
|
||||
|
||||
#define EAXLISTENER_MINLFREFERENCE 20.0f
|
||||
#define EAXLISTENER_MAXLFREFERENCE 1000.0f
|
||||
#define EAXLISTENER_DEFAULTLFREFERENCE 250.0f
|
||||
|
||||
#define EAXLISTENER_MINROOMROLLOFFFACTOR 0.0f
|
||||
#define EAXLISTENER_MAXROOMROLLOFFFACTOR 10.0f
|
||||
#define EAXLISTENER_DEFAULTROOMROLLOFFFACTOR 0.0f
|
||||
|
||||
#define EAXLISTENER_DEFAULTFLAGS (EAXLISTENERFLAGS_DECAYTIMESCALE | \
|
||||
EAXLISTENERFLAGS_REFLECTIONSSCALE | \
|
||||
EAXLISTENERFLAGS_REFLECTIONSDELAYSCALE | \
|
||||
EAXLISTENERFLAGS_REVERBSCALE | \
|
||||
EAXLISTENERFLAGS_REVERBDELAYSCALE | \
|
||||
EAXLISTENERFLAGS_DECAYHFLIMIT)
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* EAX 3.0 buffer property set {A8FA6881-B476-11d3-BDB9-00C0F02DDF87}
|
||||
*/
|
||||
DEFINE_GUID(DSPROPSETID_EAX30_BufferProperties,
|
||||
0xa8fa6881,
|
||||
0xb476,
|
||||
0x11d3,
|
||||
0xbd, 0xb9, 0x0, 0xc0, 0xf0, 0x2d, 0xdf, 0x87);
|
||||
|
||||
// For compatibility with future EAX versions:
|
||||
#define DSPROPSETID_EAX_BufferProperties DSPROPSETID_EAX30_BufferProperties
|
||||
#define DSPROPSETID_EAX_SourceProperties DSPROPSETID_EAX30_BufferProperties
|
||||
|
||||
typedef enum
|
||||
{
|
||||
DSPROPERTY_EAXBUFFER_NONE,
|
||||
DSPROPERTY_EAXBUFFER_ALLPARAMETERS,
|
||||
DSPROPERTY_EAXBUFFER_OBSTRUCTIONPARAMETERS,
|
||||
DSPROPERTY_EAXBUFFER_OCCLUSIONPARAMETERS,
|
||||
DSPROPERTY_EAXBUFFER_EXCLUSIONPARAMETERS,
|
||||
DSPROPERTY_EAXBUFFER_DIRECT,
|
||||
DSPROPERTY_EAXBUFFER_DIRECTHF,
|
||||
DSPROPERTY_EAXBUFFER_ROOM,
|
||||
DSPROPERTY_EAXBUFFER_ROOMHF,
|
||||
DSPROPERTY_EAXBUFFER_OBSTRUCTION,
|
||||
DSPROPERTY_EAXBUFFER_OBSTRUCTIONLFRATIO,
|
||||
DSPROPERTY_EAXBUFFER_OCCLUSION,
|
||||
DSPROPERTY_EAXBUFFER_OCCLUSIONLFRATIO,
|
||||
DSPROPERTY_EAXBUFFER_OCCLUSIONROOMRATIO,
|
||||
DSPROPERTY_EAXBUFFER_OCCLUSIONDIRECTRATIO,
|
||||
DSPROPERTY_EAXBUFFER_EXCLUSION,
|
||||
DSPROPERTY_EAXBUFFER_EXCLUSIONLFRATIO,
|
||||
DSPROPERTY_EAXBUFFER_OUTSIDEVOLUMEHF,
|
||||
DSPROPERTY_EAXBUFFER_DOPPLERFACTOR,
|
||||
DSPROPERTY_EAXBUFFER_ROLLOFFFACTOR,
|
||||
DSPROPERTY_EAXBUFFER_ROOMROLLOFFFACTOR,
|
||||
DSPROPERTY_EAXBUFFER_AIRABSORPTIONFACTOR,
|
||||
DSPROPERTY_EAXBUFFER_FLAGS
|
||||
} DSPROPERTY_EAX_BUFFERPROPERTY;
|
||||
|
||||
// OR these flags with property id
|
||||
#define DSPROPERTY_EAXBUFFER_IMMEDIATE 0x00000000 // changes take effect immediately
|
||||
#define DSPROPERTY_EAXBUFFER_DEFERRED 0x80000000 // changes take effect later
|
||||
#define DSPROPERTY_EAXBUFFER_COMMITDEFERREDSETTINGS (DSPROPERTY_EAXBUFFER_NONE | \
|
||||
DSPROPERTY_EAXBUFFER_IMMEDIATE)
|
||||
|
||||
// Use this structure for DSPROPERTY_EAXBUFFER_ALLPARAMETERS
|
||||
// - all levels are hundredths of decibels
|
||||
// - all delays are in seconds
|
||||
//
|
||||
// NOTE: This structure may change in future EAX versions.
|
||||
// It is recommended to initialize fields by name:
|
||||
// myBuffer.lDirect = 0;
|
||||
// myBuffer.lDirectHF = -200;
|
||||
// ...
|
||||
// myBuffer.dwFlags = myFlags /* see EAXBUFFERFLAGS below */ ;
|
||||
// instead of:
|
||||
// myBuffer = { 0, -200, ... , 0x00000003 };
|
||||
//
|
||||
typedef struct _EAXBUFFERPROPERTIES
|
||||
{
|
||||
long lDirect; // direct path level (at low and mid frequencies)
|
||||
long lDirectHF; // relative direct path level at high frequencies
|
||||
long lRoom; // room effect level (at low and mid frequencies)
|
||||
long lRoomHF; // relative room effect level at high frequencies
|
||||
long lObstruction; // main obstruction control (attenuation at high frequencies)
|
||||
float flObstructionLFRatio; // obstruction low-frequency level re. main control
|
||||
long lOcclusion; // main occlusion control (attenuation at high frequencies)
|
||||
float flOcclusionLFRatio; // occlusion low-frequency level re. main control
|
||||
float flOcclusionRoomRatio; // relative occlusion control for room effect
|
||||
float flOcclusionDirectRatio; // relative occlusion control for direct path
|
||||
long lExclusion; // main exlusion control (attenuation at high frequencies)
|
||||
float flExclusionLFRatio; // exclusion low-frequency level re. main control
|
||||
long lOutsideVolumeHF; // outside sound cone level at high frequencies
|
||||
float flDopplerFactor; // like DS3D flDopplerFactor but per source
|
||||
float flRolloffFactor; // like DS3D flRolloffFactor but per source
|
||||
float flRoomRolloffFactor; // like DS3D flRolloffFactor but for room effect
|
||||
float flAirAbsorptionFactor; // multiplies DSPROPERTY_EAXLISTENER_AIRABSORPTIONHF
|
||||
unsigned long ulFlags; // modifies the behavior of properties
|
||||
} EAXBUFFERPROPERTIES, *LPEAXBUFFERPROPERTIES;
|
||||
|
||||
// Use this structure for DSPROPERTY_EAXBUFFER_OBSTRUCTION,
|
||||
typedef struct _EAXOBSTRUCTIONPROPERTIES
|
||||
{
|
||||
long lObstruction;
|
||||
float flObstructionLFRatio;
|
||||
} EAXOBSTRUCTIONPROPERTIES, *LPEAXOBSTRUCTIONPROPERTIES;
|
||||
|
||||
// Use this structure for DSPROPERTY_EAXBUFFER_OCCLUSION
|
||||
typedef struct _EAXOCCLUSIONPROPERTIES
|
||||
{
|
||||
long lOcclusion;
|
||||
float flOcclusionLFRatio;
|
||||
float flOcclusionRoomRatio;
|
||||
float flOcclusionDirectRatio;
|
||||
} EAXOCCLUSIONPROPERTIES, *LPEAXOCCLUSIONPROPERTIES;
|
||||
|
||||
// Use this structure for DSPROPERTY_EAXBUFFER_EXCLUSION
|
||||
typedef struct _EAXEXCLUSIONPROPERTIES
|
||||
{
|
||||
long lExclusion;
|
||||
float flExclusionLFRatio;
|
||||
} EAXEXCLUSIONPROPERTIES, *LPEAXEXCLUSIONPROPERTIES;
|
||||
|
||||
// Used by DSPROPERTY_EAXBUFFER_FLAGS
|
||||
// TRUE: value is computed automatically - property is an offset
|
||||
// FALSE: value is used directly
|
||||
//
|
||||
// Note: The number and order of flags may change in future EAX versions.
|
||||
// To insure future compatibility, use flag defines as follows:
|
||||
// myFlags = EAXBUFFERFLAGS_DIRECTHFAUTO | EAXBUFFERFLAGS_ROOMAUTO;
|
||||
// instead of:
|
||||
// myFlags = 0x00000003;
|
||||
//
|
||||
#define EAXBUFFERFLAGS_DIRECTHFAUTO 0x00000001 // affects DSPROPERTY_EAXBUFFER_DIRECTHF
|
||||
#define EAXBUFFERFLAGS_ROOMAUTO 0x00000002 // affects DSPROPERTY_EAXBUFFER_ROOM
|
||||
#define EAXBUFFERFLAGS_ROOMHFAUTO 0x00000004 // affects DSPROPERTY_EAXBUFFER_ROOMHF
|
||||
|
||||
#define EAXBUFFERFLAGS_RESERVED 0xFFFFFFF8 // reserved future use
|
||||
|
||||
// Property ranges and defaults:
|
||||
|
||||
#define EAXBUFFER_MINDIRECT (-10000)
|
||||
#define EAXBUFFER_MAXDIRECT 1000
|
||||
#define EAXBUFFER_DEFAULTDIRECT 0
|
||||
|
||||
#define EAXBUFFER_MINDIRECTHF (-10000)
|
||||
#define EAXBUFFER_MAXDIRECTHF 0
|
||||
#define EAXBUFFER_DEFAULTDIRECTHF 0
|
||||
|
||||
#define EAXBUFFER_MINROOM (-10000)
|
||||
#define EAXBUFFER_MAXROOM 1000
|
||||
#define EAXBUFFER_DEFAULTROOM 0
|
||||
|
||||
#define EAXBUFFER_MINROOMHF (-10000)
|
||||
#define EAXBUFFER_MAXROOMHF 0
|
||||
#define EAXBUFFER_DEFAULTROOMHF 0
|
||||
|
||||
#define EAXBUFFER_MINOBSTRUCTION (-10000)
|
||||
#define EAXBUFFER_MAXOBSTRUCTION 0
|
||||
#define EAXBUFFER_DEFAULTOBSTRUCTION 0
|
||||
|
||||
#define EAXBUFFER_MINOBSTRUCTIONLFRATIO 0.0f
|
||||
#define EAXBUFFER_MAXOBSTRUCTIONLFRATIO 1.0f
|
||||
#define EAXBUFFER_DEFAULTOBSTRUCTIONLFRATIO 0.0f
|
||||
|
||||
#define EAXBUFFER_MINOCCLUSION (-10000)
|
||||
#define EAXBUFFER_MAXOCCLUSION 0
|
||||
#define EAXBUFFER_DEFAULTOCCLUSION 0
|
||||
|
||||
#define EAXBUFFER_MINOCCLUSIONLFRATIO 0.0f
|
||||
#define EAXBUFFER_MAXOCCLUSIONLFRATIO 1.0f
|
||||
#define EAXBUFFER_DEFAULTOCCLUSIONLFRATIO 0.25f
|
||||
|
||||
#define EAXBUFFER_MINOCCLUSIONROOMRATIO 0.0f
|
||||
#define EAXBUFFER_MAXOCCLUSIONROOMRATIO 10.0f
|
||||
#define EAXBUFFER_DEFAULTOCCLUSIONROOMRATIO 1.5f
|
||||
|
||||
#define EAXBUFFER_MINOCCLUSIONDIRECTRATIO 0.0f
|
||||
#define EAXBUFFER_MAXOCCLUSIONDIRECTRATIO 10.0f
|
||||
#define EAXBUFFER_DEFAULTOCCLUSIONDIRECTRATIO 1.0f
|
||||
|
||||
#define EAXBUFFER_MINEXCLUSION (-10000)
|
||||
#define EAXBUFFER_MAXEXCLUSION 0
|
||||
#define EAXBUFFER_DEFAULTEXCLUSION 0
|
||||
|
||||
#define EAXBUFFER_MINEXCLUSIONLFRATIO 0.0f
|
||||
#define EAXBUFFER_MAXEXCLUSIONLFRATIO 1.0f
|
||||
#define EAXBUFFER_DEFAULTEXCLUSIONLFRATIO 1.0f
|
||||
|
||||
#define EAXBUFFER_MINOUTSIDEVOLUMEHF (-10000)
|
||||
#define EAXBUFFER_MAXOUTSIDEVOLUMEHF 0
|
||||
#define EAXBUFFER_DEFAULTOUTSIDEVOLUMEHF 0
|
||||
|
||||
#define EAXBUFFER_MINDOPPLERFACTOR 0.0f
|
||||
#define EAXBUFFER_MAXDOPPLERFACTOR 10.f
|
||||
#define EAXBUFFER_DEFAULTDOPPLERFACTOR 0.0f
|
||||
|
||||
#define EAXBUFFER_MINROLLOFFFACTOR 0.0f
|
||||
#define EAXBUFFER_MAXROLLOFFFACTOR 10.f
|
||||
#define EAXBUFFER_DEFAULTROLLOFFFACTOR 0.0f
|
||||
|
||||
#define EAXBUFFER_MINROOMROLLOFFFACTOR 0.0f
|
||||
#define EAXBUFFER_MAXROOMROLLOFFFACTOR 10.f
|
||||
#define EAXBUFFER_DEFAULTROOMROLLOFFFACTOR 0.0f
|
||||
|
||||
#define EAXBUFFER_MINAIRABSORPTIONFACTOR 0.0f
|
||||
#define EAXBUFFER_MAXAIRABSORPTIONFACTOR 10.0f
|
||||
#define EAXBUFFER_DEFAULTAIRABSORPTIONFACTOR 1.0f
|
||||
|
||||
#define EAXBUFFER_DEFAULTFLAGS (EAXBUFFERFLAGS_DIRECTHFAUTO | \
|
||||
EAXBUFFERFLAGS_ROOMAUTO | \
|
||||
EAXBUFFERFLAGS_ROOMHFAUTO )
|
||||
|
||||
#pragma pack(pop)
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif // __cplusplus
|
||||
|
||||
#endif
|
BIN
CODE-mp/client/eax/vssver.scc
Normal file
BIN
CODE-mp/client/eax/vssver.scc
Normal file
Binary file not shown.
|
@ -1,17 +1,14 @@
|
|||
#include "../ui/keycodes.h"
|
||||
|
||||
#define MAX_KEYS 256
|
||||
|
||||
typedef struct {
|
||||
qboolean down;
|
||||
int repeats; // if > 1, it is autorepeating
|
||||
char *binding;
|
||||
} qkey_t;
|
||||
|
||||
extern qboolean key_overstrikeMode;
|
||||
extern qkey_t keys[MAX_KEYS];
|
||||
|
||||
#define MAX_EDIT_LINE 256
|
||||
#define COMMAND_HISTORY 32
|
||||
|
||||
typedef struct {
|
||||
int cursor;
|
||||
int scroll;
|
||||
|
@ -19,18 +16,43 @@ typedef struct {
|
|||
char buffer[MAX_EDIT_LINE];
|
||||
} field_t;
|
||||
|
||||
typedef struct keyGlobals_s
|
||||
{
|
||||
field_t historyEditLines[COMMAND_HISTORY];
|
||||
|
||||
int nextHistoryLine; // the last line in the history buffer, not masked
|
||||
int historyLine; // the line being displayed from history buffer
|
||||
// will be <= nextHistoryLine
|
||||
field_t g_consoleField;
|
||||
|
||||
qboolean anykeydown;
|
||||
qboolean key_overstrikeMode;
|
||||
int keyDownCount;
|
||||
|
||||
qkey_t keys[MAX_KEYS];
|
||||
} keyGlobals_t;
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
word upper;
|
||||
word lower;
|
||||
char *name;
|
||||
int keynum;
|
||||
bool menukey;
|
||||
} keyname_t;
|
||||
|
||||
extern keyGlobals_t kg;
|
||||
extern keyname_t keynames[MAX_KEYS];
|
||||
|
||||
|
||||
void Field_Clear( field_t *edit );
|
||||
void Field_KeyDownEvent( field_t *edit, int key );
|
||||
void Field_CharEvent( field_t *edit, int ch );
|
||||
void Field_Draw( field_t *edit, int x, int y, int width, qboolean showCursor );
|
||||
void Field_BigDraw( field_t *edit, int x, int y, int width, qboolean showCursor );
|
||||
|
||||
#define COMMAND_HISTORY 32
|
||||
extern field_t historyEditLines[COMMAND_HISTORY];
|
||||
|
||||
extern field_t g_consoleField;
|
||||
extern field_t chatField;
|
||||
extern qboolean anykeydown;
|
||||
extern qboolean chat_team;
|
||||
extern int chat_playerNum;
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -8,6 +8,16 @@
|
|||
#include "snd_public.h"
|
||||
#include "../mp3code/mp3struct.h"
|
||||
|
||||
// Open AL Specific
|
||||
#include "openal\al.h"
|
||||
#include "openal\alc.h"
|
||||
#include <objbase.h>
|
||||
#include "eax\eax.h"
|
||||
#include "eax\eaxman.h"
|
||||
|
||||
// Added for Open AL to know when to mute all sounds (e.g when app. loses focus)
|
||||
void S_MuteAllSounds(bool bMute);
|
||||
|
||||
#define PAINTBUFFER_SIZE 4096 // this is in samples
|
||||
|
||||
#define SND_CHUNK_SIZE 1024 // samples
|
||||
|
@ -54,9 +64,27 @@ typedef struct sfx_s {
|
|||
float fVolRange; // used to set the highest volume this sample has at load time - used for lipsynching
|
||||
int iLastLevelUsedOn; // used for cacheing purposes
|
||||
struct sfx_s *next; // only used because of hash table when registering
|
||||
|
||||
// Open AL
|
||||
ALuint Buffer;
|
||||
} sfx_t;
|
||||
|
||||
|
||||
// Open AL specific
|
||||
typedef struct
|
||||
{
|
||||
ALuint BufferID;
|
||||
ALuint Status;
|
||||
char *Data;
|
||||
} STREAMINGBUFFER;
|
||||
|
||||
#define NUM_STREAMING_BUFFERS 4
|
||||
#define STREAMING_BUFFER_SIZE 4608 // 4 decoded MP3 frames
|
||||
|
||||
#define QUEUED 1
|
||||
#define UNQUEUED 2
|
||||
|
||||
|
||||
typedef struct {
|
||||
int channels;
|
||||
int samples; // mono samples in buffer
|
||||
|
@ -80,6 +108,10 @@ typedef struct loopSound_s {
|
|||
float oldDopplerScale;
|
||||
int framenum;
|
||||
|
||||
// Open AL
|
||||
bool bProcessed;
|
||||
bool bPlaying;
|
||||
bool bRelative;
|
||||
} loopSound_t;
|
||||
|
||||
typedef struct
|
||||
|
@ -104,6 +136,15 @@ typedef struct
|
|||
byte MP3SlidingDecodeBuffer[50000/*12000*/]; // typical back-request = -3072, so roughly double is 6000 (safety), then doubled again so the 6K pos is in the middle of the buffer)
|
||||
int iMP3SlidingDecodeWritePos;
|
||||
int iMP3SlidingDecodeWindowPos;
|
||||
|
||||
// Open AL specific
|
||||
bool bLooping; // Signifies if this channel / source is playing a looping sound
|
||||
bool bProcessed; // Signifies if this channel / source has been processed
|
||||
bool bStreaming; // Set to true if the data needs to be streamed (MP3 or dialogue)
|
||||
STREAMINGBUFFER buffers[NUM_STREAMING_BUFFERS]; // AL Buffers for streaming
|
||||
ALuint alSource; // Open AL Source
|
||||
bool bPlaying; // Set to true when a sound is playing on this channel / source
|
||||
int iStartTime; // Time playback of Source begins
|
||||
} channel_t;
|
||||
|
||||
|
||||
|
|
|
@ -15,6 +15,9 @@
|
|||
|
||||
#include "snd_mp3.h"
|
||||
|
||||
// Open AL
|
||||
extern int s_UseOpenAL;
|
||||
|
||||
/*
|
||||
===============================================================================
|
||||
|
||||
|
@ -230,30 +233,48 @@ static qboolean S_LoadSound_FileLoadAndNameAdjuster(char *psFilename, byte **pDa
|
|||
if (com_buildScript->integer)
|
||||
{
|
||||
fileHandle_t hFile;
|
||||
//German
|
||||
strncpy(psVoice,"chr_d",5); // same number of letters as "chars"
|
||||
FS_FOpenFileRead(psFilename, &hFile, qfalse); //cache this file
|
||||
FS_FOpenFileRead(psFilename, &hFile, qfalse); //cache the wav
|
||||
if (!hFile)
|
||||
{
|
||||
strcpy(&psFilename[iNameStrlen-3],"mp3"); //not there try mp3
|
||||
FS_FOpenFileRead(psFilename, &hFile, qfalse); //cache this file
|
||||
FS_FOpenFileRead(psFilename, &hFile, qfalse); //cache the mp3
|
||||
}
|
||||
if (hFile)
|
||||
{
|
||||
FS_FCloseFile(hFile);
|
||||
}
|
||||
strcpy(&psFilename[iNameStrlen-3],"wav");
|
||||
strcpy(&psFilename[iNameStrlen-3],"wav"); //put it back to wav
|
||||
|
||||
//French
|
||||
strncpy(psVoice,"chr_f",5); // same number of letters as "chars"
|
||||
FS_FOpenFileRead(psFilename, &hFile, qfalse); //cahce this file
|
||||
FS_FOpenFileRead(psFilename, &hFile, qfalse); //cache the wav
|
||||
if (!hFile)
|
||||
{
|
||||
strcpy(&psFilename[iNameStrlen-3],"mp3"); //not there try mp3
|
||||
FS_FOpenFileRead(psFilename, &hFile, qfalse); //cache this file
|
||||
FS_FOpenFileRead(psFilename, &hFile, qfalse); //cache the mp3
|
||||
}
|
||||
if (hFile)
|
||||
{
|
||||
FS_FCloseFile(hFile);
|
||||
}
|
||||
strcpy(&psFilename[iNameStrlen-3],"wav"); //put it back to wav
|
||||
|
||||
//Spanish
|
||||
strncpy(psVoice,"chr_e",5); // same number of letters as "chars"
|
||||
FS_FOpenFileRead(psFilename, &hFile, qfalse); //cache the wav
|
||||
if (!hFile)
|
||||
{
|
||||
strcpy(&psFilename[iNameStrlen-3],"mp3"); //not there try mp3
|
||||
FS_FOpenFileRead(psFilename, &hFile, qfalse); //cache the mp3
|
||||
}
|
||||
if (hFile)
|
||||
{
|
||||
FS_FCloseFile(hFile);
|
||||
}
|
||||
strcpy(&psFilename[iNameStrlen-3],"wav"); //put it back to wav
|
||||
|
||||
strncpy(psVoice,"chars",5); //put it back to chars
|
||||
}
|
||||
|
||||
|
@ -264,11 +285,14 @@ static qboolean S_LoadSound_FileLoadAndNameAdjuster(char *psFilename, byte **pDa
|
|||
{
|
||||
strncpy(psVoice,"chr_d",5); // same number of letters as "chars"
|
||||
}
|
||||
else
|
||||
if (s_language && stricmp("FRANCAIS",s_language->string)==0)
|
||||
else if (s_language && stricmp("FRANCAIS",s_language->string)==0)
|
||||
{
|
||||
strncpy(psVoice,"chr_f",5); // same number of letters as "chars"
|
||||
}
|
||||
else if (s_language && stricmp("ESPANOL",s_language->string)==0)
|
||||
{
|
||||
strncpy(psVoice,"chr_e",5); // same number of letters as "chars"
|
||||
}
|
||||
else
|
||||
{
|
||||
psVoice = NULL; // use this ptr as a flag as to whether or not we substituted with a foreign version
|
||||
|
@ -340,6 +364,7 @@ static qboolean S_LoadSound_Actual( sfx_t *sfx )
|
|||
short *samples;
|
||||
wavinfo_t info;
|
||||
int size;
|
||||
ALuint Buffer;
|
||||
|
||||
// player specific sounds are never directly loaded...
|
||||
//
|
||||
|
@ -406,6 +431,27 @@ static qboolean S_LoadSound_Actual( sfx_t *sfx )
|
|||
|
||||
S_LoadSound_Finalize(&info,sfx,pbUnpackBuffer);
|
||||
|
||||
// Open AL
|
||||
if (s_UseOpenAL)
|
||||
{
|
||||
// Clear Open AL Error state
|
||||
alGetError();
|
||||
|
||||
// Generate AL Buffer
|
||||
alGenBuffers(1, &Buffer);
|
||||
if (alGetError() == AL_NO_ERROR)
|
||||
{
|
||||
// Copy audio data to AL Buffer
|
||||
alBufferData(Buffer, AL_FORMAT_MONO16, sfx->pSoundData, sfx->iSoundLengthInSamples*2, 22050);
|
||||
if (alGetError() == AL_NO_ERROR)
|
||||
{
|
||||
sfx->Buffer = Buffer;
|
||||
Z_Free(sfx->pSoundData);
|
||||
sfx->pSoundData = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Z_Free(pbUnpackBuffer);
|
||||
}
|
||||
}
|
||||
|
@ -452,6 +498,28 @@ static qboolean S_LoadSound_Actual( sfx_t *sfx )
|
|||
sfx->pSoundData = NULL;
|
||||
ResampleSfx( sfx, info.rate, info.width, data + info.dataofs );
|
||||
|
||||
// Open AL
|
||||
if (s_UseOpenAL)
|
||||
{
|
||||
// Clear Open AL Error State
|
||||
alGetError();
|
||||
|
||||
// Generate AL Buffer
|
||||
alGenBuffers(1, &Buffer);
|
||||
if (alGetError() == AL_NO_ERROR)
|
||||
{
|
||||
// Copy audio data to AL Buffer
|
||||
alBufferData(Buffer, AL_FORMAT_MONO16, sfx->pSoundData, sfx->iSoundLengthInSamples*2, 22050);
|
||||
if (alGetError() == AL_NO_ERROR)
|
||||
{
|
||||
// Store AL Buffer in sfx struct, and release sample data
|
||||
sfx->Buffer = Buffer;
|
||||
Z_Free(sfx->pSoundData);
|
||||
sfx->pSoundData = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Z_Free(samples);
|
||||
}
|
||||
|
||||
|
|
|
@ -523,10 +523,18 @@ qboolean MP3_ReadSpecialTagInfo(byte *pbLoadedFile, int iLoadedFileLen, // (in)
|
|||
#define FUZZY_AMOUNT (5*1024) // so it has to be significantly over, not just break even, because of
|
||||
// the xtra CPU time versus memory saving
|
||||
|
||||
#define OPENAL_FUZZY_AMOUNT (100*1024) // Speed up CPU time even more, at the cost of a bit more memory of course :)
|
||||
|
||||
cvar_t* cv_MP3overhead = NULL;
|
||||
void MP3_InitCvars(void)
|
||||
{
|
||||
cv_MP3overhead = Cvar_Get("s_mp3overhead", va("%d", sizeof(MP3STREAM) + FUZZY_AMOUNT), CVAR_ARCHIVE );
|
||||
|
||||
extern int s_UseOpenAL;
|
||||
if (s_UseOpenAL)
|
||||
{
|
||||
cv_MP3overhead->value += OPENAL_FUZZY_AMOUNT;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -47,5 +47,5 @@ void S_DisplayFreeMemory(void);
|
|||
|
||||
void S_ClearSoundBuffer( void );
|
||||
|
||||
void SNDDMA_Activate( void );
|
||||
void SNDDMA_Activate( qboolean bAppActive );
|
||||
|
||||
|
|
Binary file not shown.
|
@ -61,6 +61,7 @@ boteventtracker_t gBotEventTracker[MAX_CLIENTS];
|
|||
//rww - new bot cvars..
|
||||
vmCvar_t bot_forcepowers;
|
||||
vmCvar_t bot_forgimmick;
|
||||
vmCvar_t bot_honorableduelacceptance;
|
||||
#ifdef _DEBUG
|
||||
vmCvar_t bot_nogoals;
|
||||
vmCvar_t bot_debugmessages;
|
||||
|
@ -5686,6 +5687,7 @@ void StandardBotAI(bot_state_t *bs, float thinktime)
|
|||
}
|
||||
|
||||
trap_Cvar_Update(&bot_forgimmick);
|
||||
trap_Cvar_Update(&bot_honorableduelacceptance);
|
||||
|
||||
if (bot_forgimmick.integer)
|
||||
{
|
||||
|
@ -5693,6 +5695,11 @@ void StandardBotAI(bot_state_t *bs, float thinktime)
|
|||
bs->currentEnemy = NULL;
|
||||
bs->wpDestination = NULL;
|
||||
bs->wpDirection = 0;
|
||||
|
||||
if (bot_forgimmick.integer == 2)
|
||||
{ //for debugging saber stuff, this is handy
|
||||
trap_EA_Attack(bs->client);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -6044,7 +6051,8 @@ void StandardBotAI(bot_state_t *bs, float thinktime)
|
|||
}
|
||||
}
|
||||
|
||||
/*
|
||||
if (bot_honorableduelacceptance.integer)
|
||||
{
|
||||
if (bs->currentEnemy && bs->currentEnemy->client &&
|
||||
bs->cur_ps.weapon == WP_SABER &&
|
||||
g_privateDuel.integer &&
|
||||
|
@ -6079,7 +6087,7 @@ void StandardBotAI(bot_state_t *bs, float thinktime)
|
|||
bs->beStill = level.time + 100;
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
//Apparently this "allows you to cheese" when fighting against bots. I'm not sure why you'd want to con bots
|
||||
//into an easy kill, since they're bots and all. But whatever.
|
||||
|
||||
|
@ -6914,7 +6922,7 @@ void StandardBotAI(bot_state_t *bs, float thinktime)
|
|||
else
|
||||
{
|
||||
#endif
|
||||
if (bot_forcepowers.integer)
|
||||
if (bot_forcepowers.integer && !g_forcePowerDisable.integer)
|
||||
{
|
||||
trap_EA_ForcePower(bs->client);
|
||||
}
|
||||
|
@ -7006,6 +7014,7 @@ int BotAISetup( int restart ) {
|
|||
//rww - new bot cvars..
|
||||
trap_Cvar_Register(&bot_forcepowers, "bot_forcepowers", "1", CVAR_CHEAT);
|
||||
trap_Cvar_Register(&bot_forgimmick, "bot_forgimmick", "0", CVAR_CHEAT);
|
||||
trap_Cvar_Register(&bot_honorableduelacceptance, "bot_honorableduelacceptance", "0", CVAR_CHEAT);
|
||||
#ifdef _DEBUG
|
||||
trap_Cvar_Register(&bot_nogoals, "bot_nogoals", "0", CVAR_CHEAT);
|
||||
trap_Cvar_Register(&bot_debugmessages, "bot_debugmessages", "0", CVAR_CHEAT);
|
||||
|
|
|
@ -374,6 +374,7 @@ char *ConcatArgs( int start );
|
|||
|
||||
extern vmCvar_t bot_forcepowers;
|
||||
extern vmCvar_t bot_forgimmick;
|
||||
extern vmCvar_t bot_honorableduelacceptance;
|
||||
#ifdef _DEBUG
|
||||
extern vmCvar_t bot_nogoals;
|
||||
extern vmCvar_t bot_debugmessages;
|
||||
|
|
|
@ -8,8 +8,9 @@ typedef enum //# animNumber_e
|
|||
//=================================================
|
||||
//ANIMS IN WHICH UPPER AND LOWER OBJECTS ARE IN MD3
|
||||
//=================================================
|
||||
BOTH_1CRUFTFORGIL = 0, //# G2 cannot have a reverse anim at beginning of file
|
||||
//# #sep BOTH_ DEATHS
|
||||
BOTH_DEATH1 = 0, //# First Death anim
|
||||
BOTH_DEATH1, //# First Death anim
|
||||
BOTH_DEATH2, //# Second Death anim
|
||||
BOTH_DEATH3, //# Third Death anim
|
||||
BOTH_DEATH4, //# Fourth Death anim
|
||||
|
@ -23,13 +24,17 @@ typedef enum //# animNumber_e
|
|||
BOTH_DEATH12, //#
|
||||
BOTH_DEATH13, //#
|
||||
BOTH_DEATH14, //#
|
||||
BOTH_DEATH14_UNGRIP, //# Desann's end death (cin #35)
|
||||
BOTH_DEATH14_SITUP, //# Tavion sitting up after having been thrown (cin #23)
|
||||
BOTH_DEATH15, //#
|
||||
BOTH_DEATH16, //#
|
||||
BOTH_DEATH17, //#
|
||||
BOTH_DEATH18, //#
|
||||
BOTH_DEATH19, //#
|
||||
BOTH_DEATH20, //#
|
||||
BOTH_DEATH21, //#
|
||||
BOTH_DEATH22, //#
|
||||
BOTH_DEATH23, //#
|
||||
BOTH_DEATH24, //#
|
||||
BOTH_DEATH25, //#
|
||||
|
||||
BOTH_DEATHFORWARD1, //# First Death in which they get thrown forward
|
||||
BOTH_DEATHFORWARD2, //# Second Death in which they get thrown forward
|
||||
|
@ -73,6 +78,12 @@ typedef enum //# animNumber_e
|
|||
BOTH_DEAD17, //#
|
||||
BOTH_DEAD18, //#
|
||||
BOTH_DEAD19, //#
|
||||
BOTH_DEAD20, //#
|
||||
BOTH_DEAD21, //#
|
||||
BOTH_DEAD22, //#
|
||||
BOTH_DEAD23, //#
|
||||
BOTH_DEAD24, //#
|
||||
BOTH_DEAD25, //#
|
||||
BOTH_DEADFORWARD1, //# First thrown forward death finished pose
|
||||
BOTH_DEADFORWARD2, //# Second thrown forward death finished pose
|
||||
BOTH_DEADBACKWARD1, //# First thrown backward death finished pose
|
||||
|
@ -124,6 +135,7 @@ typedef enum //# animNumber_e
|
|||
//# #sep BOTH_ ATTACKS
|
||||
BOTH_ATTACK1, //# Attack with stun baton
|
||||
BOTH_ATTACK2, //# Attack with one-handed pistol
|
||||
BOTH_ATTACK2IDLE1, //# Idle with one-handed pistol
|
||||
BOTH_ATTACK3, //# Attack with blaster rifle
|
||||
BOTH_ATTACK4, //# Attack with disruptor
|
||||
BOTH_ATTACK5, //# Attack with bow caster
|
||||
|
@ -608,19 +620,28 @@ typedef enum //# animNumber_e
|
|||
BOTH_CWCIRCLELOCK, //#
|
||||
BOTH_CCWCIRCLELOCK, //#
|
||||
|
||||
BOTH_SABERFAST_STANCE,
|
||||
BOTH_SABERSLOW_STANCE,
|
||||
BOTH_A2_STABBACK1, //# Stab saber backward
|
||||
BOTH_ATTACK_BACK, //# Swing around backwards and attack
|
||||
BOTH_JUMPFLIPSLASHDOWN1,//#
|
||||
BOTH_JUMPFLIPSTABDOWN,//#
|
||||
BOTH_FORCELEAP2_T__B_,//#
|
||||
BOTH_LUNGE2_B__T_,//#
|
||||
BOTH_CROUCHATTACKBACK1,//#
|
||||
|
||||
//# #sep BOTH_ STANDING
|
||||
BOTH_STAND1, //# Standing idle, no weapon, hands down
|
||||
BOTH_STAND1_RANDOM1, //# Random standing idle
|
||||
BOTH_STAND1_RANDOM2, //# Random standing idle
|
||||
BOTH_STAND2, //# Standing idle with a weapon
|
||||
BOTH_STAND2_RANDOM1, //# Random standing idle
|
||||
BOTH_STAND2_RANDOM2, //# Random standing idle
|
||||
BOTH_STAND2_RANDOM3, //# Random standing idle
|
||||
BOTH_STAND2_RANDOM4, //# Random standing idle
|
||||
BOTH_STAND3, //# Standing hands behind back, at ease, etc.
|
||||
BOTH_STAND1IDLE1, //# Random standing idle
|
||||
BOTH_STAND2, //# Standing idle with a saber
|
||||
BOTH_STAND2IDLE1, //# Random standing idle
|
||||
BOTH_STAND2IDLE2, //# Random standing idle
|
||||
BOTH_STAND3, //# Standing idle with 2-handed weapon
|
||||
BOTH_STAND3IDLE1, //# Random standing idle
|
||||
BOTH_STAND4, //# hands clasp behind back
|
||||
BOTH_STAND4IDLE1, //# Random standing idle
|
||||
BOTH_STAND5, //# standing idle, no weapon, hand down, back straight
|
||||
BOTH_STAND5IDLE1, //# Random standing idle
|
||||
BOTH_STAND6, //# one handed, gun at side, relaxed stand
|
||||
BOTH_STAND7, //# both hands on hips (female)
|
||||
BOTH_STAND8, //# both hands on hips (male)
|
||||
|
@ -639,8 +660,21 @@ typedef enum //# animNumber_e
|
|||
BOTH_STAND5_REELO, //# Reelo in his stand5 position (cin #18)
|
||||
BOTH_STAND1TOSTAND5, //# Transition from stand1 to stand5
|
||||
BOTH_STAND5TOSTAND1, //# Transition from stand5 to stand1
|
||||
BOTH_STAND5TOAIM, //# Transition of Kye aiming his gun at Desann (cin #9)
|
||||
BOTH_STAND5STARTLEDLOOKLEFT, //# Kyle turning to watch the bridge drop (cin #9)
|
||||
BOTH_STARTLEDLOOKLEFTTOSTAND5, //# Kyle returning to stand 5 from watching the bridge drop (cin #9)
|
||||
BOTH_STAND5TOSTAND8, //# Transition from stand5 to stand8
|
||||
BOTH_STAND7TOSTAND8, //# Tavion putting hands on back of chair (cin #11)
|
||||
BOTH_STAND8TOSTAND5, //# Transition from stand8 to stand5
|
||||
BOTH_STAND5SHIFTWEIGHT, //# Weightshift from stand5 to side and back to stand5
|
||||
BOTH_STAND5SHIFTWEIGHTSTART, //# From stand5 to side
|
||||
BOTH_STAND5SHIFTWEIGHTSTOP, //# From side to stand5
|
||||
BOTH_STAND5TURNLEFTSTART, //# Start turning left from stand5
|
||||
BOTH_STAND5TURNLEFTSTOP, //# Stop turning left from stand5
|
||||
BOTH_STAND5TURNRIGHTSTART, //# Start turning right from stand5
|
||||
BOTH_STAND5TURNRIGHTSTOP, //# Stop turning right from stand5
|
||||
BOTH_STAND5LOOK180LEFTSTART, //# Start looking over left shoulder (cin #17)
|
||||
BOTH_STAND5LOOK180LEFTSTOP, //# Stop looking over left shoulder (cin #17)
|
||||
|
||||
BOTH_CONSOLE1START, //# typing at a console
|
||||
BOTH_CONSOLE1, //# typing at a console
|
||||
|
@ -648,6 +682,8 @@ typedef enum //# animNumber_e
|
|||
BOTH_CONSOLE2START, //# typing at a console with comm link in hand (cin #5)
|
||||
BOTH_CONSOLE2, //# typing at a console with comm link in hand (cin #5)
|
||||
BOTH_CONSOLE2STOP, //# typing at a console with comm link in hand (cin #5)
|
||||
BOTH_CONSOLE2HOLDCOMSTART, //# lean in to type at console while holding comm link in hand (cin #5)
|
||||
BOTH_CONSOLE2HOLDCOMSTOP, //# lean away after typing at console while holding comm link in hand (cin #5)
|
||||
|
||||
BOTH_GUARD_LOOKAROUND1, //# Cradling weapon and looking around
|
||||
BOTH_GUARD_IDLE1, //# Cradling weapon and standing
|
||||
|
@ -655,6 +691,51 @@ typedef enum //# animNumber_e
|
|||
BOTH_GESTURE1, //# Generic gesture, non-specific
|
||||
BOTH_GESTURE2, //# Generic gesture, non-specific
|
||||
BOTH_GESTURE3, //# Generic gesture, non-specific
|
||||
BOTH_WALK1TALKCOMM1, //# Talking into coom link while walking
|
||||
BOTH_TALK1, //# Generic talk anim
|
||||
BOTH_TALK2, //# Generic talk anim
|
||||
BOTH_TALKCOMM1START, //# Start talking into a comm link
|
||||
BOTH_TALKCOMM1, //# Talking into a comm link
|
||||
BOTH_TALKCOMM1STOP, //# Stop talking into a comm link
|
||||
BOTH_TALKGESTURE1, //# Generic talk anim
|
||||
BOTH_TALKGESTURE2, //# Generic talk anim
|
||||
BOTH_TALKGESTURE3, //# Generic talk anim
|
||||
BOTH_TALKGESTURE4START, //# Beginning talk anim 4
|
||||
BOTH_TALKGESTURE4, //# Talk gesture 4
|
||||
BOTH_TALKGESTURE4STOP, //# Ending talk anim 4
|
||||
BOTH_TALKGESTURE5START, //# Start hand on chin
|
||||
BOTH_TALKGESTURE5, //# Hand on chin
|
||||
BOTH_TALKGESTURE5STOP, //# Stop hand on chin
|
||||
BOTH_TALKGESTURE6START, //# Starting Motions to self
|
||||
BOTH_TALKGESTURE6, //# Pointing at self
|
||||
BOTH_TALKGESTURE6STOP, //# Ending Motions to self
|
||||
BOTH_TALKGESTURE7START, //# Start touches Kyle on shoulder
|
||||
BOTH_TALKGESTURE7, //# Hold touches Kyle on shoulder
|
||||
BOTH_TALKGESTURE7STOP, //# Ending touches Kyle on shoulder
|
||||
BOTH_TALKGESTURE8START, //# Lando's chin hold
|
||||
BOTH_TALKGESTURE8, //# Lando's chin hold
|
||||
BOTH_TALKGESTURE8STOP, //# Lando's chin hold
|
||||
BOTH_TALKGESTURE9, //# Same as gesture 2 but with the right hand
|
||||
BOTH_TALKGESTURE10, //# Shoulder shrug
|
||||
BOTH_TALKGESTURE11START, //# Arms folded across chest
|
||||
BOTH_TALKGESTURE11STOP, //# Arms folded across chest
|
||||
BOTH_TALKGESTURE12, //# Tavion taunting Kyle
|
||||
BOTH_TALKGESTURE13START, //# Luke warning Kyle
|
||||
BOTH_TALKGESTURE13, //# Luke warning Kyle
|
||||
BOTH_TALKGESTURE13STOP, //# Luke warning Kyle
|
||||
BOTH_TALKGESTURE14, //# Luke gesturing to Kyle
|
||||
BOTH_TALKGESTURE15START, //# Desann taunting Kyle
|
||||
BOTH_TALKGESTURE15, //# Desann taunting Kyle
|
||||
BOTH_TALKGESTURE15STOP, //# Desann taunting Kyle
|
||||
BOTH_TALKGESTURE16, //# Bartender gesture cin #15
|
||||
BOTH_TALKGESTURE17, //# Bartender gesture cin #15
|
||||
BOTH_TALKGESTURE18, //# Bartender gesture cin #15
|
||||
BOTH_TALKGESTURE19START, //# Desann lifting his arm "Join me" (cin #34)
|
||||
BOTH_TALKGESTURE19STOP, //# Desann lifting his arm "Join me" (cin #34)
|
||||
BOTH_TALKGESTURE20START, //# Kyle lifting his arm "Join us" (cin #34)
|
||||
BOTH_TALKGESTURE21, //# generic talk gesture from stand3
|
||||
BOTH_TALKGESTURE22, //# generic talk gesture from stand3
|
||||
BOTH_TALKGESTURE23, //# generic talk gesture from stand3
|
||||
BOTH_PAUSE1START, //# Luke pauses to warn Kyle (cin #24) start
|
||||
BOTH_PAUSE1STOP, //# Luke pauses to warn Kyle (cin #24) stop
|
||||
|
||||
|
@ -671,6 +752,8 @@ typedef enum //# animNumber_e
|
|||
BOTH_SITHEADTILTRSTOP, //# Head tilt to right from seated position
|
||||
BOTH_SITHEADNOD, //# Head shake YES from seated position
|
||||
BOTH_SITHEADSHAKE, //# Head shake NO from seated position
|
||||
BOTH_SIT2HEADTILTLSTART, //# Head tilt to left from seated position 2
|
||||
BOTH_SIT2HEADTILTLSTOP, //# Head tilt to left from seated position 2
|
||||
|
||||
BOTH_REACH1START, //# Monmothma reaching for crystal
|
||||
BOTH_REACH1STOP, //# Monmothma reaching for crystal
|
||||
|
@ -685,13 +768,6 @@ typedef enum //# animNumber_e
|
|||
BOTH_EXAMINE3, //# Hold Lando looking around corner
|
||||
BOTH_EXAMINE3STOP, //# End Lando looking around corner
|
||||
|
||||
BOTH_THROW1START, //# Kyle thrown to the right
|
||||
BOTH_THROW1, //# Kyle thrown to the right
|
||||
BOTH_THROW1STOP, //# Kyle thrown to the right
|
||||
BOTH_THROW2START, //# Kyle thrown to the left
|
||||
BOTH_THROW2, //# Kyle thrown to the left
|
||||
BOTH_THROW3, //# Kyle thrown backwards in cin #9
|
||||
|
||||
BOTH_LEANLEFT2START, //# Start leaning left in chair
|
||||
BOTH_LEANLEFT2STOP, //# Stop leaning left in chair
|
||||
BOTH_LEANRIGHT3START, //# Start Lando leaning on wall
|
||||
|
@ -727,6 +803,26 @@ typedef enum //# animNumber_e
|
|||
BOTH_LAUGH1STOP, //# Reelo laughing (cin #18)
|
||||
BOTH_ESCAPEPOD_LEAVE1, //# Kyle leaving escape pod (cin #33)
|
||||
BOTH_ESCAPEPOD_LEAVE2, //# Jan leaving escape pod (cin #33)
|
||||
BOTH_HUGGER1, //# Kyle hugging Jan (cin #29)
|
||||
BOTH_HUGGERSTOP1, //# Kyle stop hugging Jan but don't let her go (cin #29)
|
||||
BOTH_HUGGERSTOP2, //# Kyle let go of Jan and step back (cin #29)
|
||||
BOTH_HUGGEE1, //# Jan being hugged (cin #29)
|
||||
BOTH_HUGGEESTOP1, //# Jan stop being hugged but don't let go (cin #29)
|
||||
BOTH_HUGGEESTOP2, //# Jan released from hug (cin #29)
|
||||
BOTH_KISSER1, //# Temp until the Kiss anim gets split up
|
||||
BOTH_KISSER1START1, //# Kyle start kissing Jan
|
||||
BOTH_KISSER1START2, //# Kyle start kissing Jan
|
||||
BOTH_KISSER1LOOP, //# Kyle loop kissing Jan
|
||||
BOTH_KISSER1STOP, //# Temp until the Kiss anim gets split up
|
||||
BOTH_KISSER1STOP1, //# Kyle stop kissing but don't let go
|
||||
BOTH_KISSER1STOP2, //# Kyle step back from Jan
|
||||
BOTH_KISSEE1, //# Temp until the Kiss anim gets split up
|
||||
BOTH_KISSEE1START1, //# Jan start being kissed
|
||||
BOTH_KISSEE1START2, //# Jan start being kissed
|
||||
BOTH_KISSEE1LOOP, //# Jan loop being kissed
|
||||
BOTH_KISSEE1STOP, //# Temp until the Kiss anim gets split up
|
||||
BOTH_KISSEE1STOP1, //# Jan stop being kissed but don't let go
|
||||
BOTH_KISSEE1STOP2, //# Jan wait for Kyle to step back
|
||||
BOTH_BARTENDER_IDLE1, //# Bartender idle in cin #15
|
||||
BOTH_BARTENDER_THROW1, //# Bartender throws glass in cin #15
|
||||
BOTH_BARTENDER_COWERSTART, //# Start of Bartender raising both hands up in surrender (cin #16)
|
||||
|
@ -736,6 +832,7 @@ typedef enum //# animNumber_e
|
|||
BOTH_THREATEN1, //# Kyle threatening Bartender with lightsaber (cin #16)
|
||||
BOTH_RADIO_ONOFF, //# Mech Galak turning on his suit radio (cin #32)
|
||||
BOTH_TRIUMPHANT1START, //# Mech Galak raising his arms in victory (cin #32)
|
||||
BOTH_TRIUMPHANT1STARTGESTURE, //# Mech Galak raising his arms in victory (cin #32)
|
||||
BOTH_TRIUMPHANT1STOP, //# Mech Galak lowering his arms in victory (cin #32)
|
||||
|
||||
BOTH_SABERTHROW1START, //# Desann throwing his light saber (cin #26)
|
||||
|
@ -759,6 +856,8 @@ typedef enum //# animNumber_e
|
|||
|
||||
BOTH_SIT2TO3, //# Trans from sit2 to sit3?
|
||||
BOTH_SIT2TOSTAND5, //# Transition from sit 2 to stand 5
|
||||
BOTH_STAND5TOSIT2, //# Transition from stand 5 to sit 2
|
||||
BOTH_SIT2TOSIT4, //# Trans from sit2 to sit4 (cin #12) Luke leaning back from lotus position.
|
||||
BOTH_SIT3TO1, //# Trans from sit3 to sit1?
|
||||
BOTH_SIT3TO2, //# Trans from sit3 to sit2?
|
||||
BOTH_SIT3TOSTAND5, //# transition from sit 3 to stand 5
|
||||
|
@ -781,21 +880,20 @@ typedef enum //# animNumber_e
|
|||
BOTH_CROUCH2TOSTAND1, //# going from crouch2 to stand1
|
||||
BOTH_CROUCH3, //# Desann crouching down to Kyle (cin 9)
|
||||
BOTH_UNCROUCH3, //# Desann uncrouching down to Kyle (cin 9)
|
||||
BOTH_CROUCH4, //# Slower version of crouch1 for cinematics
|
||||
BOTH_UNCROUCH4, //# Slower version of uncrouch1 for cinematics
|
||||
BOTH_GET_UP1, //# Get up from the ground, face down
|
||||
BOTH_GET_UP2, //# Get up from the ground, face up
|
||||
|
||||
BOTH_COCKPIT_CONSOLE1, //# work console1 while sitting in a cockpit.
|
||||
BOTH_COCKPIT_CONSOLE2, //# work console2 while sitting in a cockpit.
|
||||
BOTH_COCKPIT_SIT, //# sit in a cockpit.
|
||||
|
||||
BOTH_GUNSIT1, //# sitting on an emplaced gun.
|
||||
|
||||
BOTH_DEATH14_UNGRIP, //# Desann's end death (cin #35)
|
||||
BOTH_DEATH14_SITUP, //# Tavion sitting up after having been thrown (cin #23)
|
||||
BOTH_KNEES1, //# Tavion on her knees
|
||||
BOTH_KNEES2, //# Tavion on her knees looking down
|
||||
BOTH_KNEES2TO1, //# Transition of KNEES2 to KNEES1
|
||||
BOTH_STRUGGLE1START, //# Kyle struggling under crate
|
||||
BOTH_STRUGGLE1, //# Kyle struggling under crate
|
||||
BOTH_STRUGGLE1STOP, //# Kyle struggling under crate
|
||||
BOTH_RUMMAGE1START, //# Kyle rummaging for crystal (cin 2)
|
||||
BOTH_RUMMAGE1, //# Kyle rummaging for crystal (cin 2)
|
||||
BOTH_RUMMAGE1STOP, //# Kyle rummaging for crystal (cin 2)
|
||||
|
@ -811,6 +909,9 @@ typedef enum //# animNumber_e
|
|||
BOTH_WALK5, //# Tavion taunting Kyle (cin 22)
|
||||
BOTH_WALK6, //# Slow walk for Luke (cin 12)
|
||||
BOTH_WALK7, //# Fast walk
|
||||
BOTH_WALK8, //# Normal walk with hands behind back (Luke in cin#12)
|
||||
BOTH_WALK9, //# Lando walk (cin #17)
|
||||
BOTH_WALK10, //# Lando walk (cin #17)
|
||||
BOTH_WALKTORUN1, //# transition from walk to run
|
||||
BOTH_RUN1, //# Full run
|
||||
BOTH_RUN1START, //# Start into full run1
|
||||
|
@ -823,10 +924,12 @@ typedef enum //# animNumber_e
|
|||
BOTH_RUNSTRAFE_RIGHT1, //# Sidestep right, should loop
|
||||
BOTH_TURN_LEFT1, //# Turn left, should loop
|
||||
BOTH_TURN_RIGHT1, //# Turn right, should loop
|
||||
BOTH_TURNSTAND1, //# Turn from STAND1 position
|
||||
BOTH_TURNSTAND2, //# Turn from STAND2 position
|
||||
BOTH_TURNSTAND3, //# Turn from STAND3 position
|
||||
BOTH_TURNSTAND4, //# Turn from STAND4 position
|
||||
BOTH_TURNSTAND5, //# Turn from STAND5 position
|
||||
BOTH_TURNCROUCH1, //# Turn from CROUCH1 position
|
||||
BOTH_RUNAWAY1, //# Running scared
|
||||
BOTH_SWIM1, //# Swimming
|
||||
|
||||
|
@ -897,16 +1000,7 @@ typedef enum //# animNumber_e
|
|||
|
||||
BOTH_DIVE1, //# Dive!
|
||||
|
||||
BOTH_SABERFAST_STANCE,
|
||||
BOTH_SABERSLOW_STANCE,
|
||||
BOTH_ENGAGETAUNT,
|
||||
BOTH_A2_STABBACK1, //# Stab saber backward
|
||||
BOTH_ATTACK_BACK, //# Swing around backwards and attack
|
||||
BOTH_JUMPFLIPSLASHDOWN1,//#
|
||||
BOTH_JUMPFLIPSTABDOWN,//#
|
||||
BOTH_FORCELEAP2_T__B_,//#
|
||||
BOTH_LUNGE2_B__T_,//#
|
||||
BOTH_CROUCHATTACKBACK1,//#
|
||||
BOTH_ARIAL_LEFT, //#
|
||||
BOTH_ARIAL_RIGHT, //#
|
||||
BOTH_CARTWHEEL_LEFT, //#
|
||||
|
@ -962,10 +1056,6 @@ typedef enum //# animNumber_e
|
|||
BOTH_ARIAL_F1,//#
|
||||
BOTH_BUTTERFLY_FR1,//#
|
||||
BOTH_BUTTERFLY_FL1,//#
|
||||
BOTH_POSE1,//#
|
||||
BOTH_POSE2,//#
|
||||
BOTH_POSE3,//#
|
||||
BOTH_POSE4,//#
|
||||
|
||||
//# #sep BOTH_ MISC MOVEMENT
|
||||
BOTH_HIT1, //# Kyle hit by crate in cin #9
|
||||
|
@ -998,12 +1088,7 @@ typedef enum //# animNumber_e
|
|||
|
||||
//# #sep BOTH_ SWIMMING
|
||||
BOTH_SWIM_IDLE1, //# Swimming Idle 1
|
||||
BOTH_SWIMFORWARDSTART, //# Swim forward start
|
||||
BOTH_SWIMFORWARD, //# Swim forward loop
|
||||
BOTH_SWIMFORWARDSTOP, //# Swim forward end
|
||||
BOTH_SWIMBACKWARDSTART, //# Swim backward start
|
||||
BOTH_SWIMBACKWARD, //# Swim backward loop
|
||||
BOTH_SWIMBACKWARDSTOP, //# Swim backward end
|
||||
|
||||
//# #sep BOTH_ LYING
|
||||
BOTH_LIE_DOWN1, //# From a stand position, get down on ground, face down
|
||||
|
@ -1029,6 +1114,26 @@ typedef enum //# animNumber_e
|
|||
BOTH_PROPUP1, //# Kyle getting up from having been knocked down (cin #9 end)
|
||||
BOTH_CRAWLBACK1, //# Lying on back, crawling backwards with elbows
|
||||
BOTH_SITWALL1, //# Sitting against a wall
|
||||
BOTH_SLEEP1, //# laying on back-rknee up-rhand on torso
|
||||
BOTH_SLEEP2, //# on floor-back against wall-arms crossed
|
||||
BOTH_SLEEP3, //# Sleeping in a chair
|
||||
BOTH_SLEEP4, //# Sleeping slumped over table
|
||||
BOTH_SLEEP5, //# Laying on side sleeping on flat sufrace
|
||||
BOTH_SLEEP6START, //# Kyle leaning back to sleep (cin 20)
|
||||
BOTH_SLEEP6STOP, //# Kyle waking up and shaking his head (cin 21)
|
||||
BOTH_SLEEP1GETUP, //# alarmed and getting up out of sleep1 pose to stand
|
||||
BOTH_SLEEP1GETUP2, //#
|
||||
BOTH_SLEEP2GETUP, //# alarmed and getting up out of sleep2 pose to stand
|
||||
BOTH_SLEEP3GETUP, //# alarmed and getting up out of sleep3 pose to stand
|
||||
BOTH_SLEEP3DEATH, //# death in chair, from sleep3 idle
|
||||
BOTH_SLEEP3DEAD, //# death in chair, from sleep3 idle
|
||||
|
||||
BOTH_SLEEP_IDLE1, //# rub face and nose while asleep from sleep pose 1
|
||||
BOTH_SLEEP_IDLE2, //# shift position while asleep - stays in sleep2
|
||||
BOTH_SLEEP_IDLE3, //# Idle anim from sleep pose 3
|
||||
BOTH_SLEEP_IDLE4, //# Idle anim from sleep pose 4
|
||||
BOTH_SLEEP1_NOSE, //# Scratch nose from SLEEP1 pose
|
||||
BOTH_SLEEP2_SHIFT, //# Shift in sleep from SLEEP2 pose
|
||||
BOTH_RESTRAINED1, //# Telsia tied to medical table
|
||||
BOTH_RESTRAINED1POINT, //# Telsia tied to medical table pointing at Munro
|
||||
BOTH_LIFTED1, //# Fits with BOTH_LIFT1, lifted on shoulder
|
||||
|
@ -1060,6 +1165,7 @@ typedef enum //# animNumber_e
|
|||
BOTH_MINDTRICK1, //# Use off-hand to do mind trick
|
||||
BOTH_MINDTRICK2, //# Use off-hand to do distraction
|
||||
BOTH_FORCELIGHTNING, //# Use off-hand to do lightning
|
||||
BOTH_FORCELIGHTNING_START, //# Use off-hand to do lightning - start
|
||||
BOTH_FORCELIGHTNING_HOLD, //# Use off-hand to do lightning - hold
|
||||
BOTH_FORCELIGHTNING_RELEASE,//# Use off-hand to do lightning - release
|
||||
BOTH_FORCEHEAL_START, //# Healing meditation pose start
|
||||
|
@ -1067,13 +1173,51 @@ typedef enum //# animNumber_e
|
|||
BOTH_FORCEHEAL_QUICK, //# Healing meditation gesture
|
||||
BOTH_SABERPULL, //# Use off-hand to do force power.
|
||||
BOTH_FORCEGRIP1, //# force-gripping (no anim?)
|
||||
BOTH_FORCEGRIP2, //# force-gripping (?)
|
||||
BOTH_FORCEGRIP3, //# force-gripping (right hand)
|
||||
BOTH_FORCEGRIP3THROW, //# throwing while force-gripping (right hand)
|
||||
BOTH_FORCEGRIP_HOLD, //# Use off-hand to do grip - hold
|
||||
BOTH_FORCEGRIP_RELEASE,//# Use off-hand to do grip - release
|
||||
BOTH_TOSS1, //# throwing to left after force gripping
|
||||
BOTH_TOSS2, //# throwing to right after force gripping
|
||||
|
||||
BOTH_COCKPIT_TALKR1START, //# turn head from straight forward to looking full right
|
||||
BOTH_COCKPIT_TALKR1STARTTOMID, //# from TALKR1START to looking at hologram (cin #1)
|
||||
BOTH_COCKPIT_TALKR1MIDTOSTART, //# from looking at hologram to TALKR1START (cin #1)
|
||||
BOTH_COCKPIT_TALKR1STOP, //# return head to straight forward from BOTH_COCKPIT_TALKR1
|
||||
BOTH_COCKPIT_TALKR1STOPTOMID, //# from TALKR1STOP to TALKR1MID
|
||||
BOTH_COCKPIT_TALKR1MIDTOSTOP, //# from looking at hologram to TALKR1STOP (cin #1)
|
||||
BOTH_COCKPIT_TALKR1, //# talk to right side
|
||||
|
||||
BOTH_COCKPIT_TALKL1START, //# turn head from straight forward to looking full left
|
||||
BOTH_COCKPIT_TALKL1STARTTOMID, //# from TALKL1START to looking at hologram (cin #1)
|
||||
BOTH_COCKPIT_TALKL1MIDTOSTART, //# from looking at hologram to TALKL1START (cin #1)
|
||||
BOTH_COCKPIT_TALKL1STOP, //# return head to straight forward from BOTH_COCKPIT_TALKL1
|
||||
BOTH_COCKPIT_TALKL1STOPTOMID, //# from TALKL1STOP to TALKL1MID
|
||||
BOTH_COCKPIT_TALKL1MIDTOSTOP, //# from looking at hologram to TALKL1STOP (cin #1)
|
||||
BOTH_COCKPIT_TALKL1, //# talk to left side
|
||||
|
||||
BOTH_COCKPIT_CONSOLE1, //# type at controls
|
||||
BOTH_COCKPIT_CONSOLE2, //# type at controls
|
||||
BOTH_COCKPIT_CONSOLE2_PARTIAL, //# last part of console2 anim (cin #1) used by Jan
|
||||
|
||||
BOTH_COCKPIT_HEADNOD, //# nod head yes while sitting
|
||||
BOTH_COCKPIT_HEADSHAKE, //# shake head no while sitting
|
||||
|
||||
BOTH_COCKPIT_HEADTILTLSTART, //# start tilt head left while sitting
|
||||
BOTH_COCKPIT_HEADTILTLSTOP, //# stop tilt head left while sitting
|
||||
BOTH_COCKPIT_HEADTILTRSTART, //# start tilt head right while sitting
|
||||
BOTH_COCKPIT_HEADTILTRSTOP, //# stop tilt head right while sitting
|
||||
|
||||
BOTH_COCKPIT_TALKGESTURE7START, //# Lando's supporting hand to Kyle (cin #21)
|
||||
BOTH_COCKPIT_TALKGESTURE7STOP, //# Lando's supporting hand away from Kyle (cin #21)
|
||||
BOTH_COCKPIT_TALKGESTURE8START, //# Hand to Lando's chin (cin #21)
|
||||
BOTH_COCKPIT_TALKGESTURE8STOP, //# hand away from Lando's chin *cin #21)
|
||||
BOTH_COCKPIT_TALKGESTURE11START, //#
|
||||
BOTH_COCKPIT_TALKGESTURE11STOP, //#
|
||||
|
||||
BOTH_COCKPIT_SLEEP6START, //#
|
||||
BOTH_COCKPIT_SLEEP6STOP, //#
|
||||
|
||||
//=================================================
|
||||
//ANIMS IN WHICH ONLY THE UPPER OBJECTS ARE IN MD3
|
||||
//=================================================
|
||||
|
@ -1111,25 +1255,7 @@ typedef enum //# animNumber_e
|
|||
TORSO_WEAPONIDLE11, //# Holding laser trap
|
||||
TORSO_WEAPONIDLE12, //# Holding detpack
|
||||
|
||||
//# #sep TORSO_ USING NON-WEAPON OBJECTS
|
||||
|
||||
//# #sep TORSO_ MISC
|
||||
TORSO_TALKR1START, //# begin turning head for BOTH_TORSO_TALKR
|
||||
TORSO_TALKR1HOLD, //# non-looping version of talk to right side
|
||||
TORSO_TALKR1STOP, //# return head to straight forward from BOTH_TORSO_TALKL
|
||||
TORSO_TALKR1, //# talk to right side
|
||||
TORSO_TALKL1START, //# begin turning head for BOTH_TORSO_TALKL
|
||||
TORSO_TALKL1HOLD, //# non-looping version of talk to left side
|
||||
TORSO_TALKL1STOP, //# return head to straight forward from BOTH_TORSO_TALKL
|
||||
TORSO_TALKL1, //# talk to left side
|
||||
TORSO_LOOKL1, //# looking left
|
||||
TORSO_LOOKR1, //# looking right
|
||||
TORSO_LOOKR2START, //# turn not so far as TALKR1
|
||||
TORSO_LOOKR2STOP, //# turn not so far as TALKR1
|
||||
TORSO_LOOKR2, //# looking right - not so far as LOOKR1
|
||||
TORSO_LOOKL2START, //# turn not so far as TALKL1
|
||||
TORSO_LOOKL2STOP, //# turn not so far as TALKL1
|
||||
TORSO_LOOKL2, //# looking right - not so far as LOOKL1
|
||||
TORSO_HANDGESTURE1, //# gestures to left one hand
|
||||
TORSO_HANDGESTURE2, //# gestures to right one hand
|
||||
TORSO_HANDGESTURE3, //# gestures to the left both hands
|
||||
|
|
|
@ -61,6 +61,7 @@ void trap_FS_FCloseFile( fileHandle_t f );
|
|||
|
||||
//PM anim utility functions:
|
||||
qboolean PM_SaberInParry( int move );
|
||||
qboolean PM_SaberInKnockaway( int move );
|
||||
qboolean PM_SaberInReflect( int move );
|
||||
qboolean PM_SaberInStart( int move );
|
||||
qboolean PM_InSaberAnim( int anim );
|
||||
|
|
|
@ -394,12 +394,6 @@ qboolean BG_LegalizedForcePowers(char *powerOut, int maxRank, qboolean freeSaber
|
|||
}
|
||||
}
|
||||
|
||||
if (final_Powers[FP_SABERATTACK] < 1)
|
||||
{
|
||||
final_Powers[FP_SABERDEFEND] = 0;
|
||||
final_Powers[FP_SABERTHROW] = 0;
|
||||
}
|
||||
|
||||
if (freeSaber)
|
||||
{
|
||||
if (final_Powers[FP_SABERATTACK] < 1)
|
||||
|
@ -416,6 +410,7 @@ qboolean BG_LegalizedForcePowers(char *powerOut, int maxRank, qboolean freeSaber
|
|||
final_Powers[FP_LEVITATION] = 1;
|
||||
}
|
||||
|
||||
/*
|
||||
if (fpDisabled)
|
||||
{
|
||||
final_Powers[FP_LEVITATION] = 1;
|
||||
|
@ -423,6 +418,31 @@ qboolean BG_LegalizedForcePowers(char *powerOut, int maxRank, qboolean freeSaber
|
|||
final_Powers[FP_SABERDEFEND] = 3;
|
||||
final_Powers[FP_SABERTHROW] = 0;
|
||||
}
|
||||
*/
|
||||
//Ahh. I have no idea why I did this, but I would say that it makes me a very bad man.
|
||||
if (fpDisabled)
|
||||
{ //If we specifically have attack or def disabled, force them up to level 3. It's the way
|
||||
//things work for the case of all powers disabled.
|
||||
//If jump is disabled, down-cap it to level 1. Otherwise don't do a thing.
|
||||
if (fpDisabled & (1 << FP_LEVITATION))
|
||||
{
|
||||
final_Powers[FP_LEVITATION] = 1;
|
||||
}
|
||||
if (fpDisabled & (1 << FP_SABERATTACK))
|
||||
{
|
||||
final_Powers[FP_SABERATTACK] = 3;
|
||||
}
|
||||
if (fpDisabled & (1 << FP_SABERDEFEND))
|
||||
{
|
||||
final_Powers[FP_SABERDEFEND] = 3;
|
||||
}
|
||||
}
|
||||
|
||||
if (final_Powers[FP_SABERATTACK] < 1)
|
||||
{
|
||||
final_Powers[FP_SABERDEFEND] = 0;
|
||||
final_Powers[FP_SABERTHROW] = 0;
|
||||
}
|
||||
|
||||
//We finally have all the force powers legalized and stored locally.
|
||||
//Put them all into the string and return the result. We already have
|
||||
|
@ -1276,6 +1296,11 @@ qboolean BG_CanUseFPNow(int gametype, playerState_t *ps, int time, forcePowers_t
|
|||
return qfalse;
|
||||
}
|
||||
|
||||
if ( ps->forceRestricted || ps->trueNonJedi )
|
||||
{
|
||||
return qfalse;
|
||||
}
|
||||
|
||||
if (ps->duelInProgress)
|
||||
{
|
||||
if (power != FP_SABERATTACK && power != FP_SABERDEFEND && power != FP_SABERTHROW &&
|
||||
|
@ -1581,15 +1606,41 @@ qboolean BG_CanItemBeGrabbed( int gametype, const entityState_t *ent, const play
|
|||
|
||||
item = &bg_itemlist[ent->modelindex];
|
||||
|
||||
if (ps && ps->isJediMaster && item && (item->giType == IT_WEAPON || item->giType == IT_AMMO))
|
||||
if ( ps )
|
||||
{
|
||||
if ( ps->trueJedi )
|
||||
{//force powers and saber only
|
||||
if ( item->giType != IT_TEAM //not a flag
|
||||
&& item->giType != IT_ARMOR//not shields
|
||||
&& (item->giType != IT_WEAPON || item->giTag != WP_SABER)//not a saber
|
||||
&& (item->giType != IT_HOLDABLE || item->giTag != HI_SEEKER)//not a seeker
|
||||
&& (item->giType != IT_POWERUP || item->giTag == PW_YSALAMIRI) )//not a force pick-up
|
||||
{
|
||||
return qfalse;
|
||||
}
|
||||
|
||||
if (ps && ps->duelInProgress)
|
||||
}
|
||||
else if ( ps->trueNonJedi )
|
||||
{//can't pick up force powerups
|
||||
if ( (item->giType == IT_POWERUP && item->giTag != PW_YSALAMIRI) //if a powerup, can only can pick up ysalamiri
|
||||
|| (item->giType == IT_HOLDABLE && item->giTag == HI_SEEKER)//if holdable, cannot pick up seeker
|
||||
|| (item->giType == IT_WEAPON && item->giTag == WP_SABER ) )//or if it's a saber
|
||||
{
|
||||
return qfalse;
|
||||
}
|
||||
}
|
||||
if ( ps->isJediMaster && item && (item->giType == IT_WEAPON || item->giType == IT_AMMO))
|
||||
{//jedi master cannot pick up weapons
|
||||
return qfalse;
|
||||
}
|
||||
if ( ps->duelInProgress )
|
||||
{ //no picking stuff up while in a duel, no matter what the type is
|
||||
return qfalse;
|
||||
}
|
||||
}
|
||||
else
|
||||
{//safety return since below code assumes a non-null ps
|
||||
return qfalse;
|
||||
}
|
||||
|
||||
switch( item->giType ) {
|
||||
case IT_WEAPON:
|
||||
|
@ -2131,6 +2182,8 @@ void BG_PlayerStateToEntityState( playerState_t *ps, entityState_t *s, qboolean
|
|||
s->isJediMaster = ps->isJediMaster;
|
||||
|
||||
s->time2 = ps->holocronBits;
|
||||
|
||||
s->fireflag = ps->fd.saberAnimLevel;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -2269,6 +2322,8 @@ void BG_PlayerStateToEntityStateExtraPolate( playerState_t *ps, entityState_t *s
|
|||
s->isJediMaster = ps->isJediMaster;
|
||||
|
||||
s->time2 = ps->holocronBits;
|
||||
|
||||
s->fireflag = ps->fd.saberAnimLevel;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -114,7 +114,7 @@ qboolean BG_SaberInIdle( int move )
|
|||
|
||||
qboolean BG_FlippingAnim( int anim )
|
||||
{
|
||||
switch ( anim )
|
||||
switch ( anim&~ANIM_TOGGLEBIT )
|
||||
{
|
||||
case BOTH_FLIP_F: //# Flip forward
|
||||
case BOTH_FLIP_B: //# Flip backwards
|
||||
|
@ -151,7 +151,7 @@ qboolean BG_FlippingAnim( int anim )
|
|||
|
||||
qboolean BG_SpinningSaberAnim( int anim )
|
||||
{
|
||||
switch ( anim )
|
||||
switch ( anim&~ANIM_TOGGLEBIT )
|
||||
{
|
||||
//level 1 - FIXME: level 1 will have *no* spins
|
||||
case BOTH_T1_BR_BL:
|
||||
|
@ -236,6 +236,103 @@ qboolean BG_SaberInSpecialAttack( int anim )
|
|||
return qfalse;
|
||||
}
|
||||
|
||||
int BG_BrokenParryForAttack( int move )
|
||||
{
|
||||
//Our attack was knocked away by a knockaway parry
|
||||
//FIXME: need actual anims for this
|
||||
//FIXME: need to know which side of the saber was hit! For now, we presume the saber gets knocked away from the center
|
||||
switch ( saberMoveData[move].startQuad )
|
||||
{
|
||||
case Q_B:
|
||||
return LS_V1_B_;
|
||||
break;
|
||||
case Q_BR:
|
||||
return LS_V1_BR;
|
||||
break;
|
||||
case Q_R:
|
||||
return LS_V1__R;
|
||||
break;
|
||||
case Q_TR:
|
||||
return LS_V1_TR;
|
||||
break;
|
||||
case Q_T:
|
||||
return LS_V1_T_;
|
||||
break;
|
||||
case Q_TL:
|
||||
return LS_V1_TL;
|
||||
break;
|
||||
case Q_L:
|
||||
return LS_V1__L;
|
||||
break;
|
||||
case Q_BL:
|
||||
return LS_V1_BL;
|
||||
break;
|
||||
}
|
||||
return LS_NONE;
|
||||
}
|
||||
|
||||
int BG_BrokenParryForParry( int move )
|
||||
{
|
||||
//FIXME: need actual anims for this
|
||||
//FIXME: need to know which side of the saber was hit! For now, we presume the saber gets knocked away from the center
|
||||
switch ( move )
|
||||
{
|
||||
case LS_PARRY_UP:
|
||||
//Hmm... since we don't know what dir the hit came from, randomly pick knock down or knock back
|
||||
if ( Q_irand( 0, 1 ) )
|
||||
{
|
||||
return LS_H1_B_;
|
||||
}
|
||||
else
|
||||
{
|
||||
return LS_H1_T_;
|
||||
}
|
||||
break;
|
||||
case LS_PARRY_UR:
|
||||
return LS_H1_TR;
|
||||
break;
|
||||
case LS_PARRY_UL:
|
||||
return LS_H1_TL;
|
||||
break;
|
||||
case LS_PARRY_LR:
|
||||
return LS_H1_BR;
|
||||
break;
|
||||
case LS_PARRY_LL:
|
||||
return LS_H1_BL;
|
||||
break;
|
||||
case LS_READY:
|
||||
return LS_H1_B_;//???
|
||||
break;
|
||||
}
|
||||
return LS_NONE;
|
||||
}
|
||||
|
||||
int BG_KnockawayForParry( int move )
|
||||
{
|
||||
//FIXME: need actual anims for this
|
||||
//FIXME: need to know which side of the saber was hit! For now, we presume the saber gets knocked away from the center
|
||||
switch ( move )
|
||||
{
|
||||
case BLOCKED_TOP://LS_PARRY_UP:
|
||||
return LS_K1_T_;//push up
|
||||
break;
|
||||
case BLOCKED_UPPER_RIGHT://LS_PARRY_UR:
|
||||
default://case LS_READY:
|
||||
return LS_K1_TR;//push up, slightly to right
|
||||
break;
|
||||
case BLOCKED_UPPER_LEFT://LS_PARRY_UL:
|
||||
return LS_K1_TL;//push up and to left
|
||||
break;
|
||||
case BLOCKED_LOWER_RIGHT://LS_PARRY_LR:
|
||||
return LS_K1_BR;//push down and to left
|
||||
break;
|
||||
case BLOCKED_LOWER_LEFT://LS_PARRY_LL:
|
||||
return LS_K1_BL;//push down and to right
|
||||
break;
|
||||
}
|
||||
//return LS_NONE;
|
||||
}
|
||||
|
||||
qboolean BG_InRoll( playerState_t *ps, int anim )
|
||||
{
|
||||
switch ( (anim&~ANIM_TOGGLEBIT) )
|
||||
|
@ -285,6 +382,77 @@ qboolean BG_InDeathAnim( int anim )
|
|||
}
|
||||
|
||||
//Called only where pm is valid (not all require pm, but some do):
|
||||
int PM_SaberBounceForAttack( int move )
|
||||
{
|
||||
switch ( saberMoveData[move].startQuad )
|
||||
{
|
||||
case Q_B:
|
||||
case Q_BR:
|
||||
return LS_B1_BR;
|
||||
break;
|
||||
case Q_R:
|
||||
return LS_B1__R;
|
||||
break;
|
||||
case Q_TR:
|
||||
return LS_B1_TR;
|
||||
break;
|
||||
case Q_T:
|
||||
return LS_B1_T_;
|
||||
break;
|
||||
case Q_TL:
|
||||
return LS_B1_TL;
|
||||
break;
|
||||
case Q_L:
|
||||
return LS_B1__L;
|
||||
break;
|
||||
case Q_BL:
|
||||
return LS_B1_BL;
|
||||
break;
|
||||
}
|
||||
return LS_NONE;
|
||||
}
|
||||
|
||||
int PM_SaberDeflectionForQuad( int quad )
|
||||
{
|
||||
switch ( quad )
|
||||
{
|
||||
case Q_B:
|
||||
return LS_D1_B_;
|
||||
break;
|
||||
case Q_BR:
|
||||
return LS_D1_BR;
|
||||
break;
|
||||
case Q_R:
|
||||
return LS_D1__R;
|
||||
break;
|
||||
case Q_TR:
|
||||
return LS_D1_TR;
|
||||
break;
|
||||
case Q_T:
|
||||
return LS_D1_T_;
|
||||
break;
|
||||
case Q_TL:
|
||||
return LS_D1_TL;
|
||||
break;
|
||||
case Q_L:
|
||||
return LS_D1__L;
|
||||
break;
|
||||
case Q_BL:
|
||||
return LS_D1_BL;
|
||||
break;
|
||||
}
|
||||
return LS_NONE;
|
||||
}
|
||||
|
||||
qboolean PM_SaberInDeflect( int move )
|
||||
{
|
||||
if ( move >= LS_D1_BR && move <= LS_D1_B_ )
|
||||
{
|
||||
return qtrue;
|
||||
}
|
||||
return qfalse;
|
||||
}
|
||||
|
||||
qboolean PM_SaberInParry( int move )
|
||||
{
|
||||
if ( move >= LS_PARRY_UP && move <= LS_PARRY_LL )
|
||||
|
@ -294,6 +462,15 @@ qboolean PM_SaberInParry( int move )
|
|||
return qfalse;
|
||||
}
|
||||
|
||||
qboolean PM_SaberInKnockaway( int move )
|
||||
{
|
||||
if ( move >= LS_K1_T_ && move <= LS_K1_BL )
|
||||
{
|
||||
return qtrue;
|
||||
}
|
||||
return qfalse;
|
||||
}
|
||||
|
||||
qboolean PM_SaberInReflect( int move )
|
||||
{
|
||||
if ( move >= LS_REFLECT_UP && move <= LS_REFLECT_LL )
|
||||
|
@ -312,6 +489,15 @@ qboolean PM_SaberInStart( int move )
|
|||
return qfalse;
|
||||
}
|
||||
|
||||
qboolean PM_SaberInReturn( int move )
|
||||
{
|
||||
if ( move >= LS_R_TL2BR && move <= LS_R_TL2BR )
|
||||
{
|
||||
return qtrue;
|
||||
}
|
||||
return qfalse;
|
||||
}
|
||||
|
||||
qboolean PM_InSaberAnim( int anim )
|
||||
{
|
||||
if ( (anim&~ANIM_TOGGLEBIT) >= BOTH_A1_T__B_ && (anim&~ANIM_TOGGLEBIT) <= BOTH_H1_S1_BR )
|
||||
|
@ -544,6 +730,34 @@ char BGPAFtext[40000];
|
|||
qboolean BGPAFtextLoaded = qfalse;
|
||||
animation_t bgGlobalAnimations[MAX_TOTALANIMATIONS];
|
||||
|
||||
//#define CONVENIENT_ANIMATION_FILE_DEBUG_THING
|
||||
|
||||
#ifdef CONVENIENT_ANIMATION_FILE_DEBUG_THING
|
||||
void SpewDebugStuffToFile()
|
||||
{
|
||||
fileHandle_t f;
|
||||
int i = 0;
|
||||
|
||||
trap_FS_FOpenFile("file_of_debug_stuff_MP.txt", &f, FS_WRITE);
|
||||
|
||||
if (!f)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
BGPAFtext[0] = 0;
|
||||
|
||||
while (i < MAX_ANIMATIONS)
|
||||
{
|
||||
strcat(BGPAFtext, va("%i %i\n", i, bgGlobalAnimations[i].frameLerp));
|
||||
i++;
|
||||
}
|
||||
|
||||
trap_FS_Write(BGPAFtext, strlen(BGPAFtext), f);
|
||||
trap_FS_FCloseFile(f);
|
||||
}
|
||||
#endif
|
||||
|
||||
qboolean BG_ParseAnimationFile(const char *filename)
|
||||
{
|
||||
char *text_p;
|
||||
|
@ -673,6 +887,9 @@ qboolean BG_ParseAnimationFile(const char *filename)
|
|||
}
|
||||
#endif // _DEBUG
|
||||
|
||||
#ifdef CONVENIENT_ANIMATION_FILE_DEBUG_THING
|
||||
SpewDebugStuffToFile();
|
||||
#endif
|
||||
BGPAFtextLoaded = qtrue;
|
||||
return qtrue;
|
||||
}
|
||||
|
@ -831,7 +1048,7 @@ void PM_SetAnimFinal(int setAnimParts,int anim,int setAnimFlags,
|
|||
{
|
||||
animation_t *animations = pm->animations;
|
||||
|
||||
float editAnimSpeed = 0;
|
||||
float editAnimSpeed = 1;
|
||||
|
||||
if (!animations)
|
||||
{
|
||||
|
@ -864,10 +1081,13 @@ void PM_SetAnimFinal(int setAnimParts,int anim,int setAnimFlags,
|
|||
if (setAnimFlags & SETANIM_FLAG_HOLDLESS)
|
||||
{ // Make sure to only wait in full 1/20 sec server frame intervals.
|
||||
int dur;
|
||||
int speedDif;
|
||||
|
||||
dur = (animations[anim].numFrames ) * fabs(animations[anim].frameLerp);
|
||||
dur = (animations[anim].numFrames-1) * fabs(animations[anim].frameLerp);
|
||||
//dur = ((int)(dur/50.0)) * 50 / timeScaleMod;
|
||||
dur -= blendTime+fabs(animations[anim].frameLerp)*2;
|
||||
//dur -= blendTime+fabs(animations[anim].frameLerp)*2;
|
||||
speedDif = dur - (dur * editAnimSpeed);
|
||||
dur += speedDif;
|
||||
if (dur > 1)
|
||||
{
|
||||
pm->ps->torsoTimer = dur-1;
|
||||
|
@ -886,11 +1106,6 @@ void PM_SetAnimFinal(int setAnimParts,int anim,int setAnimFlags,
|
|||
{
|
||||
pm->ps->torsoTimer /= 1.7;
|
||||
}
|
||||
|
||||
if (editAnimSpeed)
|
||||
{
|
||||
pm->ps->torsoTimer /= editAnimSpeed;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -916,10 +1131,13 @@ setAnimLegs:
|
|||
if (setAnimFlags & SETANIM_FLAG_HOLDLESS)
|
||||
{ // Make sure to only wait in full 1/20 sec server frame intervals.
|
||||
int dur;
|
||||
int speedDif;
|
||||
|
||||
dur = (animations[anim].numFrames -1) * fabs(animations[anim].frameLerp);
|
||||
dur = (animations[anim].numFrames-1) * fabs(animations[anim].frameLerp);
|
||||
//dur = ((int)(dur/50.0)) * 50 / timeScaleMod;
|
||||
dur -= blendTime+fabs(animations[anim].frameLerp)*2;
|
||||
//dur -= blendTime+fabs(animations[anim].frameLerp)*2;
|
||||
speedDif = dur - (dur * editAnimSpeed);
|
||||
dur += speedDif;
|
||||
if (dur > 1)
|
||||
{
|
||||
pm->ps->legsTimer = dur-1;
|
||||
|
|
|
@ -64,7 +64,7 @@ int forcePowerNeeded[NUM_FORCE_POWER_LEVELS][NUM_FORCE_POWERS] =
|
|||
//NUM_FORCE_POWERS
|
||||
},
|
||||
{
|
||||
25,//FP_HEAL,//instant
|
||||
65,//FP_HEAL,//instant //was 25, but that was way too little
|
||||
10,//FP_LEVITATION,//hold/duration
|
||||
50,//FP_SPEED,//duration
|
||||
20,//FP_PUSH,//hold/duration
|
||||
|
@ -77,7 +77,7 @@ int forcePowerNeeded[NUM_FORCE_POWER_LEVELS][NUM_FORCE_POWERS] =
|
|||
50,//FP_ABSORB,//duration
|
||||
50,//FP_TEAM_HEAL,//instant
|
||||
50,//FP_TEAM_FORCE,//instant
|
||||
10,//FP_DRAIN,//hold/duration
|
||||
20,//FP_DRAIN,//hold/duration
|
||||
20,//FP_SEE,//duration
|
||||
0,//FP_SABERATTACK,
|
||||
2,//FP_SABERDEFEND,
|
||||
|
@ -85,7 +85,7 @@ int forcePowerNeeded[NUM_FORCE_POWER_LEVELS][NUM_FORCE_POWERS] =
|
|||
//NUM_FORCE_POWERS
|
||||
},
|
||||
{
|
||||
25,//FP_HEAL,//instant
|
||||
60,//FP_HEAL,//instant
|
||||
10,//FP_LEVITATION,//hold/duration
|
||||
50,//FP_SPEED,//duration
|
||||
20,//FP_PUSH,//hold/duration
|
||||
|
@ -98,7 +98,7 @@ int forcePowerNeeded[NUM_FORCE_POWER_LEVELS][NUM_FORCE_POWERS] =
|
|||
25,//FP_ABSORB,//duration
|
||||
33,//FP_TEAM_HEAL,//instant
|
||||
33,//FP_TEAM_FORCE,//instant
|
||||
10,//FP_DRAIN,//hold/duration
|
||||
20,//FP_DRAIN,//hold/duration
|
||||
20,//FP_SEE,//duration
|
||||
0,//FP_SABERATTACK,
|
||||
1,//FP_SABERDEFEND,
|
||||
|
@ -106,7 +106,7 @@ int forcePowerNeeded[NUM_FORCE_POWER_LEVELS][NUM_FORCE_POWERS] =
|
|||
//NUM_FORCE_POWERS
|
||||
},
|
||||
{
|
||||
25,//FP_HEAL,//instant
|
||||
50,//FP_HEAL,//instant //You get 5 points of health.. for 50 force points!
|
||||
10,//FP_LEVITATION,//hold/duration
|
||||
50,//FP_SPEED,//duration
|
||||
20,//FP_PUSH,//hold/duration
|
||||
|
@ -119,7 +119,7 @@ int forcePowerNeeded[NUM_FORCE_POWER_LEVELS][NUM_FORCE_POWERS] =
|
|||
10,//FP_ABSORB,//duration
|
||||
25,//FP_TEAM_HEAL,//instant
|
||||
25,//FP_TEAM_FORCE,//instant
|
||||
10,//FP_DRAIN,//hold/duration
|
||||
20,//FP_DRAIN,//hold/duration
|
||||
20,//FP_SEE,//duration
|
||||
0,//FP_SABERATTACK,
|
||||
0,//FP_SABERDEFEND,
|
||||
|
@ -871,6 +871,7 @@ static qboolean PM_CheckJump( void )
|
|||
pm->cmd.upmove = 0;
|
||||
return qfalse;
|
||||
}
|
||||
/*
|
||||
else if ( pm->ps->groundEntityNum == ENTITYNUM_NONE )
|
||||
{
|
||||
int legsAnim = (pm->ps->legsAnim&~ANIM_TOGGLEBIT);
|
||||
|
@ -879,13 +880,14 @@ static qboolean PM_CheckJump( void )
|
|||
return qfalse;
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
//Not jumping
|
||||
if ( pm->cmd.upmove < 10 ) {
|
||||
if ( pm->cmd.upmove < 10 && pm->ps->groundEntityNum != ENTITYNUM_NONE) {
|
||||
return qfalse;
|
||||
}
|
||||
|
||||
|
@ -954,11 +956,13 @@ static qboolean PM_CheckJump( void )
|
|||
anim = BOTH_WALL_FLIP_LEFT;
|
||||
}
|
||||
}
|
||||
/*
|
||||
else if ( pm->cmd.forwardmove > 0 && pm->ps->fd.forcePowerLevel[FP_LEVITATION] > FORCE_LEVEL_1 )
|
||||
{//run up wall, flip backwards
|
||||
vertPush = forceJumpStrength[FORCE_LEVEL_2]/2.25f;
|
||||
anim = BOTH_WALL_FLIP_BACK1;
|
||||
}
|
||||
*/
|
||||
else if ( pm->cmd.forwardmove < 0 && !(pm->cmd.buttons&BUTTON_ATTACK) )
|
||||
{//backflip
|
||||
vertPush = JUMP_VELOCITY;
|
||||
|
@ -1186,6 +1190,58 @@ static qboolean PM_CheckJump( void )
|
|||
return qfalse;
|
||||
}
|
||||
}
|
||||
else if ( pm->cmd.forwardmove > 0 //pushing forward
|
||||
&& pm->ps->fd.forcePowerLevel[FP_LEVITATION] > FORCE_LEVEL_1
|
||||
&& pm->ps->velocity[2] > 200
|
||||
&& /*(level.time - pm->ps->lastOnGround) <= 500*/ PM_GroundDistance() <= 80 //unfortunately we do not have a happy ground timer.
|
||||
&& !BG_InSpecialJump(pm->ps->legsAnim))
|
||||
{//run up wall, flip backwards
|
||||
//FIXME: have to be moving... make sure it's opposite the wall... or at least forward?
|
||||
vec3_t fwd, traceto, mins, maxs, fwdAngles;
|
||||
trace_t trace;
|
||||
vec3_t idealNormal;
|
||||
|
||||
VectorSet(mins, pm->mins[0],pm->mins[1],pm->mins[2]);
|
||||
VectorSet(maxs, pm->maxs[0],pm->maxs[1],pm->maxs[2]);
|
||||
VectorSet(fwdAngles, 0, pm->ps->viewangles[YAW], 0);
|
||||
|
||||
AngleVectors( fwdAngles, fwd, NULL, NULL );
|
||||
VectorMA( pm->ps->origin, 32, fwd, traceto );
|
||||
|
||||
pm->trace( &trace, pm->ps->origin, mins, maxs, traceto, pm->ps->clientNum, MASK_PLAYERSOLID );//FIXME: clip brushes too?
|
||||
VectorSubtract( pm->ps->origin, traceto, idealNormal );
|
||||
VectorNormalize( idealNormal );
|
||||
|
||||
if ( trace.fraction < 1.0f )
|
||||
{//there is a wall there
|
||||
int parts = SETANIM_LEGS;
|
||||
|
||||
pm->ps->velocity[0] = pm->ps->velocity[1] = 0;
|
||||
VectorMA( pm->ps->velocity, -150, fwd, pm->ps->velocity );
|
||||
pm->ps->velocity[2] += 128;
|
||||
|
||||
if ( !pm->ps->weaponTime )
|
||||
{
|
||||
parts = SETANIM_BOTH;
|
||||
}
|
||||
PM_SetAnim( parts, BOTH_WALL_FLIP_BACK1, SETANIM_FLAG_OVERRIDE|SETANIM_FLAG_HOLD, 0 );
|
||||
|
||||
pm->ps->legsTimer -= 600; //I force this anim to play to the end to prevent landing on your head and suddenly flipping over.
|
||||
//It is a bit too long at the end though, so I'll just shorten it.
|
||||
|
||||
pm->ps->fd.forceJumpZStart = pm->ps->origin[2];//so we don't take damage if we land at same height
|
||||
//pm->ps->pm_flags |= PMF_JUMPING|PMF_SLOW_MO_FALL;
|
||||
pm->cmd.upmove = 0;
|
||||
//G_SoundOnEnt( pm->gent, CHAN_BODY, "sound/weapons/force/jump.wav" );
|
||||
pm->ps->fd.forceJumpSound = 1;
|
||||
BG_ForcePowerDrain( pm->ps, FP_LEVITATION, 5 );
|
||||
|
||||
if (trace.entityNum < MAX_CLIENTS)
|
||||
{
|
||||
pm->ps->forceKickFlip = trace.entityNum+1; //let the server know that this person gets kicked by this client
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//FIXME: if in a butterfly, kick people away?
|
||||
|
@ -1235,6 +1291,7 @@ static qboolean PM_CheckJump( void )
|
|||
else if ( pm->ps->fd.saberAnimLevel == FORCE_LEVEL_3 )
|
||||
{//using strong attacks
|
||||
if ( pm->cmd.forwardmove > 0 && //going forward
|
||||
(pm->cmd.buttons & BUTTON_ATTACK) && //must be holding attack still
|
||||
PM_GroundDistance() < 32 &&
|
||||
!BG_InSpecialJump(pm->ps->legsAnim))
|
||||
{//strong attack: jump-hack
|
||||
|
@ -1447,13 +1504,19 @@ static void PM_FlyMove( void ) {
|
|||
PM_Friction ();
|
||||
|
||||
scale = PM_CmdScale( &pm->cmd );
|
||||
|
||||
if ( pm->ps->pm_type == PM_SPECTATOR && pm->cmd.buttons & BUTTON_ALT_ATTACK) {
|
||||
//turbo boost
|
||||
scale *= 10;
|
||||
}
|
||||
|
||||
//
|
||||
// user intentions
|
||||
//
|
||||
if ( !scale ) {
|
||||
wishvel[0] = 0;
|
||||
wishvel[1] = 0;
|
||||
wishvel[2] = 0;
|
||||
wishvel[2] = pm->ps->speed * (pm->cmd.upmove/127.0f);
|
||||
} else {
|
||||
for (i=0 ; i<3 ; i++) {
|
||||
wishvel[i] = scale * pml.forward[i]*pm->cmd.forwardmove + scale * pml.right[i]*pm->cmd.rightmove;
|
||||
|
@ -1825,7 +1888,7 @@ static int PM_TryRoll( void )
|
|||
|
||||
if ( BG_SaberInAttack( pm->ps->saberMove ) || BG_SaberInSpecialAttack( pm->ps->torsoAnim )
|
||||
|| BG_SpinningSaberAnim( pm->ps->legsAnim )
|
||||
|| (!pm->ps->clientNum&&PM_SaberInStart( pm->ps->saberMove )) )
|
||||
|| PM_SaberInStart( pm->ps->saberMove ) )
|
||||
{//attacking or spinning (or, if player, starting an attack)
|
||||
return 0;
|
||||
}
|
||||
|
@ -2169,7 +2232,25 @@ static void PM_GroundTraceMissed( void ) {
|
|||
trace_t trace;
|
||||
vec3_t point;
|
||||
|
||||
if ( pm->ps->groundEntityNum != ENTITYNUM_NONE ) {
|
||||
//rww - don't want to do this when handextend_choke, because you can be standing on the ground
|
||||
//while still holding your throat.
|
||||
if ( pm->ps->pm_type == PM_FLOAT ) {
|
||||
//we're assuming this is because you're being choked
|
||||
int parts = SETANIM_LEGS;
|
||||
/*
|
||||
if ( !pm->ps->weaponTime && pm->ps->forceHandExtend >= HANDEXTEND_CHOKE )
|
||||
{//still on ground, only set anim on torso
|
||||
parts = SETANIM_BOTH;
|
||||
}
|
||||
*/
|
||||
//rww - also don't use SETANIM_FLAG_HOLD, it will cause the legs to float around a bit before going into
|
||||
//a proper anim even when on the ground.
|
||||
PM_SetAnim(parts, BOTH_CHOKE3, SETANIM_FLAG_OVERRIDE, 100);
|
||||
//pm->ps->torsoTimer = 1;
|
||||
//pm->ps->legsTimer = 1;
|
||||
}
|
||||
//If the anim is choke3, act like we just went into the air because we aren't in a float
|
||||
else if ( pm->ps->groundEntityNum != ENTITYNUM_NONE || (pm->ps->legsAnim&~ANIM_TOGGLEBIT) == BOTH_CHOKE3 ) {
|
||||
// we just transitioned into freefall
|
||||
if ( pm->debugLevel ) {
|
||||
Com_Printf("%i:lift\n", c_pmove);
|
||||
|
@ -2531,6 +2612,22 @@ static void PM_Footsteps( void ) {
|
|||
float bobmove;
|
||||
int old;
|
||||
qboolean footstep;
|
||||
int setAnimFlags = 0;
|
||||
|
||||
if ( (PM_InSaberAnim( (pm->ps->legsAnim&~ANIM_TOGGLEBIT) ) && !BG_SpinningSaberAnim( (pm->ps->legsAnim&~ANIM_TOGGLEBIT) ))
|
||||
|| (pm->ps->legsAnim&~ANIM_TOGGLEBIT) == BOTH_STAND1
|
||||
|| (pm->ps->legsAnim&~ANIM_TOGGLEBIT) == BOTH_STAND1TO2
|
||||
|| (pm->ps->legsAnim&~ANIM_TOGGLEBIT) == BOTH_STAND2TO1
|
||||
|| (pm->ps->legsAnim&~ANIM_TOGGLEBIT) == BOTH_STAND2
|
||||
|| (pm->ps->legsAnim&~ANIM_TOGGLEBIT) == BOTH_SABERFAST_STANCE
|
||||
|| (pm->ps->legsAnim&~ANIM_TOGGLEBIT) == BOTH_SABERSLOW_STANCE
|
||||
|| (pm->ps->legsAnim&~ANIM_TOGGLEBIT) == BOTH_BUTTON_HOLD
|
||||
|| (pm->ps->legsAnim&~ANIM_TOGGLEBIT) == BOTH_BUTTON_RELEASE
|
||||
|| PM_LandingAnim( (pm->ps->legsAnim&~ANIM_TOGGLEBIT) )
|
||||
|| PM_PainAnim( (pm->ps->legsAnim&~ANIM_TOGGLEBIT) ))
|
||||
{//legs are in a saber anim, and not spinning, be sure to override it
|
||||
setAnimFlags |= SETANIM_FLAG_OVERRIDE;
|
||||
}
|
||||
|
||||
//
|
||||
// calculate speed and cycle to be used for
|
||||
|
@ -2542,8 +2639,16 @@ static void PM_Footsteps( void ) {
|
|||
if ( pm->ps->groundEntityNum == ENTITYNUM_NONE ) {
|
||||
|
||||
// airborne leaves position in cycle intact, but doesn't advance
|
||||
if ( pm->waterlevel > 1 ) {
|
||||
PM_ContinueLegsAnim( BOTH_SWIM1 );
|
||||
if ( pm->waterlevel > 1 )
|
||||
{
|
||||
if (pm->xyspeed > 60)
|
||||
{
|
||||
PM_ContinueLegsAnim( BOTH_SWIMFORWARD );
|
||||
}
|
||||
else
|
||||
{
|
||||
PM_ContinueLegsAnim( BOTH_SWIM_IDLE1 );
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
@ -2553,7 +2658,14 @@ static void PM_Footsteps( void ) {
|
|||
if ( pm->xyspeed < 5 ) {
|
||||
pm->ps->bobCycle = 0; // start at beginning of cycle again
|
||||
if ( (pm->ps->pm_flags & PMF_DUCKED) || (pm->ps->pm_flags & PMF_ROLLING) ) {
|
||||
if ((pm->ps->legsAnim&~ANIM_TOGGLEBIT) != BOTH_CROUCH1IDLE)
|
||||
{
|
||||
PM_SetAnim(SETANIM_LEGS, BOTH_CROUCH1IDLE, setAnimFlags, 100);
|
||||
}
|
||||
else
|
||||
{
|
||||
PM_ContinueLegsAnim( BOTH_CROUCH1IDLE );
|
||||
}
|
||||
} else {
|
||||
if (pm->ps->weapon == WP_DISRUPTOR && pm->ps->zoomMode == 1)
|
||||
{
|
||||
|
@ -2590,12 +2702,26 @@ static void PM_Footsteps( void ) {
|
|||
if ( !rolled )
|
||||
{
|
||||
if ( pm->ps->pm_flags & PMF_BACKWARDS_RUN ) {
|
||||
if ((pm->ps->legsAnim&~ANIM_TOGGLEBIT) != BOTH_CROUCH1WALKBACK)
|
||||
{
|
||||
PM_SetAnim(SETANIM_LEGS, BOTH_CROUCH1WALKBACK, setAnimFlags, 100);
|
||||
}
|
||||
else
|
||||
{
|
||||
PM_ContinueLegsAnim( BOTH_CROUCH1WALKBACK );
|
||||
}
|
||||
}
|
||||
else {
|
||||
if ((pm->ps->legsAnim&~ANIM_TOGGLEBIT) != BOTH_CROUCH1WALK)
|
||||
{
|
||||
PM_SetAnim(SETANIM_LEGS, BOTH_CROUCH1WALK, setAnimFlags, 100);
|
||||
}
|
||||
else
|
||||
{
|
||||
PM_ContinueLegsAnim( BOTH_CROUCH1WALK );
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
pm->ps->legsTimer = 0;
|
||||
|
@ -2625,35 +2751,77 @@ static void PM_Footsteps( void ) {
|
|||
bobmove = 0.5; // ducked characters bob much faster
|
||||
|
||||
if ( pm->ps->pm_flags & PMF_BACKWARDS_RUN )
|
||||
{
|
||||
if ((pm->ps->legsAnim&~ANIM_TOGGLEBIT) != BOTH_CROUCH1WALKBACK)
|
||||
{
|
||||
PM_SetAnim(SETANIM_LEGS, BOTH_CROUCH1WALKBACK, setAnimFlags, 100);
|
||||
}
|
||||
else
|
||||
{
|
||||
PM_ContinueLegsAnim( BOTH_CROUCH1WALKBACK );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((pm->ps->legsAnim&~ANIM_TOGGLEBIT) != BOTH_CROUCH1WALK)
|
||||
{
|
||||
PM_SetAnim(SETANIM_LEGS, BOTH_CROUCH1WALK, setAnimFlags, 100);
|
||||
}
|
||||
else
|
||||
{
|
||||
PM_ContinueLegsAnim( BOTH_CROUCH1WALK );
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( !( pm->cmd.buttons & BUTTON_WALKING ) ) {
|
||||
bobmove = 0.4f; // faster speeds bob faster
|
||||
if ( pm->ps->pm_flags & PMF_BACKWARDS_RUN ) {
|
||||
if ((pm->ps->legsAnim&~ANIM_TOGGLEBIT) != BOTH_RUNBACK1)
|
||||
{
|
||||
PM_SetAnim(SETANIM_LEGS, BOTH_RUNBACK1, setAnimFlags, 100);
|
||||
}
|
||||
else
|
||||
{
|
||||
PM_ContinueLegsAnim( BOTH_RUNBACK1 );
|
||||
}
|
||||
}
|
||||
else {
|
||||
if ((pm->ps->legsAnim&~ANIM_TOGGLEBIT) != BOTH_RUN1)
|
||||
{
|
||||
PM_SetAnim(SETANIM_LEGS, BOTH_RUN1, setAnimFlags, 100);
|
||||
}
|
||||
else
|
||||
{
|
||||
PM_ContinueLegsAnim( BOTH_RUN1 );
|
||||
}
|
||||
}
|
||||
footstep = qtrue;
|
||||
} else {
|
||||
bobmove = 0.2f; // walking bobs slow
|
||||
if ( pm->ps->pm_flags & PMF_BACKWARDS_RUN ) {
|
||||
if ((pm->ps->legsAnim&~ANIM_TOGGLEBIT) != BOTH_WALKBACK1)
|
||||
{
|
||||
PM_SetAnim(SETANIM_LEGS, BOTH_WALKBACK1, setAnimFlags, 100);
|
||||
}
|
||||
else
|
||||
{
|
||||
PM_ContinueLegsAnim( BOTH_WALKBACK1 );
|
||||
}
|
||||
}
|
||||
else {
|
||||
if ((pm->ps->legsAnim&~ANIM_TOGGLEBIT) != BOTH_WALK1)
|
||||
{
|
||||
PM_SetAnim(SETANIM_LEGS, BOTH_WALK1, setAnimFlags, 100);
|
||||
}
|
||||
else
|
||||
{
|
||||
PM_ContinueLegsAnim( BOTH_WALK1 );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// check for footstep / splash sounds
|
||||
old = pm->ps->bobCycle;
|
||||
|
@ -3249,7 +3417,13 @@ static void PM_Weapon( void ) {
|
|||
desiredAnim = BOTH_SABERPULL;
|
||||
break;
|
||||
case HANDEXTEND_CHOKE:
|
||||
desiredAnim = BOTH_CHOKE3;//TORSO_CHOKING1;
|
||||
desiredAnim = BOTH_CHOKE3; //left-handed choke
|
||||
/*
|
||||
if ( pm->ps->weapon == WP_NONE || pm->ps->weapon == WP_MELEE )
|
||||
{
|
||||
desiredAnim = BOTH_CHOKE1; //two-handed choke
|
||||
}
|
||||
*/
|
||||
break;
|
||||
case HANDEXTEND_DODGE:
|
||||
desiredAnim = pm->ps->forceDodgeAnim;
|
||||
|
@ -3281,6 +3455,17 @@ static void PM_Weapon( void ) {
|
|||
case HANDEXTEND_TAUNT:
|
||||
desiredAnim = pm->ps->forceDodgeAnim;
|
||||
break;
|
||||
//Hmm... maybe use these, too?
|
||||
//BOTH_FORCEHEAL_QUICK //quick heal (SP level 2 & 3)
|
||||
//BOTH_MINDTRICK1 // wave (maybe for mind trick 2 & 3 - whole area, and for force seeing)
|
||||
//BOTH_MINDTRICK2 // tap (maybe for mind trick 1 - one person)
|
||||
//BOTH_FORCEGRIP_START //start grip
|
||||
//BOTH_FORCEGRIP_HOLD //hold grip
|
||||
//BOTH_FORCEGRIP_RELEASE //release grip
|
||||
//BOTH_FORCELIGHTNING //quick lightning burst (level 1)
|
||||
//BOTH_FORCELIGHTNING_START //start lightning
|
||||
//BOTH_FORCELIGHTNING_HOLD //hold lightning
|
||||
//BOTH_FORCELIGHTNING_RELEASE //release lightning
|
||||
default:
|
||||
desiredAnim = BOTH_FORCEPUSH;
|
||||
break;
|
||||
|
@ -3289,9 +3474,9 @@ static void PM_Weapon( void ) {
|
|||
PM_SetAnim(SETANIM_TORSO, desiredAnim, SETANIM_FLAG_OVERRIDE|SETANIM_FLAG_HOLD, 100);
|
||||
pm->ps->torsoTimer = 1;
|
||||
|
||||
if (pm->ps->forceHandExtend == HANDEXTEND_DODGE || pm->ps->forceHandExtend == HANDEXTEND_KNOCKDOWN /*||
|
||||
pm->ps->forceHandExtend == HANDEXTEND_CHOKE*/)
|
||||
{ //special case, play dodge anim on whole body
|
||||
if (pm->ps->forceHandExtend == HANDEXTEND_DODGE || pm->ps->forceHandExtend == HANDEXTEND_KNOCKDOWN ||
|
||||
(pm->ps->forceHandExtend == HANDEXTEND_CHOKE && pm->ps->groundEntityNum == ENTITYNUM_NONE) )
|
||||
{ //special case, play dodge anim on whole body, choke anim too if off ground
|
||||
PM_SetAnim(SETANIM_LEGS, desiredAnim, SETANIM_FLAG_OVERRIDE|SETANIM_FLAG_HOLD, 100);
|
||||
pm->ps->legsTimer = 1;
|
||||
}
|
||||
|
@ -3451,12 +3636,12 @@ static void PM_Weapon( void ) {
|
|||
PM_StartTorsoAnim( BOTH_GUNSIT1 );
|
||||
}
|
||||
|
||||
if (pm->ps->isJediMaster || pm->ps->duelInProgress)
|
||||
if (pm->ps->isJediMaster || pm->ps->duelInProgress || pm->ps->trueJedi)
|
||||
{
|
||||
pm->cmd.weapon = WP_SABER;
|
||||
pm->ps->weapon = WP_SABER;
|
||||
|
||||
if (pm->ps->isJediMaster)
|
||||
if (pm->ps->isJediMaster || pm->ps->trueJedi)
|
||||
{
|
||||
pm->ps->stats[STAT_WEAPONS] = (1 << WP_SABER);
|
||||
}
|
||||
|
@ -3690,7 +3875,7 @@ PM_Animate
|
|||
static void PM_Animate( void ) {
|
||||
if ( pm->cmd.buttons & BUTTON_GESTURE ) {
|
||||
if ( pm->ps->torsoTimer < 1 && pm->ps->forceHandExtend == HANDEXTEND_NONE &&
|
||||
pm->ps->legsTimer < 1 && pm->ps->weaponTime < 1 ) {
|
||||
pm->ps->legsTimer < 1 && pm->ps->weaponTime < 1 && pm->ps->saberLockTime < pm->cmd.serverTime) {
|
||||
/*
|
||||
PM_StartTorsoAnim( BOTH_TALKGESTURE3 );
|
||||
pm->ps->torsoTimer = TIMER_GESTURE;
|
||||
|
@ -4022,6 +4207,8 @@ void BG_CmdForRoll( int anim, usercmd_t *pCmd )
|
|||
pCmd->upmove = 0;
|
||||
}
|
||||
|
||||
qboolean PM_SaberInTransition( int move );
|
||||
|
||||
void BG_AdjustClientSpeed(playerState_t *ps, usercmd_t *cmd, int svTime)
|
||||
{
|
||||
//For prediction, always reset speed back to the last known server base speed
|
||||
|
@ -4102,6 +4289,11 @@ void BG_AdjustClientSpeed(playerState_t *ps, usercmd_t *cmd, int svTime)
|
|||
}
|
||||
}
|
||||
|
||||
if (ps->fd.forcePowersActive & (1 << FP_GRIP))
|
||||
{
|
||||
ps->speed *= 0.4;
|
||||
}
|
||||
|
||||
if (ps->fd.forcePowersActive & (1 << FP_SPEED))
|
||||
{
|
||||
if (ps->fd.forceSpeedSmash < 1.2)
|
||||
|
@ -4159,9 +4351,16 @@ void BG_AdjustClientSpeed(playerState_t *ps, usercmd_t *cmd, int svTime)
|
|||
}
|
||||
}
|
||||
else if ( BG_SpinningSaberAnim( ps->legsAnim ) )
|
||||
{
|
||||
if (ps->fd.saberAnimLevel == FORCE_LEVEL_3)
|
||||
{
|
||||
ps->speed *= 0.3f;
|
||||
}
|
||||
else
|
||||
{
|
||||
ps->speed *= 0.5f;
|
||||
}
|
||||
}
|
||||
else if ( ps->weapon == WP_SABER && BG_SaberInAttack( ps->saberMove ) )
|
||||
{//if attacking with saber while running, drop your speed
|
||||
switch( ps->fd.saberAnimLevel )
|
||||
|
@ -4170,12 +4369,25 @@ void BG_AdjustClientSpeed(playerState_t *ps, usercmd_t *cmd, int svTime)
|
|||
ps->speed *= 0.85f;
|
||||
break;
|
||||
case FORCE_LEVEL_3:
|
||||
ps->speed *= 0.70f;
|
||||
//ps->speed *= 0.70f;
|
||||
ps->speed *= 0.55f;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (ps->weapon == WP_SABER && ps->fd.saberAnimLevel == FORCE_LEVEL_3 &&
|
||||
PM_SaberInTransition(ps->saberMove))
|
||||
{ //Now, we want to even slow down in transitions for level 3 (since it has chains and stuff now)
|
||||
if (cmd->forwardmove < 0)
|
||||
{
|
||||
ps->speed *= 0.4f;
|
||||
}
|
||||
else
|
||||
{
|
||||
ps->speed *= 0.6f;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if ( BG_InRoll( ps, ps->legsAnim ) && ps->speed > 200 )
|
||||
|
@ -4313,6 +4525,13 @@ void PmoveSingle (pmove_t *pmove) {
|
|||
pm->cmd.buttons &= ~BUTTON_WALKING;
|
||||
}
|
||||
|
||||
// set the talk balloon flag
|
||||
if ( pm->cmd.buttons & BUTTON_TALK ) {
|
||||
pm->ps->eFlags |= EF_TALK;
|
||||
} else {
|
||||
pm->ps->eFlags &= ~EF_TALK;
|
||||
}
|
||||
|
||||
// In certain situations, we may want to control which attack buttons are pressed and what kind of functionality
|
||||
// is attached to them
|
||||
PM_AdjustAttackStates( pm );
|
||||
|
@ -4323,6 +4542,18 @@ void PmoveSingle (pmove_t *pmove) {
|
|||
pm->ps->pm_flags &= ~PMF_RESPAWNED;
|
||||
}
|
||||
|
||||
// if talk button is down, dissallow all other input
|
||||
// this is to prevent any possible intercept proxy from
|
||||
// adding fake talk balloons
|
||||
if ( pmove->cmd.buttons & BUTTON_TALK ) {
|
||||
// keep the talk button set tho for when the cmd.serverTime > 66 msec
|
||||
// and the same cmd is used multiple times in Pmove
|
||||
pmove->cmd.buttons = BUTTON_TALK;
|
||||
pmove->cmd.forwardmove = 0;
|
||||
pmove->cmd.rightmove = 0;
|
||||
pmove->cmd.upmove = 0;
|
||||
}
|
||||
|
||||
// clear all pmove local vars
|
||||
memset (&pml, 0, sizeof(pml));
|
||||
|
||||
|
@ -4345,6 +4576,28 @@ void PmoveSingle (pmove_t *pmove) {
|
|||
|
||||
PM_AdjustAngleForWallRun(pm->ps, &pm->cmd, qtrue);
|
||||
|
||||
if (pm->ps->saberMove == LS_A_JUMP_T__B_ || pm->ps->saberMove == LS_A_LUNGE)
|
||||
{
|
||||
/*
|
||||
if (pm->ps->velocity[0] ||
|
||||
pm->ps->velocity[1] ||
|
||||
pm->ps->velocity[2])
|
||||
{ //if we're doing a lunge and we have a velocity, force us to look in the direction we are
|
||||
//flying with the lunge
|
||||
vec3_t velAngles;
|
||||
|
||||
vectoangles(pm->ps->velocity, velAngles);
|
||||
PM_SetPMViewAngle(pm->ps, velAngles, &pm->cmd);
|
||||
}
|
||||
else
|
||||
{ //otherwise, if there is no valid velocity, just don't let us readjust the angles.
|
||||
PM_SetPMViewAngle(pm->ps, pm->ps->viewangles, &pm->cmd);
|
||||
}
|
||||
*/
|
||||
//FIXME: Use the above method, and don't let the angles mess up when you hit something.
|
||||
PM_SetPMViewAngle(pm->ps, pm->ps->viewangles, &pm->cmd);
|
||||
}
|
||||
|
||||
// update the viewangles
|
||||
PM_UpdateViewAngles( pm->ps, &pm->cmd );
|
||||
|
||||
|
|
|
@ -105,6 +105,7 @@ typedef enum {
|
|||
G2_MODELPART_WAIST,
|
||||
G2_MODELPART_LARM,
|
||||
G2_MODELPART_RARM,
|
||||
G2_MODELPART_RHAND,
|
||||
G2_MODELPART_LLEG,
|
||||
G2_MODELPART_RLEG
|
||||
} g2ModelParts_t;
|
||||
|
@ -273,6 +274,7 @@ typedef struct {
|
|||
int (*pointcontents)( const vec3_t point, int passEntityNum );
|
||||
|
||||
playerState_t *bgClients[MAX_CLIENTS];
|
||||
int checkDuelLoss;
|
||||
} pmove_t;
|
||||
|
||||
extern pmove_t *pm;
|
||||
|
@ -338,25 +340,36 @@ typedef enum {
|
|||
#define EF_DEAD 0x00000001 // don't draw a foe marker over players with EF_DEAD
|
||||
#define EF_BOUNCE_SHRAPNEL 0x00000002 // special shrapnel flag
|
||||
#define EF_TELEPORT_BIT 0x00000004 // toggled every time the origin abruptly changes
|
||||
|
||||
//doesn't do anything
|
||||
#define EF_AWARD_EXCELLENT 0x00000008 // draw an excellent sprite
|
||||
|
||||
#define EF_PLAYER_EVENT 0x00000010
|
||||
#define EF_BOUNCE 0x00000010 // for missiles
|
||||
|
||||
#define EF_BOUNCE_HALF 0x00000020 // for missiles
|
||||
|
||||
//doesn't do anything
|
||||
#define EF_AWARD_GAUNTLET 0x00000040 // draw a gauntlet sprite
|
||||
|
||||
#define EF_NODRAW 0x00000080 // may have an event, but no model (unspawned items)
|
||||
#define EF_FIRING 0x00000100 // for lightning gun
|
||||
#define EF_ALT_FIRING 0x00000200 // for alt-fires, mostly for lightning guns though
|
||||
#define EF_MOVER_STOP 0x00000400 // will push otherwise
|
||||
|
||||
//doesn't do anything
|
||||
#define EF_AWARD_CAP 0x00000800 // draw the capture sprite
|
||||
|
||||
#define EF_TALK 0x00001000 // draw a talk balloon
|
||||
#define EF_CONNECTION 0x00002000 // draw a connection trouble sprite
|
||||
#define EF_VOTED 0x00004000 // already cast a vote
|
||||
|
||||
//next 4 don't actually do anything
|
||||
#define EF_AWARD_IMPRESSIVE 0x00008000 // draw an impressive sprite
|
||||
#define EF_AWARD_DEFEND 0x00010000 // draw a defend sprite
|
||||
#define EF_AWARD_ASSIST 0x00020000 // draw a assist sprite
|
||||
#define EF_AWARD_DENIED 0x00040000 // denied
|
||||
|
||||
#define EF_TEAMVOTED 0x00080000 // already cast a team vote
|
||||
#define EF_SEEKERDRONE 0x00100000 // show seeker drone floating around head
|
||||
#define EF_MISSILE_STICK 0x00200000 // missiles that stick to the wall.
|
||||
|
@ -1000,6 +1013,9 @@ qboolean BG_SaberInIdle( int move );
|
|||
qboolean BG_FlippingAnim( int anim );
|
||||
qboolean BG_SpinningSaberAnim( int anim );
|
||||
qboolean BG_SaberInSpecialAttack( int anim );
|
||||
int BG_BrokenParryForAttack( int move );
|
||||
int BG_BrokenParryForParry( int move );
|
||||
int BG_KnockawayForParry( int move );
|
||||
qboolean BG_InRoll( playerState_t *ps, int anim );
|
||||
qboolean BG_InDeathAnim( int anim );
|
||||
|
||||
|
|
|
@ -250,6 +250,7 @@ saberMoveData_t saberMoveData[LS_MOVE_MAX] = {// NB:randomized
|
|||
{"Reflect LL", BOTH_P1_S1_BL, Q_R, Q_BR, AFLAG_ACTIVE, 50, BLK_WIDE, LS_R_TL2BR, LS_A_BR2TL, 300 }, // LS_PARRY_LL,
|
||||
};
|
||||
|
||||
|
||||
int transitionMove[Q_NUM_QUADS][Q_NUM_QUADS] =
|
||||
{
|
||||
LS_NONE, //Can't transition to same pos!
|
||||
|
@ -348,9 +349,11 @@ saberMoveName_t PM_AttackMoveForQuad( int quad )
|
|||
return LS_NONE;
|
||||
}
|
||||
|
||||
qboolean PM_SaberKataDone(int curmove, int newmove);
|
||||
|
||||
int PM_SaberAnimTransitionAnim( int curmove, int newmove )
|
||||
{
|
||||
//FIXME: take FP_SABERATTACK into account here somehow?
|
||||
//FIXME: take FP_SABER_OFFENSE into account here somehow?
|
||||
int retmove = newmove;
|
||||
if ( curmove == LS_READY )
|
||||
{//just standing there
|
||||
|
@ -397,11 +400,21 @@ int PM_SaberAnimTransitionAnim( int curmove, int newmove )
|
|||
case LS_A_R2L:
|
||||
case LS_A_TR2BL:
|
||||
case LS_A_T2B:
|
||||
/*if ( newmove == curmove )
|
||||
if ( newmove == curmove )
|
||||
{//FIXME: need a spin or something or go to next level, but for now, just play the return
|
||||
//going into another attack...
|
||||
//allow endless chaining in level 1 attacks, several in level 2 and only one or a few in level 3
|
||||
//FIXME: don't let strong attacks chain to an attack in the opposite direction ( > 45 degrees?)
|
||||
if ( PM_SaberKataDone( curmove, newmove ) )
|
||||
{//done with this kata, must return to ready before attack again
|
||||
retmove = LS_R_TL2BR + (newmove-LS_A_TL2BR);
|
||||
}
|
||||
else */if ( saberMoveData[curmove].endQuad == saberMoveData[newmove].startQuad )
|
||||
else
|
||||
{//okay to chain to another attack
|
||||
retmove = transitionMove[saberMoveData[curmove].endQuad][saberMoveData[newmove].startQuad];
|
||||
}
|
||||
}
|
||||
else if ( saberMoveData[curmove].endQuad == saberMoveData[newmove].startQuad )
|
||||
{//new move starts from same quadrant
|
||||
retmove = newmove;
|
||||
}
|
||||
|
@ -417,6 +430,14 @@ int PM_SaberAnimTransitionAnim( int curmove, int newmove )
|
|||
case LS_A_R2L:
|
||||
case LS_A_TR2BL:
|
||||
case LS_A_T2B:
|
||||
case LS_D1_BR:
|
||||
case LS_D1__R:
|
||||
case LS_D1_TR:
|
||||
case LS_D1_T_:
|
||||
case LS_D1_TL:
|
||||
case LS_D1__L:
|
||||
case LS_D1_BL:
|
||||
case LS_D1_B_:
|
||||
retmove = transitionMove[saberMoveData[curmove].endQuad][saberMoveData[newmove].startQuad];
|
||||
break;
|
||||
//transitioning from a return
|
||||
|
@ -445,17 +466,35 @@ int PM_SaberAnimTransitionAnim( int curmove, int newmove )
|
|||
case LS_BOUNCE_LR:
|
||||
case LS_BOUNCE_LL:
|
||||
*/
|
||||
//transitioning from a parry/deflection
|
||||
//transitioning from a parry/reflection/knockaway/broken parry
|
||||
case LS_PARRY_UP:
|
||||
case LS_REFLECT_UP:
|
||||
case LS_PARRY_UR:
|
||||
case LS_REFLECT_UR:
|
||||
case LS_PARRY_UL:
|
||||
case LS_REFLECT_UL:
|
||||
case LS_PARRY_LR:
|
||||
case LS_REFLECT_LR:
|
||||
case LS_PARRY_LL:
|
||||
case LS_REFLECT_UP:
|
||||
case LS_REFLECT_UR:
|
||||
case LS_REFLECT_UL:
|
||||
case LS_REFLECT_LR:
|
||||
case LS_REFLECT_LL:
|
||||
case LS_K1_T_:
|
||||
case LS_K1_TR:
|
||||
case LS_K1_TL:
|
||||
case LS_K1_BR:
|
||||
case LS_K1_BL:
|
||||
case LS_V1_BR:
|
||||
case LS_V1__R:
|
||||
case LS_V1_TR:
|
||||
case LS_V1_T_:
|
||||
case LS_V1_TL:
|
||||
case LS_V1__L:
|
||||
case LS_V1_BL:
|
||||
case LS_V1_B_:
|
||||
case LS_H1_T_:
|
||||
case LS_H1_TR:
|
||||
case LS_H1_TL:
|
||||
case LS_H1_BR:
|
||||
case LS_H1_BL:
|
||||
retmove = transitionMove[saberMoveData[curmove].endQuad][saberMoveData[newmove].startQuad];
|
||||
break;
|
||||
//NB: transitioning from transitions is fine
|
||||
|
@ -474,7 +513,6 @@ int PM_SaberAnimTransitionAnim( int curmove, int newmove )
|
|||
return retmove;
|
||||
}
|
||||
|
||||
|
||||
int PM_SaberMoveQuadrantForMovement( usercmd_t *ucmd )
|
||||
{
|
||||
if ( ucmd->rightmove > 0 )
|
||||
|
@ -548,13 +586,151 @@ qboolean PM_SaberInTransition( int move )
|
|||
return qfalse;
|
||||
}
|
||||
|
||||
qboolean PM_SaberKataDone( void )
|
||||
int saberMoveTransitionAngle[Q_NUM_QUADS][Q_NUM_QUADS] =
|
||||
{
|
||||
if ( (pm->ps->fd.saberAnimLevel >= FORCE_LEVEL_3 && pm->ps->saberAttackChainCount > PM_irand_timesync( 0, 1 )) ||
|
||||
( pm->ps->fd.saberAnimLevel == FORCE_LEVEL_2 && pm->ps->saberAttackChainCount > PM_irand_timesync( 2, 5 ) ) )
|
||||
0,//Q_BR,Q_BR,
|
||||
45,//Q_BR,Q_R,
|
||||
90,//Q_BR,Q_TR,
|
||||
135,//Q_BR,Q_T,
|
||||
180,//Q_BR,Q_TL,
|
||||
215,//Q_BR,Q_L,
|
||||
270,//Q_BR,Q_BL,
|
||||
45,//Q_BR,Q_B,
|
||||
45,//Q_R,Q_BR,
|
||||
0,//Q_R,Q_R,
|
||||
45,//Q_R,Q_TR,
|
||||
90,//Q_R,Q_T,
|
||||
135,//Q_R,Q_TL,
|
||||
180,//Q_R,Q_L,
|
||||
215,//Q_R,Q_BL,
|
||||
90,//Q_R,Q_B,
|
||||
90,//Q_TR,Q_BR,
|
||||
45,//Q_TR,Q_R,
|
||||
0,//Q_TR,Q_TR,
|
||||
45,//Q_TR,Q_T,
|
||||
90,//Q_TR,Q_TL,
|
||||
135,//Q_TR,Q_L,
|
||||
180,//Q_TR,Q_BL,
|
||||
135,//Q_TR,Q_B,
|
||||
135,//Q_T,Q_BR,
|
||||
90,//Q_T,Q_R,
|
||||
45,//Q_T,Q_TR,
|
||||
0,//Q_T,Q_T,
|
||||
45,//Q_T,Q_TL,
|
||||
90,//Q_T,Q_L,
|
||||
135,//Q_T,Q_BL,
|
||||
180,//Q_T,Q_B,
|
||||
180,//Q_TL,Q_BR,
|
||||
135,//Q_TL,Q_R,
|
||||
90,//Q_TL,Q_TR,
|
||||
45,//Q_TL,Q_T,
|
||||
0,//Q_TL,Q_TL,
|
||||
45,//Q_TL,Q_L,
|
||||
90,//Q_TL,Q_BL,
|
||||
135,//Q_TL,Q_B,
|
||||
215,//Q_L,Q_BR,
|
||||
180,//Q_L,Q_R,
|
||||
135,//Q_L,Q_TR,
|
||||
90,//Q_L,Q_T,
|
||||
45,//Q_L,Q_TL,
|
||||
0,//Q_L,Q_L,
|
||||
45,//Q_L,Q_BL,
|
||||
90,//Q_L,Q_B,
|
||||
270,//Q_BL,Q_BR,
|
||||
215,//Q_BL,Q_R,
|
||||
180,//Q_BL,Q_TR,
|
||||
135,//Q_BL,Q_T,
|
||||
90,//Q_BL,Q_TL,
|
||||
45,//Q_BL,Q_L,
|
||||
0,//Q_BL,Q_BL,
|
||||
45,//Q_BL,Q_B,
|
||||
45,//Q_B,Q_BR,
|
||||
90,//Q_B,Q_R,
|
||||
135,//Q_B,Q_TR,
|
||||
180,//Q_B,Q_T,
|
||||
135,//Q_B,Q_TL,
|
||||
90,//Q_B,Q_L,
|
||||
45,//Q_B,Q_BL,
|
||||
0//Q_B,Q_B,
|
||||
};
|
||||
|
||||
int PM_SaberAttackChainAngle( int move1, int move2 )
|
||||
{
|
||||
if ( move1 == -1 || move2 == -1 )
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
return saberMoveTransitionAngle[saberMoveData[move1].endQuad][saberMoveData[move2].startQuad];
|
||||
}
|
||||
|
||||
qboolean PM_SaberKataDone(int curmove, int newmove)
|
||||
{
|
||||
if ( pm->ps->fd.saberAnimLevel == FORCE_LEVEL_3 )
|
||||
{
|
||||
if ( curmove == LS_NONE || newmove == LS_NONE )
|
||||
{
|
||||
if ( pm->ps->fd.saberAnimLevel >= FORCE_LEVEL_3 && pm->ps->saberAttackChainCount > PM_irand_timesync( 0, 1 ) )
|
||||
{
|
||||
return qtrue;
|
||||
}
|
||||
}
|
||||
else if ( pm->ps->saberAttackChainCount > PM_irand_timesync( 2, 3 ) )
|
||||
{
|
||||
return qtrue;
|
||||
}
|
||||
else if ( pm->ps->saberAttackChainCount > 0 )
|
||||
{
|
||||
int chainAngle = PM_SaberAttackChainAngle( curmove, newmove );
|
||||
if ( chainAngle < 135 || chainAngle > 215 )
|
||||
{//if trying to chain to a move that doesn't continue the momentum
|
||||
return qtrue;
|
||||
}
|
||||
else if ( chainAngle == 180 )
|
||||
{//continues the momentum perfectly, allow it to chain 66% of the time
|
||||
if ( pm->ps->saberAttackChainCount > 1 )
|
||||
{
|
||||
return qtrue;
|
||||
}
|
||||
}
|
||||
else
|
||||
{//would continue the movement somewhat, 50% chance of continuing
|
||||
if ( pm->ps->saberAttackChainCount > 2 )
|
||||
{
|
||||
return qtrue;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{//FIXME: have chainAngle influence fast and medium chains as well?
|
||||
if (newmove == LS_A_TL2BR ||
|
||||
newmove == LS_A_L2R ||
|
||||
newmove == LS_A_BL2TR ||
|
||||
newmove == LS_A_BR2TL ||
|
||||
newmove == LS_A_R2L ||
|
||||
newmove == LS_A_TR2BL )
|
||||
{ //lower chaining tolerance for spinning saber anims
|
||||
int chainTolerance;
|
||||
|
||||
if (pm->ps->fd.saberAnimLevel == FORCE_LEVEL_1)
|
||||
{
|
||||
chainTolerance = 5;
|
||||
}
|
||||
else
|
||||
{
|
||||
chainTolerance = 3;
|
||||
}
|
||||
|
||||
if (pm->ps->saberAttackChainCount >= chainTolerance && PM_irand_timesync(1, pm->ps->saberAttackChainCount) > chainTolerance)
|
||||
{
|
||||
return qtrue;
|
||||
}
|
||||
}
|
||||
if ( pm->ps->fd.saberAnimLevel == FORCE_LEVEL_2 && pm->ps->saberAttackChainCount > PM_irand_timesync( 2, 5 ) )
|
||||
{
|
||||
return qtrue;
|
||||
}
|
||||
}
|
||||
return qfalse;
|
||||
}
|
||||
|
||||
|
@ -649,6 +825,8 @@ void PM_SaberLockBreak( playerState_t *genemy, qboolean victory )
|
|||
genemy->velocity[0] = oppDir[0]*(strength*40);
|
||||
genemy->velocity[1] = oppDir[1]*(strength*40);
|
||||
genemy->velocity[2] = 100;
|
||||
|
||||
pm->checkDuelLoss = genemy->clientNum+1;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -688,7 +866,7 @@ void PM_SaberLockBreak( playerState_t *genemy, qboolean victory )
|
|||
}
|
||||
else
|
||||
{
|
||||
if ( Q_irand( 0, 1 ) )
|
||||
if ( PM_irand_timesync( 0, 1 ) )
|
||||
{
|
||||
BG_AddPredictableEventToPlayerstate(EV_JUMP, PM_irand_timesync( 0, 75 ), genemy);
|
||||
}
|
||||
|
@ -781,7 +959,7 @@ void PM_SaberLocked( void )
|
|||
remaining = anim->firstFrame+anim->numFrames-curFrame;
|
||||
}
|
||||
}
|
||||
if ( !Q_irand( 0, 2 ) )
|
||||
if ( !PM_irand_timesync( 0, 2 ) )
|
||||
{
|
||||
PM_AddEvent( EV_JUMP );
|
||||
}
|
||||
|
@ -798,7 +976,7 @@ void PM_SaberLocked( void )
|
|||
if ( (genemy->torsoAnim&~ANIM_TOGGLEBIT) == BOTH_CWCIRCLELOCK ||
|
||||
(genemy->torsoAnim&~ANIM_TOGGLEBIT) == BOTH_BF1LOCK )
|
||||
{
|
||||
if ( !Q_irand( 0, 2 ) )
|
||||
if ( !PM_irand_timesync( 0, 2 ) )
|
||||
{
|
||||
BG_AddPredictableEventToPlayerstate(EV_PAIN, floor((float)80/100*100.0f), genemy);
|
||||
}
|
||||
|
@ -819,6 +997,10 @@ void PM_SaberLocked( void )
|
|||
|
||||
qboolean PM_SaberInBrokenParry( int move )
|
||||
{
|
||||
if ( move >= LS_V1_BR && move <= LS_V1_B_ )
|
||||
{
|
||||
return qtrue;
|
||||
}
|
||||
if ( move >= LS_H1_T_ && move <= LS_H1_BL )
|
||||
{
|
||||
return qtrue;
|
||||
|
@ -932,7 +1114,7 @@ saberMoveName_t PM_SaberFlipOverAttackMove(trace_t *tr)
|
|||
pm->ps->fd.forceJumpSound = 1;
|
||||
pm->cmd.upmove = 0;
|
||||
|
||||
if ( Q_irand( 0, 1 ) )
|
||||
if ( PM_irand_timesync( 0, 1 ) )
|
||||
{
|
||||
return LS_A_FLIP_STAB;
|
||||
}
|
||||
|
@ -1108,7 +1290,9 @@ saberMoveName_t PM_SaberAttackForMovement(saberMoveName_t curmove)
|
|||
}
|
||||
else if ( PM_SaberInBounce( curmove ) )
|
||||
{//bounces should go to their default attack if you don't specify a direction but are attacking
|
||||
if ( PM_SaberKataDone() )
|
||||
newmove = saberMoveData[curmove].chain_attack;
|
||||
|
||||
if ( PM_SaberKataDone(curmove, newmove) )
|
||||
{
|
||||
newmove = saberMoveData[curmove].chain_idle;
|
||||
}
|
||||
|
@ -1124,7 +1308,9 @@ saberMoveName_t PM_SaberAttackForMovement(saberMoveName_t curmove)
|
|||
//rww - If we don't seed with a "common" value, the client and server will get mismatched
|
||||
//prediction values. Under laggy conditions this will cause the appearance of rapid swing
|
||||
//sequence changes.
|
||||
newmove = PM_irand_timesync(LS_A_TL2BR, LS_A_T2B);
|
||||
|
||||
//newmove = PM_irand_timesync(LS_A_TL2BR, LS_A_T2B);
|
||||
newmove = LS_A_T2B; //decided we don't like random attacks when idle, use an overhead instead.
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1252,9 +1438,12 @@ void PM_WeaponLightsaber(void)
|
|||
}
|
||||
|
||||
// don't allow attack until all buttons are up
|
||||
//This is bad. It freezes the attack state and the animations if you hold the button after respawning, and it looks strange.
|
||||
/*
|
||||
if ( pm->ps->pm_flags & PMF_RESPAWNED ) {
|
||||
return;
|
||||
}
|
||||
*/
|
||||
|
||||
// check for dead player
|
||||
if ( pm->ps->stats[STAT_HEALTH] <= 0 ) {
|
||||
|
@ -1306,6 +1495,13 @@ void PM_WeaponLightsaber(void)
|
|||
|
||||
switch ( pm->ps->saberBlocked )
|
||||
{
|
||||
case BLOCKED_BOUNCE_MOVE:
|
||||
{ //act as a bounceMove and reset the saberMove instead of using a seperate value for it
|
||||
PM_SetSaberMove( pm->ps->saberMove );
|
||||
pm->ps->weaponTime = pm->ps->torsoTimer;
|
||||
pm->ps->saberBlocked = 0;
|
||||
}
|
||||
break;
|
||||
case BLOCKED_PARRY_BROKEN:
|
||||
//whatever parry we were is in now broken, play the appropriate knocked-away anim
|
||||
{
|
||||
|
@ -1326,6 +1522,10 @@ void PM_WeaponLightsaber(void)
|
|||
}
|
||||
else
|
||||
{//Maybe in a knockaway?
|
||||
if (pm->ps->weaponTime <= 0)
|
||||
{
|
||||
pm->ps->saberBlocked = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -1584,7 +1784,7 @@ weapChecks:
|
|||
if ( anim == -1 )
|
||||
{
|
||||
//FIXME: take FP_SABER_OFFENSE into account here somehow?
|
||||
if ( curmove >= LS_T1_BR__R && curmove <= LS_T1_BL__L )
|
||||
if ( PM_SaberInTransition( curmove ) )
|
||||
{//in a transition, must play sequential attack
|
||||
newmove = saberMoveData[curmove].chain_attack;
|
||||
}
|
||||
|
@ -1592,13 +1792,35 @@ weapChecks:
|
|||
{//started a swing, must continue from here
|
||||
newmove = LS_A_TL2BR + (curmove-LS_S_TL2BR);
|
||||
}
|
||||
else
|
||||
{
|
||||
else if ( PM_SaberInBrokenParry( curmove ) )
|
||||
{//broken parries must always return to ready
|
||||
newmove = LS_READY;
|
||||
}
|
||||
else//if ( pm->cmd.buttons&BUTTON_ATTACK && !(pm->ps->pm_flags&PMF_ATTACK_HELD) )//only do this if just pressed attack button?
|
||||
{//get attack move from movement command
|
||||
/*
|
||||
if ( PM_SaberKataDone() )
|
||||
{//we came from a bounce and cannot chain to another attack because our kata is done
|
||||
newmove = saberMoveData[curmove].chain_idle;
|
||||
}
|
||||
else
|
||||
else */
|
||||
saberMoveName_t checkMove = PM_SaberAttackForMovement(curmove);
|
||||
if (checkMove != -1)
|
||||
{
|
||||
newmove = checkMove;
|
||||
}
|
||||
|
||||
if ( (PM_SaberInBounce( curmove )||PM_SaberInBrokenParry( curmove ))
|
||||
&& saberMoveData[newmove].startQuad == saberMoveData[curmove].endQuad )
|
||||
{//this attack would be a repeat of the last (which was blocked), so don't actually use it, use the default chain attack for this bounce
|
||||
newmove = saberMoveData[curmove].chain_attack;
|
||||
}
|
||||
|
||||
if ( PM_SaberKataDone(curmove, newmove) )
|
||||
{//we came from a bounce and cannot chain to another attack because our kata is done
|
||||
newmove = saberMoveData[curmove].chain_idle;
|
||||
}
|
||||
/*else
|
||||
{
|
||||
saberMoveName_t checkMove = PM_SaberAttackForMovement(curmove);
|
||||
if (checkMove != -1)
|
||||
|
@ -1606,6 +1828,7 @@ weapChecks:
|
|||
newmove = checkMove;
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
/*
|
||||
if ( newmove == LS_NONE )
|
||||
|
@ -1665,6 +1888,11 @@ weapChecks:
|
|||
{
|
||||
anim = PM_GetSaberStance();
|
||||
}
|
||||
|
||||
if (anim == BOTH_RUN2 && !pm->cmd.forwardmove && !pm->cmd.rightmove)
|
||||
{ //semi-hacky
|
||||
anim = PM_GetSaberStance();
|
||||
}
|
||||
newmove = LS_READY;
|
||||
}
|
||||
|
||||
|
@ -1709,8 +1937,8 @@ void PM_SetSaberMove(short newMove)
|
|||
int anim = saberMoveData[newMove].animToUse;
|
||||
int parts = SETANIM_TORSO;
|
||||
|
||||
if ( newMove == LS_READY )
|
||||
{//finished with a kata, reset attack counter
|
||||
if ( newMove == LS_READY || newMove == LS_A_FLIP_STAB || newMove == LS_A_FLIP_SLASH )
|
||||
{//finished with a kata (or in a special move) reset attack counter
|
||||
pm->ps->saberAttackChainCount = 0;
|
||||
}
|
||||
else if ( BG_SaberInAttack( newMove ) )
|
||||
|
@ -1724,14 +1952,11 @@ void PM_SetSaberMove(short newMove)
|
|||
}
|
||||
|
||||
if ( pm->ps->fd.saberAnimLevel > FORCE_LEVEL_1 &&
|
||||
!BG_SaberInIdle( newMove ) && !PM_SaberInParry( newMove ) && !PM_SaberInReflect( newMove ) && !BG_SaberInSpecial(newMove))
|
||||
!BG_SaberInIdle( newMove ) && !PM_SaberInParry( newMove ) && !PM_SaberInKnockaway( newMove ) && !PM_SaberInBrokenParry( newMove ) && !PM_SaberInReflect( newMove ) && !BG_SaberInSpecial(newMove))
|
||||
{//readies, parries and reflections have only 1 level
|
||||
//increment the anim to the next level of saber anims
|
||||
if ( !PM_SaberInTransition( newMove ) )
|
||||
{//FIXME: only have level 1 transitions for now
|
||||
anim += (pm->ps->fd.saberAnimLevel-FORCE_LEVEL_1) * SABER_ANIM_GROUP_SIZE;
|
||||
}
|
||||
}
|
||||
|
||||
// If the move does the same animation as the last one, we need to force a restart...
|
||||
if ( saberMoveData[pm->ps->saberMove].animToUse == anim && newMove > LS_PUTAWAY)
|
||||
|
@ -1739,8 +1964,17 @@ void PM_SetSaberMove(short newMove)
|
|||
setflags |= SETANIM_FLAG_RESTART;
|
||||
}
|
||||
|
||||
//saber torso anims should always be highest priority
|
||||
//saber torso anims should always be highest priority (4/12/02 - for special anims only)
|
||||
if ( newMove == LS_A_LUNGE
|
||||
|| newMove == LS_A_JUMP_T__B_
|
||||
|| newMove == LS_A_BACKSTAB
|
||||
|| newMove == LS_A_BACK
|
||||
|| newMove == LS_A_BACK_CR
|
||||
|| newMove == LS_A_FLIP_STAB
|
||||
|| newMove == LS_A_FLIP_SLASH )
|
||||
{
|
||||
setflags |= SETANIM_FLAG_OVERRIDE;
|
||||
}
|
||||
|
||||
if ( BG_InSaberStandAnim(anim) || anim == BOTH_STAND1 )
|
||||
{
|
||||
|
@ -1779,7 +2013,24 @@ void PM_SetSaberMove(short newMove)
|
|||
{//spins must be played on entire body
|
||||
parts = SETANIM_BOTH;
|
||||
}
|
||||
PM_SetAnim(parts, anim, setflags|SETANIM_FLAG_HOLD, saberMoveData[newMove].blendTime);
|
||||
else if ( (!pm->cmd.forwardmove&&!pm->cmd.rightmove&&!pm->cmd.upmove))
|
||||
{//not trying to run, duck or jump
|
||||
if ( !BG_FlippingAnim( pm->ps->legsAnim ) &&
|
||||
!BG_InRoll( pm->ps, pm->ps->legsAnim ) &&
|
||||
!PM_InKnockDown( pm->ps ) &&
|
||||
!PM_JumpingAnim( pm->ps->legsAnim ) &&
|
||||
!BG_InSpecialJump( pm->ps->legsAnim ) &&
|
||||
anim != PM_GetSaberStance() &&
|
||||
//!PM_CrouchAnim( pm->ps->legsAnim ) &&
|
||||
//pm->cmd.upmove >= 0 &&
|
||||
pm->ps->groundEntityNum != ENTITYNUM_NONE &&
|
||||
!(pm->ps->pm_flags & PMF_DUCKED))
|
||||
{
|
||||
parts = SETANIM_BOTH;
|
||||
}
|
||||
}
|
||||
|
||||
PM_SetAnim(parts, anim, setflags, saberMoveData[newMove].blendTime);
|
||||
|
||||
if ( (pm->ps->torsoAnim&~ANIM_TOGGLEBIT) == anim )
|
||||
{//successfully changed anims
|
||||
|
|
|
@ -153,7 +153,7 @@ weaponData_t weaponData[WP_NUM_WEAPONS] =
|
|||
1, // int energyPerShot; // Amount of energy used per shot
|
||||
100, // int fireTime; // Amount of time between firings
|
||||
8192, // int range; // Range of weapon
|
||||
8, // int altEnergyPerShot; // Amount of energy used for alt-fire
|
||||
25, // int altEnergyPerShot; // Amount of energy used for alt-fire
|
||||
800, // int altFireTime; // Amount of time between alt-firings
|
||||
8192, // int altRange; // Range of alt-fire
|
||||
0, // int chargeSubTime; // ms interval for subtracting ammo during charge
|
||||
|
@ -187,7 +187,7 @@ weaponData_t weaponData[WP_NUM_WEAPONS] =
|
|||
10, // int energyPerShot; // Amount of energy used per shot
|
||||
700, // int fireTime; // Amount of time between firings
|
||||
8192, // int range; // Range of weapon
|
||||
15, // int altEnergyPerShot; // Amount of energy used for alt-fire
|
||||
25, // int altEnergyPerShot; // Amount of energy used for alt-fire
|
||||
800, // int altFireTime; // Amount of time between alt-firings
|
||||
8192, // int altRange; // Range of alt-fire
|
||||
0, // int chargeSubTime; // ms interval for subtracting ammo during charge
|
||||
|
|
|
@ -3,6 +3,10 @@
|
|||
|
||||
#include "g_local.h"
|
||||
|
||||
qboolean PM_SaberInTransition( int move );
|
||||
qboolean PM_SaberInStart( int move );
|
||||
qboolean PM_SaberInReturn( int move );
|
||||
|
||||
void P_SetTwitchInfo(gclient_t *client)
|
||||
{
|
||||
client->ps.painTime = level.time;
|
||||
|
@ -1362,10 +1366,47 @@ void ClientThink_real( gentity_t *ent ) {
|
|||
else
|
||||
{
|
||||
ent->client->ps.saberLockFrame = 0;
|
||||
//check for taunt
|
||||
if ( (pm.cmd.generic_cmd == GENCMD_ENGAGE_DUEL) && (g_gametype.integer == GT_TOURNAMENT) )
|
||||
{//already in a duel, make it a taunt command
|
||||
pm.cmd.buttons |= BUTTON_GESTURE;
|
||||
}
|
||||
}
|
||||
|
||||
Pmove (&pm);
|
||||
|
||||
if (pm.checkDuelLoss)
|
||||
{
|
||||
if (pm.checkDuelLoss > 0 && pm.checkDuelLoss <= MAX_CLIENTS)
|
||||
{
|
||||
gentity_t *clientLost = &g_entities[pm.checkDuelLoss-1];
|
||||
|
||||
if (clientLost && clientLost->inuse && clientLost->client && Q_irand(0, 40) > clientLost->health)
|
||||
{
|
||||
vec3_t attDir;
|
||||
VectorSubtract(ent->client->ps.origin, clientLost->client->ps.origin, attDir);
|
||||
VectorNormalize(attDir);
|
||||
|
||||
VectorClear(clientLost->client->ps.velocity);
|
||||
clientLost->client->ps.forceHandExtend = HANDEXTEND_NONE;
|
||||
clientLost->client->ps.forceHandExtendTime = 0;
|
||||
|
||||
gGAvoidDismember = 1;
|
||||
G_Damage(clientLost, ent, ent, attDir, clientLost->client->ps.origin, 9999, DAMAGE_NO_PROTECTION, MOD_SABER);
|
||||
|
||||
if (clientLost->health < 1)
|
||||
{
|
||||
gGAvoidDismember = 2;
|
||||
G_CheckForDismemberment(clientLost, clientLost->client->ps.origin, 999, (clientLost->client->ps.legsAnim&~ANIM_TOGGLEBIT));
|
||||
}
|
||||
|
||||
gGAvoidDismember = 0;
|
||||
}
|
||||
}
|
||||
|
||||
pm.checkDuelLoss = 0;
|
||||
}
|
||||
|
||||
switch(pm.cmd.generic_cmd)
|
||||
{
|
||||
case 0:
|
||||
|
@ -1374,7 +1415,13 @@ void ClientThink_real( gentity_t *ent ) {
|
|||
Cmd_ToggleSaber_f(ent);
|
||||
break;
|
||||
case GENCMD_ENGAGE_DUEL:
|
||||
if ( g_gametype.integer == GT_TOURNAMENT )
|
||||
{//already in a duel, made it a taunt command
|
||||
}
|
||||
else
|
||||
{
|
||||
Cmd_EngageDuel_f(ent);
|
||||
}
|
||||
break;
|
||||
case GENCMD_FORCE_HEAL:
|
||||
ForceHeal(ent);
|
||||
|
@ -1561,6 +1608,10 @@ void ClientThink_real( gentity_t *ent ) {
|
|||
|
||||
G_Damage( faceKicked, ent, ent, oppDir, client->ps.origin, strength, DAMAGE_NO_ARMOR, MOD_MELEE );
|
||||
|
||||
if ( faceKicked->client->ps.weapon != WP_SABER ||
|
||||
faceKicked->client->ps.fd.saberAnimLevel < FORCE_LEVEL_3 ||
|
||||
(!BG_SaberInAttack(faceKicked->client->ps.saberMove) && !PM_SaberInStart(faceKicked->client->ps.saberMove) && !PM_SaberInReturn(faceKicked->client->ps.saberMove) && !PM_SaberInTransition(faceKicked->client->ps.saberMove)) )
|
||||
{
|
||||
if (faceKicked->health > 0 &&
|
||||
faceKicked->client->ps.stats[STAT_HEALTH] > 0 &&
|
||||
faceKicked->client->ps.forceHandExtend != HANDEXTEND_KNOCKDOWN)
|
||||
|
@ -1580,6 +1631,7 @@ void ClientThink_real( gentity_t *ent ) {
|
|||
faceKicked->client->ps.velocity[1] = oppDir[1]*(strength*40);
|
||||
faceKicked->client->ps.velocity[2] = 200;
|
||||
}
|
||||
}
|
||||
|
||||
G_Sound( faceKicked, CHAN_AUTO, G_SoundIndex( va("sound/weapons/melee/punch%d", Q_irand(1, 4)) ) );
|
||||
}
|
||||
|
|
|
@ -338,7 +338,7 @@ const char *G_GetArenaInfoByMap( const char *map ) {
|
|||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
#if 0
|
||||
/*
|
||||
=================
|
||||
PlayerIntroSound
|
||||
|
@ -363,6 +363,7 @@ static void PlayerIntroSound( const char *modelAndSkin ) {
|
|||
|
||||
trap_SendConsoleCommand( EXEC_APPEND, va( "play sound/player/announce/%s.wav\n", skin ) );
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
===============
|
||||
|
@ -619,7 +620,6 @@ G_CheckBotSpawn
|
|||
*/
|
||||
void G_CheckBotSpawn( void ) {
|
||||
int n;
|
||||
char userinfo[MAX_INFO_VALUE];
|
||||
|
||||
G_CheckMinimumPlayers();
|
||||
|
||||
|
@ -633,10 +633,12 @@ void G_CheckBotSpawn( void ) {
|
|||
ClientBegin( botSpawnQueue[n].clientNum, qfalse );
|
||||
botSpawnQueue[n].spawnTime = 0;
|
||||
|
||||
/*
|
||||
if( g_gametype.integer == GT_SINGLE_PLAYER ) {
|
||||
trap_GetUserinfo( botSpawnQueue[n].clientNum, userinfo, sizeof(userinfo) );
|
||||
PlayerIntroSound( Info_ValueForKey (userinfo, "model") );
|
||||
}
|
||||
*/
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -992,7 +994,7 @@ void Svcmd_BotList_f( void ) {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
#if 0
|
||||
/*
|
||||
===============
|
||||
G_SpawnBots
|
||||
|
@ -1049,6 +1051,7 @@ static void G_SpawnBots( char *botList, int baseDelay ) {
|
|||
delay += BOT_BEGIN_DELAY_INCREMENT;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
|
@ -1165,14 +1168,6 @@ G_InitBots
|
|||
===============
|
||||
*/
|
||||
void G_InitBots( qboolean restart ) {
|
||||
int fragLimit;
|
||||
int timeLimit;
|
||||
const char *arenainfo;
|
||||
char *strValue;
|
||||
int basedelay;
|
||||
char map[MAX_QPATH];
|
||||
char serverinfo[MAX_INFO_STRING];
|
||||
|
||||
G_LoadBots();
|
||||
G_LoadArenas();
|
||||
|
||||
|
@ -1181,46 +1176,4 @@ void G_InitBots( qboolean restart ) {
|
|||
//rww - new bot route stuff
|
||||
LoadPath_ThisLevel();
|
||||
//end rww
|
||||
|
||||
if( g_gametype.integer == GT_SINGLE_PLAYER ) {
|
||||
trap_GetServerinfo( serverinfo, sizeof(serverinfo) );
|
||||
Q_strncpyz( map, Info_ValueForKey( serverinfo, "mapname" ), sizeof(map) );
|
||||
arenainfo = G_GetArenaInfoByMap( map );
|
||||
if ( !arenainfo ) {
|
||||
return;
|
||||
}
|
||||
|
||||
strValue = Info_ValueForKey( arenainfo, "fraglimit" );
|
||||
fragLimit = atoi( strValue );
|
||||
if ( fragLimit ) {
|
||||
trap_Cvar_Set( "fraglimit", strValue );
|
||||
}
|
||||
else {
|
||||
trap_Cvar_Set( "fraglimit", "0" );
|
||||
}
|
||||
|
||||
strValue = Info_ValueForKey( arenainfo, "timelimit" );
|
||||
timeLimit = atoi( strValue );
|
||||
if ( timeLimit ) {
|
||||
trap_Cvar_Set( "timelimit", strValue );
|
||||
}
|
||||
else {
|
||||
trap_Cvar_Set( "timelimit", "0" );
|
||||
}
|
||||
|
||||
if ( !fragLimit && !timeLimit ) {
|
||||
trap_Cvar_Set( "fraglimit", "10" );
|
||||
trap_Cvar_Set( "timelimit", "0" );
|
||||
}
|
||||
|
||||
basedelay = BOT_BEGIN_DELAY_BASE;
|
||||
strValue = Info_ValueForKey( arenainfo, "special" );
|
||||
if( Q_stricmp( strValue, "training" ) == 0 ) {
|
||||
basedelay += 10000;
|
||||
}
|
||||
|
||||
if( !restart ) {
|
||||
G_SpawnBots( Info_ValueForKey( arenainfo, "bots" ), basedelay );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -769,6 +769,15 @@ void respawn( gentity_t *ent ) {
|
|||
|
||||
CopyToBodyQue (ent);
|
||||
|
||||
if (gEscaping)
|
||||
{
|
||||
ent->client->sess.sessionTeam = TEAM_SPECTATOR;
|
||||
ent->client->sess.spectatorState = SPECTATOR_FREE;
|
||||
ent->client->sess.spectatorClient = 0;
|
||||
|
||||
ent->client->pers.teamState.state = TEAM_BEGIN;
|
||||
}
|
||||
|
||||
trap_UnlinkEntity (ent);
|
||||
ClientSpawn(ent);
|
||||
|
||||
|
@ -1268,7 +1277,7 @@ void ClientUserinfoChanged( int clientNum ) {
|
|||
|
||||
trap_SetConfigstring( CS_PLAYERS+clientNum, s );
|
||||
|
||||
G_LogPrintf( "ClientUserinfoChanged: %i %s\n", clientNum, s );
|
||||
//G_LogPrintf( "ClientUserinfoChanged: %i %s\n", clientNum, s );
|
||||
}
|
||||
|
||||
|
||||
|
@ -1315,7 +1324,9 @@ char *ClientConnect( int clientNum, qboolean firstTime, qboolean isBot ) {
|
|||
value = Info_ValueForKey (userinfo, "password");
|
||||
if ( g_password.string[0] && Q_stricmp( g_password.string, "none" ) &&
|
||||
strcmp( g_password.string, value) != 0) {
|
||||
return "Invalid password";
|
||||
static char sTemp[1024];
|
||||
Q_strncpyz(sTemp, G_GetStripEdString("SVINGAME","INVALID_PASSWORD"), sizeof (sTemp) );
|
||||
return sTemp;// return "Invalid password";
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1524,6 +1535,26 @@ void ClientBegin( int clientNum, qboolean allowTeamReset ) {
|
|||
G_ClearClientLog(clientNum);
|
||||
}
|
||||
|
||||
static qboolean AllForceDisabled(int force)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (force)
|
||||
{
|
||||
for (i=0;i<NUM_FORCE_POWERS;i++)
|
||||
{
|
||||
if (!(force & (1<<i)))
|
||||
{
|
||||
return qfalse;
|
||||
}
|
||||
}
|
||||
|
||||
return qtrue;
|
||||
}
|
||||
|
||||
return qfalse;
|
||||
}
|
||||
|
||||
/*
|
||||
===========
|
||||
ClientSpawn
|
||||
|
@ -1533,6 +1564,7 @@ after the first ClientBegin, and after each respawn
|
|||
Initializes all non-persistant parts of playerState
|
||||
============
|
||||
*/
|
||||
extern qboolean WP_HasForcePowers( const playerState_t *ps );
|
||||
void ClientSpawn(gentity_t *ent) {
|
||||
int index;
|
||||
vec3_t spawn_origin, spawn_angles;
|
||||
|
@ -1693,6 +1725,46 @@ void ClientSpawn(gentity_t *ent) {
|
|||
//give default weapons
|
||||
client->ps.stats[STAT_WEAPONS] = ( 1 << WP_NONE );
|
||||
|
||||
if (g_gametype.integer == GT_TOURNAMENT)
|
||||
{
|
||||
wDisable = g_duelWeaponDisable.integer;
|
||||
}
|
||||
else
|
||||
{
|
||||
wDisable = g_weaponDisable.integer;
|
||||
}
|
||||
|
||||
|
||||
|
||||
if ( g_gametype.integer != GT_HOLOCRON
|
||||
&& g_gametype.integer != GT_JEDIMASTER
|
||||
&& !HasSetSaberOnly()
|
||||
&& !AllForceDisabled( g_forcePowerDisable.integer )
|
||||
&& g_trueJedi.integer )
|
||||
{
|
||||
if ( WP_HasForcePowers( &client->ps ) )
|
||||
{
|
||||
client->ps.trueNonJedi = qfalse;
|
||||
client->ps.trueJedi = qtrue;
|
||||
//make sure they only use the saber
|
||||
client->ps.weapon = WP_SABER;
|
||||
client->ps.stats[STAT_WEAPONS] = (1 << WP_SABER);
|
||||
}
|
||||
else
|
||||
{//no force powers set
|
||||
client->ps.trueNonJedi = qtrue;
|
||||
client->ps.trueJedi = qfalse;
|
||||
if (!wDisable || !(wDisable & (1 << WP_BRYAR_PISTOL)))
|
||||
{
|
||||
client->ps.stats[STAT_WEAPONS] |= ( 1 << WP_BRYAR_PISTOL );
|
||||
}
|
||||
client->ps.stats[STAT_WEAPONS] &= ~(1 << WP_SABER);
|
||||
client->ps.stats[STAT_WEAPONS] |= (1 << WP_STUN_BATON);
|
||||
client->ps.weapon = WP_BRYAR_PISTOL;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (g_gametype.integer == GT_HOLOCRON)
|
||||
{
|
||||
//always get free saber level 1 in holocron
|
||||
|
@ -1710,15 +1782,6 @@ void ClientSpawn(gentity_t *ent) {
|
|||
}
|
||||
}
|
||||
|
||||
if (g_gametype.integer == GT_TOURNAMENT)
|
||||
{
|
||||
wDisable = g_duelWeaponDisable.integer;
|
||||
}
|
||||
else
|
||||
{
|
||||
wDisable = g_weaponDisable.integer;
|
||||
}
|
||||
|
||||
if (!wDisable || !(wDisable & (1 << WP_BRYAR_PISTOL)))
|
||||
{
|
||||
client->ps.stats[STAT_WEAPONS] |= ( 1 << WP_BRYAR_PISTOL );
|
||||
|
@ -1746,6 +1809,7 @@ void ClientSpawn(gentity_t *ent) {
|
|||
{
|
||||
client->ps.weapon = WP_STUN_BATON;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
client->ps.stats[STAT_HOLDABLE_ITEMS] |= ( 1 << HI_BINOCULARS );
|
||||
|
@ -1950,13 +2014,21 @@ void ClientDisconnect( int clientNum ) {
|
|||
|
||||
G_LogPrintf( "ClientDisconnect: %i\n", clientNum );
|
||||
|
||||
// if we are playing in tourney mode and losing, give a win to the other player
|
||||
// if we are playing in tourney mode, give a win to the other player and clear his frags for this round
|
||||
if ( (g_gametype.integer == GT_TOURNAMENT )
|
||||
&& !level.intermissiontime
|
||||
&& !level.warmupTime && level.sortedClients[1] == clientNum ) {
|
||||
&& !level.warmupTime ) {
|
||||
if ( level.sortedClients[1] == clientNum ) {
|
||||
level.clients[ level.sortedClients[0] ].ps.persistant[PERS_SCORE] = 0;
|
||||
level.clients[ level.sortedClients[0] ].sess.wins++;
|
||||
ClientUserinfoChanged( level.sortedClients[0] );
|
||||
}
|
||||
else if ( level.sortedClients[0] == clientNum ) {
|
||||
level.clients[ level.sortedClients[1] ].ps.persistant[PERS_SCORE] = 0;
|
||||
level.clients[ level.sortedClients[1] ].sess.wins++;
|
||||
ClientUserinfoChanged( level.sortedClients[1] );
|
||||
}
|
||||
}
|
||||
|
||||
trap_UnlinkEntity (ent);
|
||||
ent->s.modelindex = 0;
|
||||
|
|
|
@ -748,8 +748,10 @@ void SetTeam( gentity_t *ent, char *s ) {
|
|||
}
|
||||
// they go to the end of the line for tournements
|
||||
if ( team == TEAM_SPECTATOR ) {
|
||||
if ( (g_gametype.integer != GT_TOURNAMENT) || (oldTeam != TEAM_SPECTATOR) ) {//so you don't get dropped to the bottom of the queue for changing skins, etc.
|
||||
client->sess.spectatorTime = level.time;
|
||||
}
|
||||
}
|
||||
|
||||
client->sess.sessionTeam = team;
|
||||
client->sess.spectatorState = specState;
|
||||
|
@ -827,10 +829,19 @@ void Cmd_Team_f( gentity_t *ent ) {
|
|||
return;
|
||||
}
|
||||
|
||||
if (gEscaping)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// if they are playing a tournement game, count as a loss
|
||||
if ( (g_gametype.integer == GT_TOURNAMENT )
|
||||
&& ent->client->sess.sessionTeam == TEAM_FREE ) {
|
||||
ent->client->sess.losses++;
|
||||
&& ent->client->sess.sessionTeam == TEAM_FREE ) {//in a tournament game
|
||||
//disallow changing teams
|
||||
trap_SendServerCommand( ent-g_entities, "print \"Cannot switch teams in Duel\n\"" );
|
||||
return;
|
||||
//FIXME: why should this be a loss???
|
||||
//ent->client->sess.losses++;
|
||||
}
|
||||
|
||||
trap_Argv( 1, s, sizeof( s ) );
|
||||
|
@ -862,10 +873,15 @@ void Cmd_ForceChanged_f( gentity_t *ent )
|
|||
|
||||
strcpy(fpChStr, buf);
|
||||
|
||||
trap_SendServerCommand( ent-g_entities, va("print \"%s%s\n\"", S_COLOR_GREEN, fpChStr) );
|
||||
trap_SendServerCommand( ent-g_entities, va("print \"%s%s\n\n\"", S_COLOR_GREEN, fpChStr) );
|
||||
|
||||
ent->client->ps.fd.forceDoInit = 1;
|
||||
argCheck:
|
||||
if (g_gametype.integer == GT_TOURNAMENT)
|
||||
{ //If this is duel, don't even bother changing team in relation to this.
|
||||
return;
|
||||
}
|
||||
|
||||
if (trap_Argc() > 1)
|
||||
{
|
||||
char arg[MAX_TOKEN_CHARS];
|
||||
|
@ -914,6 +930,7 @@ void Cmd_Follow_f( gentity_t *ent ) {
|
|||
// if they are playing a tournement game, count as a loss
|
||||
if ( (g_gametype.integer == GT_TOURNAMENT )
|
||||
&& ent->client->sess.sessionTeam == TEAM_FREE ) {
|
||||
//WTF???
|
||||
ent->client->sess.losses++;
|
||||
}
|
||||
|
||||
|
@ -937,7 +954,8 @@ void Cmd_FollowCycle_f( gentity_t *ent, int dir ) {
|
|||
|
||||
// if they are playing a tournement game, count as a loss
|
||||
if ( (g_gametype.integer == GT_TOURNAMENT )
|
||||
&& ent->client->sess.sessionTeam == TEAM_FREE ) {
|
||||
&& ent->client->sess.sessionTeam == TEAM_FREE ) {\
|
||||
//WTF???
|
||||
ent->client->sess.losses++;
|
||||
}
|
||||
// first set them to spectator
|
||||
|
@ -1006,6 +1024,7 @@ static void G_SayTo( gentity_t *ent, gentity_t *other, int mode, int color, cons
|
|||
if ( (g_gametype.integer == GT_TOURNAMENT )
|
||||
&& other->client->sess.sessionTeam == TEAM_FREE
|
||||
&& ent->client->sess.sessionTeam != TEAM_FREE ) {
|
||||
//Hmm, maybe some option to do so if allowed? Or at least in developer mode...
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1925,6 +1944,11 @@ void Cmd_ToggleSaber_f(gentity_t *ent)
|
|||
return;
|
||||
}
|
||||
|
||||
if (ent->client->ps.saberLockTime >= level.time)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (ent->client && ent->client->ps.weaponTime < 1)
|
||||
{
|
||||
if (ent->client->ps.saberHolstered)
|
||||
|
@ -2150,6 +2174,93 @@ void Cmd_EngageDuel_f(gentity_t *ent)
|
|||
}
|
||||
}
|
||||
|
||||
#ifdef _DEBUG
|
||||
extern stringID_table_t animTable[MAX_ANIMATIONS+1];
|
||||
void PM_SetAnim(int setAnimParts,int anim,int setAnimFlags, int blendTime);
|
||||
|
||||
void Cmd_DebugSetSaberMove_f(gentity_t *self)
|
||||
{
|
||||
int argNum = trap_Argc();
|
||||
char arg[MAX_STRING_CHARS];
|
||||
|
||||
if (argNum < 2)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
trap_Argv( 1, arg, sizeof( arg ) );
|
||||
|
||||
if (!arg[0])
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
self->client->ps.saberMove = atoi(arg);
|
||||
self->client->ps.saberBlocked = BLOCKED_BOUNCE_MOVE;
|
||||
|
||||
if (self->client->ps.saberMove >= LS_MOVE_MAX)
|
||||
{
|
||||
self->client->ps.saberMove = LS_MOVE_MAX-1;
|
||||
}
|
||||
|
||||
Com_Printf("Anim for move: %s\n", animTable[saberMoveData[self->client->ps.saberMove].animToUse].name);
|
||||
}
|
||||
|
||||
void Cmd_DebugSetBodyAnim_f(gentity_t *self)
|
||||
{
|
||||
int argNum = trap_Argc();
|
||||
char arg[MAX_STRING_CHARS];
|
||||
int i = 0;
|
||||
pmove_t pmv;
|
||||
|
||||
if (argNum < 2)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
trap_Argv( 1, arg, sizeof( arg ) );
|
||||
|
||||
if (!arg[0])
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
while (i < MAX_ANIMATIONS)
|
||||
{
|
||||
if (!Q_stricmp(arg, animTable[i].name))
|
||||
{
|
||||
break;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
|
||||
if (i == MAX_ANIMATIONS)
|
||||
{
|
||||
Com_Printf("Animation '%s' does not exist\n", arg);
|
||||
return;
|
||||
}
|
||||
|
||||
memset (&pmv, 0, sizeof(pmv));
|
||||
pmv.ps = &self->client->ps;
|
||||
pmv.animations = bgGlobalAnimations;
|
||||
pmv.cmd = self->client->pers.cmd;
|
||||
pmv.trace = trap_Trace;
|
||||
pmv.pointcontents = trap_PointContents;
|
||||
pmv.gametype = g_gametype.integer;
|
||||
|
||||
pm = &pmv;
|
||||
PM_SetAnim(SETANIM_BOTH, i, SETANIM_FLAG_OVERRIDE|SETANIM_FLAG_HOLD, 0);
|
||||
|
||||
Com_Printf("Set body anim to %s\n", arg);
|
||||
}
|
||||
#endif
|
||||
|
||||
void DismembermentTest(gentity_t *self);
|
||||
|
||||
#ifdef _DEBUG
|
||||
void DismembermentByNum(gentity_t *self, int num);
|
||||
#endif
|
||||
|
||||
/*
|
||||
=================
|
||||
ClientCommand
|
||||
|
@ -2359,10 +2470,29 @@ void ClientCommand( int clientNum ) {
|
|||
Cmd_SetViewpos_f( ent );
|
||||
else if (Q_stricmp (cmd, "stats") == 0)
|
||||
Cmd_Stats_f( ent );
|
||||
/*
|
||||
else if (Q_stricmp(cmd, "#mm") == 0 && CheatsOk( ent ))
|
||||
{
|
||||
G_PlayerBecomeATST(ent);
|
||||
}
|
||||
*/
|
||||
//I broke the ATST when I restructured it to use a single global anim set for all client animation.
|
||||
//You can fix it, but you'll have to implement unique animations (per character) again.
|
||||
else if (Q_stricmp(cmd, "headexplodey") == 0 && CheatsOk( ent ))
|
||||
{
|
||||
Cmd_Kill_f (ent);
|
||||
if (ent->health < 1)
|
||||
{
|
||||
float presaveVel = ent->client->ps.velocity[2];
|
||||
ent->client->ps.velocity[2] = 500;
|
||||
DismembermentTest(ent);
|
||||
ent->client->ps.velocity[2] = presaveVel;
|
||||
}
|
||||
}
|
||||
else if (Q_stricmp(cmd, "g2animent") == 0 && CheatsOk( ent ))
|
||||
{
|
||||
G_CreateExampleAnimEnt(ent);
|
||||
}
|
||||
else if (Q_stricmp(cmd, "thedestroyer") == 0 && CheatsOk( ent ) && ent && ent->client && ent->client->ps.saberHolstered && ent->client->ps.weapon == WP_SABER)
|
||||
{
|
||||
Cmd_ToggleSaber_f(ent);
|
||||
|
@ -2385,39 +2515,43 @@ void ClientCommand( int clientNum ) {
|
|||
}
|
||||
}
|
||||
#ifdef _DEBUG
|
||||
else if (Q_stricmp(cmd, "gotocoord") == 0 && CheatsOk( ent ))
|
||||
else if (Q_stricmp(cmd, "debugSetSaberMove") == 0)
|
||||
{
|
||||
char x[64], y[64], z[64];
|
||||
vec3_t xyz;
|
||||
Cmd_DebugSetSaberMove_f(ent);
|
||||
}
|
||||
else if (Q_stricmp(cmd, "debugSetBodyAnim") == 0)
|
||||
{
|
||||
Cmd_DebugSetBodyAnim_f(ent);
|
||||
}
|
||||
else if (Q_stricmp(cmd, "debugDismemberment") == 0)
|
||||
{
|
||||
Cmd_Kill_f (ent);
|
||||
if (ent->health < 1)
|
||||
{
|
||||
char arg[MAX_STRING_CHARS];
|
||||
int iArg = 0;
|
||||
|
||||
if (trap_Argc() < 3)
|
||||
if (trap_Argc() > 1)
|
||||
{
|
||||
return;
|
||||
trap_Argv( 1, arg, sizeof( arg ) );
|
||||
|
||||
if (arg[0])
|
||||
{
|
||||
iArg = atoi(arg);
|
||||
}
|
||||
}
|
||||
|
||||
trap_Argv( 1, x, sizeof( x ) );
|
||||
trap_Argv( 2, y, sizeof( y ) );
|
||||
trap_Argv( 3, z, sizeof( z ) );
|
||||
|
||||
xyz[0] = atof(x);
|
||||
xyz[1] = atof(y);
|
||||
xyz[2] = atof(z);
|
||||
|
||||
VectorCopy(xyz, ent->client->ps.origin);
|
||||
DismembermentByNum(ent, iArg);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
else if (Q_stricmp (cmd, "offwithmyhead") == 0)
|
||||
{
|
||||
DismembermentTest(ent);
|
||||
}
|
||||
*/
|
||||
else
|
||||
{
|
||||
if (Q_stricmp(cmd, "addbot") == 0)
|
||||
{ //because addbot isn't a recognized command unless you're the server, but it is in the menus regardless
|
||||
trap_SendServerCommand( clientNum, va("print \"You can only add bots as the server.\n\"" ) );
|
||||
// trap_SendServerCommand( clientNum, va("print \"You can only add bots as the server.\n\"" ) );
|
||||
trap_SendServerCommand( clientNum, va("print \"%s.\n\"", G_GetStripEdString("SVINGAME", "ONLY_ADD_BOTS_AS_SERVER")));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -890,24 +890,60 @@ void CheckAlmostCapture( gentity_t *self, gentity_t *attacker ) {
|
|||
#endif
|
||||
}
|
||||
|
||||
static int G_PickDeathAnim( gentity_t *self, vec3_t point, int damage, int mod, int hitLoc )
|
||||
int G_PickDeathAnim( gentity_t *self, vec3_t point, int damage, int mod, int hitLoc )
|
||||
{//FIXME: play dead flop anims on body if in an appropriate _DEAD anim when this func is called
|
||||
int deathAnim = -1;
|
||||
int max_health;
|
||||
int legAnim = 0;
|
||||
vec3_t objVelocity;
|
||||
|
||||
if (!self || !self->client)
|
||||
{
|
||||
if (!self || self->s.eType != ET_GRAPPLE)
|
||||
{ //g2animent
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (self->client)
|
||||
{
|
||||
max_health = self->client->ps.stats[STAT_MAX_HEALTH];
|
||||
}
|
||||
else
|
||||
{
|
||||
max_health = 60;
|
||||
}
|
||||
|
||||
if (self->client)
|
||||
{
|
||||
VectorCopy(self->client->ps.velocity, objVelocity);
|
||||
}
|
||||
else
|
||||
{
|
||||
VectorCopy(self->s.pos.trDelta, objVelocity);
|
||||
}
|
||||
|
||||
if ( hitLoc == HL_NONE )
|
||||
{
|
||||
hitLoc = G_GetHitLocation( self, point );//self->hitLoc
|
||||
}
|
||||
|
||||
if (self->client)
|
||||
{
|
||||
legAnim = self->client->ps.legsAnim;
|
||||
}
|
||||
else
|
||||
{
|
||||
legAnim = self->s.legsAnim;
|
||||
}
|
||||
|
||||
if (gGAvoidDismember)
|
||||
{
|
||||
return BOTH_RIGHTHANDCHOPPEDOFF;
|
||||
}
|
||||
|
||||
//dead flops
|
||||
switch( self->client->ps.legsAnim&~ANIM_TOGGLEBIT )
|
||||
switch( legAnim&~ANIM_TOGGLEBIT )
|
||||
{
|
||||
case BOTH_DEATH1: //# First Death anim
|
||||
case BOTH_DEAD1:
|
||||
|
@ -1051,7 +1087,7 @@ static int G_PickDeathAnim( gentity_t *self, vec3_t point, int damage, int mod,
|
|||
}
|
||||
break;
|
||||
case HL_BACK:
|
||||
if ( !VectorLengthSquared( self->client->ps.velocity ) )
|
||||
if ( !VectorLengthSquared( objVelocity ) )
|
||||
{
|
||||
deathAnim = BOTH_DEATH17;//head/back: croak
|
||||
}
|
||||
|
@ -1155,7 +1191,7 @@ static int G_PickDeathAnim( gentity_t *self, vec3_t point, int damage, int mod,
|
|||
break;
|
||||
case HL_CHEST:
|
||||
case HL_WAIST:
|
||||
if ( damage <= max_health*0.25 || !VectorLengthSquared( self->client->ps.velocity ) )
|
||||
if ( damage <= max_health*0.25 || !VectorLengthSquared( objVelocity ) )
|
||||
{
|
||||
if ( !Q_irand( 0, 1 ) )
|
||||
{
|
||||
|
@ -1203,8 +1239,6 @@ static int G_PickDeathAnim( gentity_t *self, vec3_t point, int damage, int mod,
|
|||
return deathAnim;
|
||||
}
|
||||
|
||||
void G_CheckForDismemberment(gentity_t *ent, vec3_t point, int damage, int deathAnim);
|
||||
|
||||
gentity_t *G_GetJediMaster(void)
|
||||
{
|
||||
int i = 0;
|
||||
|
@ -1230,6 +1264,7 @@ gentity_t *G_GetJediMaster(void)
|
|||
player_die
|
||||
==================
|
||||
*/
|
||||
extern stringID_table_t animTable[MAX_ANIMATIONS+1];
|
||||
void player_die( gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int damage, int meansOfDeath ) {
|
||||
gentity_t *ent;
|
||||
int anim;
|
||||
|
@ -1305,6 +1340,25 @@ void player_die( gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int
|
|||
killer, self->s.number, meansOfDeath, killerName,
|
||||
self->client->pers.netname, obit );
|
||||
|
||||
if ( g_austrian.integer
|
||||
&& g_gametype.integer == GT_TOURNAMENT
|
||||
&& level.numPlayingClients >= 2 )
|
||||
{
|
||||
int spawnTime = (level.clients[level.sortedClients[0]].respawnTime > level.clients[level.sortedClients[1]].respawnTime) ? level.clients[level.sortedClients[0]].respawnTime : level.clients[level.sortedClients[1]].respawnTime;
|
||||
G_LogPrintf("Duel Kill Details:\n");
|
||||
G_LogPrintf("Kill Time: %d\n", level.time-spawnTime );
|
||||
G_LogPrintf("victim: %s, hits on enemy %d\n", self->client->pers.netname, self->client->ps.persistant[PERS_HITS] );
|
||||
if ( attacker && attacker->client )
|
||||
{
|
||||
G_LogPrintf("killer: %s, hits on enemy %d, health: %d\n", attacker->client->pers.netname, attacker->client->ps.persistant[PERS_HITS], attacker->health );
|
||||
//also - if MOD_SABER, list the animation and saber style
|
||||
if ( meansOfDeath == MOD_SABER )
|
||||
{
|
||||
G_LogPrintf("killer saber style: %d, killer saber anim %s\n", attacker->client->ps.fd.saberAnimLevel, animTable[(attacker->client->ps.torsoAnim&~ANIM_TOGGLEBIT)].name );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
G_LogWeaponKill(killer, meansOfDeath);
|
||||
G_LogWeaponDeath(self->s.number, self->s.weapon);
|
||||
if (attacker && attacker->client && attacker->inuse)
|
||||
|
@ -1807,8 +1861,108 @@ void LimbThink( gentity_t *ent )
|
|||
G_RunObject(ent);
|
||||
}
|
||||
|
||||
|
||||
char *hitLocName[HL_MAX] =
|
||||
{
|
||||
"none", //HL_NONE = 0,
|
||||
"right foot", //HL_FOOT_RT,
|
||||
"left foot", //HL_FOOT_LT,
|
||||
"right leg", //HL_LEG_RT,
|
||||
"left leg", //HL_LEG_LT,
|
||||
"waist", //HL_WAIST,
|
||||
"back right shoulder", //HL_BACK_RT,
|
||||
"back left shoulder", //HL_BACK_LT,
|
||||
"back", //HL_BACK,
|
||||
"front right shouler", //HL_CHEST_RT,
|
||||
"front left shoulder", //HL_CHEST_LT,
|
||||
"chest", //HL_CHEST,
|
||||
"right arm", //HL_ARM_RT,
|
||||
"left arm", //HL_ARM_LT,
|
||||
"right hand", //HL_HAND_RT,
|
||||
"left hand", //HL_HAND_LT,
|
||||
"head", //HL_HEAD
|
||||
"generic1", //HL_GENERIC1,
|
||||
"generic2", //HL_GENERIC2,
|
||||
"generic3", //HL_GENERIC3,
|
||||
"generic4", //HL_GENERIC4,
|
||||
"generic5", //HL_GENERIC5,
|
||||
"generic6" //HL_GENERIC6
|
||||
};
|
||||
|
||||
void G_G2PlayerAngles( gentity_t *ent, vec3_t legs[3], vec3_t legsAngles);
|
||||
|
||||
void G_GetDismemberLoc(gentity_t *self, vec3_t boltPoint, int limbType)
|
||||
{ //Just get the general area without using server-side ghoul2
|
||||
vec3_t fwd, right, up;
|
||||
|
||||
AngleVectors(self->r.currentAngles, fwd, right, up);
|
||||
|
||||
VectorCopy(self->r.currentOrigin, boltPoint);
|
||||
|
||||
switch (limbType)
|
||||
{
|
||||
case G2_MODELPART_HEAD:
|
||||
boltPoint[0] += up[0]*24;
|
||||
boltPoint[1] += up[1]*24;
|
||||
boltPoint[2] += up[2]*24;
|
||||
break;
|
||||
case G2_MODELPART_WAIST:
|
||||
boltPoint[0] += up[0]*4;
|
||||
boltPoint[1] += up[1]*4;
|
||||
boltPoint[2] += up[2]*4;
|
||||
break;
|
||||
case G2_MODELPART_LARM:
|
||||
boltPoint[0] += up[0]*18;
|
||||
boltPoint[1] += up[1]*18;
|
||||
boltPoint[2] += up[2]*18;
|
||||
|
||||
boltPoint[0] -= right[0]*10;
|
||||
boltPoint[1] -= right[1]*10;
|
||||
boltPoint[2] -= right[2]*10;
|
||||
break;
|
||||
case G2_MODELPART_RARM:
|
||||
boltPoint[0] += up[0]*18;
|
||||
boltPoint[1] += up[1]*18;
|
||||
boltPoint[2] += up[2]*18;
|
||||
|
||||
boltPoint[0] += right[0]*10;
|
||||
boltPoint[1] += right[1]*10;
|
||||
boltPoint[2] += right[2]*10;
|
||||
break;
|
||||
case G2_MODELPART_RHAND:
|
||||
boltPoint[0] += up[0]*8;
|
||||
boltPoint[1] += up[1]*8;
|
||||
boltPoint[2] += up[2]*8;
|
||||
|
||||
boltPoint[0] += right[0]*10;
|
||||
boltPoint[1] += right[1]*10;
|
||||
boltPoint[2] += right[2]*10;
|
||||
break;
|
||||
case G2_MODELPART_LLEG:
|
||||
boltPoint[0] -= up[0]*4;
|
||||
boltPoint[1] -= up[1]*4;
|
||||
boltPoint[2] -= up[2]*4;
|
||||
|
||||
boltPoint[0] -= right[0]*10;
|
||||
boltPoint[1] -= right[1]*10;
|
||||
boltPoint[2] -= right[2]*10;
|
||||
break;
|
||||
case G2_MODELPART_RLEG:
|
||||
boltPoint[0] -= up[0]*4;
|
||||
boltPoint[1] -= up[1]*4;
|
||||
boltPoint[2] -= up[2]*4;
|
||||
|
||||
boltPoint[0] += right[0]*10;
|
||||
boltPoint[1] += right[1]*10;
|
||||
boltPoint[2] += right[2]*10;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
void G_GetDismemberBolt(gentity_t *self, vec3_t boltPoint, int limbType)
|
||||
{
|
||||
int useBolt = self->bolt_Head;
|
||||
|
@ -1831,6 +1985,9 @@ void G_GetDismemberBolt(gentity_t *self, vec3_t boltPoint, int limbType)
|
|||
case G2_MODELPART_RARM:
|
||||
useBolt = self->bolt_RArm;
|
||||
break;
|
||||
case G2_MODELPART_RHAND:
|
||||
useBolt = trap_G2API_AddBolt(self->client->ghoul2, 0, "rhand");
|
||||
break;
|
||||
case G2_MODELPART_LLEG:
|
||||
useBolt = self->bolt_LLeg;
|
||||
break;
|
||||
|
@ -1892,6 +2049,30 @@ void G_GetDismemberBolt(gentity_t *self, vec3_t boltPoint, int limbType)
|
|||
boltPoint[0] = boltMatrix.matrix[0][3];
|
||||
boltPoint[1] = boltMatrix.matrix[1][3];
|
||||
boltPoint[2] = boltMatrix.matrix[2][3];
|
||||
|
||||
trap_G2API_GetBoltMatrix(self->client->ghoul2, 1, 0, &boltMatrix, properAngles, properOrigin, level.time, NULL, vec3_origin);
|
||||
|
||||
if (self->client && limbType == G2_MODELPART_RHAND)
|
||||
{ //Make some saber hit sparks over the severed wrist area
|
||||
vec3_t boltAngles;
|
||||
gentity_t *te;
|
||||
|
||||
boltAngles[0] = -boltMatrix.matrix[0][1];
|
||||
boltAngles[1] = -boltMatrix.matrix[1][1];
|
||||
boltAngles[2] = -boltMatrix.matrix[2][1];
|
||||
|
||||
te = G_TempEntity( boltPoint, EV_SABER_HIT );
|
||||
|
||||
VectorCopy(boltPoint, te->s.origin);
|
||||
VectorCopy(boltAngles, te->s.angles);
|
||||
|
||||
if (!te->s.angles[0] && !te->s.angles[1] && !te->s.angles[2])
|
||||
{ //don't let it play with no direction
|
||||
te->s.angles[1] = 1;
|
||||
}
|
||||
|
||||
te->s.eventParm = 16; //lots of sparks
|
||||
}
|
||||
}
|
||||
|
||||
void G_Dismember( gentity_t *ent, vec3_t point, int limbType, float limbRollBase, float limbPitchBase, int deathAnim )
|
||||
|
@ -1913,8 +2094,8 @@ void G_Dismember( gentity_t *ent, vec3_t point, int limbType, float limbRollBase
|
|||
limb->r.svFlags = SVF_USE_CURRENT_ORIGIN;
|
||||
limb->clipmask = MASK_SOLID;
|
||||
limb->r.contents = CONTENTS_TRIGGER;
|
||||
VectorSet( limb->r.mins, -3.0f, -3.0f, -3.0f );
|
||||
VectorSet( limb->r.maxs, 3.0f, 3.0f, 3.0f );
|
||||
VectorSet( limb->r.mins, -6.0f, -6.0f, -9.0f );
|
||||
VectorSet( limb->r.maxs, 6.0f, 6.0f, 6.0f );
|
||||
// VectorClear(limb->r.mins);
|
||||
// VectorClear(limb->r.maxs);
|
||||
|
||||
|
@ -1934,20 +2115,45 @@ void G_Dismember( gentity_t *ent, vec3_t point, int limbType, float limbRollBase
|
|||
limb->s.pos.trTime = level.time; // move a bit on the very first frame
|
||||
VectorSubtract( point, ent->r.currentOrigin, dir );
|
||||
VectorNormalize( dir );
|
||||
if (ent->client)
|
||||
{
|
||||
VectorCopy(ent->client->ps.velocity, vel);
|
||||
}
|
||||
else
|
||||
{
|
||||
VectorCopy(ent->s.pos.trDelta, vel);
|
||||
}
|
||||
VectorMA( vel, 100, dir, limb->s.pos.trDelta );
|
||||
|
||||
//add some vertical velocity
|
||||
if (limbType == G2_MODELPART_HEAD ||
|
||||
limbType == G2_MODELPART_WAIST)
|
||||
{
|
||||
limb->s.pos.trDelta[2] += 100;
|
||||
}
|
||||
|
||||
//make it bounce some
|
||||
limb->s.eFlags |= EF_BOUNCE_HALF;
|
||||
//no trDuration?
|
||||
//spin it
|
||||
VectorClear( limb->s.apos.trBase );
|
||||
/*
|
||||
limb->s.apos.trBase[0] = limbPitchBase;
|
||||
limb->s.apos.trBase[1] = ent->client->ps.viewangles[1];
|
||||
limb->s.apos.trBase[2] = limbRollBase;
|
||||
*/
|
||||
if (ent->client)
|
||||
{
|
||||
limb->s.apos.trBase[1] = ent->client->ps.viewangles[1];
|
||||
}
|
||||
else
|
||||
{
|
||||
limb->s.apos.trBase[1] = ent->r.currentAngles[1];
|
||||
}
|
||||
|
||||
VectorClear( limb->s.apos.trDelta );
|
||||
|
||||
/*
|
||||
limb->s.apos.trDelta[0] = Q_irand( -300, 300 );
|
||||
limb->s.apos.trDelta[2] = Q_irand( -300, 300 );
|
||||
limb->s.apos.trDelta[1] = Q_irand( -300, 300 );
|
||||
|
@ -1958,34 +2164,71 @@ void G_Dismember( gentity_t *ent, vec3_t point, int limbType, float limbRollBase
|
|||
limb->s.apos.trDelta[2] = Q_irand( -60, 60 );
|
||||
limb->s.apos.trDelta[1] = Q_irand( -60, 60 );
|
||||
}
|
||||
*/
|
||||
VectorClear(limb->s.apos.trDelta);
|
||||
|
||||
limb->s.apos.trTime = level.time;
|
||||
limb->s.apos.trType = TR_LINEAR;
|
||||
|
||||
limb->s.modelGhoul2 = limbType;
|
||||
limb->s.g2radius = 200;
|
||||
if (ent->client)
|
||||
{
|
||||
limb->s.modelindex = ent->s.number;
|
||||
limb->s.modelindex2 = deathAnim;
|
||||
}
|
||||
else
|
||||
{
|
||||
limb->s.modelindex = -1;
|
||||
limb->s.modelindex2 = ent->s.number;
|
||||
}
|
||||
|
||||
trap_LinkEntity( limb );
|
||||
}
|
||||
|
||||
/*
|
||||
void DismembermentTest(gentity_t *self)
|
||||
{
|
||||
int sect = G2_MODELPART_HEAD;
|
||||
vec3_t boltPoint;
|
||||
char *sectc = ConcatArgs( 1 );
|
||||
G_GetDismemberBolt(self, boltPoint, sect);
|
||||
G_Dismember( self, boltPoint, sect, 90, 0, BOTH_DEATH1 );
|
||||
}
|
||||
|
||||
if (sectc && sectc[0])
|
||||
void DismembermentByNum(gentity_t *self, int num)
|
||||
{
|
||||
int sect = G2_MODELPART_HEAD;
|
||||
vec3_t boltPoint;
|
||||
|
||||
switch (num)
|
||||
{
|
||||
sect = atoi(sectc)+G2_MODELPART_HEAD;
|
||||
case 0:
|
||||
sect = G2_MODELPART_HEAD;
|
||||
break;
|
||||
case 1:
|
||||
sect = G2_MODELPART_WAIST;
|
||||
break;
|
||||
case 2:
|
||||
sect = G2_MODELPART_LARM;
|
||||
break;
|
||||
case 3:
|
||||
sect = G2_MODELPART_RARM;
|
||||
break;
|
||||
case 4:
|
||||
sect = G2_MODELPART_RHAND;
|
||||
break;
|
||||
case 5:
|
||||
sect = G2_MODELPART_LLEG;
|
||||
break;
|
||||
case 6:
|
||||
sect = G2_MODELPART_RLEG;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
G_GetDismemberBolt(self, boltPoint, sect);
|
||||
G_Dismember( self, boltPoint, sect, 90, 0 );
|
||||
G_Dismember( self, boltPoint, sect, 90, 0, BOTH_DEATH1 );
|
||||
}
|
||||
*/
|
||||
|
||||
int G_GetHitQuad( gentity_t *self, vec3_t hitloc )
|
||||
{
|
||||
|
@ -1995,14 +2238,29 @@ int G_GetHitQuad( gentity_t *self, vec3_t hitloc )
|
|||
float zdiff;
|
||||
int hitLoc = -1;
|
||||
|
||||
if (self->client)
|
||||
{
|
||||
VectorCopy(self->client->ps.origin, clEye);
|
||||
clEye[2] += self->client->ps.viewheight;
|
||||
}
|
||||
else
|
||||
{
|
||||
VectorCopy(self->s.pos.trBase, clEye);
|
||||
clEye[2] += 16;
|
||||
}
|
||||
|
||||
VectorSubtract( hitloc, clEye, diff );
|
||||
diff[2] = 0;
|
||||
VectorNormalize( diff );
|
||||
|
||||
if (self->client)
|
||||
{
|
||||
fwdangles[1] = self->client->ps.viewangles[1];
|
||||
}
|
||||
else
|
||||
{
|
||||
fwdangles[1] = self->s.apos.trBase[1];
|
||||
}
|
||||
// Ultimately we might care if the shot was ahead or behind, but for now, just quadrant is fine.
|
||||
AngleVectors( fwdangles, NULL, right, NULL );
|
||||
|
||||
|
@ -2054,6 +2312,8 @@ int G_GetHitQuad( gentity_t *self, vec3_t hitloc )
|
|||
return hitLoc;
|
||||
}
|
||||
|
||||
int gGAvoidDismember = 0;
|
||||
|
||||
void G_CheckForDismemberment(gentity_t *ent, vec3_t point, int damage, int deathAnim)
|
||||
{
|
||||
int hitLoc, hitLocUse = -1;
|
||||
|
@ -2065,6 +2325,13 @@ void G_CheckForDismemberment(gentity_t *ent, vec3_t point, int damage, int death
|
|||
return;
|
||||
}
|
||||
|
||||
if (gGAvoidDismember == 1)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!gGAvoidDismember != 2)
|
||||
{ //this means do the dismemberment regardless of randomness and damage
|
||||
if (Q_irand(0, 100) > dismember)
|
||||
{
|
||||
return;
|
||||
|
@ -2074,8 +2341,16 @@ void G_CheckForDismemberment(gentity_t *ent, vec3_t point, int damage, int death
|
|||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (gGAvoidDismember == 2)
|
||||
{
|
||||
hitLoc = HL_HAND_RT;
|
||||
}
|
||||
else
|
||||
{
|
||||
hitLoc = G_GetHitLocation( ent, point );
|
||||
}
|
||||
|
||||
switch(hitLoc)
|
||||
{
|
||||
|
@ -2086,6 +2361,7 @@ void G_CheckForDismemberment(gentity_t *ent, vec3_t point, int damage, int death
|
|||
case HL_FOOT_LT:
|
||||
case HL_LEG_LT:
|
||||
hitLocUse = G2_MODELPART_LLEG;
|
||||
break;
|
||||
|
||||
case HL_WAIST:
|
||||
hitLocUse = G2_MODELPART_WAIST;
|
||||
|
@ -2100,15 +2376,18 @@ void G_CheckForDismemberment(gentity_t *ent, vec3_t point, int damage, int death
|
|||
break;
|
||||
*/
|
||||
case HL_ARM_RT:
|
||||
case HL_HAND_RT:
|
||||
hitLocUse = G2_MODELPART_RARM;
|
||||
break;
|
||||
case HL_HAND_RT:
|
||||
hitLocUse = G2_MODELPART_RHAND;
|
||||
break;
|
||||
case HL_ARM_LT:
|
||||
case HL_HAND_LT:
|
||||
hitLocUse = G2_MODELPART_LARM;
|
||||
break;
|
||||
case HL_HEAD:
|
||||
hitLocUse = G2_MODELPART_HEAD;
|
||||
break;
|
||||
default:
|
||||
hitLocUse = G_GetHitQuad(ent, point);
|
||||
break;
|
||||
|
@ -2119,7 +2398,19 @@ void G_CheckForDismemberment(gentity_t *ent, vec3_t point, int damage, int death
|
|||
return;
|
||||
}
|
||||
|
||||
if (ent->client)
|
||||
{
|
||||
G_GetDismemberBolt(ent, boltPoint, hitLocUse);
|
||||
if ( g_austrian.integer
|
||||
&& g_gametype.integer == GT_TOURNAMENT )
|
||||
{
|
||||
G_LogPrintf( "Duel Dismemberment: %s dismembered at %s\n", ent->client->pers.netname, hitLocName[hitLoc] );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
G_GetDismemberLoc(ent, boltPoint, hitLocUse);
|
||||
}
|
||||
G_Dismember(ent, boltPoint, hitLocUse, 90, 0, deathAnim);
|
||||
}
|
||||
|
||||
|
@ -2285,7 +2576,14 @@ void G_Damage( gentity_t *targ, gentity_t *inflictor, gentity_t *attacker,
|
|||
|
||||
mass = 200;
|
||||
|
||||
if (mod == MOD_SABER)
|
||||
{
|
||||
VectorScale (dir, (g_knockback.value * (float)knockback / mass)*g_saberDmgVelocityScale.integer, kvel);
|
||||
}
|
||||
else
|
||||
{
|
||||
VectorScale (dir, g_knockback.value * (float)knockback / mass, kvel);
|
||||
}
|
||||
VectorAdd (targ->client->ps.velocity, kvel, targ->client->ps.velocity);
|
||||
|
||||
if (attacker && attacker->client && attacker != targ)
|
||||
|
@ -2296,7 +2594,7 @@ void G_Damage( gentity_t *targ, gentity_t *inflictor, gentity_t *attacker,
|
|||
}
|
||||
// set the timer so that the other client can't cancel
|
||||
// out the movement immediately
|
||||
if ( !targ->client->ps.pm_time ) {
|
||||
if ( !targ->client->ps.pm_time && (g_saberDmgVelocityScale.integer || mod != MOD_SABER) ) {
|
||||
int t;
|
||||
|
||||
t = knockback * 2;
|
||||
|
@ -2311,6 +2609,43 @@ void G_Damage( gentity_t *targ, gentity_t *inflictor, gentity_t *attacker,
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
if ( g_trueJedi.integer )
|
||||
{//less explosive damage for jedi, more saber damage for non-jedi
|
||||
if ( client->ps.trueJedi )
|
||||
{//if the target is a trueJedi, reduce splash and explosive damage to 1/2
|
||||
switch ( mod )
|
||||
{
|
||||
case MOD_REPEATER_ALT:
|
||||
case MOD_REPEATER_ALT_SPLASH:
|
||||
case MOD_DEMP2_ALT:
|
||||
case MOD_FLECHETTE_ALT_SPLASH:
|
||||
case MOD_ROCKET:
|
||||
case MOD_ROCKET_SPLASH:
|
||||
case MOD_ROCKET_HOMING:
|
||||
case MOD_ROCKET_HOMING_SPLASH:
|
||||
case MOD_THERMAL:
|
||||
case MOD_THERMAL_SPLASH:
|
||||
case MOD_TRIP_MINE_SPLASH:
|
||||
case MOD_TIMED_MINE_SPLASH:
|
||||
case MOD_DET_PACK_SPLASH:
|
||||
damage *= 0.5;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if ( client->ps.trueNonJedi && mod == MOD_SABER )
|
||||
{//if the target is a trueNonJedi, take more saber damage... combined with the 1.5 in the w_saber stuff, this is 6 times damage!
|
||||
if ( damage < 100 )
|
||||
{
|
||||
damage *= 4;
|
||||
if ( damage > 100 )
|
||||
{
|
||||
damage = 100;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// check for completely getting out of the damage
|
||||
if ( !(dflags & DAMAGE_NO_PROTECTION) ) {
|
||||
|
||||
|
@ -2483,7 +2818,11 @@ void G_Damage( gentity_t *targ, gentity_t *inflictor, gentity_t *attacker,
|
|||
int maxtake = take;
|
||||
|
||||
//G_Sound(targ, CHAN_AUTO, protectHitSound);
|
||||
if (targ->client->forcePowerSoundDebounce < level.time)
|
||||
{
|
||||
G_PreDefSound(targ->client->ps.origin, PDSOUND_PROTECTHIT);
|
||||
targ->client->forcePowerSoundDebounce = level.time + 400;
|
||||
}
|
||||
|
||||
if (targ->client->ps.fd.forcePowerLevel[FP_PROTECT] == FORCE_LEVEL_1)
|
||||
{
|
||||
|
@ -2611,6 +2950,10 @@ void G_Damage( gentity_t *targ, gentity_t *inflictor, gentity_t *attacker,
|
|||
VectorCopy(targ->client->ps.origin, targ->pos1);
|
||||
}
|
||||
}
|
||||
else if (targ->s.eType == ET_GRAPPLE)
|
||||
{ //g2animent
|
||||
VectorCopy(point, targ->pos1);
|
||||
}
|
||||
|
||||
if (targ->health < -999)
|
||||
targ->health = -999;
|
||||
|
|
|
@ -1723,32 +1723,11 @@ free fall from their spawn points
|
|||
void FinishSpawningItem( gentity_t *ent ) {
|
||||
trace_t tr;
|
||||
vec3_t dest;
|
||||
int wDisable = 0;
|
||||
// gitem_t *item;
|
||||
|
||||
// VectorSet( ent->r.mins, -ITEM_RADIUS, -ITEM_RADIUS, -ITEM_RADIUS );
|
||||
// VectorSet( ent->r.maxs, ITEM_RADIUS, ITEM_RADIUS, ITEM_RADIUS );
|
||||
|
||||
if (g_gametype.integer == GT_TOURNAMENT)
|
||||
{
|
||||
wDisable = g_duelWeaponDisable.integer;
|
||||
}
|
||||
else
|
||||
{
|
||||
wDisable = g_weaponDisable.integer;
|
||||
}
|
||||
|
||||
if (ent->item->giType == IT_WEAPON &&
|
||||
wDisable &&
|
||||
(wDisable & (1 << ent->item->giTag)))
|
||||
{
|
||||
if (g_gametype.integer != GT_JEDIMASTER)
|
||||
{
|
||||
G_FreeEntity( ent );
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (g_gametype.integer != GT_JEDIMASTER)
|
||||
{
|
||||
if (HasSetSaberOnly())
|
||||
|
@ -2027,9 +2006,31 @@ be on an entity that hasn't spawned yet.
|
|||
============
|
||||
*/
|
||||
void G_SpawnItem (gentity_t *ent, gitem_t *item) {
|
||||
int wDisable = 0;
|
||||
|
||||
G_SpawnFloat( "random", "0", &ent->random );
|
||||
G_SpawnFloat( "wait", "0", &ent->wait );
|
||||
|
||||
if (g_gametype.integer == GT_TOURNAMENT)
|
||||
{
|
||||
wDisable = g_duelWeaponDisable.integer;
|
||||
}
|
||||
else
|
||||
{
|
||||
wDisable = g_weaponDisable.integer;
|
||||
}
|
||||
|
||||
if (item->giType == IT_WEAPON &&
|
||||
wDisable &&
|
||||
(wDisable & (1 << item->giTag)))
|
||||
{
|
||||
if (g_gametype.integer != GT_JEDIMASTER)
|
||||
{
|
||||
G_FreeEntity( ent );
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
RegisterItem( item );
|
||||
if ( G_ItemDisabled(item) )
|
||||
return;
|
||||
|
|
|
@ -33,6 +33,8 @@
|
|||
#define FL_NO_HUMANS 0x00004000 // spawn point just for bots
|
||||
#define FL_FORCE_GESTURE 0x00008000 // force gesture on client
|
||||
|
||||
#define ANIMENT_SPAWNER //allow animent spawners
|
||||
|
||||
// movers are things like doors, plats, buttons, etc
|
||||
typedef enum {
|
||||
MOVER_POS1,
|
||||
|
@ -88,6 +90,9 @@ typedef enum
|
|||
extern void *precachedKyle;
|
||||
extern void *g2SaberInstance;
|
||||
|
||||
extern qboolean gEscaping;
|
||||
extern int gEscapeTime;
|
||||
|
||||
typedef struct gentity_s gentity_t;
|
||||
typedef struct gclient_s gclient_t;
|
||||
|
||||
|
@ -405,10 +410,17 @@ struct gclient_s {
|
|||
|
||||
vec3_t lastSaberTip; //position of saber tip last update
|
||||
vec3_t lastSaberBase; //position of saber base last update
|
||||
|
||||
vec3_t lastSaberDir_Always; //every getboltmatrix, set to saber dir
|
||||
vec3_t lastSaberBase_Always; //every getboltmatrix, set to saber base
|
||||
int lastSaberStorageTime; //server time that the above two values were updated (for making sure they aren't out of date)
|
||||
|
||||
qboolean hasCurrentPosition; //are lastSaberTip and lastSaberBase valid?
|
||||
|
||||
int dangerTime; // level.time when last attack occured
|
||||
|
||||
int forcePowerSoundDebounce; //if > level.time, don't do certain sound events again (drain sound, absorb sound, etc)
|
||||
|
||||
qboolean fjDidJump;
|
||||
};
|
||||
|
||||
|
@ -621,6 +633,8 @@ qboolean trap_G2API_GetBoltMatrix(void *ghoul2, const int modelIndex, const int
|
|||
const vec3_t angles, const vec3_t position, const int frameNum, qhandle_t *modelList, vec3_t scale);
|
||||
qboolean trap_G2API_GetBoltMatrix_NoReconstruct(void *ghoul2, const int modelIndex, const int boltIndex, mdxaBone_t *matrix,
|
||||
const vec3_t angles, const vec3_t position, const int frameNum, qhandle_t *modelList, vec3_t scale);
|
||||
qboolean trap_G2API_GetBoltMatrix_NoRecNoRot(void *ghoul2, const int modelIndex, const int boltIndex, mdxaBone_t *matrix,
|
||||
const vec3_t angles, const vec3_t position, const int frameNum, qhandle_t *modelList, vec3_t scale);
|
||||
int trap_G2API_InitGhoul2Model(void **ghoul2Ptr, const char *fileName, int modelIndex, qhandle_t customSkin,
|
||||
qhandle_t customShader, int modelFlags, int lodBias);
|
||||
int trap_G2API_AddBolt(void *ghoul2, int modelIndex, const char *boneName);
|
||||
|
@ -632,6 +646,8 @@ void trap_G2API_DuplicateGhoul2Instance(void *g2From, void **g2To);
|
|||
qboolean trap_G2API_HasGhoul2ModelOnIndex(void *ghlInfo, int modelIndex);
|
||||
qboolean trap_G2API_RemoveGhoul2Model(void *ghlInfo, int modelIndex);
|
||||
void trap_G2API_CleanGhoul2Models(void **ghoul2Ptr);
|
||||
void trap_G2API_CollisionDetect ( CollisionRecord_t *collRecMap, void* ghoul2, const vec3_t angles, const vec3_t position,
|
||||
int frameNumber, int entNum, vec3_t rayStart, vec3_t rayEnd, vec3_t scale, int traceFlags, int useLod, float fRadius );
|
||||
|
||||
qboolean trap_G2API_SetBoneAngles(void *ghoul2, int modelIndex, const char *boneName, const vec3_t angles, const int flags,
|
||||
const int up, const int right, const int forward, qhandle_t *modelList,
|
||||
|
@ -654,6 +670,9 @@ void TossClientWeapon(gentity_t *self, vec3_t direction, float speed);
|
|||
void TossClientItems( gentity_t *self );
|
||||
void TossClientCubes( gentity_t *self );
|
||||
void ExplodeDeath( gentity_t *self );
|
||||
void G_CheckForDismemberment(gentity_t *ent, vec3_t point, int damage, int deathAnim);
|
||||
extern int gGAvoidDismember;
|
||||
|
||||
|
||||
// damage flags
|
||||
#define DAMAGE_NORMAL 0x00000000 // No flags set.
|
||||
|
@ -688,6 +707,9 @@ void WP_FireBlasterMissile( gentity_t *ent, vec3_t start, vec3_t dir, qboolean a
|
|||
//
|
||||
// g_mover.c
|
||||
//
|
||||
#define SPF_BUTTON_USABLE 1
|
||||
#define SPF_BUTTON_FPUSHABLE 2
|
||||
|
||||
void G_RunMover( gentity_t *ent );
|
||||
void Touch_DoorTrigger( gentity_t *ent, gentity_t *other, trace_t *trace );
|
||||
|
||||
|
@ -703,6 +725,7 @@ void trigger_teleporter_touch (gentity_t *self, gentity_t *other, trace_t *trace
|
|||
void TeleportPlayer( gentity_t *player, vec3_t origin, vec3_t angles );
|
||||
void ATST_ManageDamageBoxes(gentity_t *ent);
|
||||
int G_PlayerBecomeATST(gentity_t *ent);
|
||||
void G_CreateExampleAnimEnt(gentity_t *ent);
|
||||
|
||||
|
||||
//
|
||||
|
@ -842,7 +865,7 @@ qboolean G_DoesMapSupportGametype(const char *mapname, int gametype);
|
|||
const char *G_RefreshNextMap(int gametype, qboolean forced);
|
||||
|
||||
// w_force.c / w_saber.c
|
||||
void G_PreDefSound(vec3_t org, int pdSound);
|
||||
gentity_t *G_PreDefSound(vec3_t org, int pdSound);
|
||||
qboolean HasSetSaberOnly(void);
|
||||
void WP_ForcePowerStop( gentity_t *self, forcePowers_t forcePower );
|
||||
void WP_SaberPositionUpdate( gentity_t *self, usercmd_t *ucmd );
|
||||
|
@ -924,12 +947,23 @@ extern vmCvar_t g_maxclients; // allow this many total, including spectators
|
|||
extern vmCvar_t g_maxGameClients; // allow this many active
|
||||
extern vmCvar_t g_restarted;
|
||||
|
||||
extern vmCvar_t g_trueJedi;
|
||||
|
||||
extern vmCvar_t g_autoMapCycle;
|
||||
extern vmCvar_t g_dmflags;
|
||||
extern vmCvar_t g_maxForceRank;
|
||||
extern vmCvar_t g_forceBasedTeams;
|
||||
extern vmCvar_t g_privateDuel;
|
||||
extern vmCvar_t g_saberLocking;
|
||||
extern vmCvar_t g_saberLockFactor;
|
||||
extern vmCvar_t g_saberTraceSaberFirst;
|
||||
|
||||
#ifdef G2_COLLISION_ENABLED
|
||||
extern vmCvar_t g_saberGhoul2Collision;
|
||||
#endif
|
||||
extern vmCvar_t g_saberAlwaysBoxTrace;
|
||||
extern vmCvar_t g_saberBoxTraceSize;
|
||||
|
||||
extern vmCvar_t g_forceRegenTime;
|
||||
extern vmCvar_t g_spawnInvulnerability;
|
||||
extern vmCvar_t g_forcePowerDisable;
|
||||
|
@ -982,6 +1016,14 @@ extern vmCvar_t g_dismember;
|
|||
extern vmCvar_t g_forceDodge;
|
||||
extern vmCvar_t g_timeouttospec;
|
||||
|
||||
extern vmCvar_t g_saberDmgVelocityScale;
|
||||
extern vmCvar_t g_saberDmgDelay_Idle;
|
||||
extern vmCvar_t g_saberDmgDelay_Wound;
|
||||
|
||||
extern vmCvar_t g_saberDebugPrint;
|
||||
|
||||
extern vmCvar_t g_austrian;
|
||||
|
||||
void trap_Printf( const char *fmt );
|
||||
void trap_Error( const char *fmt );
|
||||
int trap_Milliseconds( void );
|
||||
|
|
|
@ -20,6 +20,8 @@ gclient_t g_clients[MAX_CLIENTS];
|
|||
|
||||
qboolean gDuelExit = qfalse;
|
||||
|
||||
vmCvar_t g_trueJedi;
|
||||
|
||||
vmCvar_t g_gametype;
|
||||
vmCvar_t g_MaxHolocronCarry;
|
||||
vmCvar_t g_ff_objectives;
|
||||
|
@ -29,6 +31,15 @@ vmCvar_t g_maxForceRank;
|
|||
vmCvar_t g_forceBasedTeams;
|
||||
vmCvar_t g_privateDuel;
|
||||
vmCvar_t g_saberLocking;
|
||||
vmCvar_t g_saberLockFactor;
|
||||
vmCvar_t g_saberTraceSaberFirst;
|
||||
|
||||
#ifdef G2_COLLISION_ENABLED
|
||||
vmCvar_t g_saberGhoul2Collision;
|
||||
#endif
|
||||
vmCvar_t g_saberAlwaysBoxTrace;
|
||||
vmCvar_t g_saberBoxTraceSize;
|
||||
|
||||
vmCvar_t g_forceRegenTime;
|
||||
vmCvar_t g_spawnInvulnerability;
|
||||
vmCvar_t g_forcePowerDisable;
|
||||
|
@ -93,6 +104,14 @@ vmCvar_t g_dismember;
|
|||
vmCvar_t g_forceDodge;
|
||||
vmCvar_t g_timeouttospec;
|
||||
|
||||
vmCvar_t g_saberDmgVelocityScale;
|
||||
vmCvar_t g_saberDmgDelay_Idle;
|
||||
vmCvar_t g_saberDmgDelay_Wound;
|
||||
|
||||
vmCvar_t g_saberDebugPrint;
|
||||
|
||||
vmCvar_t g_austrian;
|
||||
|
||||
int gDuelist1 = -1;
|
||||
int gDuelist2 = -1;
|
||||
|
||||
|
@ -117,6 +136,8 @@ static cvarTable_t gameCvarTable[] = {
|
|||
// change anytime vars
|
||||
{ &g_ff_objectives, "g_ff_objectives", "0", /*CVAR_SERVERINFO |*/ CVAR_NORESTART, 0, qtrue },
|
||||
|
||||
{ &g_trueJedi, "g_jediVmerc", "0", CVAR_INTERNAL |CVAR_SERVERINFO | CVAR_LATCH, 0, qtrue },
|
||||
|
||||
{ &g_autoMapCycle, "g_autoMapCycle", "0", CVAR_ARCHIVE | CVAR_NORESTART, 0, qtrue },
|
||||
{ &g_dmflags, "dmflags", "0", CVAR_SERVERINFO | CVAR_ARCHIVE, 0, qtrue },
|
||||
|
||||
|
@ -124,6 +145,15 @@ static cvarTable_t gameCvarTable[] = {
|
|||
{ &g_forceBasedTeams, "g_forceBasedTeams", "0", CVAR_SERVERINFO | CVAR_ARCHIVE | CVAR_USERINFO | CVAR_LATCH, 0, qfalse },
|
||||
{ &g_privateDuel, "g_privateDuel", "1", CVAR_SERVERINFO | CVAR_ARCHIVE, 0, qtrue },
|
||||
{ &g_saberLocking, "g_saberLocking", "1", CVAR_SERVERINFO | CVAR_ARCHIVE, 0, qtrue },
|
||||
{ &g_saberLockFactor, "g_saberLockFactor", "6", CVAR_ARCHIVE, 0, qtrue },
|
||||
{ &g_saberTraceSaberFirst, "g_saberTraceSaberFirst", "1", CVAR_ARCHIVE, 0, qtrue },
|
||||
|
||||
#ifdef G2_COLLISION_ENABLED
|
||||
{ &g_saberGhoul2Collision, "g_saberGhoul2Collision", "0", 0, 0, qtrue },
|
||||
#endif
|
||||
{ &g_saberAlwaysBoxTrace, "g_saberAlwaysBoxTrace", "0", 0, 0, qtrue },
|
||||
{ &g_saberBoxTraceSize, "g_saberBoxTraceSize", "2", 0, 0, qtrue },
|
||||
|
||||
{ &g_forceRegenTime, "g_forceRegenTime", "200", CVAR_SERVERINFO | CVAR_ARCHIVE, 0, qtrue },
|
||||
|
||||
{ &g_spawnInvulnerability, "g_spawnInvulnerability", "3000", CVAR_ARCHIVE, 0, qtrue },
|
||||
|
@ -203,10 +233,18 @@ static cvarTable_t gameCvarTable[] = {
|
|||
|
||||
{ &g_rankings, "g_rankings", "0", 0, 0, qfalse},
|
||||
|
||||
{ &g_dismember, "g_dismember", "0", 0, 0, qtrue },
|
||||
{ &g_dismember, "g_dismember", "0", CVAR_ARCHIVE, 0, qtrue },
|
||||
{ &g_forceDodge, "g_forceDodge", "1", 0, 0, qtrue },
|
||||
|
||||
{ &g_timeouttospec, "g_timeouttospec", "70", CVAR_ARCHIVE, 0, qfalse },
|
||||
|
||||
{ &g_saberDmgVelocityScale, "g_saberDmgVelocityScale", "0", CVAR_ARCHIVE, 0, qtrue },
|
||||
{ &g_saberDmgDelay_Idle, "g_saberDmgDelay_Idle", "350", CVAR_ARCHIVE, 0, qtrue },
|
||||
{ &g_saberDmgDelay_Wound, "g_saberDmgDelay_Wound", "0", CVAR_ARCHIVE, 0, qtrue },
|
||||
|
||||
{ &g_saberDebugPrint, "g_saberDebugPrint", "0", CVAR_CHEAT, 0, qfalse },
|
||||
|
||||
{ &g_austrian, "g_austrian", "0", CVAR_ARCHIVE, 0, qfalse },
|
||||
};
|
||||
|
||||
// bk001129 - made static to avoid aliasing
|
||||
|
@ -461,7 +499,7 @@ void G_InitGame( int levelTime, int randomSeed, int restart ) {
|
|||
|
||||
//trap_SP_RegisterServer("mp_svgame");
|
||||
|
||||
if ( g_gametype.integer != GT_SINGLE_PLAYER && g_log.string[0] ) {
|
||||
if ( g_log.string[0] ) {
|
||||
if ( g_logSync.integer ) {
|
||||
trap_FS_FOpenFile( g_log.string, &level.logFile, FS_APPEND_SYNC );
|
||||
} else {
|
||||
|
@ -554,6 +592,11 @@ void G_InitGame( int levelTime, int randomSeed, int restart ) {
|
|||
}
|
||||
|
||||
G_RemapTeamShaders();
|
||||
|
||||
if ( g_gametype.integer == GT_TOURNAMENT )
|
||||
{
|
||||
G_LogPrintf("Duel Tournament Begun: kill limit %d, win limit: %d\n", g_fraglimit.integer, g_duel_fraglimit.integer );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -702,6 +745,47 @@ void RemoveTournamentLoser( void ) {
|
|||
SetTeam( &g_entities[ clientNum ], "s" );
|
||||
}
|
||||
|
||||
void RemoveDuelDrawLoser(void)
|
||||
{
|
||||
int clFirst = 0;
|
||||
int clSec = 0;
|
||||
int clFailure = 0;
|
||||
|
||||
if ( level.clients[ level.sortedClients[0] ].pers.connected != CON_CONNECTED )
|
||||
{
|
||||
return;
|
||||
}
|
||||
if ( level.clients[ level.sortedClients[1] ].pers.connected != CON_CONNECTED )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
clFirst = level.clients[ level.sortedClients[0] ].ps.stats[STAT_HEALTH] + level.clients[ level.sortedClients[0] ].ps.stats[STAT_ARMOR];
|
||||
clSec = level.clients[ level.sortedClients[1] ].ps.stats[STAT_HEALTH] + level.clients[ level.sortedClients[1] ].ps.stats[STAT_ARMOR];
|
||||
|
||||
if (clFirst > clSec)
|
||||
{
|
||||
clFailure = 1;
|
||||
}
|
||||
else if (clSec > clFirst)
|
||||
{
|
||||
clFailure = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
clFailure = 2;
|
||||
}
|
||||
|
||||
if (clFailure != 2)
|
||||
{
|
||||
SetTeam( &g_entities[ level.sortedClients[clFailure] ], "s" );
|
||||
}
|
||||
else
|
||||
{ //we could be more elegant about this, but oh well.
|
||||
SetTeam( &g_entities[ level.sortedClients[1] ], "s" );
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
=======================
|
||||
RemoveTournamentWinner
|
||||
|
@ -732,6 +816,64 @@ AdjustTournamentScores
|
|||
void AdjustTournamentScores( void ) {
|
||||
int clientNum;
|
||||
|
||||
if (level.clients[level.sortedClients[0]].ps.persistant[PERS_SCORE] ==
|
||||
level.clients[level.sortedClients[1]].ps.persistant[PERS_SCORE] &&
|
||||
level.clients[level.sortedClients[0]].pers.connected == CON_CONNECTED &&
|
||||
level.clients[level.sortedClients[1]].pers.connected == CON_CONNECTED)
|
||||
{
|
||||
int clFirst = level.clients[ level.sortedClients[0] ].ps.stats[STAT_HEALTH] + level.clients[ level.sortedClients[0] ].ps.stats[STAT_ARMOR];
|
||||
int clSec = level.clients[ level.sortedClients[1] ].ps.stats[STAT_HEALTH] + level.clients[ level.sortedClients[1] ].ps.stats[STAT_ARMOR];
|
||||
int clFailure = 0;
|
||||
int clSuccess = 0;
|
||||
|
||||
if (clFirst > clSec)
|
||||
{
|
||||
clFailure = 1;
|
||||
clSuccess = 0;
|
||||
}
|
||||
else if (clSec > clFirst)
|
||||
{
|
||||
clFailure = 0;
|
||||
clSuccess = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
clFailure = 2;
|
||||
clSuccess = 2;
|
||||
}
|
||||
|
||||
if (clFailure != 2)
|
||||
{
|
||||
clientNum = level.sortedClients[clSuccess];
|
||||
|
||||
level.clients[ clientNum ].sess.wins++;
|
||||
ClientUserinfoChanged( clientNum );
|
||||
trap_SetConfigstring ( CS_CLIENT_DUELWINNER, va("%i", clientNum ) );
|
||||
|
||||
clientNum = level.sortedClients[clFailure];
|
||||
|
||||
level.clients[ clientNum ].sess.losses++;
|
||||
ClientUserinfoChanged( clientNum );
|
||||
}
|
||||
else
|
||||
{
|
||||
clSuccess = 0;
|
||||
clFailure = 1;
|
||||
|
||||
clientNum = level.sortedClients[clSuccess];
|
||||
|
||||
level.clients[ clientNum ].sess.wins++;
|
||||
ClientUserinfoChanged( clientNum );
|
||||
trap_SetConfigstring ( CS_CLIENT_DUELWINNER, va("%i", clientNum ) );
|
||||
|
||||
clientNum = level.sortedClients[clFailure];
|
||||
|
||||
level.clients[ clientNum ].sess.losses++;
|
||||
ClientUserinfoChanged( clientNum );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
clientNum = level.sortedClients[0];
|
||||
if ( level.clients[ clientNum ].pers.connected == CON_CONNECTED ) {
|
||||
level.clients[ clientNum ].sess.wins++;
|
||||
|
@ -745,7 +887,7 @@ void AdjustTournamentScores( void ) {
|
|||
level.clients[ clientNum ].sess.losses++;
|
||||
ClientUserinfoChanged( clientNum );
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -806,6 +948,9 @@ int QDECL SortRanks( const void *a, const void *b ) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
qboolean gQueueScoreMessage = qfalse;
|
||||
int gQueueScoreMessageTime = 0;
|
||||
|
||||
/*
|
||||
============
|
||||
CalculateRanks
|
||||
|
@ -953,9 +1098,12 @@ void CalculateRanks( void ) {
|
|||
// see if it is time to end the level
|
||||
CheckExitRules();
|
||||
|
||||
// if we are at the intermission, send the new info to everyone
|
||||
if ( level.intermissiontime ) {
|
||||
SendScoreboardMessageToAllClients();
|
||||
// if we are at the intermission or in multi-frag Duel game mode, send the new info to everyone
|
||||
if ( level.intermissiontime || g_gametype.integer == GT_TOURNAMENT ) {
|
||||
gQueueScoreMessage = qtrue;
|
||||
gQueueScoreMessageTime = level.time + 500;
|
||||
//SendScoreboardMessageToAllClients();
|
||||
//rww - Made this operate on a "queue" system because it was causing large overflows
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1313,10 +1461,6 @@ void CheckIntermissionExit( void ) {
|
|||
gclient_t *cl;
|
||||
int readyMask;
|
||||
|
||||
if ( g_gametype.integer == GT_SINGLE_PLAYER ) {
|
||||
return;
|
||||
}
|
||||
|
||||
// see which players are ready
|
||||
ready = 0;
|
||||
notReady = 0;
|
||||
|
@ -1345,14 +1489,51 @@ void CheckIntermissionExit( void ) {
|
|||
{
|
||||
gDidDuelStuff = qtrue;
|
||||
|
||||
if ( g_austrian.integer )
|
||||
{
|
||||
G_LogPrintf("Duel Results:\n");
|
||||
//G_LogPrintf("Duel Time: %d\n", level.time );
|
||||
G_LogPrintf("winner: %s, score: %d, wins/losses: %d/%d\n",
|
||||
level.clients[level.sortedClients[0]].pers.netname,
|
||||
level.clients[level.sortedClients[0]].ps.persistant[PERS_SCORE],
|
||||
level.clients[level.sortedClients[0]].sess.wins,
|
||||
level.clients[level.sortedClients[0]].sess.losses );
|
||||
G_LogPrintf("loser: %s, score: %d, wins/losses: %d/%d\n",
|
||||
level.clients[level.sortedClients[1]].pers.netname,
|
||||
level.clients[level.sortedClients[1]].ps.persistant[PERS_SCORE],
|
||||
level.clients[level.sortedClients[1]].sess.wins,
|
||||
level.clients[level.sortedClients[1]].sess.losses );
|
||||
}
|
||||
// if we are running a tournement map, kick the loser to spectator status,
|
||||
// which will automatically grab the next spectator and restart
|
||||
if (!DuelLimitHit())
|
||||
{
|
||||
if (level.clients[level.sortedClients[0]].ps.persistant[PERS_SCORE] ==
|
||||
level.clients[level.sortedClients[1]].ps.persistant[PERS_SCORE] &&
|
||||
level.clients[level.sortedClients[0]].pers.connected == CON_CONNECTED &&
|
||||
level.clients[level.sortedClients[1]].pers.connected == CON_CONNECTED)
|
||||
{
|
||||
RemoveDuelDrawLoser();
|
||||
}
|
||||
else
|
||||
{
|
||||
RemoveTournamentLoser();
|
||||
}
|
||||
|
||||
AddTournamentPlayer();
|
||||
|
||||
if ( g_austrian.integer )
|
||||
{
|
||||
G_LogPrintf("Duel Initiated: %s %d/%d vs %s %d/%d, kill limit: %d\n",
|
||||
level.clients[level.sortedClients[0]].pers.netname,
|
||||
level.clients[level.sortedClients[0]].sess.wins,
|
||||
level.clients[level.sortedClients[0]].sess.losses,
|
||||
level.clients[level.sortedClients[1]].pers.netname,
|
||||
level.clients[level.sortedClients[1]].sess.wins,
|
||||
level.clients[level.sortedClients[1]].sess.losses,
|
||||
g_fraglimit.integer );
|
||||
}
|
||||
|
||||
if (level.numPlayingClients >= 2)
|
||||
{
|
||||
trap_SetConfigstring ( CS_CLIENT_DUELISTS, va("%i|%i", level.sortedClients[0], level.sortedClients[1] ) );
|
||||
|
@ -1365,11 +1546,30 @@ void CheckIntermissionExit( void ) {
|
|||
return;
|
||||
}
|
||||
|
||||
if ( g_austrian.integer )
|
||||
{
|
||||
G_LogPrintf("Duel Tournament Winner: %s wins/losses: %d/%d\n",
|
||||
level.clients[level.sortedClients[0]].pers.netname,
|
||||
level.clients[level.sortedClients[0]].sess.wins,
|
||||
level.clients[level.sortedClients[0]].sess.losses );
|
||||
}
|
||||
//this means we hit the duel limit so reset the wins/losses
|
||||
//but still push the loser to the back of the line, and retain the order for
|
||||
//the map change
|
||||
if (level.clients[level.sortedClients[0]].ps.persistant[PERS_SCORE] ==
|
||||
level.clients[level.sortedClients[1]].ps.persistant[PERS_SCORE] &&
|
||||
level.clients[level.sortedClients[0]].pers.connected == CON_CONNECTED &&
|
||||
level.clients[level.sortedClients[1]].pers.connected == CON_CONNECTED)
|
||||
{
|
||||
RemoveDuelDrawLoser();
|
||||
}
|
||||
else
|
||||
{
|
||||
RemoveTournamentLoser();
|
||||
}
|
||||
|
||||
AddTournamentPlayer();
|
||||
|
||||
if (level.numPlayingClients >= 2)
|
||||
{
|
||||
trap_SetConfigstring ( CS_CLIENT_DUELISTS, va("%i|%i", level.sortedClients[0], level.sortedClients[1] ) );
|
||||
|
@ -1485,6 +1685,38 @@ void CheckExitRules( void ) {
|
|||
return;
|
||||
}
|
||||
|
||||
if (gEscaping)
|
||||
{
|
||||
int i = 0;
|
||||
int numLiveClients = 0;
|
||||
|
||||
while (i < MAX_CLIENTS)
|
||||
{
|
||||
if (g_entities[i].inuse && g_entities[i].client && g_entities[i].health > 0)
|
||||
{
|
||||
if (g_entities[i].client->sess.sessionTeam != TEAM_SPECTATOR &&
|
||||
!(g_entities[i].client->ps.pm_flags & PMF_FOLLOW))
|
||||
{
|
||||
numLiveClients++;
|
||||
}
|
||||
}
|
||||
|
||||
i++;
|
||||
}
|
||||
if (gEscapeTime < level.time)
|
||||
{
|
||||
gEscaping = qfalse;
|
||||
LogExit( "Escape time ended." );
|
||||
return;
|
||||
}
|
||||
if (!numLiveClients)
|
||||
{
|
||||
gEscaping = qfalse;
|
||||
LogExit( "Everyone failed to escape." );
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if ( level.intermissionQueued ) {
|
||||
int time = (g_singlePlayer.integer) ? SP_INTERMISSION_DELAY_TIME : INTERMISSION_DELAY_TIME;
|
||||
if ( level.time - level.intermissionQueued >= time ) {
|
||||
|
@ -1497,12 +1729,16 @@ void CheckExitRules( void ) {
|
|||
// check for sudden death
|
||||
if ( ScoreIsTied() ) {
|
||||
// always wait for sudden death
|
||||
if (g_gametype.integer != GT_TOURNAMENT || !g_timelimit.integer)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if ( g_timelimit.integer && !level.warmupTime ) {
|
||||
if ( level.time - level.startTime >= g_timelimit.integer*60000 ) {
|
||||
trap_SendServerCommand( -1, "print \"Timelimit hit.\n\"");
|
||||
// trap_SendServerCommand( -1, "print \"Timelimit hit.\n\"");
|
||||
trap_SendServerCommand( -1, va("print \"%s.\n\"",G_GetStripEdString("SVINGAME", "TIMELIMIT_HIT")));
|
||||
LogExit( "Timelimit hit." );
|
||||
return;
|
||||
}
|
||||
|
@ -1618,6 +1854,19 @@ void CheckTournament( void ) {
|
|||
trap_SetConfigstring ( CS_CLIENT_DUELISTS, va("%i|%i", level.sortedClients[0], level.sortedClients[1] ) );
|
||||
gDuelist1 = level.sortedClients[0];
|
||||
gDuelist2 = level.sortedClients[1];
|
||||
if ( g_austrian.integer )
|
||||
{
|
||||
G_LogPrintf("Duel Initiated: %s %d/%d vs %s %d/%d, kill limit: %d\n",
|
||||
level.clients[level.sortedClients[0]].pers.netname,
|
||||
level.clients[level.sortedClients[0]].sess.wins,
|
||||
level.clients[level.sortedClients[0]].sess.losses,
|
||||
level.clients[level.sortedClients[1]].pers.netname,
|
||||
level.clients[level.sortedClients[1]].sess.wins,
|
||||
level.clients[level.sortedClients[1]].sess.losses,
|
||||
g_fraglimit.integer );
|
||||
}
|
||||
//trap_SendConsoleCommand( EXEC_APPEND, "map_restart 0\n" );
|
||||
//FIXME: This seems to cause problems. But we'd like to reset things whenever a new opponent is set.
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1672,7 +1921,7 @@ void CheckTournament( void ) {
|
|||
return;
|
||||
}
|
||||
#endif
|
||||
} else if ( g_gametype.integer != GT_SINGLE_PLAYER && level.warmupTime != 0 ) {
|
||||
} else if ( level.warmupTime != 0 ) {
|
||||
int counts[TEAM_NUM_TEAMS];
|
||||
qboolean notEnough = qfalse;
|
||||
|
||||
|
@ -2100,6 +2349,18 @@ end = trap_Milliseconds();
|
|||
//At the end of the frame, send out the ghoul2 kill queue, if there is one
|
||||
G_SendG2KillQueue();
|
||||
|
||||
|
||||
if (gQueueScoreMessage)
|
||||
{
|
||||
if (gQueueScoreMessageTime < level.time)
|
||||
{
|
||||
SendScoreboardMessageToAllClients();
|
||||
|
||||
gQueueScoreMessageTime = 0;
|
||||
gQueueScoreMessage = 0;
|
||||
}
|
||||
}
|
||||
|
||||
g_LastFrameTime = level.time;
|
||||
}
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1197,9 +1197,10 @@ void Touch_Button(gentity_t *ent, gentity_t *other, trace_t *trace ) {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
/*QUAKED func_button (0 .5 .8) ?
|
||||
/*QUAKED func_button (0 .5 .8) ? USABLE FPUSHABLE
|
||||
When a button is touched, it moves some distance in the direction of it's angle, triggers all of it's targets, waits some time, then returns to it's original position where it can be triggered again.
|
||||
USABLE - Can activate with use button
|
||||
FPUSHABLE - Can force-push it
|
||||
|
||||
"model2" .md3 model to also draw
|
||||
"angle" determines the opening direction
|
||||
|
@ -1268,6 +1269,11 @@ void SP_func_button( gentity_t *ent ) {
|
|||
ent->touch = Touch_Button;
|
||||
}
|
||||
|
||||
if ( (ent->spawnflags&SPF_BUTTON_USABLE) )
|
||||
{
|
||||
ent->r.svFlags |= SVF_PLAYER_USABLE;
|
||||
}
|
||||
|
||||
InitMover( ent );
|
||||
}
|
||||
|
||||
|
@ -1793,18 +1799,40 @@ void SP_func_breakable( gentity_t *ent ) {
|
|||
|
||||
if (strcmp(model, "rock") == 0)
|
||||
{
|
||||
G_ModelIndex("models/chunks/rock/rock1_1.md3");
|
||||
G_ModelIndex("models/chunks/rock/rock1_2.md3");
|
||||
G_ModelIndex("models/chunks/rock/rock1_3.md3");
|
||||
G_ModelIndex("models/chunks/rock/rock1_4.md3");
|
||||
ent->boltpoint2 = DEBRIS_SPECIALCASE_ROCK;
|
||||
}
|
||||
else if (strcmp(model, "chunks") == 0)
|
||||
{
|
||||
G_ModelIndex("models/chunks/generic/chunks_1.md3");
|
||||
G_ModelIndex("models/chunks/generic/chunks_2.md3");
|
||||
ent->boltpoint2 = DEBRIS_SPECIALCASE_CHUNKS;
|
||||
}
|
||||
else if (strcmp(model, "wood") == 0)
|
||||
{
|
||||
G_ModelIndex("models/chunks/crate/crate1_1.md3");
|
||||
G_ModelIndex("models/chunks/crate/crate1_2.md3");
|
||||
G_ModelIndex("models/chunks/crate/crate1_3.md3");
|
||||
G_ModelIndex("models/chunks/crate/crate1_4.md3");
|
||||
G_ModelIndex("models/chunks/crate/crate2_1.md3");
|
||||
G_ModelIndex("models/chunks/crate/crate2_2.md3");
|
||||
G_ModelIndex("models/chunks/crate/crate2_3.md3");
|
||||
G_ModelIndex("models/chunks/crate/crate2_4.md3");
|
||||
ent->boltpoint2 = DEBRIS_SPECIALCASE_WOOD;
|
||||
}
|
||||
else if (strcmp(model, "glass") == 0)
|
||||
{
|
||||
G_ModelIndex("models/chunks/metal/metal1_1.md3");
|
||||
G_ModelIndex("models/chunks/metal/metal1_2.md3");
|
||||
G_ModelIndex("models/chunks/metal/metal1_3.md3");
|
||||
G_ModelIndex("models/chunks/metal/metal1_4.md3");
|
||||
G_ModelIndex("models/chunks/metal/metal2_1.md3");
|
||||
G_ModelIndex("models/chunks/metal/metal2_2.md3");
|
||||
G_ModelIndex("models/chunks/metal/metal2_3.md3");
|
||||
G_ModelIndex("models/chunks/metal/metal2_4.md3");
|
||||
ent->boltpoint2 = DEBRIS_SPECIALCASE_GLASS;
|
||||
}
|
||||
else if (strcmp(model, "none") == 0)
|
||||
|
|
|
@ -265,8 +265,12 @@ void G_RunObject( gentity_t *ent )
|
|||
}
|
||||
// G_Sound( ent, G_SoundIndex( "sound/movers/objects/objectHit.wav" ) );
|
||||
}
|
||||
|
||||
if (ent->s.weapon != WP_SABER)
|
||||
{
|
||||
DoImpact( ent, traceEnt, qtrue );
|
||||
}
|
||||
}
|
||||
|
||||
if ( !ent || (ent->takedamage&&ent->health <= 0) )
|
||||
{//been destroyed by impact
|
||||
|
|
|
@ -408,6 +408,7 @@ Ghoul2 Insert Start
|
|||
G_G2_SETMODELS,
|
||||
G_G2_GETBOLT,
|
||||
G_G2_GETBOLT_NOREC,
|
||||
G_G2_GETBOLT_NOREC_NOROT,
|
||||
G_G2_INITGHOUL2MODEL,
|
||||
G_G2_ADDBOLT,
|
||||
G_G2_SETBOLTINFO,
|
||||
|
@ -420,6 +421,7 @@ Ghoul2 Insert Start
|
|||
G_G2_HASGHOUL2MODELONINDEX,
|
||||
G_G2_REMOVEGHOUL2MODEL,
|
||||
G_G2_CLEANMODELS,
|
||||
G_G2_COLLISIONDETECT,
|
||||
|
||||
/*
|
||||
Ghoul2 Insert End
|
||||
|
|
|
@ -175,6 +175,12 @@ void SP_misc_model_health_power_converter( gentity_t *ent );
|
|||
|
||||
void SP_fx_runner( gentity_t *ent );
|
||||
|
||||
#ifdef ANIMENT_SPAWNER
|
||||
void SP_misc_animent_spawner(gentity_t *ent);
|
||||
void SP_target_screenshake(gentity_t *ent);
|
||||
void SP_target_escapetrig(gentity_t *ent);
|
||||
#endif
|
||||
|
||||
void SP_misc_holocron(gentity_t *ent);
|
||||
|
||||
void SP_shooter_blaster( gentity_t *ent );
|
||||
|
@ -262,6 +268,11 @@ spawn_t spawns[] = {
|
|||
{"misc_model_health_power_converter", SP_misc_model_health_power_converter},
|
||||
|
||||
{"fx_runner", SP_fx_runner},
|
||||
#ifdef ANIMENT_SPAWNER
|
||||
{"misc_animent_spawner", SP_misc_animent_spawner},
|
||||
{"target_screenshake", SP_target_screenshake},
|
||||
{"target_escapetrig", SP_target_escapetrig},
|
||||
#endif
|
||||
|
||||
{"misc_holocron", SP_misc_holocron},
|
||||
|
||||
|
@ -733,6 +744,16 @@ Every map should have exactly one worldspawn.
|
|||
"music" music wav file
|
||||
"gravity" 800 is default gravity
|
||||
"message" Text to print during connection process
|
||||
|
||||
BSP Options
|
||||
"gridsize" size of lighting grid to "X Y Z". default="64 64 128"
|
||||
"ambient" scale of global light (from _color)
|
||||
"fog" shader name of the global fog texture - must include the full path, such as "textures/rj/fog1"
|
||||
"distancecull" value for vis for the maximum viewing distance
|
||||
"chopsize" value for bsp on the maximum polygon / portal size
|
||||
"ls_Xr" override lightstyle X with this pattern for Red.
|
||||
"ls_Xg" green (valid patterns are "a-z")
|
||||
"ls_Xb" blue (a is OFF, z is ON)
|
||||
*/
|
||||
void SP_worldspawn( void )
|
||||
{
|
||||
|
|
|
@ -197,18 +197,20 @@ equ trap_G2_HaveWeGhoul2Models -585 ; G_G2_HAVEWEGHOULMODELS
|
|||
equ trap_G2_SetGhoul2ModelIndexes -586 ; G_G2_SETMODELS
|
||||
equ trap_G2API_GetBoltMatrix -587 ; G_G2_GETBOLT
|
||||
equ trap_G2API_GetBoltMatrix_NoReconstruct -588 ; G_G2_GETBOLT_NOREC
|
||||
equ trap_G2API_InitGhoul2Model -589 ; G_G2_INITGHOUL2MODEL
|
||||
equ trap_G2API_AddBolt -590 ; G_G2_ADDBOLT
|
||||
equ trap_G2API_SetBoltInfo -591 ; G_G2_SETBOLTINFO
|
||||
equ trap_G2API_SetBoneAngles -592 ; G_G2_ANGLEOVERRIDE
|
||||
equ trap_G2API_SetBoneAnim -593 ; G_G2_PLAYANIM
|
||||
equ trap_G2API_GetGLAName -594 ; G_G2_GETGLANAME
|
||||
equ trap_G2API_CopyGhoul2Instance -595 ; G_G2_COPYGHOUL2INSTANCE
|
||||
equ trap_G2API_CopySpecificGhoul2Model -596 ; G_G2_COPYSPECIFICGHOUL2MODEL
|
||||
equ trap_G2API_DuplicateGhoul2Instance -597 ; G_G2_DUPLICATEGHOUL2INSTANCE
|
||||
equ trap_G2API_HasGhoul2ModelOnIndex -598 ; G_G2_HASGHOUL2MODELONINDEX
|
||||
equ trap_G2API_RemoveGhoul2Model -599 ; G_G2_REMOVEGHOUL2MODEL
|
||||
equ trap_G2API_CleanGhoul2Models -600 ; G_G2_CLEANMODELS
|
||||
equ trap_G2API_GetBoltMatrix_NoRecNoRot -589 ; G_G2_GETBOLT_NOREC_NOROT
|
||||
equ trap_G2API_InitGhoul2Model -590 ; G_G2_INITGHOUL2MODEL
|
||||
equ trap_G2API_AddBolt -591 ; G_G2_ADDBOLT
|
||||
equ trap_G2API_SetBoltInfo -592 ; G_G2_SETBOLTINFO
|
||||
equ trap_G2API_SetBoneAngles -593 ; G_G2_ANGLEOVERRIDE
|
||||
equ trap_G2API_SetBoneAnim -594 ; G_G2_PLAYANIM
|
||||
equ trap_G2API_GetGLAName -595 ; G_G2_GETGLANAME
|
||||
equ trap_G2API_CopyGhoul2Instance -596 ; G_G2_COPYGHOUL2INSTANCE
|
||||
equ trap_G2API_CopySpecificGhoul2Model -597 ; G_G2_COPYSPECIFICGHOUL2MODEL
|
||||
equ trap_G2API_DuplicateGhoul2Instance -598 ; G_G2_DUPLICATEGHOUL2INSTANCE
|
||||
equ trap_G2API_HasGhoul2ModelOnIndex -599 ; G_G2_HASGHOUL2MODELONINDEX
|
||||
equ trap_G2API_RemoveGhoul2Model -600 ; G_G2_REMOVEGHOUL2MODEL
|
||||
equ trap_G2API_CleanGhoul2Models -601 ; G_G2_CLEANMODELS
|
||||
equ trap_G2API_CollisionDetect -602 ; G_G2_COLLISIONDETECT
|
||||
|
||||
|
||||
; hardcoded functions
|
||||
|
|
|
@ -841,6 +841,12 @@ qboolean trap_G2API_GetBoltMatrix_NoReconstruct(void *ghoul2, const int modelInd
|
|||
return (qboolean)(syscall(G_G2_GETBOLT_NOREC, ghoul2, modelIndex, boltIndex, matrix, angles, position, frameNum, modelList, scale));
|
||||
}
|
||||
|
||||
qboolean trap_G2API_GetBoltMatrix_NoRecNoRot(void *ghoul2, const int modelIndex, const int boltIndex, mdxaBone_t *matrix,
|
||||
const vec3_t angles, const vec3_t position, const int frameNum, qhandle_t *modelList, vec3_t scale)
|
||||
{ //Same as above but force it to not reconstruct the skeleton before getting the bolt position
|
||||
return (qboolean)(syscall(G_G2_GETBOLT_NOREC_NOROT, ghoul2, modelIndex, boltIndex, matrix, angles, position, frameNum, modelList, scale));
|
||||
}
|
||||
|
||||
int trap_G2API_InitGhoul2Model(void **ghoul2Ptr, const char *fileName, int modelIndex, qhandle_t customSkin,
|
||||
qhandle_t customShader, int modelFlags, int lodBias)
|
||||
{
|
||||
|
@ -905,6 +911,24 @@ void trap_G2API_CleanGhoul2Models(void **ghoul2Ptr)
|
|||
syscall(G_G2_CLEANMODELS, ghoul2Ptr);
|
||||
}
|
||||
|
||||
void trap_G2API_CollisionDetect (
|
||||
CollisionRecord_t *collRecMap,
|
||||
void* ghoul2,
|
||||
const vec3_t angles,
|
||||
const vec3_t position,
|
||||
int frameNumber,
|
||||
int entNum,
|
||||
vec3_t rayStart,
|
||||
vec3_t rayEnd,
|
||||
vec3_t scale,
|
||||
int traceFlags,
|
||||
int useLod,
|
||||
float fRadius
|
||||
)
|
||||
{
|
||||
syscall ( G_G2_COLLISIONDETECT, collRecMap, ghoul2, angles, position, frameNumber, entNum, rayStart, rayEnd, scale, traceFlags, useLod, PASSFLOAT(fRadius) );
|
||||
}
|
||||
|
||||
/*
|
||||
Ghoul2 Insert End
|
||||
*/
|
||||
|
|
|
@ -188,6 +188,11 @@ qboolean OnSameTeam( gentity_t *ent1, gentity_t *ent2 ) {
|
|||
return qfalse;
|
||||
}
|
||||
|
||||
if (g_gametype.integer == GT_SINGLE_PLAYER)
|
||||
{
|
||||
return qtrue;
|
||||
}
|
||||
|
||||
if ( g_gametype.integer < GT_TEAM ) {
|
||||
return qfalse;
|
||||
}
|
||||
|
|
|
@ -293,14 +293,17 @@ void Use_target_push( gentity_t *self, gentity_t *other, gentity_t *activator )
|
|||
// play fly sound every 1.5 seconds
|
||||
if ( activator->fly_sound_debounce_time < level.time ) {
|
||||
activator->fly_sound_debounce_time = level.time + 1500;
|
||||
if (self->noise_index)
|
||||
{
|
||||
G_Sound( activator, CHAN_AUTO, self->noise_index );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*QUAKED target_push (.5 .5 .5) (-8 -8 -8) (8 8 8) bouncepad
|
||||
Pushes the activator in the direction.of angle, or towards a target apex.
|
||||
"speed" defaults to 1000
|
||||
if "bouncepad", play bounce noise instead of windfly
|
||||
if "bouncepad", play bounce noise instead of none
|
||||
*/
|
||||
void SP_target_push( gentity_t *self ) {
|
||||
if (!self->speed) {
|
||||
|
|
|
@ -951,6 +951,7 @@ Try and use an entity in the world, directly ahead of us
|
|||
|
||||
#define USE_DISTANCE 64.0f
|
||||
|
||||
extern void Touch_Button(gentity_t *ent, gentity_t *other, trace_t *trace );
|
||||
void TryUse( gentity_t *ent )
|
||||
{
|
||||
gentity_t *target;
|
||||
|
@ -986,8 +987,14 @@ void TryUse( gentity_t *ent )
|
|||
NPC_SetAnim( ent, SETANIM_LEGS, BOTH_FORCEPUSH, SETANIM_FLAG_NORMAL|SETANIM_FLAG_HOLD );
|
||||
}
|
||||
*/
|
||||
|
||||
if ( target->touch == Touch_Button )
|
||||
{//pretend we touched it
|
||||
target->touch(target, ent, NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
target->use(target, ent, ent);
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -298,6 +298,10 @@ void WP_FireBlasterMissile( gentity_t *ent, vec3_t start, vec3_t dir, qboolean a
|
|||
int damage = BLASTER_DAMAGE;
|
||||
gentity_t *missile;
|
||||
|
||||
if (ent->s.eType == ET_GRAPPLE)
|
||||
{ //animent
|
||||
damage = 10;
|
||||
}
|
||||
// NOTENOTE Vehicle models are not yet implemented
|
||||
/* if ( ent->client && ent->client->ps.vehicleModel != 0 )
|
||||
{
|
||||
|
@ -549,10 +553,20 @@ void WP_DisruptorAltFire( gentity_t *ent )
|
|||
|
||||
VectorCopy( muzzle, muzzle2 ); // making a backup copy
|
||||
|
||||
if (ent->client)
|
||||
{
|
||||
VectorCopy( ent->client->ps.origin, start );
|
||||
start[2] += ent->client->ps.viewheight;//By eyes
|
||||
|
||||
count = ( level.time - ent->client->ps.weaponChargeTime ) / DISRUPTOR_CHARGE_UNIT;
|
||||
}
|
||||
else
|
||||
{
|
||||
VectorCopy( ent->r.currentOrigin, start );
|
||||
start[2] += 24;
|
||||
|
||||
count = ( 100 ) / DISRUPTOR_CHARGE_UNIT;
|
||||
}
|
||||
|
||||
count *= 2;
|
||||
|
||||
|
@ -651,10 +665,13 @@ void WP_DisruptorAltFire( gentity_t *ent )
|
|||
tent->s.eFlags |= EF_ALT_FIRING;
|
||||
|
||||
if ( LogAccuracyHit( traceEnt, ent ))
|
||||
{
|
||||
if (ent->client)
|
||||
{
|
||||
ent->client->accuracy_hits++;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( traceEnt->r.svFlags & SVF_GLASS_BRUSH
|
||||
|
@ -741,6 +758,12 @@ static void WP_FireDisruptor( gentity_t *ent, qboolean altFire )
|
|||
altFire = qfalse;
|
||||
}
|
||||
|
||||
if (ent && ent->s.eType == ET_GRAPPLE && !ent->client)
|
||||
{ //special case for animents
|
||||
WP_DisruptorAltFire( ent );
|
||||
return;
|
||||
}
|
||||
|
||||
if ( altFire )
|
||||
{
|
||||
WP_DisruptorAltFire( ent );
|
||||
|
@ -2831,6 +2854,107 @@ void FireWeapon( gentity_t *ent, qboolean altFire ) {
|
|||
G_LogWeaponFire(ent->s.number, ent->s.weapon);
|
||||
}
|
||||
|
||||
void AnimEntCalcMuzzlePoint ( gentity_t *ent, vec3_t forward, vec3_t right, vec3_t up, vec3_t muzzlePoint )
|
||||
{
|
||||
int weapontype;
|
||||
vec3_t muzzleOffPoint;
|
||||
|
||||
weapontype = ent->s.weapon;
|
||||
VectorCopy( ent->s.pos.trBase, muzzlePoint );
|
||||
|
||||
VectorCopy(WP_MuzzlePoint[weapontype], muzzleOffPoint);
|
||||
|
||||
if (weapontype > WP_NONE && weapontype < WP_NUM_WEAPONS)
|
||||
{ // Use the table to generate the muzzlepoint;
|
||||
{ // Crouching. Use the add-to-Z method to adjust vertically.
|
||||
VectorMA(muzzlePoint, muzzleOffPoint[0], forward, muzzlePoint);
|
||||
VectorMA(muzzlePoint, muzzleOffPoint[1], right, muzzlePoint);
|
||||
muzzlePoint[2] += 24 + muzzleOffPoint[2];
|
||||
}
|
||||
}
|
||||
|
||||
// snap to integer coordinates for more efficient network bandwidth usage
|
||||
SnapVector( muzzlePoint );
|
||||
}
|
||||
|
||||
void AnimEntFireWeapon( gentity_t *ent, qboolean altFire )
|
||||
{
|
||||
vec3_t modifiedAngles;
|
||||
VectorCopy(ent->s.apos.trBase, modifiedAngles);
|
||||
// modifiedAngles[PITCH] = -modifiedAngles[PITCH];
|
||||
if (modifiedAngles[PITCH] < -180)
|
||||
{
|
||||
modifiedAngles[PITCH] += 90;
|
||||
}
|
||||
AngleVectors( modifiedAngles, forward, right, up );
|
||||
|
||||
AnimEntCalcMuzzlePoint ( ent, forward, right, up, muzzle );
|
||||
|
||||
//rww - NOTE: I have only tested the bryar, blaster, and disruptor for weapon firing.
|
||||
//Other routines will likely have a client pointer reference in them and cause a crash.
|
||||
|
||||
// fire the specific weapon
|
||||
switch( ent->s.weapon )
|
||||
{
|
||||
case WP_STUN_BATON:
|
||||
WP_FireStunBaton( ent, altFire );
|
||||
break;
|
||||
|
||||
case WP_SABER:
|
||||
break;
|
||||
|
||||
case WP_BRYAR_PISTOL:
|
||||
WP_FireBryarPistol( ent, altFire );
|
||||
break;
|
||||
|
||||
case WP_BLASTER:
|
||||
WP_FireBlaster( ent, altFire );
|
||||
break;
|
||||
|
||||
case WP_DISRUPTOR:
|
||||
WP_FireDisruptor( ent, altFire );
|
||||
break;
|
||||
|
||||
case WP_BOWCASTER:
|
||||
WP_FireBowcaster( ent, altFire );
|
||||
break;
|
||||
|
||||
case WP_REPEATER:
|
||||
WP_FireRepeater( ent, altFire );
|
||||
break;
|
||||
|
||||
case WP_DEMP2:
|
||||
WP_FireDEMP2( ent, altFire );
|
||||
break;
|
||||
|
||||
case WP_FLECHETTE:
|
||||
WP_FireFlechette( ent, altFire );
|
||||
break;
|
||||
|
||||
case WP_ROCKET_LAUNCHER:
|
||||
WP_FireRocket( ent, altFire );
|
||||
break;
|
||||
|
||||
case WP_THERMAL:
|
||||
WP_FireThermalDetonator( ent, altFire );
|
||||
break;
|
||||
|
||||
case WP_TRIP_MINE:
|
||||
WP_PlaceLaserTrap( ent, altFire );
|
||||
break;
|
||||
|
||||
case WP_DET_PACK:
|
||||
WP_DropDetPack( ent, altFire );
|
||||
break;
|
||||
|
||||
case WP_EMPLACED_GUN:
|
||||
WP_FireEmplaced( ent, altFire );
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------
|
||||
static void WP_FireEmplaced( gentity_t *ent, qboolean altFire )
|
||||
//---------------------------------------------------------
|
||||
|
|
|
@ -568,6 +568,83 @@ int COM_ParseInfos( char *buf, int max, char infos[][MAX_INFO_STRING] ) {
|
|||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
===============
|
||||
COM_ParseString
|
||||
===============
|
||||
*/
|
||||
qboolean COM_ParseString( const char **data, const char **s )
|
||||
{
|
||||
// *s = COM_ParseExt( data, qtrue );
|
||||
*s = COM_ParseExt( data, qfalse );
|
||||
if ( s[0] == 0 )
|
||||
{
|
||||
Com_Printf("unexpected EOF\n");
|
||||
return qtrue;
|
||||
}
|
||||
return qfalse;
|
||||
}
|
||||
|
||||
/*
|
||||
===============
|
||||
COM_ParseInt
|
||||
===============
|
||||
*/
|
||||
qboolean COM_ParseInt( const char **data, int *i )
|
||||
{
|
||||
const char *token;
|
||||
|
||||
token = COM_ParseExt( data, qfalse );
|
||||
if ( token[0] == 0 )
|
||||
{
|
||||
Com_Printf( "unexpected EOF\n" );
|
||||
return qtrue;
|
||||
}
|
||||
|
||||
*i = atoi( token );
|
||||
return qfalse;
|
||||
}
|
||||
|
||||
/*
|
||||
===============
|
||||
COM_ParseFloat
|
||||
===============
|
||||
*/
|
||||
qboolean COM_ParseFloat( const char **data, float *f )
|
||||
{
|
||||
const char *token;
|
||||
|
||||
token = COM_ParseExt( data, qfalse );
|
||||
if ( token[0] == 0 )
|
||||
{
|
||||
Com_Printf( "unexpected EOF\n" );
|
||||
return qtrue;
|
||||
}
|
||||
|
||||
*f = atof( token );
|
||||
return qfalse;
|
||||
}
|
||||
|
||||
/*
|
||||
===============
|
||||
COM_ParseVec4
|
||||
===============
|
||||
*/
|
||||
qboolean COM_ParseVec4( const char **buffer, vec4_t *c)
|
||||
{
|
||||
int i;
|
||||
float f;
|
||||
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
if (COM_ParseFloat(buffer, &f))
|
||||
{
|
||||
return qtrue;
|
||||
}
|
||||
(*c)[i] = f;
|
||||
}
|
||||
return qfalse;
|
||||
}
|
||||
|
||||
/*
|
||||
==================
|
||||
|
|
|
@ -292,6 +292,7 @@ typedef int sfxHandle_t;
|
|||
typedef int fileHandle_t;
|
||||
typedef int clipHandle_t;
|
||||
|
||||
#define G2_COLLISION_ENABLED
|
||||
|
||||
#ifndef NULL
|
||||
#define NULL ((void *)0)
|
||||
|
@ -364,6 +365,7 @@ typedef enum {
|
|||
|
||||
typedef enum {
|
||||
BLOCKED_NONE,
|
||||
BLOCKED_BOUNCE_MOVE,
|
||||
BLOCKED_PARRY_BROKEN,
|
||||
BLOCKED_ATK_BOUNCE,
|
||||
BLOCKED_UPPER_RIGHT,
|
||||
|
@ -669,7 +671,9 @@ extern vec4_t colorLtBlue;
|
|||
extern vec4_t colorDkBlue;
|
||||
|
||||
#define Q_COLOR_ESCAPE '^'
|
||||
#define Q_IsColorString(p) ( p && *(p) == Q_COLOR_ESCAPE && *((p)+1) && *((p)+1) != Q_COLOR_ESCAPE )
|
||||
// you MUST have the last bit on here about colour strings being less than 7 or taiwanese strings register as colour!!!!
|
||||
#define Q_IsColorString(p) ( p && *(p) == Q_COLOR_ESCAPE && *((p)+1) && *((p)+1) != Q_COLOR_ESCAPE && *((p)+1) <= '7' )
|
||||
|
||||
|
||||
#define COLOR_BLACK '0'
|
||||
#define COLOR_RED '1'
|
||||
|
@ -939,6 +943,10 @@ char *COM_ParseExt( const char **data_p, qboolean allowLineBreak );
|
|||
int COM_Compress( char *data_p );
|
||||
void COM_ParseError( char *format, ... );
|
||||
void COM_ParseWarning( char *format, ... );
|
||||
qboolean COM_ParseString( const char **data, const char **s );
|
||||
qboolean COM_ParseInt( const char **data, int *i );
|
||||
qboolean COM_ParseFloat( const char **data, float *f );
|
||||
qboolean COM_ParseVec4( const char **buffer, vec4_t *c);
|
||||
//int COM_ParseInfos( char *buf, int max, char infos[][MAX_INFO_STRING] );
|
||||
|
||||
#define MAX_TOKENLENGTH 1024
|
||||
|
@ -1178,6 +1186,11 @@ typedef struct
|
|||
}CollisionRecord_t;
|
||||
|
||||
#define MAX_G2_COLLISIONS 16
|
||||
|
||||
#ifdef G2_COLLISION_ENABLED
|
||||
typedef CollisionRecord_t G2Trace_t[MAX_G2_COLLISIONS]; // map that describes all of the parts of ghoul2 models that got hit
|
||||
#endif
|
||||
|
||||
/*
|
||||
Ghoul2 Insert End
|
||||
*/
|
||||
|
@ -1526,6 +1539,9 @@ typedef struct playerState_s {
|
|||
float emplacedTime;
|
||||
|
||||
qboolean isJediMaster;
|
||||
qboolean forceRestricted;
|
||||
qboolean trueJedi;
|
||||
qboolean trueNonJedi;
|
||||
int saberIndex;
|
||||
|
||||
int genericEnemyIndex;
|
||||
|
@ -1619,8 +1635,7 @@ typedef struct playerState_s {
|
|||
// so they aren't game/cgame only definitions
|
||||
//
|
||||
#define BUTTON_ATTACK 1
|
||||
//#define BUTTON_TALK 2 // displays talk balloon and disables actions
|
||||
//#define BUTTON_FORCEJUMP 2 //rww - might be better to just reassign this from button1 on the client..
|
||||
#define BUTTON_TALK 2 // displays talk balloon and disables actions
|
||||
#define BUTTON_USE_HOLDABLE 4
|
||||
#define BUTTON_GESTURE 8
|
||||
#define BUTTON_WALKING 16 // walking can't just be infered from MOVE_RUN
|
||||
|
|
Binary file not shown.
|
@ -21,13 +21,15 @@ int ysalamiriLoopSound = 0;
|
|||
|
||||
#define FORCE_VELOCITY_DAMAGE 0
|
||||
|
||||
void G_PreDefSound(vec3_t org, int pdSound)
|
||||
gentity_t *G_PreDefSound(vec3_t org, int pdSound)
|
||||
{
|
||||
gentity_t *te;
|
||||
|
||||
te = G_TempEntity( org, EV_PREDEFSOUND );
|
||||
te->s.eventParm = pdSound;
|
||||
VectorCopy(org, te->s.origin);
|
||||
|
||||
return te;
|
||||
}
|
||||
|
||||
qboolean InFront( vec3_t spot, vec3_t from, vec3_t fromAngles, float threshHold )
|
||||
|
@ -422,6 +424,13 @@ void WP_InitForcePowers( gentity_t *ent )
|
|||
ent->client->ps.fd.forcePowerSelected = 0;
|
||||
}
|
||||
}
|
||||
|
||||
while (i < NUM_FORCE_POWERS)
|
||||
{
|
||||
ent->client->ps.fd.forcePowerBaseLevel[i] = ent->client->ps.fd.forcePowerLevel[i];
|
||||
i++;
|
||||
}
|
||||
ent->client->ps.fd.forceUsingAdded = 0;
|
||||
}
|
||||
|
||||
void WP_SpawnInitForcePowers( gentity_t *ent )
|
||||
|
@ -492,7 +501,8 @@ void WP_SpawnInitForcePowers( gentity_t *ent )
|
|||
|
||||
while (i < NUM_FORCE_POWERS)
|
||||
{
|
||||
ent->client->ps.fd.forcePowerBaseLevel[i] = ent->client->ps.fd.forcePowerLevel[i];
|
||||
//Don't know why I was doing this here either.
|
||||
//ent->client->ps.fd.forcePowerBaseLevel[i] = ent->client->ps.fd.forcePowerLevel[i];
|
||||
|
||||
ent->client->ps.fd.forcePowerDebounce[i] = 0;
|
||||
ent->client->ps.fd.forcePowerDuration[i] = 0;
|
||||
|
@ -501,7 +511,8 @@ void WP_SpawnInitForcePowers( gentity_t *ent )
|
|||
}
|
||||
|
||||
ent->client->ps.fd.forcePowerRegenDebounceTime = 0;
|
||||
ent->client->ps.fd.forceUsingAdded = 0;
|
||||
//I wonder why I was doing this.
|
||||
//ent->client->ps.fd.forceUsingAdded = 0;
|
||||
ent->client->ps.fd.forceJumpZStart = 0;
|
||||
ent->client->ps.fd.forceJumpCharge = 0;
|
||||
ent->client->ps.fd.forceJumpSound = 0;
|
||||
|
@ -655,6 +666,7 @@ int WP_AbsorbConversion(gentity_t *attacked, int atdAbsLevel, gentity_t *attacke
|
|||
{
|
||||
int getLevel = 0;
|
||||
int addTot = 0;
|
||||
gentity_t *abSound;
|
||||
|
||||
if (atPower != FP_LIGHTNING &&
|
||||
atPower != FP_DRAIN &&
|
||||
|
@ -698,7 +710,13 @@ int WP_AbsorbConversion(gentity_t *attacked, int atdAbsLevel, gentity_t *attacke
|
|||
}
|
||||
|
||||
//play sound indicating that attack was absorbed
|
||||
G_PreDefSound(attacker->client->ps.origin, PDSOUND_ABSORBHIT);
|
||||
if (attacked->client->forcePowerSoundDebounce < level.time)
|
||||
{
|
||||
abSound = G_PreDefSound(attacked->client->ps.origin, PDSOUND_ABSORBHIT);
|
||||
abSound->s.trickedentindex = attacked->s.number;
|
||||
|
||||
attacked->client->forcePowerSoundDebounce = level.time + 400;
|
||||
}
|
||||
|
||||
return getLevel;
|
||||
}
|
||||
|
@ -958,7 +976,7 @@ void ForceHeal( gentity_t *self )
|
|||
|
||||
if (self->client->ps.fd.forcePowerLevel[FP_HEAL] == FORCE_LEVEL_3)
|
||||
{
|
||||
self->health += 50;
|
||||
self->health += 25; //This was 50, but that angered the Balance God.
|
||||
|
||||
if (self->health > self->client->ps.stats[STAT_MAX_HEALTH])
|
||||
{
|
||||
|
@ -968,7 +986,7 @@ void ForceHeal( gentity_t *self )
|
|||
}
|
||||
else if (self->client->ps.fd.forcePowerLevel[FP_HEAL] == FORCE_LEVEL_2)
|
||||
{
|
||||
self->health += 25;
|
||||
self->health += 10;
|
||||
|
||||
if (self->health > self->client->ps.stats[STAT_MAX_HEALTH])
|
||||
{
|
||||
|
@ -978,7 +996,7 @@ void ForceHeal( gentity_t *self )
|
|||
}
|
||||
else
|
||||
{
|
||||
self->health += 10;
|
||||
self->health += 5;
|
||||
|
||||
if (self->health > self->client->ps.stats[STAT_MAX_HEALTH])
|
||||
{
|
||||
|
@ -1502,6 +1520,13 @@ void ForceLightningDamage( gentity_t *self, gentity_t *traceEnt, vec3_t dir, vec
|
|||
|
||||
if ( traceEnt && traceEnt->takedamage )
|
||||
{
|
||||
if (!traceEnt->client && traceEnt->s.eType == ET_GRAPPLE)
|
||||
{ //g2animent
|
||||
if (traceEnt->s.genericenemyindex < level.time)
|
||||
{
|
||||
traceEnt->s.genericenemyindex = level.time + 2000;
|
||||
}
|
||||
}
|
||||
if ( traceEnt->client )
|
||||
{//an enemy or object
|
||||
if (ForcePowerUsableOn(self, traceEnt, FP_LIGHTNING))
|
||||
|
@ -1724,6 +1749,13 @@ void ForceDrainDamage( gentity_t *self, gentity_t *traceEnt, vec3_t dir, vec3_t
|
|||
{
|
||||
if ( traceEnt->client && (!OnSameTeam(self, traceEnt) || g_friendlyFire.integer) && self->client->ps.fd.forceDrainTime < level.time && traceEnt->client->ps.fd.forcePower )
|
||||
{//an enemy or object
|
||||
if (!traceEnt->client && traceEnt->s.eType == ET_GRAPPLE)
|
||||
{ //g2animent
|
||||
if (traceEnt->s.genericenemyindex < level.time)
|
||||
{
|
||||
traceEnt->s.genericenemyindex = level.time + 2000;
|
||||
}
|
||||
}
|
||||
if (ForcePowerUsableOn(self, traceEnt, FP_DRAIN))
|
||||
{
|
||||
int modPowerLevel = -1;
|
||||
|
@ -1766,7 +1798,7 @@ void ForceDrainDamage( gentity_t *self, gentity_t *traceEnt, vec3_t dir, vec3_t
|
|||
|
||||
if (dmg)
|
||||
{
|
||||
traceEnt->client->ps.fd.forcePower -= dmg;
|
||||
traceEnt->client->ps.fd.forcePower -= (dmg);
|
||||
}
|
||||
if (traceEnt->client->ps.fd.forcePower < 0)
|
||||
{
|
||||
|
@ -1819,9 +1851,14 @@ void ForceDrainDamage( gentity_t *self, gentity_t *traceEnt, vec3_t dir, vec3_t
|
|||
// traceEnt->client->ps.powerups[PW_DISINT_1] = level.time + 500;
|
||||
}
|
||||
|
||||
if (traceEnt->client->forcePowerSoundDebounce < level.time)
|
||||
{
|
||||
tent = G_TempEntity( impactPoint, EV_FORCE_DRAINED);
|
||||
tent->s.eventParm = DirToByte(dir);
|
||||
tent->s.owner = traceEnt->s.number;
|
||||
|
||||
traceEnt->client->forcePowerSoundDebounce = level.time + 400;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1962,7 +1999,7 @@ int ForceShootDrain( gentity_t *self )
|
|||
}
|
||||
else*/
|
||||
{
|
||||
BG_ForcePowerDrain( &self->client->ps, FP_DRAIN, 1 );
|
||||
BG_ForcePowerDrain( &self->client->ps, FP_DRAIN, 5 ); //used to be 1, but this did, too, anger the God of Balance.
|
||||
}
|
||||
|
||||
self->client->ps.fd.forcePowerRegenDebounceTime = level.time + 500;
|
||||
|
@ -2528,6 +2565,7 @@ qboolean CanCounterThrow(gentity_t *self, qboolean pull)
|
|||
return 1;
|
||||
}
|
||||
|
||||
extern void Touch_Button(gentity_t *ent, gentity_t *other, trace_t *trace );
|
||||
void ForceThrow( gentity_t *self, qboolean pull )
|
||||
{
|
||||
//shove things in front of you away
|
||||
|
@ -2669,6 +2707,14 @@ void ForceThrow( gentity_t *self, qboolean pull )
|
|||
if (tr.fraction != 1.0 &&
|
||||
tr.entityNum != ENTITYNUM_NONE)
|
||||
{
|
||||
if (!g_entities[tr.entityNum].client && g_entities[tr.entityNum].s.eType == ET_GRAPPLE)
|
||||
{ //g2animent
|
||||
if (g_entities[tr.entityNum].s.genericenemyindex < level.time)
|
||||
{
|
||||
g_entities[tr.entityNum].s.genericenemyindex = level.time + 2000;
|
||||
}
|
||||
}
|
||||
|
||||
numListedEntities = 0;
|
||||
entityList[numListedEntities] = tr.entityNum;
|
||||
numListedEntities++;
|
||||
|
@ -2689,6 +2735,14 @@ void ForceThrow( gentity_t *self, qboolean pull )
|
|||
{
|
||||
ent = &g_entities[entityList[e]];
|
||||
|
||||
if (!ent->client && ent->s.eType == ET_GRAPPLE)
|
||||
{ //g2animent
|
||||
if (ent->s.genericenemyindex < level.time)
|
||||
{
|
||||
ent->s.genericenemyindex = level.time + 2000;
|
||||
}
|
||||
}
|
||||
|
||||
if (ent)
|
||||
{
|
||||
if (ent->client)
|
||||
|
@ -2767,6 +2821,15 @@ void ForceThrow( gentity_t *self, qboolean pull )
|
|||
if ( ent->s.eType != ET_ITEM /*&& ent->e_ThinkFunc != thinkF_G_RunObject*/ )//|| !(ent->flags&FL_DROPPED_ITEM) )//was only dropped items
|
||||
{
|
||||
//FIXME: need pushable objects
|
||||
if ( Q_stricmp( "func_button", ent->classname ) == 0 )
|
||||
{//we might push it
|
||||
if ( pull || !(ent->spawnflags&SPF_BUTTON_FPUSHABLE) )
|
||||
{//not force-pushable, never pullable
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( ent->s.eFlags & EF_NODRAW )
|
||||
{
|
||||
continue;
|
||||
|
@ -2775,8 +2838,8 @@ void ForceThrow( gentity_t *self, qboolean pull )
|
|||
{
|
||||
if ( Q_stricmp( "lightsaber", ent->classname ) != 0 )
|
||||
{//not a lightsaber
|
||||
// if ( !(ent->svFlags&SVF_GLASS_BRUSH) )
|
||||
// {//and not glass
|
||||
// if ( !(ent->svFlags&SVF_GLASS_BRUSH) )
|
||||
// {//and not glass
|
||||
if ( Q_stricmp( "func_door", ent->classname ) != 0 || !(ent->spawnflags & 2/*MOVER_FORCE_ACTIVATE*/) )
|
||||
{//not a force-usable door
|
||||
if ( Q_stricmp( "limb", ent->classname ) )
|
||||
|
@ -2788,12 +2851,13 @@ void ForceThrow( gentity_t *self, qboolean pull )
|
|||
{//not at rest
|
||||
continue;
|
||||
}
|
||||
// }
|
||||
// }
|
||||
}
|
||||
//continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( ent->s.pos.trType == TR_STATIONARY && (ent->s.eFlags&EF_MISSILE_STICK) )
|
||||
|
@ -3134,6 +3198,11 @@ void ForceThrow( gentity_t *self, qboolean pull )
|
|||
}
|
||||
GEntity_UseFunc( push_list[x], self, self );
|
||||
}
|
||||
else if ( Q_stricmp( "func_button", push_list[x]->classname ) == 0 )
|
||||
{//pretend you pushed it
|
||||
Touch_Button( push_list[x], self, NULL );
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3658,6 +3727,19 @@ static void WP_ForcePowerRun( gentity_t *self, forcePowers_t forcePower, usercmd
|
|||
WP_ForcePowerStop(self, FP_GRIP);
|
||||
break;
|
||||
}
|
||||
|
||||
if (self->client->ps.fd.forcePowerDebounce[FP_PULL] < level.time)
|
||||
{ //This is sort of not ideal. Using the debounce value reserved for pull for this because pull doesn't need it.
|
||||
BG_ForcePowerDrain( &self->client->ps, forcePower, 1 );
|
||||
self->client->ps.fd.forcePowerDebounce[FP_PULL] = level.time + 100;
|
||||
}
|
||||
|
||||
if (self->client->ps.fd.forcePower < 1)
|
||||
{
|
||||
WP_ForcePowerStop(self, FP_GRIP);
|
||||
break;
|
||||
}
|
||||
|
||||
DoGripAction(self, forcePower);
|
||||
break;
|
||||
case FP_LEVITATION:
|
||||
|
@ -3779,7 +3861,6 @@ static void WP_ForcePowerRun( gentity_t *self, forcePowers_t forcePower, usercmd
|
|||
case FP_SABERTHROW:
|
||||
break;
|
||||
case FP_PROTECT:
|
||||
case FP_ABSORB:
|
||||
if (self->client->ps.fd.forcePowerDebounce[forcePower] < level.time)
|
||||
{
|
||||
BG_ForcePowerDrain( &self->client->ps, forcePower, 1 );
|
||||
|
@ -3791,6 +3872,18 @@ static void WP_ForcePowerRun( gentity_t *self, forcePowers_t forcePower, usercmd
|
|||
self->client->ps.fd.forcePowerDebounce[forcePower] = level.time + 300;
|
||||
}
|
||||
break;
|
||||
case FP_ABSORB:
|
||||
if (self->client->ps.fd.forcePowerDebounce[forcePower] < level.time)
|
||||
{
|
||||
BG_ForcePowerDrain( &self->client->ps, forcePower, 1 );
|
||||
if (self->client->ps.fd.forcePower < 1)
|
||||
{
|
||||
WP_ForcePowerStop(self, forcePower);
|
||||
}
|
||||
|
||||
self->client->ps.fd.forcePowerDebounce[forcePower] = level.time + 600;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -4307,6 +4400,29 @@ void JediMasterUpdate(gentity_t *self)
|
|||
}
|
||||
}
|
||||
|
||||
qboolean WP_HasForcePowers( const playerState_t *ps )
|
||||
{
|
||||
int i;
|
||||
if ( ps )
|
||||
{
|
||||
for ( i = 0; i < NUM_FORCE_POWERS; i++ )
|
||||
{
|
||||
if ( i == FP_LEVITATION )
|
||||
{
|
||||
if ( ps->fd.forcePowerLevel[i] > FORCE_LEVEL_1 )
|
||||
{
|
||||
return qtrue;
|
||||
}
|
||||
}
|
||||
else if ( ps->fd.forcePowerLevel[i] > FORCE_LEVEL_0 )
|
||||
{
|
||||
return qtrue;
|
||||
}
|
||||
}
|
||||
}
|
||||
return qfalse;
|
||||
}
|
||||
|
||||
void WP_ForcePowersUpdate( gentity_t *self, usercmd_t *ucmd )
|
||||
{
|
||||
qboolean usingForce = qfalse;
|
||||
|
@ -4333,6 +4449,19 @@ void WP_ForcePowersUpdate( gentity_t *self, usercmd_t *ucmd )
|
|||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
if (g_trueJedi.integer)
|
||||
{
|
||||
if (self->client->ps.weapon != WP_SABER)
|
||||
{
|
||||
self->client->ps.forceRestricted = qtrue;
|
||||
}
|
||||
else
|
||||
{
|
||||
self->client->ps.forceRestricted = qfalse;
|
||||
}
|
||||
}
|
||||
*/
|
||||
if (self->client->ps.fd.saberAnimLevel > self->client->ps.fd.forcePowerLevel[FP_SABERATTACK])
|
||||
{
|
||||
self->client->ps.fd.saberAnimLevel = self->client->ps.fd.forcePowerLevel[FP_SABERATTACK];
|
||||
|
@ -4767,6 +4896,9 @@ void WP_ForcePowersUpdate( gentity_t *self, usercmd_t *ucmd )
|
|||
if ( !self->client->ps.saberInFlight && self->client->ps.fd.forcePowerRegenDebounceTime < level.time )
|
||||
{
|
||||
if (g_gametype.integer != GT_HOLOCRON || g_MaxHolocronCarry.value)
|
||||
{
|
||||
//if (!g_trueJedi.integer || self->client->ps.weapon == WP_SABER)
|
||||
//let non-jedi force regen since we're doing a more strict jedi/non-jedi thing... this gives dark jedi something to drain
|
||||
{
|
||||
if (self->client->ps.powerups[PW_FORCE_BOON])
|
||||
{
|
||||
|
@ -4781,6 +4913,13 @@ void WP_ForcePowersUpdate( gentity_t *self, usercmd_t *ucmd )
|
|||
WP_ForcePowerRegenerate( self, 0 );
|
||||
}
|
||||
}
|
||||
/*
|
||||
else if (g_trueJedi.integer && self->client->ps.weapon != WP_SABER)
|
||||
{
|
||||
self->client->ps.fd.forcePower = 0;
|
||||
}
|
||||
*/
|
||||
}
|
||||
else
|
||||
{ //regenerate based on the number of holocrons carried
|
||||
holoregen = 0;
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -15,6 +15,10 @@
|
|||
#endif
|
||||
#include "G2_local.h"
|
||||
|
||||
#ifdef G2_COLLISION_ENABLED
|
||||
#include "../qcommon/miniheap.h"
|
||||
#endif
|
||||
|
||||
#include <set>
|
||||
|
||||
extern mdxaBone_t worldMatrix;
|
||||
|
@ -172,6 +176,7 @@ int G2API_InitGhoul2Model(CGhoul2Info_v **ghoul2Ptr, const char *fileName, int m
|
|||
{
|
||||
if (ghoul2.size() == 0)//very first model created
|
||||
{//you can't have an empty vector, so let's not give it one
|
||||
G2API_CleanGhoul2Models(ghoul2Ptr);
|
||||
delete *ghoul2Ptr;
|
||||
*ghoul2Ptr = 0;
|
||||
}
|
||||
|
@ -777,11 +782,76 @@ void G2API_DetachEnt(int *boltInfo)
|
|||
}
|
||||
|
||||
qboolean gG2_GBMNoReconstruct;
|
||||
qboolean gG2_GBMUseSPMethod;
|
||||
|
||||
qboolean G2API_GetBoltMatrix_SPMethod(CGhoul2Info_v &ghoul2, const int modelIndex, const int boltIndex, mdxaBone_t *matrix, const vec3_t angles,
|
||||
const vec3_t position, const int frameNum, qhandle_t *modelList, const vec3_t scale )
|
||||
{
|
||||
assert(ghoul2.size() > modelIndex);
|
||||
|
||||
if ((int)&ghoul2 && (ghoul2.size() > modelIndex))
|
||||
{
|
||||
CGhoul2Info *ghlInfo = &ghoul2[modelIndex];
|
||||
|
||||
//assert(boltIndex < ghlInfo->mBltlist.size());
|
||||
|
||||
if (ghlInfo && (boltIndex < ghlInfo->mBltlist.size()) && boltIndex >= 0 )
|
||||
{
|
||||
// make sure we have transformed the skeleton
|
||||
if (!gG2_GBMNoReconstruct)
|
||||
{
|
||||
G2_ConstructGhoulSkeleton(ghoul2, frameNum, modelList, true, angles, position, scale, false);
|
||||
}
|
||||
|
||||
gG2_GBMNoReconstruct = qfalse;
|
||||
|
||||
mdxaBone_t scaled;
|
||||
mdxaBone_t *use;
|
||||
use=&ghlInfo->mBltlist[boltIndex].position;
|
||||
|
||||
if (scale[0]||scale[1]||scale[2])
|
||||
{
|
||||
scaled=*use;
|
||||
use=&scaled;
|
||||
|
||||
// scale the bolt position by the scale factor for this model since at this point its still in model space
|
||||
if (scale[0])
|
||||
{
|
||||
scaled.matrix[0][3] *= scale[0];
|
||||
}
|
||||
if (scale[1])
|
||||
{
|
||||
scaled.matrix[1][3] *= scale[1];
|
||||
}
|
||||
if (scale[2])
|
||||
{
|
||||
scaled.matrix[2][3] *= scale[2];
|
||||
}
|
||||
}
|
||||
// pre generate the world matrix
|
||||
G2_GenerateWorldMatrix(angles, position);
|
||||
|
||||
VectorNormalize((float*)use->matrix[0]);
|
||||
VectorNormalize((float*)use->matrix[1]);
|
||||
VectorNormalize((float*)use->matrix[2]);
|
||||
|
||||
Multiply_3x4Matrix(matrix, &worldMatrix, use);
|
||||
return qtrue;
|
||||
}
|
||||
}
|
||||
return qfalse;
|
||||
}
|
||||
|
||||
qboolean G2API_GetBoltMatrix(CGhoul2Info_v &ghoul2, const int modelIndex, const int boltIndex, mdxaBone_t *matrix, const vec3_t angles, const vec3_t position, const int frameNum, qhandle_t *modelList, vec3_t scale )
|
||||
{
|
||||
assert(ghoul2.size() > modelIndex);
|
||||
|
||||
if (gG2_GBMUseSPMethod)
|
||||
{
|
||||
gG2_GBMUseSPMethod = qfalse;
|
||||
return G2API_GetBoltMatrix_SPMethod(ghoul2, modelIndex, boltIndex, matrix, angles, position, frameNum, modelList, scale);
|
||||
}
|
||||
|
||||
if ((int)&ghoul2 && (ghoul2.size() > modelIndex))
|
||||
{
|
||||
CGhoul2Info *ghlInfo = &ghoul2[modelIndex];
|
||||
|
@ -950,7 +1020,7 @@ static int QDECL QsortDistance( const void *a, const void *b ) {
|
|||
|
||||
|
||||
void G2API_CollisionDetect(CollisionRecord_t *collRecMap, CGhoul2Info_v &ghoul2, const vec3_t angles, const vec3_t position,
|
||||
int frameNumber, int entNum, vec3_t rayStart, vec3_t rayEnd, vec3_t scale, CMiniHeap *G2VertSpace, int traceFlags, int useLod)
|
||||
int frameNumber, int entNum, vec3_t rayStart, vec3_t rayEnd, vec3_t scale, CMiniHeap *G2VertSpace, int traceFlags, int useLod, float fRadius)
|
||||
{
|
||||
|
||||
if ((int)&ghoul2)
|
||||
|
@ -963,6 +1033,10 @@ void G2API_CollisionDetect(CollisionRecord_t *collRecMap, CGhoul2Info_v &ghoul2,
|
|||
// pre generate the world matrix - used to transform the incoming ray
|
||||
G2_GenerateWorldMatrix(angles, position);
|
||||
|
||||
#ifdef G2_COLLISION_ENABLED
|
||||
G2VertSpace->ResetHeap();
|
||||
#endif
|
||||
|
||||
// now having done that, time to build the model
|
||||
G2_TransformModel(ghoul2, frameNumber, scale, G2VertSpace, useLod);
|
||||
|
||||
|
@ -972,11 +1046,20 @@ void G2API_CollisionDetect(CollisionRecord_t *collRecMap, CGhoul2Info_v &ghoul2,
|
|||
TransformAndTranslatePoint(rayEnd, transRayEnd, &worldMatrixInv);
|
||||
|
||||
// now walk each model and check the ray against each poly - sigh, this is SO expensive. I wish there was a better way to do this.
|
||||
G2_TraceModels(ghoul2, transRayStart, transRayEnd, collRecMap, entNum, traceFlags, useLod);
|
||||
G2_TraceModels(ghoul2, transRayStart, transRayEnd, collRecMap, entNum, traceFlags, useLod, fRadius);
|
||||
#ifdef G2_COLLISION_ENABLED
|
||||
int i;
|
||||
for ( i = 0; i < MAX_G2_COLLISIONS && collRecMap[i].mEntityNum != -1; i ++ );
|
||||
|
||||
// now sort the resulting array of collision records so they are distance ordered
|
||||
qsort( collRecMap, i,
|
||||
sizeof( CCollisionRecord ), QsortDistance );
|
||||
|
||||
#else
|
||||
// now sort the resulting array of collision records so they are distance ordered
|
||||
qsort( collRecMap, MAX_G2_COLLISIONS,
|
||||
sizeof( CCollisionRecord ), QsortDistance );
|
||||
#endif
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -55,7 +55,7 @@ qboolean G2_Get_Bone_Anim_Index( boneInfo_v &blist, const int index, const int c
|
|||
void G2_List_Model_Surfaces(const char *fileName);
|
||||
void G2_List_Model_Bones(const char *fileName, int frame);
|
||||
qboolean G2_GetAnimFileName(const char *fileName, char **filename);
|
||||
void G2_TraceModels(CGhoul2Info_v &ghoul2, vec3_t rayStart, vec3_t rayEnd, CollisionRecord_t *collRecMap, int entNum, int traceFlags, int useLod);
|
||||
void G2_TraceModels(CGhoul2Info_v &ghoul2, vec3_t rayStart, vec3_t rayEnd, CollisionRecord_t *collRecMap, int entNum, int traceFlags, int useLod, float fRadius);
|
||||
void TransformAndTranslatePoint (vec3_t in, vec3_t out, mdxaBone_t *mat);
|
||||
void G2_TransformModel(CGhoul2Info_v &ghoul2, const int frameNum, vec3_t scale, CMiniHeap *G2VertSpace, int useLod);
|
||||
void G2_GenerateWorldMatrix(const vec3_t angles, const vec3_t origin);
|
||||
|
@ -128,7 +128,7 @@ int G2API_GetGhoul2ModelFlags(CGhoul2Info *ghlInfo);
|
|||
|
||||
qboolean G2API_GetAnimFileName(CGhoul2Info *ghlInfo, char **filename);
|
||||
void G2API_CollisionDetect(CollisionRecord_t *collRecMap, CGhoul2Info_v &ghoul2, const vec3_t angles, const vec3_t position,
|
||||
int frameNumber, int entNum, vec3_t rayStart, vec3_t rayEnd, vec3_t scale, CMiniHeap *G2VertSpace, int traceFlags, int useLod);
|
||||
int frameNumber, int entNum, vec3_t rayStart, vec3_t rayEnd, vec3_t scale, CMiniHeap *G2VertSpace, int traceFlags, int useLod, float fRadius);
|
||||
|
||||
void G2API_GiveMeVectorFromMatrix(mdxaBone_t *boltMatrix, Eorientations flags, vec3_t vec);
|
||||
int G2API_CopyGhoul2Instance(CGhoul2Info_v &g2From, CGhoul2Info_v &g2To, int modelIndex);
|
||||
|
@ -160,6 +160,7 @@ void G2API_DuplicateGhoul2Instance(CGhoul2Info_v &g2From, CGhoul2Info_v **g2To)
|
|||
void G2API_SetBoltInfo(CGhoul2Info_v &ghoul2, int modelIndex, int boltInfo);
|
||||
|
||||
extern qboolean gG2_GBMNoReconstruct;
|
||||
extern qboolean gG2_GBMUseSPMethod;
|
||||
// From tr_ghoul2.cpp
|
||||
void G2_ConstructGhoulSkeleton( CGhoul2Info_v &ghoul2, const int frameNum, qhandle_t *modelList, bool checkForNewOrigin, const vec3_t angles, const vec3_t position, const vec3_t scale, bool modelSet);
|
||||
|
||||
|
|
|
@ -151,6 +151,7 @@ public:
|
|||
int *TransformedVertsArray;
|
||||
int traceFlags;
|
||||
bool hitOne;
|
||||
float m_fRadius;
|
||||
|
||||
|
||||
CTraceSurface(
|
||||
|
@ -166,7 +167,8 @@ public:
|
|||
skin_t *initskin,
|
||||
shader_t *initcust_shader,
|
||||
int *initTransformedVertsArray,
|
||||
int inittraceFlags):
|
||||
int inittraceFlags,
|
||||
float fRadius):
|
||||
|
||||
surfaceNum(initsurfaceNum),
|
||||
rootSList(initrootSList),
|
||||
|
@ -178,7 +180,8 @@ public:
|
|||
skin(initskin),
|
||||
cust_shader(initcust_shader),
|
||||
traceFlags(inittraceFlags),
|
||||
TransformedVertsArray(initTransformedVertsArray)
|
||||
TransformedVertsArray(initTransformedVertsArray),
|
||||
m_fRadius(fRadius)
|
||||
{
|
||||
VectorCopy(initrayStart, rayStart);
|
||||
VectorCopy(initrayEnd, rayEnd);
|
||||
|
@ -307,6 +310,99 @@ int G2_DecideTraceLod(CGhoul2Info &ghoul2, int useLod, model_t *mod)
|
|||
return returnLod;
|
||||
}
|
||||
|
||||
#ifdef G2_COLLISION_ENABLED
|
||||
void R_TransformEachSurface( mdxmSurface_t *surface, vec3_t scale, CMiniHeap *G2VertSpace, int *TransformedVertsArray, mdxaBone_v &bonePtr) {
|
||||
int j, k, pos;
|
||||
int numVerts;
|
||||
mdxmVertex_t *v;
|
||||
float *TransformedVerts;
|
||||
|
||||
//
|
||||
// deform the vertexes by the lerped bones
|
||||
//
|
||||
|
||||
// alloc some space for the transformed verts to get put in
|
||||
v = (mdxmVertex_t *) ((byte *)surface + surface->ofsVerts);
|
||||
numVerts = surface->numVerts;
|
||||
mdxmVertexTexCoord_t *pTexCoords = (mdxmVertexTexCoord_t *) &v[numVerts];
|
||||
|
||||
TransformedVerts = (float *)G2VertSpace->MiniHeapAlloc(numVerts * 5 * 4);
|
||||
TransformedVertsArray[surface->thisSurfaceIndex] = (int)TransformedVerts;
|
||||
if (!TransformedVerts)
|
||||
{
|
||||
Com_Error(ERR_DROP, "Ran out of transform space gameside for Ghoul2 Models.\n");
|
||||
}
|
||||
|
||||
// whip through and actually transform each vertex
|
||||
int *piBoneRefs = (int*) ((byte*)surface + surface->ofsBoneReferences);
|
||||
|
||||
// optimisation issue
|
||||
if ((scale[0] != 1.0) || (scale[1] != 1.0) || (scale[2] != 1.0))
|
||||
{
|
||||
for ( j = pos = 0; j < numVerts; j++ )
|
||||
{
|
||||
vec3_t tempVert;
|
||||
|
||||
VectorClear( tempVert );
|
||||
|
||||
const int iNumWeights = G2_GetVertWeights( v );
|
||||
float fTotalWeight = 0.0f;
|
||||
for ( k = 0 ; k < iNumWeights ; k++ )
|
||||
{
|
||||
int iBoneIndex = G2_GetVertBoneIndex( v, k );
|
||||
float fBoneWeight = G2_GetVertBoneWeight( v, k, fTotalWeight, iNumWeights );
|
||||
|
||||
const mdxaBone_t &bone=bonePtr[piBoneRefs[iBoneIndex]].second;
|
||||
|
||||
tempVert[0] += fBoneWeight * ( DotProduct( bone.matrix[0], v->vertCoords ) + bone.matrix[0][3] );
|
||||
tempVert[1] += fBoneWeight * ( DotProduct( bone.matrix[1], v->vertCoords ) + bone.matrix[1][3] );
|
||||
tempVert[2] += fBoneWeight * ( DotProduct( bone.matrix[2], v->vertCoords ) + bone.matrix[2][3] );
|
||||
}
|
||||
// copy tranformed verts into temp space
|
||||
TransformedVerts[pos++] = tempVert[0] * scale[0];
|
||||
TransformedVerts[pos++] = tempVert[1] * scale[1];
|
||||
TransformedVerts[pos++] = tempVert[2] * scale[2];
|
||||
// we will need the S & T coors too for hitlocation and hitmaterial stuff
|
||||
TransformedVerts[pos++] = pTexCoords[j].texCoords[0];
|
||||
TransformedVerts[pos++] = pTexCoords[j].texCoords[1];
|
||||
|
||||
v++;// = (mdxmVertex_t *)&v->weights[/*v->numWeights*/surface->maxVertBoneWeights];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for ( j = pos = 0; j < numVerts; j++ )
|
||||
{
|
||||
vec3_t tempVert;
|
||||
|
||||
VectorClear( tempVert );
|
||||
|
||||
const int iNumWeights = G2_GetVertWeights( v );
|
||||
float fTotalWeight = 0.0f;
|
||||
for ( k = 0 ; k < iNumWeights ; k++ )
|
||||
{
|
||||
int iBoneIndex = G2_GetVertBoneIndex( v, k );
|
||||
float fBoneWeight = G2_GetVertBoneWeight( v, k, fTotalWeight, iNumWeights );
|
||||
|
||||
const mdxaBone_t &bone=bonePtr[piBoneRefs[iBoneIndex]].second;
|
||||
|
||||
tempVert[0] += fBoneWeight * ( DotProduct( bone.matrix[0], v->vertCoords ) + bone.matrix[0][3] );
|
||||
tempVert[1] += fBoneWeight * ( DotProduct( bone.matrix[1], v->vertCoords ) + bone.matrix[1][3] );
|
||||
tempVert[2] += fBoneWeight * ( DotProduct( bone.matrix[2], v->vertCoords ) + bone.matrix[2][3] );
|
||||
}
|
||||
// copy tranformed verts into temp space
|
||||
TransformedVerts[pos++] = tempVert[0];
|
||||
TransformedVerts[pos++] = tempVert[1];
|
||||
TransformedVerts[pos++] = tempVert[2];
|
||||
// we will need the S & T coors too for hitlocation and hitmaterial stuff
|
||||
TransformedVerts[pos++] = pTexCoords[j].texCoords[0];
|
||||
TransformedVerts[pos++] = pTexCoords[j].texCoords[1];
|
||||
|
||||
v++;// = (mdxmVertex_t *)&v->weights[/*v->numWeights*/surface->maxVertBoneWeights];
|
||||
}
|
||||
}
|
||||
}
|
||||
#else
|
||||
void R_TransformEachSurface( mdxmSurface_t *surface, vec3_t scale, CMiniHeap *G2VertSpace, int *TransformedVertsArray, mdxaBone_v &bonePtr) {
|
||||
int j, k;
|
||||
int numVerts;
|
||||
|
@ -415,6 +511,7 @@ void R_TransformEachSurface( mdxmSurface_t *surface, vec3_t scale, CMiniHeap *G2
|
|||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
void G2_TransformSurfaces(int surfaceNum, surfaceInfo_v &rootSList,
|
||||
mdxaBone_v &bonePtr, model_t *currentModel, int lod, vec3_t scale, CMiniHeap *G2VertSpace, int *TransformedVertArray, bool secondTimeAround)
|
||||
|
@ -845,6 +942,222 @@ void G2_GorePolys( const mdxmSurface_t *surface, const vec3_t rayStart, const ve
|
|||
}
|
||||
#endif // _SOF2
|
||||
|
||||
//Sorry for the sloppiness here, this stuff is just hacked together to work from SP
|
||||
#ifdef G2_COLLISION_ENABLED
|
||||
|
||||
#ifndef _SOF2
|
||||
struct SVertexTemp
|
||||
{
|
||||
int flags;
|
||||
int touch;
|
||||
int newindex;
|
||||
float tex[2];
|
||||
SVertexTemp()
|
||||
{
|
||||
touch=0;
|
||||
}
|
||||
};
|
||||
#define MAX_GORE_VERTS (3000)
|
||||
static SVertexTemp GoreVerts[MAX_GORE_VERTS];
|
||||
#endif
|
||||
|
||||
void TransformAndTranslatePoint_SP (const vec3_t in, vec3_t out, mdxaBone_t *mat)
|
||||
{
|
||||
|
||||
for (int i=0;i<3;i++)
|
||||
{
|
||||
out[i]= in[0]*mat->matrix[i][0] + in[1]*mat->matrix[i][1] + in[2]*mat->matrix[i][2] + mat->matrix[i][3];
|
||||
}
|
||||
}
|
||||
|
||||
// now we're at poly level, check each model space transformed poly against the model world transfomed ray
|
||||
static bool G2_RadiusTracePolys( const mdxmSurface_t *surface, const vec3_t rayStart, const vec3_t rayEnd, CollisionRecord_t *collRecMap, int entNum, int modelIndex, const skin_t *skin, const shader_t *cust_shader, const mdxmSurfHierarchy_t *surfInfo, int *TransformedVertsArray, int traceFlags, float fRadius)
|
||||
{
|
||||
int j;
|
||||
vec3_t basis1;
|
||||
vec3_t basis2;
|
||||
vec3_t taxis;
|
||||
vec3_t saxis;
|
||||
|
||||
basis2[0]=0.0f;
|
||||
basis2[1]=0.0f;
|
||||
basis2[2]=1.0f;
|
||||
|
||||
vec3_t v3RayDir;
|
||||
VectorSubtract(rayEnd, rayStart, v3RayDir);
|
||||
|
||||
CrossProduct(v3RayDir,basis2,basis1);
|
||||
|
||||
if (DotProduct(basis1,basis1)<.1f)
|
||||
{
|
||||
basis2[0]=0.0f;
|
||||
basis2[1]=1.0f;
|
||||
basis2[2]=0.0f;
|
||||
CrossProduct(v3RayDir,basis2,basis1);
|
||||
}
|
||||
|
||||
CrossProduct(v3RayDir,basis1,basis2);
|
||||
// Give me a shot direction not a bunch of zeros :) -Gil
|
||||
// assert(DotProduct(basis1,basis1)>.0001f);
|
||||
// assert(DotProduct(basis2,basis2)>.0001f);
|
||||
|
||||
VectorNormalize(basis1);
|
||||
VectorNormalize(basis2);
|
||||
|
||||
const float c=cos(0);//theta
|
||||
const float s=sin(0);//theta
|
||||
|
||||
VectorScale(basis1, 0.5f * c / fRadius,taxis);
|
||||
VectorMA(taxis, 0.5f * s / fRadius,basis2,taxis);
|
||||
|
||||
VectorScale(basis1,-0.5f * s /fRadius,saxis);
|
||||
VectorMA( saxis, 0.5f * c /fRadius,basis2,saxis);
|
||||
|
||||
const float * const verts = (float *)TransformedVertsArray[surface->thisSurfaceIndex];
|
||||
const int numVerts = surface->numVerts;
|
||||
|
||||
int flags=63;
|
||||
//rayDir/=lengthSquared(raydir);
|
||||
const float f = VectorLengthSquared(v3RayDir);
|
||||
v3RayDir[0]/=f;
|
||||
v3RayDir[1]/=f;
|
||||
v3RayDir[2]/=f;
|
||||
|
||||
for ( j = 0; j < numVerts; j++ )
|
||||
{
|
||||
const int pos=j*5;
|
||||
vec3_t delta;
|
||||
delta[0]=verts[pos+0]-rayStart[0];
|
||||
delta[1]=verts[pos+1]-rayStart[1];
|
||||
delta[2]=verts[pos+2]-rayStart[2];
|
||||
const float s=DotProduct(delta,saxis)+0.5f;
|
||||
const float t=DotProduct(delta,taxis)+0.5f;
|
||||
const float u=DotProduct(delta,v3RayDir);
|
||||
int vflags=0;
|
||||
|
||||
if (s>0)
|
||||
{
|
||||
vflags|=1;
|
||||
}
|
||||
if (s<1)
|
||||
{
|
||||
vflags|=2;
|
||||
}
|
||||
if (t>0)
|
||||
{
|
||||
vflags|=4;
|
||||
}
|
||||
if (t<1)
|
||||
{
|
||||
vflags|=8;
|
||||
}
|
||||
if (u>0)
|
||||
{
|
||||
vflags|=16;
|
||||
}
|
||||
if (u<1)
|
||||
{
|
||||
vflags|=32;
|
||||
}
|
||||
|
||||
vflags=(~vflags);
|
||||
flags&=vflags;
|
||||
GoreVerts[j].flags=vflags;
|
||||
}
|
||||
|
||||
if (flags)
|
||||
{
|
||||
return false; // completely off the gore splotch (so presumably hit nothing? -Ste)
|
||||
}
|
||||
const int numTris = surface->numTriangles;
|
||||
const mdxmTriangle_t * const tris = (mdxmTriangle_t *) ((byte *)surface + surface->ofsTriangles);
|
||||
|
||||
for ( j = 0; j < numTris; j++ )
|
||||
{
|
||||
assert(tris[j].indexes[0]>=0&&tris[j].indexes[0]<numVerts);
|
||||
assert(tris[j].indexes[1]>=0&&tris[j].indexes[1]<numVerts);
|
||||
assert(tris[j].indexes[2]>=0&&tris[j].indexes[2]<numVerts);
|
||||
flags=63&
|
||||
GoreVerts[tris[j].indexes[0]].flags&
|
||||
GoreVerts[tris[j].indexes[1]].flags&
|
||||
GoreVerts[tris[j].indexes[2]].flags;
|
||||
if (flags)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
// we hit a triangle, so init a collision record...
|
||||
//
|
||||
for (int i=0; i<MAX_G2_COLLISIONS;i++)
|
||||
{
|
||||
if (collRecMap[i].mEntityNum == -1)
|
||||
{
|
||||
CollisionRecord_t &newCol = collRecMap[i];
|
||||
|
||||
newCol.mPolyIndex = j;
|
||||
newCol.mEntityNum = entNum;
|
||||
newCol.mSurfaceIndex = surface->thisSurfaceIndex;
|
||||
newCol.mModelIndex = modelIndex;
|
||||
// if (face>0)
|
||||
// {
|
||||
newCol.mFlags = G2_FRONTFACE;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// newCol.mFlags = G2_BACKFACE;
|
||||
// }
|
||||
|
||||
//get normal from triangle
|
||||
const float *A = &verts[(tris[j].indexes[0] * 5)];
|
||||
const float *B = &verts[(tris[j].indexes[1] * 5)];
|
||||
const float *C = &verts[(tris[j].indexes[2] * 5)];
|
||||
vec3_t normal;
|
||||
vec3_t edgeAC, edgeBA;
|
||||
|
||||
VectorSubtract(C, A, edgeAC);
|
||||
VectorSubtract(B, A, edgeBA);
|
||||
CrossProduct(edgeBA, edgeAC, normal);
|
||||
|
||||
// transform normal (but don't translate) into world angles
|
||||
TransformPoint(normal, newCol.mCollisionNormal, &worldMatrix);
|
||||
VectorNormalize(newCol.mCollisionNormal);
|
||||
|
||||
newCol.mMaterial = newCol.mLocation = 0;
|
||||
// exit now if we should
|
||||
if (traceFlags & G2_RETURNONHIT)
|
||||
{
|
||||
//hitOne = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
//i don't know the hitPoint, but let's just assume it's the first vert for now...
|
||||
const float *hitPoint = A;
|
||||
vec3_t distVect;
|
||||
|
||||
VectorSubtract(hitPoint, rayStart, distVect);
|
||||
newCol.mDistance = VectorLength(distVect);
|
||||
|
||||
// put the hit point back into world space
|
||||
TransformAndTranslatePoint_SP(hitPoint, newCol.mCollisionPosition, &worldMatrix);
|
||||
newCol.mBarycentricI = newCol.mBarycentricJ = 0.0f;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (i==MAX_G2_COLLISIONS)
|
||||
{
|
||||
//assert(i!=MAX_G2_COLLISIONS); // run out of collision record space - happens OFTEN
|
||||
//hitOne = true; //force stop recursion
|
||||
return true; // return true to avoid wasting further time, but no hit will result without a record
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
// now we're at poly level, check each model space transformed poly against the model world transfomed ray
|
||||
bool G2_TracePolys( const mdxmSurface_t *surface, const vec3_t rayStart, const vec3_t rayEnd, CollisionRecord_t *collRecMap, int entNum, int modelIndex, const skin_t *skin, const shader_t *cust_shader, const mdxmSurfHierarchy_t *surfInfo, int *TransformedVertsArray, int traceFlags)
|
||||
{
|
||||
|
@ -1001,6 +1314,22 @@ void G2_TraceSurfaces(CTraceSurface &TS)
|
|||
|
||||
// if this surface is not off, add it to the shader render list
|
||||
if (!offFlags)
|
||||
{
|
||||
#ifdef G2_COLLISION_ENABLED
|
||||
if (!(fabs(TS.m_fRadius) < 0.1)) // if not a point-trace
|
||||
{
|
||||
// .. then use radius check
|
||||
//
|
||||
if (G2_RadiusTracePolys(surface, TS.rayStart, TS.rayEnd, TS.collRecMap, TS.entNum, TS.modelIndex, TS.skin, TS.cust_shader, surfInfo, TS.TransformedVertsArray, TS.traceFlags, TS.m_fRadius) && (TS.traceFlags & G2_RETURNONHIT))
|
||||
{
|
||||
// ok, we hit one, *and* we want to return instantly because the returnOnHit is set
|
||||
// so indicate we've hit one, so other surfaces don't get hit and return
|
||||
TS.hitOne = true;
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
// go away and trace the polys in this surface
|
||||
if (G2_TracePolys(surface, TS.rayStart, TS.rayEnd, TS.collRecMap, TS.entNum, TS.modelIndex, TS.skin, TS.cust_shader, surfInfo, TS.TransformedVertsArray, TS.traceFlags) && (TS.traceFlags & G2_RETURNONHIT))
|
||||
|
@ -1011,6 +1340,7 @@ void G2_TraceSurfaces(CTraceSurface &TS)
|
|||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// if we are turning off all descendants, then stop this recursion now
|
||||
if (offFlags & G2SURFACEFLAG_NODESCENDANTS)
|
||||
|
@ -1027,7 +1357,7 @@ void G2_TraceSurfaces(CTraceSurface &TS)
|
|||
|
||||
}
|
||||
|
||||
void G2_TraceModels(CGhoul2Info_v &ghoul2, vec3_t rayStart, vec3_t rayEnd, CollisionRecord_t *collRecMap, int entNum, int traceFlags, int useLod)
|
||||
void G2_TraceModels(CGhoul2Info_v &ghoul2, vec3_t rayStart, vec3_t rayEnd, CollisionRecord_t *collRecMap, int entNum, int traceFlags, int useLod, float fRadius)
|
||||
{
|
||||
int i, lod;
|
||||
model_t *currentModel;
|
||||
|
@ -1075,10 +1405,24 @@ void G2_TraceModels(CGhoul2Info_v &ghoul2, vec3_t rayStart, vec3_t rayEnd, Colli
|
|||
{
|
||||
skin = NULL;
|
||||
}
|
||||
|
||||
#ifdef G2_COLLISION_ENABLED
|
||||
if (collRecMap)
|
||||
{
|
||||
lod = G2_DecideTraceLod(ghoul2[i],useLod, currentModel);
|
||||
}
|
||||
else
|
||||
{
|
||||
lod=useLod;
|
||||
if (lod>=currentModel->numLods)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
#else
|
||||
lod = G2_DecideTraceLod(ghoul2[i],useLod, currentModel);
|
||||
#endif
|
||||
|
||||
CTraceSurface TS(ghoul2[i].mSurfaceRoot, ghoul2[i].mSlist, currentModel, lod, rayStart, rayEnd, collRecMap, entNum, i, skin, cust_shader, ghoul2[i].mTransformedVertsArray, traceFlags);
|
||||
CTraceSurface TS(ghoul2[i].mSurfaceRoot, ghoul2[i].mSlist, currentModel, lod, rayStart, rayEnd, collRecMap, entNum, i, skin, cust_shader, ghoul2[i].mTransformedVertsArray, traceFlags, fRadius);
|
||||
// start the surface recursion loop
|
||||
G2_TraceSurfaces(TS);
|
||||
|
||||
|
|
Binary file not shown.
|
@ -57,7 +57,7 @@ BSC32=bscmake.exe
|
|||
LINK32=link.exe
|
||||
# ADD BASE LINK32 advapi32.lib winmm.lib wsock32.lib kernel32.lib user32.lib gdi32.lib ole32.lib /nologo /stack:0x800000 /subsystem:windows /map /debug /machine:I386
|
||||
# SUBTRACT BASE LINK32 /incremental:yes /nodefaultlib
|
||||
# ADD LINK32 advapi32.lib winmm.lib wsock32.lib kernel32.lib user32.lib gdi32.lib ole32.lib /nologo /stack:0x800000 /subsystem:windows /map:"Release/jk2mp.map" /debug /machine:I386
|
||||
# ADD LINK32 ALut.lib OpenAL32.lib advapi32.lib winmm.lib wsock32.lib kernel32.lib user32.lib gdi32.lib ole32.lib /nologo /stack:0x800000 /subsystem:windows /map:"Release/jk2mp.map" /debug /machine:I386
|
||||
# SUBTRACT LINK32 /pdb:none
|
||||
|
||||
!ELSEIF "$(CFG)" == "jk2mp - Win32 Debug JK2"
|
||||
|
@ -86,7 +86,7 @@ BSC32=bscmake.exe
|
|||
LINK32=link.exe
|
||||
# ADD BASE LINK32 advapi32.lib winmm.lib wsock32.lib kernel32.lib user32.lib gdi32.lib ole32.lib /nologo /stack:0x800000 /subsystem:windows /profile /map /debug /machine:I386
|
||||
# SUBTRACT BASE LINK32 /nodefaultlib
|
||||
# ADD LINK32 ./debug/jk2/smrtheap.obj advapi32.lib winmm.lib wsock32.lib kernel32.lib user32.lib gdi32.lib ole32.lib /nologo /stack:0x800000 /subsystem:windows /map:"Debug/jk2mp.map" /debug /machine:I386
|
||||
# ADD LINK32 ./debug/jk2/smrtheap.obj ALut.lib OpenAL32.lib advapi32.lib winmm.lib wsock32.lib kernel32.lib user32.lib gdi32.lib ole32.lib /nologo /stack:0x800000 /subsystem:windows /map:"Debug/jk2mp.map" /debug /machine:I386
|
||||
# SUBTRACT LINK32 /profile
|
||||
|
||||
!ELSEIF "$(CFG)" == "jk2mp - Win32 Final JK2"
|
||||
|
@ -116,7 +116,7 @@ BSC32=bscmake.exe
|
|||
LINK32=link.exe
|
||||
# ADD BASE LINK32 advapi32.lib winmm.lib wsock32.lib kernel32.lib user32.lib gdi32.lib ole32.lib /nologo /stack:0x800000 /subsystem:windows /map:"Release/jk2mp.map" /debug /machine:I386 /out:".\Release/jk2mp.exe"
|
||||
# SUBTRACT BASE LINK32 /pdb:none
|
||||
# ADD LINK32 advapi32.lib winmm.lib wsock32.lib kernel32.lib user32.lib gdi32.lib ole32.lib /nologo /stack:0x800000 /subsystem:windows /map:"Final/jk2mp.map" /machine:I386
|
||||
# ADD LINK32 ALut.lib OpenAL32.lib advapi32.lib winmm.lib wsock32.lib kernel32.lib user32.lib gdi32.lib ole32.lib /nologo /stack:0x800000 /subsystem:windows /map:"Final/jk2mp.map" /machine:I386
|
||||
# SUBTRACT LINK32 /pdb:none /debug
|
||||
|
||||
!ENDIF
|
||||
|
@ -159,6 +159,14 @@ SOURCE=.\ui\ui_public.h
|
|||
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe"
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\EaxMan.dll
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\OpenAL32.dll
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\win32\qe3.ico
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
@ -176,6 +184,14 @@ SOURCE=.\win32\winquake.rc
|
|||
|
||||
!ENDIF
|
||||
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\OpenAL32.lib
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\ALut.lib
|
||||
# End Source File
|
||||
# End Group
|
||||
# Begin Group "Client"
|
||||
|
@ -346,10 +362,6 @@ SOURCE=.\qcommon\cm_public.h
|
|||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\qcommon\cm_shader.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\qcommon\cm_test.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
@ -764,6 +776,46 @@ SOURCE=.\mp3code\upsf.c
|
|||
SOURCE=.\mp3code\wavep.c
|
||||
# End Source File
|
||||
# End Group
|
||||
# Begin Group "EAX"
|
||||
|
||||
# PROP Default_Filter ""
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\client\eax\eax.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\client\eax\EaxMan.h
|
||||
# End Source File
|
||||
# End Group
|
||||
# Begin Group "OpenAL"
|
||||
|
||||
# PROP Default_Filter ""
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\client\OpenAL\al.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\client\OpenAL\alc.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\client\OpenAL\alctypes.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\client\OpenAL\altypes.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\client\OpenAL\alu.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\client\OpenAL\alut.h
|
||||
# End Source File
|
||||
# End Group
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\client\snd_dma.cpp
|
||||
|
|
|
@ -3,7 +3,7 @@ Microsoft Developer Studio Workspace File, Format Version 6.00
|
|||
|
||||
###############################################################################
|
||||
|
||||
Project: "JK2cgame"=.\cgame\JK2_cgame.dsp - Package Owner=<4>
|
||||
Project: "JK2cgame"=".\cgame\JK2_cgame.dsp" - Package Owner=<4>
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
|
@ -19,7 +19,7 @@ Package=<4>
|
|||
|
||||
###############################################################################
|
||||
|
||||
Project: "JK2game"=.\game\JK2_game.dsp - Package Owner=<4>
|
||||
Project: "JK2game"=".\game\JK2_game.dsp" - Package Owner=<4>
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
|
@ -35,7 +35,23 @@ Package=<4>
|
|||
|
||||
###############################################################################
|
||||
|
||||
Project: "botlib"=.\botlib\botlib.dsp - Package Owner=<4>
|
||||
Project: "WinDed"=".\WinDed.dsp" - Package Owner=<4>
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
begin source code control
|
||||
"$/General/code", EAAAAAAA
|
||||
.
|
||||
end source code control
|
||||
}}}
|
||||
|
||||
Package=<4>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
||||
Project: "botlib"=".\botlib\botlib.dsp" - Package Owner=<4>
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
|
@ -51,7 +67,7 @@ Package=<4>
|
|||
|
||||
###############################################################################
|
||||
|
||||
Project: "jk2mp"=.\jk2mp.dsp - Package Owner=<4>
|
||||
Project: "jk2mp"=".\jk2mp.dsp" - Package Owner=<4>
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
|
@ -79,7 +95,7 @@ Package=<4>
|
|||
|
||||
###############################################################################
|
||||
|
||||
Project: "ui"=.\ui\ui.dsp - Package Owner=<4>
|
||||
Project: "ui"=".\ui\ui.dsp" - Package Owner=<4>
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
|
|
Binary file not shown.
|
@ -3,696 +3,36 @@
|
|||
<pre>
|
||||
<h1>Build Log</h1>
|
||||
<h3>
|
||||
--------------------Configuration: ui - Win32 Release JK2--------------------
|
||||
--------------------Configuration: WinDed - Win32 Release--------------------
|
||||
</h3>
|
||||
<h3>Command Lines</h3>
|
||||
Creating temporary file "C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP67C.tmp" with contents
|
||||
[
|
||||
/nologo /G6 /ML /W4 /GX /Zi /O2 /D "NDEBUG" /D "_USRDL" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "UI_EXPORTS" /D "MISSIONPACK" /D "_JK2" /Fp"../Release/ui/ui.pch" /YX /Fo"../Release/ui/" /Fd"../Release/ui/" /FD /c
|
||||
"C:\projects\jk2\CODE-mp\ui\ui_main.c"
|
||||
]
|
||||
Creating command line "cl.exe @C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP67C.tmp"
|
||||
Creating temporary file "C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP67D.tmp" with contents
|
||||
[
|
||||
/nologo /base:"0x40000000" /dll /incremental:no /pdb:"../Release/uix86.pdb" /map:"../Release/ui/uix86.map" /debug /machine:I386 /def:".\ui.def" /out:"../Release/uix86.dll" /implib:"../Release/uix86.lib"
|
||||
"\projects\jk2\CODE-mp\Release\ui\bg_misc.obj"
|
||||
"\projects\jk2\CODE-mp\Release\ui\bg_weapons.obj"
|
||||
"\projects\jk2\CODE-mp\Release\ui\q_math.obj"
|
||||
"\projects\jk2\CODE-mp\Release\ui\q_shared.obj"
|
||||
"\projects\jk2\CODE-mp\Release\ui\ui_atoms.obj"
|
||||
"\projects\jk2\CODE-mp\Release\ui\ui_force.obj"
|
||||
"\projects\jk2\CODE-mp\Release\ui\ui_gameinfo.obj"
|
||||
"\projects\jk2\CODE-mp\Release\ui\ui_main.obj"
|
||||
"\projects\jk2\CODE-mp\Release\ui\ui_shared.obj"
|
||||
"\projects\jk2\CODE-mp\Release\ui\ui_syscalls.obj"
|
||||
"\projects\jk2\CODE-mp\Release\ui\ui_util.obj"
|
||||
]
|
||||
Creating command line "link.exe @C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP67D.tmp"
|
||||
<h3>Output Window</h3>
|
||||
Compiling...
|
||||
ui_main.c
|
||||
Linking...
|
||||
Creating library ../Release/uix86.lib and object ../Release/uix86.exp
|
||||
|
||||
|
||||
|
||||
<h3>Results</h3>
|
||||
jk2Ded.exe - 0 error(s), 0 warning(s)
|
||||
<h3>
|
||||
--------------------Configuration: jk2mp - Win32 Release JK2--------------------
|
||||
</h3>
|
||||
<h3>Command Lines</h3>
|
||||
Creating temporary file "C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP686.tmp" with contents
|
||||
[
|
||||
/nologo /G6 /ML /W4 /GX /Zi /O2 /Ob0 /D "_WIN32" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_JK2" /Fp".\Release\jk2/jk2mp.pch" /YX /Fo".\Release\jk2/" /Fd".\Release\jk2/" /FD /c
|
||||
"C:\projects\jk2\CODE-mp\client\cl_console.cpp"
|
||||
"C:\projects\jk2\CODE-mp\qcommon\common.cpp"
|
||||
]
|
||||
Creating command line "cl.exe @C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP686.tmp"
|
||||
Creating temporary file "C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP687.tmp" with contents
|
||||
[
|
||||
advapi32.lib winmm.lib wsock32.lib kernel32.lib user32.lib gdi32.lib ole32.lib /nologo /stack:0x800000 /subsystem:windows /incremental:no /pdb:".\Release/jk2mp.pdb" /map:"Release/jk2mp.map" /debug /machine:I386 /out:".\Release/jk2mp.exe"
|
||||
".\Release\jk2\cl_cgame.obj"
|
||||
".\Release\jk2\cl_cin.obj"
|
||||
".\Release\jk2\cl_console.obj"
|
||||
".\Release\jk2\cl_input.obj"
|
||||
".\Release\jk2\cl_keys.obj"
|
||||
".\Release\jk2\cl_main.obj"
|
||||
".\Release\jk2\cl_net_chan.obj"
|
||||
".\Release\jk2\cl_parse.obj"
|
||||
".\Release\jk2\cl_scrn.obj"
|
||||
".\Release\jk2\cl_ui.obj"
|
||||
".\Release\jk2\FXExport.obj"
|
||||
".\Release\jk2\FxPrimitives.obj"
|
||||
".\Release\jk2\FxScheduler.obj"
|
||||
".\Release\jk2\FxSystem.obj"
|
||||
".\Release\jk2\FxTemplate.obj"
|
||||
".\Release\jk2\FxUtil.obj"
|
||||
".\Release\jk2\cm_load.obj"
|
||||
".\Release\jk2\cm_patch.obj"
|
||||
".\Release\jk2\cm_polylib.obj"
|
||||
".\Release\jk2\cm_shader.obj"
|
||||
".\Release\jk2\cm_test.obj"
|
||||
".\Release\jk2\cm_trace.obj"
|
||||
".\Release\jk2\cmd.obj"
|
||||
".\Release\jk2\CNetProfile.obj"
|
||||
".\Release\jk2\common.obj"
|
||||
".\Release\jk2\cvar.obj"
|
||||
".\Release\jk2\files.obj"
|
||||
".\Release\jk2\GenericParser2.obj"
|
||||
".\Release\jk2\hstring.obj"
|
||||
".\Release\jk2\huffman.obj"
|
||||
".\Release\jk2\md4.obj"
|
||||
".\Release\jk2\msg.obj"
|
||||
".\Release\jk2\net_chan.obj"
|
||||
".\Release\jk2\q_math.obj"
|
||||
".\Release\jk2\q_shared.obj"
|
||||
".\Release\jk2\RoffSystem.obj"
|
||||
".\Release\jk2\strip.obj"
|
||||
".\Release\jk2\unzip.obj"
|
||||
".\Release\jk2\vm.obj"
|
||||
".\Release\jk2\vm_interpreted.obj"
|
||||
".\Release\jk2\vm_x86.obj"
|
||||
".\Release\jk2\win_input.obj"
|
||||
".\Release\jk2\win_main.obj"
|
||||
".\Release\jk2\win_net.obj"
|
||||
".\Release\jk2\win_shared.obj"
|
||||
".\Release\jk2\win_snd.obj"
|
||||
".\Release\jk2\win_syscon.obj"
|
||||
".\Release\jk2\win_wndproc.obj"
|
||||
".\Release\jk2\sv_bot.obj"
|
||||
".\Release\jk2\sv_ccmds.obj"
|
||||
".\Release\jk2\sv_client.obj"
|
||||
".\Release\jk2\sv_game.obj"
|
||||
".\Release\jk2\sv_init.obj"
|
||||
".\Release\jk2\sv_main.obj"
|
||||
".\Release\jk2\sv_net_chan.obj"
|
||||
".\Release\jk2\sv_snapshot.obj"
|
||||
".\Release\jk2\sv_world.obj"
|
||||
".\Release\jk2\cdct.obj"
|
||||
".\Release\jk2\csbt.obj"
|
||||
".\Release\jk2\csbtb.obj"
|
||||
".\Release\jk2\csbtl3.obj"
|
||||
".\Release\jk2\cup.obj"
|
||||
".\Release\jk2\cupini.obj"
|
||||
".\Release\jk2\cupl1.obj"
|
||||
".\Release\jk2\cupl3.obj"
|
||||
".\Release\jk2\cwin.obj"
|
||||
".\Release\jk2\cwinb.obj"
|
||||
".\Release\jk2\cwinm.obj"
|
||||
".\Release\jk2\hwin.obj"
|
||||
".\Release\jk2\l3dq.obj"
|
||||
".\Release\jk2\l3init.obj"
|
||||
".\Release\jk2\mdct.obj"
|
||||
".\Release\jk2\mhead.obj"
|
||||
".\Release\jk2\msis.obj"
|
||||
".\Release\jk2\towave.obj"
|
||||
".\Release\jk2\uph.obj"
|
||||
".\Release\jk2\upsf.obj"
|
||||
".\Release\jk2\wavep.obj"
|
||||
".\Release\jk2\snd_dma.obj"
|
||||
".\Release\jk2\snd_mem.obj"
|
||||
".\Release\jk2\snd_mix.obj"
|
||||
".\Release\jk2\snd_mp3.obj"
|
||||
".\Release\jk2\jcapimin.obj"
|
||||
".\Release\jk2\jccoefct.obj"
|
||||
".\Release\jk2\jccolor.obj"
|
||||
".\Release\jk2\jcdctmgr.obj"
|
||||
".\Release\jk2\jchuff.obj"
|
||||
".\Release\jk2\jcinit.obj"
|
||||
".\Release\jk2\jcmainct.obj"
|
||||
".\Release\jk2\jcmarker.obj"
|
||||
".\Release\jk2\jcmaster.obj"
|
||||
".\Release\jk2\jcomapi.obj"
|
||||
".\Release\jk2\jcparam.obj"
|
||||
".\Release\jk2\jcphuff.obj"
|
||||
".\Release\jk2\jcprepct.obj"
|
||||
".\Release\jk2\jcsample.obj"
|
||||
".\Release\jk2\jctrans.obj"
|
||||
".\Release\jk2\jdapimin.obj"
|
||||
".\Release\jk2\jdapistd.obj"
|
||||
".\Release\jk2\jdatadst.obj"
|
||||
".\Release\jk2\jdatasrc.obj"
|
||||
".\Release\jk2\jdcoefct.obj"
|
||||
".\Release\jk2\jdcolor.obj"
|
||||
".\Release\jk2\jddctmgr.obj"
|
||||
".\Release\jk2\jdhuff.obj"
|
||||
".\Release\jk2\jdinput.obj"
|
||||
".\Release\jk2\jdmainct.obj"
|
||||
".\Release\jk2\jdmarker.obj"
|
||||
".\Release\jk2\jdmaster.obj"
|
||||
".\Release\jk2\jdpostct.obj"
|
||||
".\Release\jk2\jdsample.obj"
|
||||
".\Release\jk2\jdtrans.obj"
|
||||
".\Release\jk2\jerror.obj"
|
||||
".\Release\jk2\jfdctflt.obj"
|
||||
".\Release\jk2\jidctflt.obj"
|
||||
".\Release\jk2\jmemmgr.obj"
|
||||
".\Release\jk2\jmemnobs.obj"
|
||||
".\Release\jk2\jutils.obj"
|
||||
".\Release\jk2\png.obj"
|
||||
".\Release\jk2\matcomp.obj"
|
||||
".\Release\jk2\tr_animation.obj"
|
||||
".\Release\jk2\tr_backend.obj"
|
||||
".\Release\jk2\tr_bsp.obj"
|
||||
".\Release\jk2\tr_cmds.obj"
|
||||
".\Release\jk2\tr_curve.obj"
|
||||
".\Release\jk2\tr_flares.obj"
|
||||
".\Release\jk2\tr_font.obj"
|
||||
".\Release\jk2\tr_ghoul2.obj"
|
||||
".\Release\jk2\tr_image.obj"
|
||||
".\Release\jk2\tr_init.obj"
|
||||
".\Release\jk2\tr_light.obj"
|
||||
".\Release\jk2\tr_main.obj"
|
||||
".\Release\jk2\tr_marks.obj"
|
||||
".\Release\jk2\tr_mesh.obj"
|
||||
".\Release\jk2\tr_model.obj"
|
||||
".\Release\jk2\tr_noise.obj"
|
||||
".\Release\jk2\tr_quicksprite.obj"
|
||||
".\Release\jk2\tr_scene.obj"
|
||||
".\Release\jk2\tr_shade.obj"
|
||||
".\Release\jk2\tr_shade_calc.obj"
|
||||
".\Release\jk2\tr_shader.obj"
|
||||
".\Release\jk2\tr_shadows.obj"
|
||||
".\Release\jk2\tr_sky.obj"
|
||||
".\Release\jk2\tr_surface.obj"
|
||||
".\Release\jk2\tr_surfacesprites.obj"
|
||||
".\Release\jk2\tr_world.obj"
|
||||
".\Release\jk2\tr_WorldEffects.obj"
|
||||
".\Release\jk2\win_gamma.obj"
|
||||
".\Release\jk2\win_glimp.obj"
|
||||
".\Release\jk2\win_qgl.obj"
|
||||
".\Release\jk2\G2_API.obj"
|
||||
".\Release\jk2\G2_bolts.obj"
|
||||
".\Release\jk2\G2_bones.obj"
|
||||
".\Release\jk2\G2_misc.obj"
|
||||
".\Release\jk2\G2_surfaces.obj"
|
||||
".\Release\jk2\adler32.obj"
|
||||
".\Release\jk2\crc32.obj"
|
||||
".\Release\jk2\deflate.obj"
|
||||
".\Release\jk2\infblock.obj"
|
||||
".\Release\jk2\infcodes.obj"
|
||||
".\Release\jk2\inffast.obj"
|
||||
".\Release\jk2\inflate.obj"
|
||||
".\Release\jk2\inftrees.obj"
|
||||
".\Release\jk2\infutil.obj"
|
||||
".\Release\jk2\trees.obj"
|
||||
".\Release\jk2\zutil.obj"
|
||||
".\Release\jk2\buffer.obj"
|
||||
".\Release\jk2\cpp_interface.obj"
|
||||
".\Release\jk2\sockets.obj"
|
||||
".\Release\jk2\winquake.res"
|
||||
".\Release\botlib.lib"
|
||||
".\Release\uix86.lib"
|
||||
".\Release\cgamex86.lib"
|
||||
".\Release\jk2mpgamex86.lib"
|
||||
]
|
||||
Creating command line "link.exe @C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP687.tmp"
|
||||
<h3>Output Window</h3>
|
||||
Compiling...
|
||||
cl_console.cpp
|
||||
common.cpp
|
||||
Linking...
|
||||
|
||||
|
||||
|
||||
<h3>Results</h3>
|
||||
jk2mp.exe - 0 error(s), 0 warning(s)
|
||||
<h3>
|
||||
--------------------Configuration: ui - Win32 Debug JK2--------------------
|
||||
</h3>
|
||||
<h3>Command Lines</h3>
|
||||
Creating temporary file "C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP68C.tmp" with contents
|
||||
[
|
||||
/nologo /G6 /MTd /W3 /Gm /GX /ZI /Od /D "_DEBUG" /D "_USRDLL" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "UI_EXPORTS" /D "MISSIONPACK" /D "_JK2" /FR"../Debug/ui/" /Fp"../Debug/ui/ui.pch" /YX /Fo"../Debug/ui/" /Fd"../Debug/ui/" /FD /GZ /c
|
||||
"C:\projects\jk2\CODE-mp\ui\ui_main.c"
|
||||
]
|
||||
Creating command line "cl.exe @C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP68C.tmp"
|
||||
Creating temporary file "C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP68D.tmp" with contents
|
||||
[
|
||||
/nologo /base:"0x40000000" /dll /incremental:yes /pdb:"../Debug/uix86.pdb" /map:"../Debug/ui/uix86.map" /debug /machine:I386 /def:".\ui.def" /out:"../Debug/uix86.dll" /implib:"../Debug/uix86.lib" /pdbtype:sept
|
||||
"\projects\jk2\CODE-mp\Debug\ui\bg_misc.obj"
|
||||
"\projects\jk2\CODE-mp\Debug\ui\bg_weapons.obj"
|
||||
"\projects\jk2\CODE-mp\Debug\ui\q_math.obj"
|
||||
"\projects\jk2\CODE-mp\Debug\ui\q_shared.obj"
|
||||
"\projects\jk2\CODE-mp\Debug\ui\ui_atoms.obj"
|
||||
"\projects\jk2\CODE-mp\Debug\ui\ui_force.obj"
|
||||
"\projects\jk2\CODE-mp\Debug\ui\ui_gameinfo.obj"
|
||||
"\projects\jk2\CODE-mp\Debug\ui\ui_main.obj"
|
||||
"\projects\jk2\CODE-mp\Debug\ui\ui_shared.obj"
|
||||
"\projects\jk2\CODE-mp\Debug\ui\ui_syscalls.obj"
|
||||
"\projects\jk2\CODE-mp\Debug\ui\ui_util.obj"
|
||||
]
|
||||
Creating command line "link.exe @C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP68D.tmp"
|
||||
<h3>Output Window</h3>
|
||||
Compiling...
|
||||
ui_main.c
|
||||
Linking...
|
||||
<h3>
|
||||
--------------------Configuration: jk2mp - Win32 Debug JK2--------------------
|
||||
</h3>
|
||||
<h3>Command Lines</h3>
|
||||
Creating temporary file "C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP68F.tmp" with contents
|
||||
[
|
||||
/nologo /G6 /MLd /W3 /GX /ZI /Od /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_JK2" /D "MEM_DEBUG" /Fr".\Debug\jk2/" /Fo".\Debug\jk2/" /Fd".\Debug\jk2/" /FD /GZ /c
|
||||
"C:\projects\jk2\CODE-mp\client\cl_console.cpp"
|
||||
"C:\projects\jk2\CODE-mp\qcommon\common.cpp"
|
||||
]
|
||||
Creating command line "cl.exe @C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP68F.tmp"
|
||||
Creating temporary file "C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP690.tmp" with contents
|
||||
[
|
||||
./debug/jk2/smrtheap.obj advapi32.lib winmm.lib wsock32.lib kernel32.lib user32.lib gdi32.lib ole32.lib /nologo /stack:0x800000 /subsystem:windows /incremental:yes /pdb:".\Debug/jk2mp.pdb" /map:"Debug/jk2mp.map" /debug /machine:I386 /out:".\Debug/jk2mp.exe"
|
||||
".\Debug\jk2\0_SH_Leak.obj"
|
||||
".\Debug\jk2\cl_cgame.obj"
|
||||
".\Debug\jk2\cl_cin.obj"
|
||||
".\Debug\jk2\cl_console.obj"
|
||||
".\Debug\jk2\cl_input.obj"
|
||||
".\Debug\jk2\cl_keys.obj"
|
||||
".\Debug\jk2\cl_main.obj"
|
||||
".\Debug\jk2\cl_net_chan.obj"
|
||||
".\Debug\jk2\cl_parse.obj"
|
||||
".\Debug\jk2\cl_scrn.obj"
|
||||
".\Debug\jk2\cl_ui.obj"
|
||||
".\Debug\jk2\FXExport.obj"
|
||||
".\Debug\jk2\FxPrimitives.obj"
|
||||
".\Debug\jk2\FxScheduler.obj"
|
||||
".\Debug\jk2\FxSystem.obj"
|
||||
".\Debug\jk2\FxTemplate.obj"
|
||||
".\Debug\jk2\FxUtil.obj"
|
||||
".\Debug\jk2\cm_load.obj"
|
||||
".\Debug\jk2\cm_patch.obj"
|
||||
".\Debug\jk2\cm_polylib.obj"
|
||||
".\Debug\jk2\cm_shader.obj"
|
||||
".\Debug\jk2\cm_test.obj"
|
||||
".\Debug\jk2\cm_trace.obj"
|
||||
".\Debug\jk2\cmd.obj"
|
||||
".\Debug\jk2\CNetProfile.obj"
|
||||
".\Debug\jk2\common.obj"
|
||||
".\Debug\jk2\cvar.obj"
|
||||
".\Debug\jk2\files.obj"
|
||||
".\Debug\jk2\GenericParser2.obj"
|
||||
".\Debug\jk2\hstring.obj"
|
||||
".\Debug\jk2\huffman.obj"
|
||||
".\Debug\jk2\md4.obj"
|
||||
".\Debug\jk2\msg.obj"
|
||||
".\Debug\jk2\net_chan.obj"
|
||||
".\Debug\jk2\q_math.obj"
|
||||
".\Debug\jk2\q_shared.obj"
|
||||
".\Debug\jk2\RoffSystem.obj"
|
||||
".\Debug\jk2\strip.obj"
|
||||
".\Debug\jk2\unzip.obj"
|
||||
".\Debug\jk2\vm.obj"
|
||||
".\Debug\jk2\vm_interpreted.obj"
|
||||
".\Debug\jk2\vm_x86.obj"
|
||||
".\Debug\jk2\win_input.obj"
|
||||
".\Debug\jk2\win_main.obj"
|
||||
".\Debug\jk2\win_net.obj"
|
||||
".\Debug\jk2\win_shared.obj"
|
||||
".\Debug\jk2\win_snd.obj"
|
||||
".\Debug\jk2\win_syscon.obj"
|
||||
".\Debug\jk2\win_wndproc.obj"
|
||||
".\Debug\jk2\sv_bot.obj"
|
||||
".\Debug\jk2\sv_ccmds.obj"
|
||||
".\Debug\jk2\sv_client.obj"
|
||||
".\Debug\jk2\sv_game.obj"
|
||||
".\Debug\jk2\sv_init.obj"
|
||||
".\Debug\jk2\sv_main.obj"
|
||||
".\Debug\jk2\sv_net_chan.obj"
|
||||
".\Debug\jk2\sv_snapshot.obj"
|
||||
".\Debug\jk2\sv_world.obj"
|
||||
".\Debug\jk2\cdct.obj"
|
||||
".\Debug\jk2\csbt.obj"
|
||||
".\Debug\jk2\csbtb.obj"
|
||||
".\Debug\jk2\csbtl3.obj"
|
||||
".\Debug\jk2\cup.obj"
|
||||
".\Debug\jk2\cupini.obj"
|
||||
".\Debug\jk2\cupl1.obj"
|
||||
".\Debug\jk2\cupl3.obj"
|
||||
".\Debug\jk2\cwin.obj"
|
||||
".\Debug\jk2\cwinb.obj"
|
||||
".\Debug\jk2\cwinm.obj"
|
||||
".\Debug\jk2\hwin.obj"
|
||||
".\Debug\jk2\l3dq.obj"
|
||||
".\Debug\jk2\l3init.obj"
|
||||
".\Debug\jk2\mdct.obj"
|
||||
".\Debug\jk2\mhead.obj"
|
||||
".\Debug\jk2\msis.obj"
|
||||
".\Debug\jk2\towave.obj"
|
||||
".\Debug\jk2\uph.obj"
|
||||
".\Debug\jk2\upsf.obj"
|
||||
".\Debug\jk2\wavep.obj"
|
||||
".\Debug\jk2\snd_dma.obj"
|
||||
".\Debug\jk2\snd_mem.obj"
|
||||
".\Debug\jk2\snd_mix.obj"
|
||||
".\Debug\jk2\snd_mp3.obj"
|
||||
".\Debug\jk2\jcapimin.obj"
|
||||
".\Debug\jk2\jccoefct.obj"
|
||||
".\Debug\jk2\jccolor.obj"
|
||||
".\Debug\jk2\jcdctmgr.obj"
|
||||
".\Debug\jk2\jchuff.obj"
|
||||
".\Debug\jk2\jcinit.obj"
|
||||
".\Debug\jk2\jcmainct.obj"
|
||||
".\Debug\jk2\jcmarker.obj"
|
||||
".\Debug\jk2\jcmaster.obj"
|
||||
".\Debug\jk2\jcomapi.obj"
|
||||
".\Debug\jk2\jcparam.obj"
|
||||
".\Debug\jk2\jcphuff.obj"
|
||||
".\Debug\jk2\jcprepct.obj"
|
||||
".\Debug\jk2\jcsample.obj"
|
||||
".\Debug\jk2\jctrans.obj"
|
||||
".\Debug\jk2\jdapimin.obj"
|
||||
".\Debug\jk2\jdapistd.obj"
|
||||
".\Debug\jk2\jdatadst.obj"
|
||||
".\Debug\jk2\jdatasrc.obj"
|
||||
".\Debug\jk2\jdcoefct.obj"
|
||||
".\Debug\jk2\jdcolor.obj"
|
||||
".\Debug\jk2\jddctmgr.obj"
|
||||
".\Debug\jk2\jdhuff.obj"
|
||||
".\Debug\jk2\jdinput.obj"
|
||||
".\Debug\jk2\jdmainct.obj"
|
||||
".\Debug\jk2\jdmarker.obj"
|
||||
".\Debug\jk2\jdmaster.obj"
|
||||
".\Debug\jk2\jdpostct.obj"
|
||||
".\Debug\jk2\jdsample.obj"
|
||||
".\Debug\jk2\jdtrans.obj"
|
||||
".\Debug\jk2\jerror.obj"
|
||||
".\Debug\jk2\jfdctflt.obj"
|
||||
".\Debug\jk2\jidctflt.obj"
|
||||
".\Debug\jk2\jmemmgr.obj"
|
||||
".\Debug\jk2\jmemnobs.obj"
|
||||
".\Debug\jk2\jutils.obj"
|
||||
".\Debug\jk2\png.obj"
|
||||
".\Debug\jk2\matcomp.obj"
|
||||
".\Debug\jk2\tr_animation.obj"
|
||||
".\Debug\jk2\tr_backend.obj"
|
||||
".\Debug\jk2\tr_bsp.obj"
|
||||
".\Debug\jk2\tr_cmds.obj"
|
||||
".\Debug\jk2\tr_curve.obj"
|
||||
".\Debug\jk2\tr_flares.obj"
|
||||
".\Debug\jk2\tr_font.obj"
|
||||
".\Debug\jk2\tr_ghoul2.obj"
|
||||
".\Debug\jk2\tr_image.obj"
|
||||
".\Debug\jk2\tr_init.obj"
|
||||
".\Debug\jk2\tr_light.obj"
|
||||
".\Debug\jk2\tr_main.obj"
|
||||
".\Debug\jk2\tr_marks.obj"
|
||||
".\Debug\jk2\tr_mesh.obj"
|
||||
".\Debug\jk2\tr_model.obj"
|
||||
".\Debug\jk2\tr_noise.obj"
|
||||
".\Debug\jk2\tr_quicksprite.obj"
|
||||
".\Debug\jk2\tr_scene.obj"
|
||||
".\Debug\jk2\tr_shade.obj"
|
||||
".\Debug\jk2\tr_shade_calc.obj"
|
||||
".\Debug\jk2\tr_shader.obj"
|
||||
".\Debug\jk2\tr_shadows.obj"
|
||||
".\Debug\jk2\tr_sky.obj"
|
||||
".\Debug\jk2\tr_surface.obj"
|
||||
".\Debug\jk2\tr_surfacesprites.obj"
|
||||
".\Debug\jk2\tr_world.obj"
|
||||
".\Debug\jk2\tr_WorldEffects.obj"
|
||||
".\Debug\jk2\win_gamma.obj"
|
||||
".\Debug\jk2\win_glimp.obj"
|
||||
".\Debug\jk2\win_qgl.obj"
|
||||
".\Debug\jk2\G2_API.obj"
|
||||
".\Debug\jk2\G2_bolts.obj"
|
||||
".\Debug\jk2\G2_bones.obj"
|
||||
".\Debug\jk2\G2_misc.obj"
|
||||
".\Debug\jk2\G2_surfaces.obj"
|
||||
".\Debug\jk2\adler32.obj"
|
||||
".\Debug\jk2\crc32.obj"
|
||||
".\Debug\jk2\deflate.obj"
|
||||
".\Debug\jk2\infblock.obj"
|
||||
".\Debug\jk2\infcodes.obj"
|
||||
".\Debug\jk2\inffast.obj"
|
||||
".\Debug\jk2\inflate.obj"
|
||||
".\Debug\jk2\inftrees.obj"
|
||||
".\Debug\jk2\infutil.obj"
|
||||
".\Debug\jk2\trees.obj"
|
||||
".\Debug\jk2\zutil.obj"
|
||||
".\Debug\jk2\buffer.obj"
|
||||
".\Debug\jk2\cpp_interface.obj"
|
||||
".\Debug\jk2\sockets.obj"
|
||||
".\Debug\jk2\SMRTHEAP.OBJ"
|
||||
".\win32\winquake.res"
|
||||
".\smartheap\HAW32M.LIB"
|
||||
".\Debug\botlib.lib"
|
||||
".\Debug\uix86.lib"
|
||||
".\Debug\cgamex86.lib"
|
||||
".\Debug\jk2mpgamex86.lib"
|
||||
]
|
||||
Creating command line "link.exe @C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP690.tmp"
|
||||
<h3>Output Window</h3>
|
||||
Compiling...
|
||||
cl_console.cpp
|
||||
common.cpp
|
||||
Generating Code...
|
||||
Linking...
|
||||
|
||||
|
||||
|
||||
<h3>Results</h3>
|
||||
jk2mp.exe - 0 error(s), 0 warning(s)
|
||||
<h3>
|
||||
--------------------Configuration: ui - Win32 Final JK2--------------------
|
||||
</h3>
|
||||
<h3>Command Lines</h3>
|
||||
Creating temporary file "C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP692.tmp" with contents
|
||||
[
|
||||
/nologo /G6 /ML /W4 /GX /O2 /D "NDEBUG" /D "_USRDL" /D "_WINDOWS" /D "_MBCS" /D "UI_EXPORTS" /D "MISSIONPACK" /D "WIN32" /D "_JK2" /D "FINAL_BUILD" /Fp"../Final/ui/ui.pch" /YX /Fo"../Final/ui/" /Fd"../Final/ui/" /FD /c
|
||||
"C:\projects\jk2\CODE-mp\ui\ui_main.c"
|
||||
]
|
||||
Creating command line "cl.exe @C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP692.tmp"
|
||||
Creating temporary file "C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP693.tmp" with contents
|
||||
[
|
||||
/nologo /base:"0x40000000" /dll /incremental:no /pdb:"../Final/uix86.pdb" /map:"../Final/ui/uix86.map" /debug /machine:I386 /def:".\ui.def" /out:"../Final/uix86.dll" /implib:"../Final/uix86.lib"
|
||||
"\projects\jk2\CODE-mp\Final\ui\bg_misc.obj"
|
||||
"\projects\jk2\CODE-mp\Final\ui\bg_weapons.obj"
|
||||
"\projects\jk2\CODE-mp\Final\ui\q_math.obj"
|
||||
"\projects\jk2\CODE-mp\Final\ui\q_shared.obj"
|
||||
"\projects\jk2\CODE-mp\Final\ui\ui_atoms.obj"
|
||||
"\projects\jk2\CODE-mp\Final\ui\ui_force.obj"
|
||||
"\projects\jk2\CODE-mp\Final\ui\ui_gameinfo.obj"
|
||||
"\projects\jk2\CODE-mp\Final\ui\ui_main.obj"
|
||||
"\projects\jk2\CODE-mp\Final\ui\ui_shared.obj"
|
||||
"\projects\jk2\CODE-mp\Final\ui\ui_syscalls.obj"
|
||||
"\projects\jk2\CODE-mp\Final\ui\ui_util.obj"
|
||||
]
|
||||
Creating command line "link.exe @C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP693.tmp"
|
||||
<h3>Output Window</h3>
|
||||
Compiling...
|
||||
ui_main.c
|
||||
Linking...
|
||||
Creating library ../Final/uix86.lib and object ../Final/uix86.exp
|
||||
<h3>
|
||||
--------------------Configuration: jk2mp - Win32 Final JK2--------------------
|
||||
</h3>
|
||||
<h3>Command Lines</h3>
|
||||
Creating temporary file "C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP698.tmp" with contents
|
||||
[
|
||||
/nologo /G6 /ML /W4 /GX /O2 /Ob0 /D "_WIN32" /D "NDEBUG" /D "_WINDOWS" /D "WIN32" /D "_JK2" /D "FINAL_BUILD" /Fp".\Final\jk2/jk2mp.pch" /YX /Fo".\Final\jk2/" /Fd".\Final\jk2/" /FD /c
|
||||
"C:\projects\jk2\CODE-mp\client\cl_console.cpp"
|
||||
"C:\projects\jk2\CODE-mp\qcommon\common.cpp"
|
||||
]
|
||||
Creating command line "cl.exe @C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP698.tmp"
|
||||
Creating temporary file "C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP699.tmp" with contents
|
||||
[
|
||||
advapi32.lib winmm.lib wsock32.lib kernel32.lib user32.lib gdi32.lib ole32.lib /nologo /stack:0x800000 /subsystem:windows /incremental:no /pdb:".\Final/jk2mp.pdb" /map:"Final/jk2mp.map" /machine:I386 /out:".\Final/jk2mp.exe"
|
||||
".\Final\jk2\cl_cgame.obj"
|
||||
".\Final\jk2\cl_cin.obj"
|
||||
".\Final\jk2\cl_console.obj"
|
||||
".\Final\jk2\cl_input.obj"
|
||||
".\Final\jk2\cl_keys.obj"
|
||||
".\Final\jk2\cl_main.obj"
|
||||
".\Final\jk2\cl_net_chan.obj"
|
||||
".\Final\jk2\cl_parse.obj"
|
||||
".\Final\jk2\cl_scrn.obj"
|
||||
".\Final\jk2\cl_ui.obj"
|
||||
".\Final\jk2\FXExport.obj"
|
||||
".\Final\jk2\FxPrimitives.obj"
|
||||
".\Final\jk2\FxScheduler.obj"
|
||||
".\Final\jk2\FxSystem.obj"
|
||||
".\Final\jk2\FxTemplate.obj"
|
||||
".\Final\jk2\FxUtil.obj"
|
||||
".\Final\jk2\cm_load.obj"
|
||||
".\Final\jk2\cm_patch.obj"
|
||||
".\Final\jk2\cm_polylib.obj"
|
||||
".\Final\jk2\cm_shader.obj"
|
||||
".\Final\jk2\cm_test.obj"
|
||||
".\Final\jk2\cm_trace.obj"
|
||||
".\Final\jk2\cmd.obj"
|
||||
".\Final\jk2\CNetProfile.obj"
|
||||
".\Final\jk2\common.obj"
|
||||
".\Final\jk2\cvar.obj"
|
||||
".\Final\jk2\files.obj"
|
||||
".\Final\jk2\GenericParser2.obj"
|
||||
".\Final\jk2\hstring.obj"
|
||||
".\Final\jk2\huffman.obj"
|
||||
".\Final\jk2\md4.obj"
|
||||
".\Final\jk2\msg.obj"
|
||||
".\Final\jk2\net_chan.obj"
|
||||
".\Final\jk2\q_math.obj"
|
||||
".\Final\jk2\q_shared.obj"
|
||||
".\Final\jk2\RoffSystem.obj"
|
||||
".\Final\jk2\strip.obj"
|
||||
".\Final\jk2\unzip.obj"
|
||||
".\Final\jk2\vm.obj"
|
||||
".\Final\jk2\vm_interpreted.obj"
|
||||
".\Final\jk2\vm_x86.obj"
|
||||
".\Final\jk2\win_input.obj"
|
||||
".\Final\jk2\win_main.obj"
|
||||
".\Final\jk2\win_net.obj"
|
||||
".\Final\jk2\win_shared.obj"
|
||||
".\Final\jk2\win_snd.obj"
|
||||
".\Final\jk2\win_syscon.obj"
|
||||
".\Final\jk2\win_wndproc.obj"
|
||||
".\Final\jk2\sv_bot.obj"
|
||||
".\Final\jk2\sv_ccmds.obj"
|
||||
".\Final\jk2\sv_client.obj"
|
||||
".\Final\jk2\sv_game.obj"
|
||||
".\Final\jk2\sv_init.obj"
|
||||
".\Final\jk2\sv_main.obj"
|
||||
".\Final\jk2\sv_net_chan.obj"
|
||||
".\Final\jk2\sv_snapshot.obj"
|
||||
".\Final\jk2\sv_world.obj"
|
||||
".\Final\jk2\cdct.obj"
|
||||
".\Final\jk2\csbt.obj"
|
||||
".\Final\jk2\csbtb.obj"
|
||||
".\Final\jk2\csbtl3.obj"
|
||||
".\Final\jk2\cup.obj"
|
||||
".\Final\jk2\cupini.obj"
|
||||
".\Final\jk2\cupl1.obj"
|
||||
".\Final\jk2\cupl3.obj"
|
||||
".\Final\jk2\cwin.obj"
|
||||
".\Final\jk2\cwinb.obj"
|
||||
".\Final\jk2\cwinm.obj"
|
||||
".\Final\jk2\hwin.obj"
|
||||
".\Final\jk2\l3dq.obj"
|
||||
".\Final\jk2\l3init.obj"
|
||||
".\Final\jk2\mdct.obj"
|
||||
".\Final\jk2\mhead.obj"
|
||||
".\Final\jk2\msis.obj"
|
||||
".\Final\jk2\towave.obj"
|
||||
".\Final\jk2\uph.obj"
|
||||
".\Final\jk2\upsf.obj"
|
||||
".\Final\jk2\wavep.obj"
|
||||
".\Final\jk2\snd_dma.obj"
|
||||
".\Final\jk2\snd_mem.obj"
|
||||
".\Final\jk2\snd_mix.obj"
|
||||
".\Final\jk2\snd_mp3.obj"
|
||||
".\Final\jk2\jcapimin.obj"
|
||||
".\Final\jk2\jccoefct.obj"
|
||||
".\Final\jk2\jccolor.obj"
|
||||
".\Final\jk2\jcdctmgr.obj"
|
||||
".\Final\jk2\jchuff.obj"
|
||||
".\Final\jk2\jcinit.obj"
|
||||
".\Final\jk2\jcmainct.obj"
|
||||
".\Final\jk2\jcmarker.obj"
|
||||
".\Final\jk2\jcmaster.obj"
|
||||
".\Final\jk2\jcomapi.obj"
|
||||
".\Final\jk2\jcparam.obj"
|
||||
".\Final\jk2\jcphuff.obj"
|
||||
".\Final\jk2\jcprepct.obj"
|
||||
".\Final\jk2\jcsample.obj"
|
||||
".\Final\jk2\jctrans.obj"
|
||||
".\Final\jk2\jdapimin.obj"
|
||||
".\Final\jk2\jdapistd.obj"
|
||||
".\Final\jk2\jdatadst.obj"
|
||||
".\Final\jk2\jdatasrc.obj"
|
||||
".\Final\jk2\jdcoefct.obj"
|
||||
".\Final\jk2\jdcolor.obj"
|
||||
".\Final\jk2\jddctmgr.obj"
|
||||
".\Final\jk2\jdhuff.obj"
|
||||
".\Final\jk2\jdinput.obj"
|
||||
".\Final\jk2\jdmainct.obj"
|
||||
".\Final\jk2\jdmarker.obj"
|
||||
".\Final\jk2\jdmaster.obj"
|
||||
".\Final\jk2\jdpostct.obj"
|
||||
".\Final\jk2\jdsample.obj"
|
||||
".\Final\jk2\jdtrans.obj"
|
||||
".\Final\jk2\jerror.obj"
|
||||
".\Final\jk2\jfdctflt.obj"
|
||||
".\Final\jk2\jidctflt.obj"
|
||||
".\Final\jk2\jmemmgr.obj"
|
||||
".\Final\jk2\jmemnobs.obj"
|
||||
".\Final\jk2\jutils.obj"
|
||||
".\Final\jk2\png.obj"
|
||||
".\Final\jk2\matcomp.obj"
|
||||
".\Final\jk2\tr_animation.obj"
|
||||
".\Final\jk2\tr_backend.obj"
|
||||
".\Final\jk2\tr_bsp.obj"
|
||||
".\Final\jk2\tr_cmds.obj"
|
||||
".\Final\jk2\tr_curve.obj"
|
||||
".\Final\jk2\tr_flares.obj"
|
||||
".\Final\jk2\tr_font.obj"
|
||||
".\Final\jk2\tr_ghoul2.obj"
|
||||
".\Final\jk2\tr_image.obj"
|
||||
".\Final\jk2\tr_init.obj"
|
||||
".\Final\jk2\tr_light.obj"
|
||||
".\Final\jk2\tr_main.obj"
|
||||
".\Final\jk2\tr_marks.obj"
|
||||
".\Final\jk2\tr_mesh.obj"
|
||||
".\Final\jk2\tr_model.obj"
|
||||
".\Final\jk2\tr_noise.obj"
|
||||
".\Final\jk2\tr_quicksprite.obj"
|
||||
".\Final\jk2\tr_scene.obj"
|
||||
".\Final\jk2\tr_shade.obj"
|
||||
".\Final\jk2\tr_shade_calc.obj"
|
||||
".\Final\jk2\tr_shader.obj"
|
||||
".\Final\jk2\tr_shadows.obj"
|
||||
".\Final\jk2\tr_sky.obj"
|
||||
".\Final\jk2\tr_surface.obj"
|
||||
".\Final\jk2\tr_surfacesprites.obj"
|
||||
".\Final\jk2\tr_world.obj"
|
||||
".\Final\jk2\tr_WorldEffects.obj"
|
||||
".\Final\jk2\win_gamma.obj"
|
||||
".\Final\jk2\win_glimp.obj"
|
||||
".\Final\jk2\win_qgl.obj"
|
||||
".\Final\jk2\G2_API.obj"
|
||||
".\Final\jk2\G2_bolts.obj"
|
||||
".\Final\jk2\G2_bones.obj"
|
||||
".\Final\jk2\G2_misc.obj"
|
||||
".\Final\jk2\G2_surfaces.obj"
|
||||
".\Final\jk2\adler32.obj"
|
||||
".\Final\jk2\crc32.obj"
|
||||
".\Final\jk2\deflate.obj"
|
||||
".\Final\jk2\infblock.obj"
|
||||
".\Final\jk2\infcodes.obj"
|
||||
".\Final\jk2\inffast.obj"
|
||||
".\Final\jk2\inflate.obj"
|
||||
".\Final\jk2\inftrees.obj"
|
||||
".\Final\jk2\infutil.obj"
|
||||
".\Final\jk2\trees.obj"
|
||||
".\Final\jk2\zutil.obj"
|
||||
".\Final\jk2\buffer.obj"
|
||||
".\Final\jk2\cpp_interface.obj"
|
||||
".\Final\jk2\sockets.obj"
|
||||
".\Final\jk2\winquake.res"
|
||||
".\Final\botlib.lib"
|
||||
".\Final\uix86.lib"
|
||||
".\Final\cgamex86.lib"
|
||||
".\Final\jk2mpgamex86.lib"
|
||||
]
|
||||
Creating command line "link.exe @C:\DOCUME~1\jmonroe\LOCALS~1\Temp\RSP699.tmp"
|
||||
<h3>Output Window</h3>
|
||||
Compiling...
|
||||
cl_console.cpp
|
||||
common.cpp
|
||||
Linking...
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -1,5 +1,9 @@
|
|||
SCC = This is a Source Code Control file
|
||||
|
||||
[WinDed.dsp]
|
||||
SCC_Aux_Path = "\\ravend\vss_projects\jk2sof2MP"
|
||||
SCC_Project_Name = "$/General/code", EAAAAAAA
|
||||
|
||||
[jk2mp.dsp]
|
||||
SCC_Aux_Path = "\\ravend\vss_projects\jk2sof2MP"
|
||||
SCC_Project_Name = "$/General/code", EAAAAAAA
|
||||
|
|
Binary file not shown.
|
@ -22,85 +22,20 @@
|
|||
static char sys_cmdline[MAX_STRING_CHARS];
|
||||
clientStatic_t cls;
|
||||
|
||||
// enable this for executable checksumming
|
||||
#ifdef FINAL_BUILD
|
||||
#define SPANK_MONKEYS
|
||||
#endif
|
||||
static int sys_monkeySpank;
|
||||
static int sys_checksum;
|
||||
|
||||
|
||||
static unsigned busyCount = 0;
|
||||
static bool otherTasksRunning = false;
|
||||
unsigned otherTaskTime = 0;
|
||||
|
||||
#pragma optimize("", off)
|
||||
|
||||
void busyFunction(void)
|
||||
{
|
||||
float a = MEM_THRESHOLD;
|
||||
float b = 9343;
|
||||
short c = 4;
|
||||
|
||||
while((int)b > (float)(b-1))
|
||||
{
|
||||
a = a + b / c;
|
||||
busyCount++;
|
||||
}
|
||||
}
|
||||
|
||||
void CheckProcessTime(void)
|
||||
{
|
||||
HANDLE threadHandle;
|
||||
int threadId;
|
||||
FILETIME creationTime; // thread creation time
|
||||
FILETIME exitTime; // thread exit time
|
||||
FILETIME kernelTime; // thread kernel-mode time
|
||||
FILETIME userTime; // thread user-mode time
|
||||
// char temp[1024];
|
||||
|
||||
busyCount = 0;
|
||||
threadHandle = CreateThread(
|
||||
NULL, // LPSECURITY_ATTRIBUTES lpsa,
|
||||
0, // DWORD cbStack,
|
||||
(LPTHREAD_START_ROUTINE)busyFunction, // LPTHREAD_START_ROUTINE lpStartAddr,
|
||||
0, // LPVOID lpvThreadParm,
|
||||
CREATE_SUSPENDED, // DWORD fdwCreate,
|
||||
(unsigned long *)&threadId );
|
||||
|
||||
SetThreadPriority(threadHandle, THREAD_PRIORITY_IDLE);
|
||||
ResumeThread(threadHandle);
|
||||
while(busyCount < 10)
|
||||
{
|
||||
Sleep(100);
|
||||
}
|
||||
Sleep(1000);
|
||||
|
||||
TerminateThread(threadHandle, 0);
|
||||
GetThreadTimes(threadHandle, &creationTime, &exitTime, &kernelTime, &userTime);
|
||||
CloseHandle(threadHandle);
|
||||
|
||||
// sprintf(temp, "Time = %u\n", userTime.dwLowDateTime);
|
||||
// OutputDebugString(temp);
|
||||
|
||||
otherTaskTime = userTime.dwLowDateTime;
|
||||
if (userTime.dwLowDateTime < 7500000)
|
||||
{
|
||||
otherTasksRunning = true;
|
||||
// OutputDebugString("WARNING: possibly running on a system with another task\n");
|
||||
}
|
||||
}
|
||||
|
||||
#pragma optimize("", on)
|
||||
|
||||
|
||||
void *Sys_GetBotAIAPI (void *parms ) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void Conbuf_AppendText( const char *pMsg )
|
||||
{
|
||||
printf(pMsg);
|
||||
char msg[4096];
|
||||
strcpy(msg, pMsg);
|
||||
printf(Q_CleanStr(msg));
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -236,136 +171,6 @@ int Sys_MonkeyShouldBeSpanked( void ) {
|
|||
return sys_monkeySpank;
|
||||
}
|
||||
|
||||
/*
|
||||
==================
|
||||
Sys_CodeInMemoryChecksum
|
||||
==================
|
||||
*/
|
||||
#define MakePtr( cast, ptr, addValue ) (cast)( (DWORD)(ptr) + (addValue) )
|
||||
|
||||
int Sys_CodeInMemoryChecksum( void *codeBase ) {
|
||||
PIMAGE_DOS_HEADER dosHeader;
|
||||
PIMAGE_NT_HEADERS pNTHeader;
|
||||
PIMAGE_SECTION_HEADER section;
|
||||
|
||||
dosHeader = (PIMAGE_DOS_HEADER)codeBase;
|
||||
pNTHeader = MakePtr( PIMAGE_NT_HEADERS, dosHeader, dosHeader->e_lfanew );
|
||||
|
||||
// First, verify that the e_lfanew field gave us a reasonable
|
||||
// pointer, then verify the PE signature.
|
||||
if ( IsBadReadPtr(pNTHeader, sizeof(IMAGE_NT_HEADERS)) ||
|
||||
pNTHeader->Signature != IMAGE_NT_SIGNATURE )
|
||||
{
|
||||
//printf("Unhandled EXE type, or invalid .EXE\n");
|
||||
return 0;
|
||||
}
|
||||
// first section oughta be the code section
|
||||
section = (PIMAGE_SECTION_HEADER)(pNTHeader+1);
|
||||
/*
|
||||
// the name of the code section should be .text
|
||||
if ( Q_stricmp( section->Name, ".text" ) ) {
|
||||
return 0;
|
||||
}
|
||||
*/
|
||||
|
||||
return Com_BlockChecksum( ((byte *) codeBase) + section->VirtualAddress, section->SizeOfRawData );
|
||||
}
|
||||
|
||||
/*
|
||||
==================
|
||||
Sys_ChecksumExe
|
||||
==================
|
||||
*/
|
||||
|
||||
// make sure this string is unique in the executable
|
||||
// 01234567890123
|
||||
byte *exeChecksumId = (unsigned char *)"q3monkeyid\0\0\0\0";
|
||||
|
||||
void Sys_ChecksumExe( void *codeBase ) {
|
||||
TCHAR szPathOrig[_MAX_PATH], szPathClone[_MAX_PATH];
|
||||
STARTUPINFO si;
|
||||
TCHAR szCmdLine[512];
|
||||
HANDLE hfile, hProcessOrig;
|
||||
PROCESS_INFORMATION pi;
|
||||
int l, i, n;
|
||||
FILE *f;
|
||||
byte *buf, *ptr;
|
||||
|
||||
// Is this the original EXE or the clone EXE?
|
||||
if ( Q_stricmp(__argv[1], "monkey") ) {
|
||||
// Original EXE: Spawn clone EXE to delete this EXE
|
||||
|
||||
GetModuleFileName(NULL, szPathOrig, _MAX_PATH);
|
||||
GetTempPath(_MAX_PATH, szPathClone);
|
||||
GetTempFileName(szPathClone, __TEXT("Del"), 0, szPathClone);
|
||||
CopyFile(szPathOrig, szPathClone, FALSE);
|
||||
|
||||
// Open the clone EXE using FILE_FLAG_DELETE_ON_CLOSE
|
||||
hfile = CreateFile(szPathClone, 0, FILE_SHARE_READ, NULL,
|
||||
OPEN_EXISTING, FILE_FLAG_DELETE_ON_CLOSE, NULL);
|
||||
// Spawn the clone EXE passing it our EXE's process handle
|
||||
// and the full path name to the original EXE file.
|
||||
hProcessOrig = OpenProcess(SYNCHRONIZE, TRUE,
|
||||
GetCurrentProcessId());
|
||||
wsprintf(szCmdLine, __TEXT("%s monkey %d %d \"%s\""), szPathClone,
|
||||
sys_checksum, hProcessOrig, szPathOrig);
|
||||
ZeroMemory(&si, sizeof(si));
|
||||
si.cb = sizeof(si);
|
||||
CreateProcess(NULL, szCmdLine, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi);
|
||||
CloseHandle(hProcessOrig);
|
||||
CloseHandle(hfile);
|
||||
} else {
|
||||
// Clone EXE: When original EXE terminates, overwrite it with a new one
|
||||
sys_checksum = atoi( __argv[2] );
|
||||
hProcessOrig = (HANDLE) atoi( __argv[3] );
|
||||
WaitForSingleObject(hProcessOrig, INFINITE);
|
||||
CloseHandle(hProcessOrig);
|
||||
// open the original executable
|
||||
f = fopen( __argv[4], "rb" );
|
||||
if ( !f ) {
|
||||
return;
|
||||
}
|
||||
fseek (f, 0, SEEK_END);
|
||||
l = ftell (f);
|
||||
fseek (f, 0, SEEK_SET);
|
||||
buf = (unsigned char *)malloc(l);
|
||||
if ( fread(buf, l, 1, f) != 1 ) {
|
||||
return;
|
||||
}
|
||||
fclose(f);
|
||||
// search for the exe name string, nice brute force
|
||||
n = strlen((const char *)exeChecksumId);
|
||||
for ( i = 0; i < l; i++ ) {
|
||||
if ( !Q_strncmp((const char *)(buf + i), (const char *)exeChecksumId, n) ) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ( i >= l ) {
|
||||
return;
|
||||
}
|
||||
ptr = buf + i;
|
||||
// write checksum into exe memory image
|
||||
ptr[0] = (sys_checksum >> 24) & 0xFF;
|
||||
ptr[1] = (sys_checksum >> 16) & 0xFF;
|
||||
ptr[2] = (sys_checksum >> 8) & 0xFF;
|
||||
ptr[3] = (sys_checksum >> 0) & 0xFF;
|
||||
ptr[4] = ptr[5] = ptr[6] = ptr[7] = ptr[8] = ptr[9] = 0;
|
||||
// write out new exe with checksum
|
||||
f = fopen( __argv[4], "wb" );
|
||||
if ( !f ) {
|
||||
return;
|
||||
}
|
||||
if ( fwrite(buf, l, 1, f) != 1 ) {
|
||||
return;
|
||||
}
|
||||
fclose(f);
|
||||
free(buf);
|
||||
// The system will delete the clone EXE automatically
|
||||
// because it was opened with FILE_FLAG_DELETE_ON_CLOSE
|
||||
}
|
||||
//
|
||||
exit(0);
|
||||
}
|
||||
|
||||
/*
|
||||
==================
|
||||
|
@ -373,89 +178,124 @@ Sys_VerifyCodeChecksum
|
|||
==================
|
||||
*/
|
||||
void Sys_VerifyCodeChecksum( void *codeBase ) {
|
||||
// NOTE: should not checksum code in debug mode because the memory image changes
|
||||
// as soon as you set a break point!
|
||||
#if defined(SPANK_MONKEYS) && !defined(_DEBUG)
|
||||
int exeChecksum;
|
||||
}
|
||||
|
||||
// if the checksum is not yet stored in the executable
|
||||
if ( exeChecksumId[4] != 0 ) {
|
||||
// spawn another process that will replace this executable with one that has a checksum
|
||||
Sys_ChecksumExe( codeBase );
|
||||
return;
|
||||
}
|
||||
/*
|
||||
===============
|
||||
PrintMatches
|
||||
|
||||
exeChecksum = (exeChecksumId[0] << 24) | (exeChecksumId[1] << 16) | (exeChecksumId[2] << 8) | exeChecksumId[3];
|
||||
if ( exeChecksum != sys_checksum ) {
|
||||
sys_monkeySpank = qtrue;
|
||||
===============
|
||||
*/
|
||||
static char g_consoleField1[256];
|
||||
static char g_consoleField2[256];
|
||||
|
||||
static void PrintMatches( const char *s ) {
|
||||
if ( !Q_stricmpn( s, g_consoleField1, strlen( g_consoleField1 ) ) ) {
|
||||
printf( " %s\n", s );
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
//qboolean stdin_active = qtrue;
|
||||
char *Sys_ConsoleInput(void)
|
||||
{
|
||||
static char text[256];
|
||||
const char ClearLine[] = "\r \r";
|
||||
|
||||
static int len=0;
|
||||
fd_set fdset;
|
||||
struct timeval timeout;
|
||||
|
||||
// if (!com_dedicated || !com_dedicated->value)
|
||||
// return NULL;
|
||||
|
||||
// if (!stdin_active)
|
||||
// return NULL;
|
||||
|
||||
// FD_ZERO(&fdset);
|
||||
// FD_SET(0, &fdset); // stdin
|
||||
// timeout.tv_sec = 0;
|
||||
// timeout.tv_usec = 0;
|
||||
// if (select (1, &fdset, NULL, NULL, &timeout) == -1 || !FD_ISSET(0, &fdset))
|
||||
// return NULL;
|
||||
static bool bPendingExtended = false;
|
||||
|
||||
if (!kbhit()) return NULL;
|
||||
if (len == 0) memset(text,0,sizeof(text));
|
||||
|
||||
text[len] = getch();
|
||||
if (len == 0) memset(g_consoleField1,0,sizeof(g_consoleField1));
|
||||
|
||||
switch (text[len])
|
||||
g_consoleField1[len] = getch();
|
||||
|
||||
if (bPendingExtended)
|
||||
{
|
||||
switch (g_consoleField1[len])
|
||||
{
|
||||
case 'H': //up
|
||||
strcpy(g_consoleField1, g_consoleField2);
|
||||
printf(ClearLine);
|
||||
printf("%s",g_consoleField1);
|
||||
len = strlen(g_consoleField1);
|
||||
break;
|
||||
|
||||
case 'K': //left
|
||||
break;
|
||||
|
||||
case 'M': //right
|
||||
break;
|
||||
|
||||
case 'P': //down
|
||||
break;
|
||||
}
|
||||
g_consoleField1[len] = 0; //erase last key hit
|
||||
bPendingExtended = false;
|
||||
}
|
||||
else
|
||||
switch ((unsigned char) g_consoleField1[len])
|
||||
{
|
||||
case 0x00: //fkey is next
|
||||
case 0xe0: //extended = arrow keys
|
||||
g_consoleField1[len] = 0; //erase last key hit
|
||||
bPendingExtended = true;
|
||||
break;
|
||||
case 8: // backspace
|
||||
printf("%c %c",text[len],text[len]);
|
||||
text[len] = 0;
|
||||
printf("%c %c",g_consoleField1[len],g_consoleField1[len]);
|
||||
g_consoleField1[len] = 0;
|
||||
if (len > 0) len--;
|
||||
text[len] = 0;
|
||||
g_consoleField1[len] = 0;
|
||||
break;
|
||||
case 9: //Tab
|
||||
if (len) {
|
||||
g_consoleField1[len] = 0; //erase last key hit
|
||||
printf( "\n");
|
||||
// run through again, printing matches
|
||||
Cmd_CommandCompletion( PrintMatches );
|
||||
Cvar_CommandCompletion( PrintMatches );
|
||||
printf( "\n%s", g_consoleField1);
|
||||
}
|
||||
break;
|
||||
case 27: // esc
|
||||
// clear the line
|
||||
printf(ClearLine);
|
||||
len = 0;
|
||||
printf("\n");
|
||||
break;
|
||||
case '\r':
|
||||
case '\r': //enter
|
||||
g_consoleField1[len] = 0; //erase last key hit
|
||||
printf("\n");
|
||||
text[len] = 0;
|
||||
if (len) {
|
||||
len = 0;
|
||||
return text;
|
||||
default:
|
||||
printf("%c",text[len]);
|
||||
len++;
|
||||
if (len == sizeof(text))
|
||||
strcpy(g_consoleField2, g_consoleField1);
|
||||
return g_consoleField1;
|
||||
}
|
||||
break;
|
||||
case 'v' - 'a' + 1: // ctrl-v is paste
|
||||
g_consoleField1[len] = 0; //erase last key hit
|
||||
char *cbd;
|
||||
cbd = Sys_GetClipboardData();
|
||||
if (cbd) {
|
||||
strncpy (&g_consoleField1[len], cbd, sizeof(g_consoleField1) );
|
||||
printf("%s",cbd);
|
||||
len += strlen(cbd);
|
||||
Z_Free( cbd );
|
||||
if (len == sizeof(g_consoleField1))
|
||||
{
|
||||
len = 0;
|
||||
return text;
|
||||
return g_consoleField1;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
printf("%c",g_consoleField1[len]);
|
||||
len++;
|
||||
if (len == sizeof(g_consoleField1))
|
||||
{
|
||||
len = 0;
|
||||
return g_consoleField1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
// len = read (0, text, sizeof(text));
|
||||
// if (len == 0) { // eof!
|
||||
// stdin_active = qfalse;
|
||||
// return NULL;
|
||||
// }
|
||||
|
||||
// if (len < 1)
|
||||
// return NULL;
|
||||
// len = strlen(text);
|
||||
// text[len-1] = 0; // rip off the /n and terminate
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
@ -509,7 +349,7 @@ void QDECL Sys_Error( const char *error, ... ) {
|
|||
|
||||
// Sys_DestroyConsole();
|
||||
Com_ShutdownZoneMemory();
|
||||
// Com_ShutdownHunkMemory();
|
||||
Com_ShutdownHunkMemory();
|
||||
|
||||
exit (1);
|
||||
}
|
||||
|
@ -524,7 +364,7 @@ void Sys_Quit( void ) {
|
|||
IN_Shutdown();
|
||||
// Sys_DestroyConsole();
|
||||
Com_ShutdownZoneMemory();
|
||||
// Com_ShutdownHunkMemory();
|
||||
Com_ShutdownHunkMemory();
|
||||
|
||||
exit (0);
|
||||
}
|
||||
|
@ -1247,7 +1087,8 @@ EVENT LOOP
|
|||
#define MASK_QUED_EVENTS ( MAX_QUED_EVENTS - 1 )
|
||||
|
||||
sysEvent_t eventQue[MAX_QUED_EVENTS];
|
||||
int eventHead, eventTail;
|
||||
static int eventHead=0;
|
||||
static int eventTail=0;
|
||||
byte sys_packetReceived[MAX_MSGLEN];
|
||||
|
||||
/*
|
||||
|
@ -1531,50 +1372,6 @@ void Sys_Init( void ) {
|
|||
IN_Init(); // FIXME: not in dedicated?
|
||||
}
|
||||
|
||||
// do a quick mem test to check for any potential future mem problems...
|
||||
//
|
||||
void QuickMemTest(void)
|
||||
{
|
||||
// if (!Sys_LowPhysicalMemory())
|
||||
{
|
||||
const int iMemTestMegs = 64; // useful search label
|
||||
// special test,
|
||||
void *pvData = malloc(iMemTestMegs * 1024 * 1024);
|
||||
if (pvData)
|
||||
{
|
||||
free(pvData);
|
||||
}
|
||||
else
|
||||
{
|
||||
// err...
|
||||
//
|
||||
LPCSTR psContinue = "Your machine failed to allocate %dMB in a memory test, which may mean you'll have problems running this game all the way through.\n\nContinue anyway?";
|
||||
LPCSTR psNoMem = "Insufficient memory to run this game!\n";
|
||||
|
||||
switch (Language_GetIntegerValue())
|
||||
{
|
||||
case SP_LANGUAGE_GERMAN:
|
||||
|
||||
psContinue = "Ihr Computer konnte bei einem Speichertest keine %dMB reservieren, daher werden Sie mit dem Starten des Spiels Probleme haben.\n\nDennoch fortsetzen?";
|
||||
psNoMem = "Unzureichender Speicher zum Starten!\n";
|
||||
break;
|
||||
|
||||
case SP_LANGUAGE_FRENCH:
|
||||
|
||||
psContinue = "Votre système n'a pu allouer %d Mo lors d'une vérification de la mémoire, ce qui signifie que vous aurez peut-être du mal à faire fonctionner ce jeu. \n\nSouhaitez-vous continuer malgré tout ?";
|
||||
psNoMem = "Mémoire insuffisante pour lancer ce jeu !\n";
|
||||
break;
|
||||
}
|
||||
|
||||
#define GetYesNo(psQuery) (!!(MessageBox(NULL,psQuery,"Query",MB_YESNO|MB_ICONWARNING|MB_TASKMODAL)==IDYES))
|
||||
if (!GetYesNo(va(psContinue,iMemTestMegs)))
|
||||
{
|
||||
Com_Error( ERR_FATAL, psNoMem );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//=======================================================================
|
||||
//int totalMsec, countMsec;
|
||||
|
|
|
@ -801,7 +801,6 @@ qboolean CROFFSystem::ApplyROFF( SROFFEntity *roff_ent, CROFFSystem::CROFF *roff
|
|||
sharedEntity_t *ent = NULL;
|
||||
trajectory_t *originTrajectory, *angleTrajectory;
|
||||
vec_t *origin, *angle;
|
||||
vec3_t originTemp, angleTemp;
|
||||
|
||||
|
||||
if ( svs.time < roff_ent->mNextROFFTime )
|
||||
|
@ -812,6 +811,7 @@ qboolean CROFFSystem::ApplyROFF( SROFFEntity *roff_ent, CROFFSystem::CROFF *roff
|
|||
if (roff_ent->mIsClient)
|
||||
{
|
||||
#ifndef DEDICATED
|
||||
vec3_t originTemp, angleTemp;
|
||||
originTrajectory = (trajectory_t *)VM_Call( cgvm, CG_GET_ORIGIN_TRAJECTORY, roff_ent->mEntID );
|
||||
angleTrajectory = (trajectory_t *)VM_Call( cgvm, CG_GET_ANGLE_TRAJECTORY, roff_ent->mEntID );
|
||||
VM_Call( cgvm, CG_GET_ORIGIN, roff_ent->mEntID, originTemp );
|
||||
|
@ -949,11 +949,11 @@ qboolean CROFFSystem::ClearLerp( SROFFEntity *roff_ent )
|
|||
sharedEntity_t *ent;
|
||||
trajectory_t *originTrajectory, *angleTrajectory;
|
||||
vec_t *origin, *angle;
|
||||
vec3_t originTemp, angleTemp;
|
||||
|
||||
if (roff_ent->mIsClient)
|
||||
{
|
||||
#ifndef DEDICATED
|
||||
vec3_t originTemp, angleTemp;
|
||||
originTrajectory = (trajectory_t *)VM_Call( cgvm, CG_GET_ORIGIN_TRAJECTORY, roff_ent->mEntID );
|
||||
angleTrajectory = (trajectory_t *)VM_Call( cgvm, CG_GET_ANGLE_TRAJECTORY, roff_ent->mEntID );
|
||||
VM_Call( cgvm, CG_GET_ORIGIN, roff_ent->mEntID, originTemp );
|
||||
|
|
|
@ -91,7 +91,6 @@ void CMod_LoadShaders( lump_t *l )
|
|||
out->contentFlags = LittleLong( in->contentFlags );
|
||||
out->surfaceFlags = LittleLong( in->surfaceFlags );
|
||||
}
|
||||
CM_SetupShaderProperties();
|
||||
}
|
||||
|
||||
|
||||
|
@ -674,9 +673,6 @@ static void CM_LoadMap_Actual( const char *name, qboolean clientload, int *check
|
|||
, name, header.version, BSP_VERSION );
|
||||
}
|
||||
|
||||
// Load in the shader text - return instantly if already loaded
|
||||
CM_LoadShaderText(qfalse);
|
||||
|
||||
cmod_base = (byte *)buf;
|
||||
|
||||
// load into heap
|
||||
|
@ -747,10 +743,6 @@ CM_ClearMap
|
|||
*/
|
||||
void CM_ClearMap( void )
|
||||
{
|
||||
#if !defined(BSPC)
|
||||
CM_ShutdownShaderProperties();
|
||||
#endif
|
||||
|
||||
Com_Memset( &cm, 0, sizeof( cm ) );
|
||||
CM_ClearLevelPatches();
|
||||
}
|
||||
|
|
|
@ -194,10 +194,3 @@ struct patchCollide_s *CM_GeneratePatchCollide( int width, int height, vec3_t *p
|
|||
void CM_TraceThroughPatchCollide( traceWork_t *tw, const struct patchCollide_s *pc );
|
||||
qboolean CM_PositionTestInPatchCollide( traceWork_t *tw, const struct patchCollide_s *pc );
|
||||
void CM_ClearLevelPatches( void );
|
||||
|
||||
// cm_shader.cpp
|
||||
void CM_SetupShaderProperties( void );
|
||||
void CM_ShutdownShaderProperties(void);
|
||||
CCMShader *CM_GetShaderInfo( const char *name );
|
||||
CCMShader *CM_GetShaderInfo( int shaderNum );
|
||||
int CM_HandleDamageShader(int sideNum, int damage);
|
||||
|
|
|
@ -278,6 +278,7 @@ void QDECL Com_Error( int code, const char *fmt, ... ) {
|
|||
va_end (argptr);
|
||||
|
||||
if ( code != ERR_DISCONNECT ) {
|
||||
Cvar_Get("com_errorMessage", "", CVAR_ROM); //give com_errorMessage a default so it won't come back to life after a resetDefaults
|
||||
Cvar_Set("com_errorMessage", com_errorMessage);
|
||||
}
|
||||
|
||||
|
@ -857,7 +858,11 @@ void *Z_Malloc(int iSize, memtag_t eTag, qboolean bZeroit /* = qfalse */)
|
|||
zoneHeader_t *pMemory = NULL;
|
||||
while (pMemory == NULL)
|
||||
{
|
||||
if (bZeroit) {
|
||||
pMemory = (zoneHeader_t *) calloc ( iRealSize, 1 );
|
||||
} else {
|
||||
pMemory = (zoneHeader_t *) malloc ( iRealSize );
|
||||
}
|
||||
if (!pMemory)
|
||||
{
|
||||
// new bit, if we fail to malloc memory, try dumping some of the cached stuff that's non-vital and try again...
|
||||
|
@ -980,9 +985,6 @@ void *Z_Malloc(int iSize, memtag_t eTag, qboolean bZeroit /* = qfalse */)
|
|||
Z_Validate(); // check for corruption
|
||||
|
||||
void *pvReturnMem = &pMemory[1];
|
||||
if (bZeroit) {
|
||||
memset(pvReturnMem, 0, iSize);
|
||||
}
|
||||
return pvReturnMem;
|
||||
}
|
||||
|
||||
|
@ -1641,6 +1643,15 @@ void Com_InitHunkMemory( void ) {
|
|||
#endif
|
||||
}
|
||||
|
||||
void Com_ShutdownHunkMemory(void)
|
||||
{
|
||||
if(s_hunkData)
|
||||
{
|
||||
free(s_hunkData);
|
||||
s_hunkData = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
====================
|
||||
Hunk_MemoryRemaining
|
||||
|
@ -2494,7 +2505,11 @@ void Com_Init( char *commandLine ) {
|
|||
|
||||
// skip the jk2mpconfig.cfg if "safe" is on the command line
|
||||
if ( !Com_SafeMode() ) {
|
||||
#ifdef DEDICATED
|
||||
Cbuf_AddText ("exec jk2mpserver.cfg\n");
|
||||
#else
|
||||
Cbuf_AddText ("exec jk2mpconfig.cfg\n");
|
||||
#endif
|
||||
}
|
||||
|
||||
Cbuf_AddText ("exec autoexec.cfg\n");
|
||||
|
@ -2532,7 +2547,7 @@ void Com_Init( char *commandLine ) {
|
|||
com_dropsim = Cvar_Get ("com_dropsim", "0", CVAR_CHEAT);
|
||||
com_viewlog = Cvar_Get( "viewlog", "0", CVAR_CHEAT );
|
||||
com_speeds = Cvar_Get ("com_speeds", "0", 0);
|
||||
com_timedemo = Cvar_Get ("timedemo", "0", CVAR_CHEAT);
|
||||
com_timedemo = Cvar_Get ("timedemo", "0", 0);
|
||||
com_cameraMode = Cvar_Get ("com_cameraMode", "0", CVAR_CHEAT);
|
||||
|
||||
cl_paused = Cvar_Get ("cl_paused", "0", CVAR_ROM);
|
||||
|
@ -2569,7 +2584,7 @@ void Com_Init( char *commandLine ) {
|
|||
com_version = Cvar_Get ("version", s, CVAR_ROM | CVAR_SERVERINFO );
|
||||
|
||||
SP_Init();
|
||||
#ifndef __linux__
|
||||
#ifndef DEDICATED
|
||||
extern void QuickMemTest(void);
|
||||
QuickMemTest();
|
||||
#endif
|
||||
|
@ -2669,7 +2684,11 @@ void Com_WriteConfiguration( void ) {
|
|||
}
|
||||
cvar_modifiedFlags &= ~CVAR_ARCHIVE;
|
||||
|
||||
#ifdef DEDICATED
|
||||
Com_WriteConfigToFile( "jk2mpserver.cfg" );
|
||||
#else
|
||||
Com_WriteConfigToFile( "jk2mpconfig.cfg" );
|
||||
#endif
|
||||
|
||||
// bk001119 - tentative "not needed for dedicated"
|
||||
#ifndef DEDICATED
|
||||
|
@ -2938,7 +2957,6 @@ void MSG_shutdownHuffman();
|
|||
void Com_Shutdown (void)
|
||||
{
|
||||
CM_ClearMap();
|
||||
CM_FreeShaderText();
|
||||
|
||||
if (logfile) {
|
||||
FS_FCloseFile (logfile);
|
||||
|
|
|
@ -150,6 +150,11 @@ void Cvar_CommandCompletion( void(*callback)(const char *s) ) {
|
|||
cvar_t *cvar;
|
||||
|
||||
for ( cvar = cvar_vars ; cvar ; cvar = cvar->next ) {
|
||||
// Dont show internal cvars
|
||||
if ( cvar->flags & CVAR_INTERNAL )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
callback( cvar->name );
|
||||
}
|
||||
}
|
||||
|
@ -463,11 +468,11 @@ qboolean Cvar_Command( void ) {
|
|||
// perform a variable print or set
|
||||
if ( Cmd_Argc() == 1 )
|
||||
{
|
||||
if (v->flags & CVAR_INTERNAL) // don't display
|
||||
/* if (v->flags & CVAR_INTERNAL) // don't display
|
||||
{
|
||||
return qtrue;
|
||||
}
|
||||
|
||||
*/
|
||||
Com_Printf ("\"%s\" is:\"%s" S_COLOR_WHITE "\" default:\"%s" S_COLOR_WHITE "\"\n", v->name, v->string, v->resetString );
|
||||
if ( v->latchedString ) {
|
||||
Com_Printf( "latched: \"%s\"\n", v->latchedString );
|
||||
|
@ -902,7 +907,7 @@ Reads in all archived cvars
|
|||
============
|
||||
*/
|
||||
void Cvar_Init (void) {
|
||||
cvar_cheats = Cvar_Get("sv_cheats", "1", CVAR_ROM | CVAR_SYSTEMINFO );
|
||||
cvar_cheats = Cvar_Get("sv_cheats", "0", CVAR_ROM | CVAR_SYSTEMINFO );
|
||||
|
||||
Cmd_AddCommand ("toggle", Cvar_Toggle_f);
|
||||
Cmd_AddCommand ("set", Cvar_Set_f);
|
||||
|
|
|
@ -2531,7 +2531,7 @@ qboolean FS_idPak( char *pak, char *base ) {
|
|||
int i;
|
||||
|
||||
for (i = 0; i < NUM_ID_PAKS; i++) {
|
||||
if ( !FS_FilenameCompare(pak, va("%s/pak%d", base, i)) ) {
|
||||
if ( !FS_FilenameCompare(pak, va("%s/assets%d", base, i)) ) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -3266,7 +3266,11 @@ void FS_Restart( int checksumFeed ) {
|
|||
if ( Q_stricmp(fs_gamedirvar->string, lastValidGame) ) {
|
||||
// skip the jk2mpconfig.cfg if "safe" is on the command line
|
||||
if ( !Com_SafeMode() ) {
|
||||
#ifdef DEDICATED
|
||||
Cbuf_AddText ("exec jk2mpserver.cfg\n");
|
||||
#else
|
||||
Cbuf_AddText ("exec jk2mpconfig.cfg\n");
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue