Merge branch 'next' of git@git.magicalgirl.moe:STJr/SRB2.git into hotfix-pltz
Conflicts: src/dehacked.c src/p_mobj.h
433
SRB2.cbp
|
@ -154,8 +154,8 @@ HW3SOUND for 3D hardware sound support
|
||||||
<Add directory="libs/gme/include" />
|
<Add directory="libs/gme/include" />
|
||||||
</Compiler>
|
</Compiler>
|
||||||
<Linker>
|
<Linker>
|
||||||
<Add library="SDL" />
|
<Add library="SDL2" />
|
||||||
<Add library="SDL_mixer" />
|
<Add library="SDL2_mixer" />
|
||||||
<Add library="advapi32" />
|
<Add library="advapi32" />
|
||||||
<Add library="kernel32" />
|
<Add library="kernel32" />
|
||||||
<Add library="msvcrt" />
|
<Add library="msvcrt" />
|
||||||
|
@ -200,8 +200,8 @@ HW3SOUND for 3D hardware sound support
|
||||||
<Add directory="libs/gme/include" />
|
<Add directory="libs/gme/include" />
|
||||||
</Compiler>
|
</Compiler>
|
||||||
<Linker>
|
<Linker>
|
||||||
<Add library="SDL" />
|
<Add library="SDL2" />
|
||||||
<Add library="SDL_mixer" />
|
<Add library="SDL2_mixer" />
|
||||||
<Add library="advapi32" />
|
<Add library="advapi32" />
|
||||||
<Add library="kernel32" />
|
<Add library="kernel32" />
|
||||||
<Add library="msvcrt" />
|
<Add library="msvcrt" />
|
||||||
|
@ -4141,283 +4141,170 @@ HW3SOUND for 3D hardware sound support
|
||||||
<Option target="Debug Mingw64/DirectX" />
|
<Option target="Debug Mingw64/DirectX" />
|
||||||
<Option target="Release Mingw64/DirectX" />
|
<Option target="Release Mingw64/DirectX" />
|
||||||
</Unit>
|
</Unit>
|
||||||
<Unit filename="src/sdl/IMG_xpm.c">
|
<Unit filename="src/sdl2/IMG_xpm.c">
|
||||||
<Option compilerVar="CC" />
|
|
||||||
<Option compile="0" />
|
|
||||||
<Option link="0" />
|
|
||||||
<Option target="Debug Native/SDL" />
|
|
||||||
<Option target="Release Native/SDL" />
|
|
||||||
<Option target="Debug Mingw/SDL" />
|
|
||||||
<Option target="Release Mingw/SDL" />
|
|
||||||
<Option target="Debug Any/Dummy" />
|
|
||||||
<Option target="Release Any/Dummy" />
|
|
||||||
<Option target="Debug Linux/SDL" />
|
|
||||||
<Option target="Release Linux/SDL" />
|
|
||||||
<Option target="Debug Mingw64/SDL" />
|
|
||||||
<Option target="Release Mingw64/SDL" />
|
|
||||||
</Unit>
|
|
||||||
<Unit filename="src/sdl/dosstr.c">
|
|
||||||
<Option compilerVar="CC" />
|
|
||||||
<Option target="Debug Native/SDL" />
|
|
||||||
<Option target="Release Native/SDL" />
|
|
||||||
<Option target="Debug Mingw/SDL" />
|
|
||||||
<Option target="Release Mingw/SDL" />
|
|
||||||
<Option target="Debug Linux/SDL" />
|
|
||||||
<Option target="Release Linux/SDL" />
|
|
||||||
<Option target="Debug Mingw64/SDL" />
|
|
||||||
<Option target="Release Mingw64/SDL" />
|
|
||||||
</Unit>
|
|
||||||
<Unit filename="src/sdl/endtxt.c">
|
|
||||||
<Option compilerVar="CC" />
|
|
||||||
<Option target="Debug Native/SDL" />
|
|
||||||
<Option target="Release Native/SDL" />
|
|
||||||
<Option target="Debug Mingw/SDL" />
|
|
||||||
<Option target="Release Mingw/SDL" />
|
|
||||||
<Option target="Debug Linux/SDL" />
|
|
||||||
<Option target="Release Linux/SDL" />
|
|
||||||
<Option target="Debug Mingw64/SDL" />
|
|
||||||
<Option target="Release Mingw64/SDL" />
|
|
||||||
</Unit>
|
|
||||||
<Unit filename="src/sdl/endtxt.h">
|
|
||||||
<Option target="Debug Native/SDL" />
|
|
||||||
<Option target="Release Native/SDL" />
|
|
||||||
<Option target="Debug Mingw/SDL" />
|
|
||||||
<Option target="Release Mingw/SDL" />
|
|
||||||
<Option target="Debug Any/Dummy" />
|
|
||||||
<Option target="Release Any/Dummy" />
|
|
||||||
<Option target="Debug Linux/SDL" />
|
|
||||||
<Option target="Release Linux/SDL" />
|
|
||||||
<Option target="Debug Mingw64/SDL" />
|
|
||||||
<Option target="Release Mingw64/SDL" />
|
|
||||||
</Unit>
|
|
||||||
<Unit filename="src/sdl/filter/filters.c">
|
|
||||||
<Option compilerVar="CC" />
|
|
||||||
<Option target="Debug Native/SDL" />
|
|
||||||
<Option target="Release Native/SDL" />
|
|
||||||
<Option target="Debug Mingw/SDL" />
|
|
||||||
<Option target="Release Mingw/SDL" />
|
|
||||||
<Option target="Debug Linux/SDL" />
|
|
||||||
<Option target="Release Linux/SDL" />
|
|
||||||
<Option target="Debug Mingw64/SDL" />
|
|
||||||
<Option target="Release Mingw64/SDL" />
|
|
||||||
</Unit>
|
|
||||||
<Unit filename="src/sdl/filter/filters.h">
|
|
||||||
<Option target="Debug Native/SDL" />
|
|
||||||
<Option target="Release Native/SDL" />
|
|
||||||
<Option target="Debug Mingw/SDL" />
|
|
||||||
<Option target="Release Mingw/SDL" />
|
|
||||||
<Option target="Debug Any/Dummy" />
|
|
||||||
<Option target="Release Any/Dummy" />
|
|
||||||
<Option target="Debug Linux/SDL" />
|
|
||||||
<Option target="Release Linux/SDL" />
|
|
||||||
<Option target="Debug Mingw64/SDL" />
|
|
||||||
<Option target="Release Mingw64/SDL" />
|
|
||||||
</Unit>
|
|
||||||
<Unit filename="src/sdl/filter/hq2x.c">
|
|
||||||
<Option compilerVar="CC" />
|
|
||||||
<Option target="Debug Native/SDL" />
|
|
||||||
<Option target="Release Native/SDL" />
|
|
||||||
<Option target="Debug Mingw/SDL" />
|
|
||||||
<Option target="Release Mingw/SDL" />
|
|
||||||
<Option target="Debug Linux/SDL" />
|
|
||||||
<Option target="Release Linux/SDL" />
|
|
||||||
<Option target="Debug Mingw64/SDL" />
|
|
||||||
<Option target="Release Mingw64/SDL" />
|
|
||||||
</Unit>
|
|
||||||
<Unit filename="src/sdl/filter/hq2x.h">
|
|
||||||
<Option target="Debug Native/SDL" />
|
|
||||||
<Option target="Release Native/SDL" />
|
|
||||||
<Option target="Debug Mingw/SDL" />
|
|
||||||
<Option target="Release Mingw/SDL" />
|
|
||||||
<Option target="Debug Any/Dummy" />
|
|
||||||
<Option target="Release Any/Dummy" />
|
|
||||||
<Option target="Debug Linux/SDL" />
|
|
||||||
<Option target="Release Linux/SDL" />
|
|
||||||
<Option target="Debug Mingw64/SDL" />
|
|
||||||
<Option target="Release Mingw64/SDL" />
|
|
||||||
</Unit>
|
|
||||||
<Unit filename="src/sdl/filter/interp.h">
|
|
||||||
<Option target="Debug Native/SDL" />
|
|
||||||
<Option target="Release Native/SDL" />
|
|
||||||
<Option target="Debug Mingw/SDL" />
|
|
||||||
<Option target="Release Mingw/SDL" />
|
|
||||||
<Option target="Debug Any/Dummy" />
|
|
||||||
<Option target="Release Any/Dummy" />
|
|
||||||
<Option target="Debug Linux/SDL" />
|
|
||||||
<Option target="Release Linux/SDL" />
|
|
||||||
<Option target="Debug Mingw64/SDL" />
|
|
||||||
<Option target="Release Mingw64/SDL" />
|
|
||||||
</Unit>
|
|
||||||
<Unit filename="src/sdl/filter/lq2x.c">
|
|
||||||
<Option compilerVar="CC" />
|
|
||||||
<Option target="Debug Native/SDL" />
|
|
||||||
<Option target="Release Native/SDL" />
|
|
||||||
<Option target="Debug Mingw/SDL" />
|
|
||||||
<Option target="Release Mingw/SDL" />
|
|
||||||
<Option target="Debug Linux/SDL" />
|
|
||||||
<Option target="Release Linux/SDL" />
|
|
||||||
<Option target="Debug Mingw64/SDL" />
|
|
||||||
<Option target="Release Mingw64/SDL" />
|
|
||||||
</Unit>
|
|
||||||
<Unit filename="src/sdl/filter/lq2x.h">
|
|
||||||
<Option target="Debug Native/SDL" />
|
|
||||||
<Option target="Release Native/SDL" />
|
|
||||||
<Option target="Debug Mingw/SDL" />
|
|
||||||
<Option target="Release Mingw/SDL" />
|
|
||||||
<Option target="Debug Any/Dummy" />
|
|
||||||
<Option target="Release Any/Dummy" />
|
|
||||||
<Option target="Debug Linux/SDL" />
|
|
||||||
<Option target="Release Linux/SDL" />
|
|
||||||
<Option target="Debug Mingw64/SDL" />
|
|
||||||
<Option target="Release Mingw64/SDL" />
|
|
||||||
</Unit>
|
|
||||||
<Unit filename="src/sdl/filter/main.c">
|
|
||||||
<Option compilerVar="CC" />
|
|
||||||
<Option compile="0" />
|
|
||||||
<Option link="0" />
|
|
||||||
<Option target="Debug Native/SDL" />
|
|
||||||
<Option target="Release Native/SDL" />
|
|
||||||
<Option target="Debug Mingw/SDL" />
|
|
||||||
<Option target="Release Mingw/SDL" />
|
|
||||||
<Option target="Debug Any/Dummy" />
|
|
||||||
<Option target="Release Any/Dummy" />
|
|
||||||
<Option target="Debug Linux/SDL" />
|
|
||||||
<Option target="Release Linux/SDL" />
|
|
||||||
<Option target="Debug Mingw64/SDL" />
|
|
||||||
<Option target="Release Mingw64/SDL" />
|
|
||||||
</Unit>
|
|
||||||
<Unit filename="src/sdl/hwsym_sdl.c">
|
|
||||||
<Option compilerVar="CC" />
|
|
||||||
<Option target="Debug Native/SDL" />
|
|
||||||
<Option target="Release Native/SDL" />
|
|
||||||
<Option target="Debug Mingw/SDL" />
|
|
||||||
<Option target="Release Mingw/SDL" />
|
|
||||||
<Option target="Debug Linux/SDL" />
|
|
||||||
<Option target="Release Linux/SDL" />
|
|
||||||
<Option target="Debug Mingw64/SDL" />
|
|
||||||
<Option target="Release Mingw64/SDL" />
|
|
||||||
</Unit>
|
|
||||||
<Unit filename="src/sdl/hwsym_sdl.h">
|
|
||||||
<Option target="Debug Native/SDL" />
|
|
||||||
<Option target="Release Native/SDL" />
|
|
||||||
<Option target="Debug Mingw/SDL" />
|
|
||||||
<Option target="Release Mingw/SDL" />
|
|
||||||
<Option target="Debug Any/Dummy" />
|
|
||||||
<Option target="Release Any/Dummy" />
|
|
||||||
<Option target="Debug Linux/SDL" />
|
|
||||||
<Option target="Release Linux/SDL" />
|
|
||||||
<Option target="Debug Mingw64/SDL" />
|
|
||||||
<Option target="Release Mingw64/SDL" />
|
|
||||||
</Unit>
|
|
||||||
<Unit filename="src/sdl/i_cdmus.c">
|
|
||||||
<Option compilerVar="CC" />
|
|
||||||
<Option target="Debug Native/SDL" />
|
|
||||||
<Option target="Release Native/SDL" />
|
|
||||||
<Option target="Debug Mingw/SDL" />
|
|
||||||
<Option target="Release Mingw/SDL" />
|
|
||||||
<Option target="Debug Linux/SDL" />
|
|
||||||
<Option target="Release Linux/SDL" />
|
|
||||||
<Option target="Debug Mingw64/SDL" />
|
|
||||||
<Option target="Release Mingw64/SDL" />
|
|
||||||
</Unit>
|
|
||||||
<Unit filename="src/sdl/i_main.c">
|
|
||||||
<Option compilerVar="CC" />
|
|
||||||
<Option target="Debug Native/SDL" />
|
|
||||||
<Option target="Release Native/SDL" />
|
|
||||||
<Option target="Debug Mingw/SDL" />
|
|
||||||
<Option target="Release Mingw/SDL" />
|
|
||||||
<Option target="Debug Linux/SDL" />
|
|
||||||
<Option target="Release Linux/SDL" />
|
|
||||||
<Option target="Debug Mingw64/SDL" />
|
|
||||||
<Option target="Release Mingw64/SDL" />
|
|
||||||
</Unit>
|
|
||||||
<Unit filename="src/sdl/i_net.c">
|
|
||||||
<Option compilerVar="CC" />
|
|
||||||
<Option target="Debug Native/SDL" />
|
|
||||||
<Option target="Release Native/SDL" />
|
|
||||||
<Option target="Debug Mingw/SDL" />
|
|
||||||
<Option target="Release Mingw/SDL" />
|
|
||||||
<Option target="Debug Linux/SDL" />
|
|
||||||
<Option target="Release Linux/SDL" />
|
|
||||||
<Option target="Debug Mingw64/SDL" />
|
|
||||||
<Option target="Release Mingw64/SDL" />
|
|
||||||
</Unit>
|
|
||||||
<Unit filename="src/sdl/i_system.c">
|
|
||||||
<Option compilerVar="CC" />
|
|
||||||
<Option target="Debug Native/SDL" />
|
|
||||||
<Option target="Release Native/SDL" />
|
|
||||||
<Option target="Debug Mingw/SDL" />
|
|
||||||
<Option target="Release Mingw/SDL" />
|
|
||||||
<Option target="Debug Linux/SDL" />
|
|
||||||
<Option target="Release Linux/SDL" />
|
|
||||||
<Option target="Debug Mingw64/SDL" />
|
|
||||||
<Option target="Release Mingw64/SDL" />
|
|
||||||
</Unit>
|
|
||||||
<Unit filename="src/sdl/i_video.c">
|
|
||||||
<Option compilerVar="CC" />
|
|
||||||
<Option target="Debug Native/SDL" />
|
|
||||||
<Option target="Release Native/SDL" />
|
|
||||||
<Option target="Debug Mingw/SDL" />
|
|
||||||
<Option target="Release Mingw/SDL" />
|
|
||||||
<Option target="Debug Linux/SDL" />
|
|
||||||
<Option target="Release Linux/SDL" />
|
|
||||||
<Option target="Debug Mingw64/SDL" />
|
|
||||||
<Option target="Release Mingw64/SDL" />
|
|
||||||
</Unit>
|
|
||||||
<Unit filename="src/sdl/mixer_sound.c">
|
|
||||||
<Option compilerVar="CC" />
|
|
||||||
<Option target="Debug Mingw/SDL" />
|
|
||||||
<Option target="Release Mingw/SDL" />
|
|
||||||
<Option target="Debug Linux/SDL" />
|
|
||||||
<Option target="Release Linux/SDL" />
|
|
||||||
<Option target="Debug Mingw64/SDL" />
|
|
||||||
<Option target="Release Mingw64/SDL" />
|
|
||||||
</Unit>
|
|
||||||
<Unit filename="src/sdl/ogl_sdl.c">
|
|
||||||
<Option compilerVar="CC" />
|
|
||||||
<Option target="Debug Native/SDL" />
|
|
||||||
<Option target="Release Native/SDL" />
|
|
||||||
<Option target="Debug Mingw/SDL" />
|
|
||||||
<Option target="Release Mingw/SDL" />
|
|
||||||
<Option target="Debug Linux/SDL" />
|
|
||||||
<Option target="Release Linux/SDL" />
|
|
||||||
<Option target="Debug Mingw64/SDL" />
|
|
||||||
<Option target="Release Mingw64/SDL" />
|
|
||||||
</Unit>
|
|
||||||
<Unit filename="src/sdl/ogl_sdl.h">
|
|
||||||
<Option target="Debug Native/SDL" />
|
|
||||||
<Option target="Release Native/SDL" />
|
|
||||||
<Option target="Debug Mingw/SDL" />
|
|
||||||
<Option target="Release Mingw/SDL" />
|
|
||||||
<Option target="Debug Any/Dummy" />
|
|
||||||
<Option target="Release Any/Dummy" />
|
|
||||||
<Option target="Debug Linux/SDL" />
|
|
||||||
<Option target="Release Linux/SDL" />
|
|
||||||
<Option target="Debug Mingw64/SDL" />
|
|
||||||
<Option target="Release Mingw64/SDL" />
|
|
||||||
</Unit>
|
|
||||||
<Unit filename="src/sdl/sdl_sound.c">
|
|
||||||
<Option compilerVar="CC" />
|
<Option compilerVar="CC" />
|
||||||
<Option target="Debug Native/SDL" />
|
<Option target="Debug Native/SDL" />
|
||||||
<Option target="Release Native/SDL" />
|
<Option target="Release Native/SDL" />
|
||||||
<Option target="Debug Linux/SDL" />
|
<Option target="Debug Linux/SDL" />
|
||||||
<Option target="Release Linux/SDL" />
|
<Option target="Release Linux/SDL" />
|
||||||
<Option target="Debug Mingw64/SDL" />
|
|
||||||
<Option target="Release Mingw64/SDL" />
|
|
||||||
<Option target="Debug Mingw/SDL" />
|
<Option target="Debug Mingw/SDL" />
|
||||||
<Option target="Release Mingw/SDL" />
|
<Option target="Release Mingw/SDL" />
|
||||||
</Unit>
|
</Unit>
|
||||||
<Unit filename="src/sdl/sdlmain.h">
|
<Unit filename="src/sdl2/SDL_icon.xpm">
|
||||||
<Option target="Debug Native/SDL" />
|
<Option target="Debug Native/SDL" />
|
||||||
<Option target="Release Native/SDL" />
|
<Option target="Release Native/SDL" />
|
||||||
<Option target="Debug Mingw/SDL" />
|
|
||||||
<Option target="Release Mingw/SDL" />
|
|
||||||
<Option target="Debug Any/Dummy" />
|
|
||||||
<Option target="Release Any/Dummy" />
|
|
||||||
<Option target="Debug Linux/SDL" />
|
<Option target="Debug Linux/SDL" />
|
||||||
<Option target="Release Linux/SDL" />
|
<Option target="Release Linux/SDL" />
|
||||||
<Option target="Debug Mingw64/SDL" />
|
<Option target="Debug Mingw/SDL" />
|
||||||
<Option target="Release Mingw64/SDL" />
|
<Option target="Release Mingw/SDL" />
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="src/sdl2/dosstr.c">
|
||||||
|
<Option compilerVar="CC" />
|
||||||
|
<Option target="Debug Native/SDL" />
|
||||||
|
<Option target="Release Native/SDL" />
|
||||||
|
<Option target="Debug Linux/SDL" />
|
||||||
|
<Option target="Release Linux/SDL" />
|
||||||
|
<Option target="Debug Mingw/SDL" />
|
||||||
|
<Option target="Release Mingw/SDL" />
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="src/sdl2/endtxt.c">
|
||||||
|
<Option compilerVar="CC" />
|
||||||
|
<Option target="Debug Native/SDL" />
|
||||||
|
<Option target="Release Native/SDL" />
|
||||||
|
<Option target="Debug Linux/SDL" />
|
||||||
|
<Option target="Release Linux/SDL" />
|
||||||
|
<Option target="Debug Mingw/SDL" />
|
||||||
|
<Option target="Release Mingw/SDL" />
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="src/sdl2/endtxt.h">
|
||||||
|
<Option target="Debug Native/SDL" />
|
||||||
|
<Option target="Release Native/SDL" />
|
||||||
|
<Option target="Debug Linux/SDL" />
|
||||||
|
<Option target="Release Linux/SDL" />
|
||||||
|
<Option target="Debug Mingw/SDL" />
|
||||||
|
<Option target="Release Mingw/SDL" />
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="src/sdl2/hwsym_sdl.c">
|
||||||
|
<Option compilerVar="CC" />
|
||||||
|
<Option target="Debug Native/SDL" />
|
||||||
|
<Option target="Release Native/SDL" />
|
||||||
|
<Option target="Debug Linux/SDL" />
|
||||||
|
<Option target="Release Linux/SDL" />
|
||||||
|
<Option target="Debug Mingw/SDL" />
|
||||||
|
<Option target="Release Mingw/SDL" />
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="src/sdl2/hwsym_sdl.h">
|
||||||
|
<Option target="Debug Native/SDL" />
|
||||||
|
<Option target="Release Native/SDL" />
|
||||||
|
<Option target="Debug Linux/SDL" />
|
||||||
|
<Option target="Release Linux/SDL" />
|
||||||
|
<Option target="Debug Mingw/SDL" />
|
||||||
|
<Option target="Release Mingw/SDL" />
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="src/sdl2/i_cdmus.c">
|
||||||
|
<Option compilerVar="CC" />
|
||||||
|
<Option target="Debug Native/SDL" />
|
||||||
|
<Option target="Release Native/SDL" />
|
||||||
|
<Option target="Debug Linux/SDL" />
|
||||||
|
<Option target="Release Linux/SDL" />
|
||||||
|
<Option target="Debug Mingw/SDL" />
|
||||||
|
<Option target="Release Mingw/SDL" />
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="src/sdl2/i_main.c">
|
||||||
|
<Option compilerVar="CC" />
|
||||||
|
<Option target="Debug Native/SDL" />
|
||||||
|
<Option target="Release Native/SDL" />
|
||||||
|
<Option target="Debug Linux/SDL" />
|
||||||
|
<Option target="Release Linux/SDL" />
|
||||||
|
<Option target="Debug Mingw/SDL" />
|
||||||
|
<Option target="Release Mingw/SDL" />
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="src/sdl2/i_net.c">
|
||||||
|
<Option compilerVar="CC" />
|
||||||
|
<Option target="Debug Native/SDL" />
|
||||||
|
<Option target="Release Native/SDL" />
|
||||||
|
<Option target="Debug Linux/SDL" />
|
||||||
|
<Option target="Release Linux/SDL" />
|
||||||
|
<Option target="Debug Mingw/SDL" />
|
||||||
|
<Option target="Release Mingw/SDL" />
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="src/sdl2/i_system.c">
|
||||||
|
<Option compilerVar="CC" />
|
||||||
|
<Option target="Debug Native/SDL" />
|
||||||
|
<Option target="Release Native/SDL" />
|
||||||
|
<Option target="Debug Linux/SDL" />
|
||||||
|
<Option target="Release Linux/SDL" />
|
||||||
|
<Option target="Debug Mingw/SDL" />
|
||||||
|
<Option target="Release Mingw/SDL" />
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="src/sdl2/i_ttf.c">
|
||||||
|
<Option compilerVar="CC" />
|
||||||
|
<Option target="Debug Native/SDL" />
|
||||||
|
<Option target="Release Native/SDL" />
|
||||||
|
<Option target="Debug Linux/SDL" />
|
||||||
|
<Option target="Release Linux/SDL" />
|
||||||
|
<Option target="Debug Mingw/SDL" />
|
||||||
|
<Option target="Release Mingw/SDL" />
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="src/sdl2/i_ttf.h">
|
||||||
|
<Option target="Debug Native/SDL" />
|
||||||
|
<Option target="Release Native/SDL" />
|
||||||
|
<Option target="Debug Linux/SDL" />
|
||||||
|
<Option target="Release Linux/SDL" />
|
||||||
|
<Option target="Debug Mingw/SDL" />
|
||||||
|
<Option target="Release Mingw/SDL" />
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="src/sdl2/i_video.c">
|
||||||
|
<Option compilerVar="CC" />
|
||||||
|
<Option target="Debug Native/SDL" />
|
||||||
|
<Option target="Release Native/SDL" />
|
||||||
|
<Option target="Debug Linux/SDL" />
|
||||||
|
<Option target="Release Linux/SDL" />
|
||||||
|
<Option target="Debug Mingw/SDL" />
|
||||||
|
<Option target="Release Mingw/SDL" />
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="src/sdl2/mixer_sound.c">
|
||||||
|
<Option compilerVar="CC" />
|
||||||
|
<Option target="Debug Native/SDL" />
|
||||||
|
<Option target="Release Native/SDL" />
|
||||||
|
<Option target="Debug Linux/SDL" />
|
||||||
|
<Option target="Release Linux/SDL" />
|
||||||
|
<Option target="Debug Mingw/SDL" />
|
||||||
|
<Option target="Release Mingw/SDL" />
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="src/sdl2/ogl_sdl.c">
|
||||||
|
<Option compilerVar="CC" />
|
||||||
|
<Option target="Debug Native/SDL" />
|
||||||
|
<Option target="Release Native/SDL" />
|
||||||
|
<Option target="Debug Linux/SDL" />
|
||||||
|
<Option target="Release Linux/SDL" />
|
||||||
|
<Option target="Debug Mingw/SDL" />
|
||||||
|
<Option target="Release Mingw/SDL" />
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="src/sdl2/ogl_sdl.h">
|
||||||
|
<Option target="Debug Native/SDL" />
|
||||||
|
<Option target="Release Native/SDL" />
|
||||||
|
<Option target="Debug Linux/SDL" />
|
||||||
|
<Option target="Release Linux/SDL" />
|
||||||
|
<Option target="Debug Mingw/SDL" />
|
||||||
|
<Option target="Release Mingw/SDL" />
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="src/sdl2/sdl_sound.c">
|
||||||
|
<Option compilerVar="CC" />
|
||||||
|
<Option target="Debug Native/SDL" />
|
||||||
|
<Option target="Release Native/SDL" />
|
||||||
|
<Option target="Debug Linux/SDL" />
|
||||||
|
<Option target="Release Linux/SDL" />
|
||||||
|
<Option target="Debug Mingw/SDL" />
|
||||||
|
<Option target="Release Mingw/SDL" />
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="src/sdl2/sdlmain.h">
|
||||||
|
<Option target="Debug Native/SDL" />
|
||||||
|
<Option target="Release Native/SDL" />
|
||||||
|
<Option target="Debug Linux/SDL" />
|
||||||
|
<Option target="Release Linux/SDL" />
|
||||||
|
<Option target="Debug Mingw/SDL" />
|
||||||
|
<Option target="Release Mingw/SDL" />
|
||||||
</Unit>
|
</Unit>
|
||||||
<Unit filename="src/sounds.c">
|
<Unit filename="src/sounds.c">
|
||||||
<Option compilerVar="CC" />
|
<Option compilerVar="CC" />
|
||||||
|
@ -4590,13 +4477,13 @@ HW3SOUND for 3D hardware sound support
|
||||||
</Unit>
|
</Unit>
|
||||||
<Unit filename="src/vid_copy.s">
|
<Unit filename="src/vid_copy.s">
|
||||||
<Option compilerVar="CC" />
|
<Option compilerVar="CC" />
|
||||||
<Option compiler="avrgcc" use="1" buildCommand="$compiler $options -x assembler-with-cpp -c $file -o $object" />
|
<Option compiler="gcc" use="1" buildCommand="$compiler $options -x assembler-with-cpp -c $file -o $object" />
|
||||||
|
<Option compiler="ppcgcc" use="1" buildCommand="$compiler $options -x assembler-with-cpp -c $file -o $object" />
|
||||||
<Option compiler="gnu_gcc_compiler_for_mingw32" use="1" buildCommand="$compiler $options -x assembler-with-cpp -c $file -o $object" />
|
<Option compiler="gnu_gcc_compiler_for_mingw32" use="1" buildCommand="$compiler $options -x assembler-with-cpp -c $file -o $object" />
|
||||||
<Option compiler="gnu_gcc_compiler_for_mingw64" use="1" buildCommand="$compiler $options -x assembler-with-cpp -c $file -o $object" />
|
|
||||||
<Option compiler="armelfgcc" use="1" buildCommand="$compiler $options -x assembler-with-cpp -c $file -o $object" />
|
<Option compiler="armelfgcc" use="1" buildCommand="$compiler $options -x assembler-with-cpp -c $file -o $object" />
|
||||||
<Option compiler="tricoregcc" use="1" buildCommand="$compiler $options -x assembler-with-cpp -c $file -o $object" />
|
<Option compiler="tricoregcc" use="1" buildCommand="$compiler $options -x assembler-with-cpp -c $file -o $object" />
|
||||||
<Option compiler="ppcgcc" use="1" buildCommand="$compiler $options -x assembler-with-cpp -c $file -o $object" />
|
<Option compiler="avrgcc" use="1" buildCommand="$compiler $options -x assembler-with-cpp -c $file -o $object" />
|
||||||
<Option compiler="gcc" use="1" buildCommand="$compiler $options -x assembler-with-cpp -c $file -o $object" />
|
<Option compiler="gnu_gcc_compiler_for_mingw64" use="1" buildCommand="$compiler $options -x assembler-with-cpp -c $file -o $object" />
|
||||||
<Option target="Debug Native/SDL" />
|
<Option target="Debug Native/SDL" />
|
||||||
<Option target="Release Native/SDL" />
|
<Option target="Release Native/SDL" />
|
||||||
<Option target="Debug Linux/SDL" />
|
<Option target="Debug Linux/SDL" />
|
||||||
|
|
|
@ -27,7 +27,6 @@ find_library(SDL2_LIBRARY
|
||||||
"/usr/local/lib"
|
"/usr/local/lib"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
# set include dir variables
|
# set include dir variables
|
||||||
set(SDL2_PROCESS_INCLUDES SDL2_INCLUDE_DIR)
|
set(SDL2_PROCESS_INCLUDES SDL2_INCLUDE_DIR)
|
||||||
set(SDL2_PROCESS_LIBS SDL2_LIBRARY)
|
set(SDL2_PROCESS_LIBS SDL2_LIBRARY)
|
||||||
|
|
|
@ -943,9 +943,9 @@ void D_SRB2Main(void)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined (_WIN32_WCE) //|| defined (_DEBUG) || defined (GP2X)
|
#if defined (_WIN32_WCE) //|| defined (_DEBUG) || defined (GP2X)
|
||||||
devparm = !M_CheckParm("-nodebug");
|
devparm = M_CheckParm("-nodebug") == 0;
|
||||||
#else
|
#else
|
||||||
devparm = M_CheckParm("-debug");
|
devparm = M_CheckParm("-debug") != 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// for dedicated server
|
// for dedicated server
|
||||||
|
@ -1118,7 +1118,7 @@ void D_SRB2Main(void)
|
||||||
#endif
|
#endif
|
||||||
D_CleanFile();
|
D_CleanFile();
|
||||||
|
|
||||||
#if 1 // md5s last updated 12/14/14
|
#ifndef DEVELOP // md5s last updated 12/14/14
|
||||||
|
|
||||||
// Check MD5s of autoloaded files
|
// Check MD5s of autoloaded files
|
||||||
W_VerifyFileMD5(0, ASSET_HASH_SRB2_SRB); // srb2.srb/srb2.wad
|
W_VerifyFileMD5(0, ASSET_HASH_SRB2_SRB); // srb2.srb/srb2.wad
|
||||||
|
|
|
@ -3193,7 +3193,27 @@ static void Command_ModDetails_f(void)
|
||||||
//
|
//
|
||||||
static void Command_ShowGametype_f(void)
|
static void Command_ShowGametype_f(void)
|
||||||
{
|
{
|
||||||
CONS_Printf(M_GetText("Current gametype is %d\n"), gametype);
|
INT32 j;
|
||||||
|
const char *gametypestr = NULL;
|
||||||
|
|
||||||
|
if (!(netgame || multiplayer)) // print "Single player" instead of "Co-op"
|
||||||
|
{
|
||||||
|
CONS_Printf(M_GetText("Current gametype is %s\n"), M_GetText("Single player"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// find name string for current gametype
|
||||||
|
for (j = 0; gametype_cons_t[j].strvalue; j++)
|
||||||
|
{
|
||||||
|
if (gametype_cons_t[j].value == gametype)
|
||||||
|
{
|
||||||
|
gametypestr = gametype_cons_t[j].strvalue;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (gametypestr)
|
||||||
|
CONS_Printf(M_GetText("Current gametype is %s\n"), gametypestr);
|
||||||
|
else // string for current gametype was not found above (should never happen)
|
||||||
|
CONS_Printf(M_GetText("Unknown gametype set (%d)\n"), gametype);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Plays the intro.
|
/** Plays the intro.
|
||||||
|
|
|
@ -473,6 +473,7 @@ static void readPlayer(MYFILE *f, INT32 num)
|
||||||
|
|
||||||
if (!slotfound && (slotfound = findFreeSlot(&num)) == false)
|
if (!slotfound && (slotfound = findFreeSlot(&num)) == false)
|
||||||
goto done;
|
goto done;
|
||||||
|
PlayerMenu[num].status = IT_CALL;
|
||||||
|
|
||||||
for (i = 0; i < MAXLINELEN-3; i++)
|
for (i = 0; i < MAXLINELEN-3; i++)
|
||||||
{
|
{
|
||||||
|
@ -545,6 +546,7 @@ static void readPlayer(MYFILE *f, INT32 num)
|
||||||
if (!slotfound && (slotfound = findFreeSlot(&num)) == false)
|
if (!slotfound && (slotfound = findFreeSlot(&num)) == false)
|
||||||
goto done;
|
goto done;
|
||||||
DEH_WriteUndoline(word, &description[num].picname[0], UNDO_NONE);
|
DEH_WriteUndoline(word, &description[num].picname[0], UNDO_NONE);
|
||||||
|
PlayerMenu[num].status = IT_CALL;
|
||||||
strncpy(description[num].picname, word2, 8);
|
strncpy(description[num].picname, word2, 8);
|
||||||
}
|
}
|
||||||
else if (fastcmp(word, "STATUS"))
|
else if (fastcmp(word, "STATUS"))
|
||||||
|
@ -576,6 +578,8 @@ static void readPlayer(MYFILE *f, INT32 num)
|
||||||
if (!slotfound && (slotfound = findFreeSlot(&num)) == false)
|
if (!slotfound && (slotfound = findFreeSlot(&num)) == false)
|
||||||
goto done;
|
goto done;
|
||||||
DEH_WriteUndoline(word, description[num].skinname, UNDO_NONE);
|
DEH_WriteUndoline(word, description[num].skinname, UNDO_NONE);
|
||||||
|
PlayerMenu[num].status = IT_CALL;
|
||||||
|
|
||||||
strlcpy(description[num].skinname, word2, sizeof description[num].skinname);
|
strlcpy(description[num].skinname, word2, sizeof description[num].skinname);
|
||||||
strlwr(description[num].skinname);
|
strlwr(description[num].skinname);
|
||||||
}
|
}
|
||||||
|
@ -3807,7 +3811,6 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
|
||||||
|
|
||||||
// Blue Crawla
|
// Blue Crawla
|
||||||
"S_POSS_STND",
|
"S_POSS_STND",
|
||||||
"S_POSS_STND2",
|
|
||||||
"S_POSS_RUN1",
|
"S_POSS_RUN1",
|
||||||
"S_POSS_RUN2",
|
"S_POSS_RUN2",
|
||||||
"S_POSS_RUN3",
|
"S_POSS_RUN3",
|
||||||
|
@ -3817,7 +3820,6 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
|
||||||
|
|
||||||
// Red Crawla
|
// Red Crawla
|
||||||
"S_SPOS_STND",
|
"S_SPOS_STND",
|
||||||
"S_SPOS_STND2",
|
|
||||||
"S_SPOS_RUN1",
|
"S_SPOS_RUN1",
|
||||||
"S_SPOS_RUN2",
|
"S_SPOS_RUN2",
|
||||||
"S_SPOS_RUN3",
|
"S_SPOS_RUN3",
|
||||||
|
@ -7172,7 +7174,6 @@ static const char *const MOBJFLAG2_LIST[] = {
|
||||||
"EXPLOSION", // Thrown ring has explosive properties
|
"EXPLOSION", // Thrown ring has explosive properties
|
||||||
"SCATTER", // Thrown ring has scatter properties
|
"SCATTER", // Thrown ring has scatter properties
|
||||||
"BEYONDTHEGRAVE",// Source of this missile has died and has since respawned.
|
"BEYONDTHEGRAVE",// Source of this missile has died and has since respawned.
|
||||||
"PUSHED", // Mobj was already pushed this tic
|
|
||||||
"SLIDEPUSH", // MF_PUSHABLE that pushes continuously.
|
"SLIDEPUSH", // MF_PUSHABLE that pushes continuously.
|
||||||
"CLASSICPUSH", // Drops straight down when object has negative Z.
|
"CLASSICPUSH", // Drops straight down when object has negative Z.
|
||||||
"STANDONME", // While not pushable, stand on me anyway.
|
"STANDONME", // While not pushable, stand on me anyway.
|
||||||
|
@ -7201,7 +7202,10 @@ static const char *const MOBJEFLAG_LIST[] = {
|
||||||
"JUSTSTEPPEDDOWN", // used for ramp sectors
|
"JUSTSTEPPEDDOWN", // used for ramp sectors
|
||||||
"VERTICALFLIP", // Vertically flip sprite/allow upside-down physics
|
"VERTICALFLIP", // Vertically flip sprite/allow upside-down physics
|
||||||
"GOOWATER", // Goo water
|
"GOOWATER", // Goo water
|
||||||
|
"PUSHED", // Mobj was already pushed this tic
|
||||||
|
"SPRUNG", // Mobj was already sprung this tic
|
||||||
"APPLYPMOMZ" // Platform movement
|
"APPLYPMOMZ" // Platform movement
|
||||||
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
static const char *const MAPTHINGFLAG_LIST[4] = {
|
static const char *const MAPTHINGFLAG_LIST[4] = {
|
||||||
|
@ -7303,6 +7307,7 @@ static const char *const ML_LIST[16] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
// This DOES differ from r_draw's Color_Names, unfortunately.
|
// This DOES differ from r_draw's Color_Names, unfortunately.
|
||||||
|
// Also includes Super colors
|
||||||
static const char *COLOR_ENUMS[] = {
|
static const char *COLOR_ENUMS[] = {
|
||||||
"NONE", // SKINCOLOR_NONE
|
"NONE", // SKINCOLOR_NONE
|
||||||
"WHITE", // SKINCOLOR_WHITE
|
"WHITE", // SKINCOLOR_WHITE
|
||||||
|
@ -7329,7 +7334,25 @@ static const char *COLOR_ENUMS[] = {
|
||||||
"ZIM", // SKINCOLOR_ZIM
|
"ZIM", // SKINCOLOR_ZIM
|
||||||
"OLIVE", // SKINCOLOR_OLIVE
|
"OLIVE", // SKINCOLOR_OLIVE
|
||||||
"YELLOW", // SKINCOLOR_YELLOW
|
"YELLOW", // SKINCOLOR_YELLOW
|
||||||
"GOLD" // SKINCOLOR_GOLD
|
"GOLD", // SKINCOLOR_GOLD
|
||||||
|
// Super special awesome Super flashing colors!
|
||||||
|
"SUPER1", // SKINCOLOR_SUPER1
|
||||||
|
"SUPER2", // SKINCOLOR_SUPER2,
|
||||||
|
"SUPER3", // SKINCOLOR_SUPER3,
|
||||||
|
"SUPER4", // SKINCOLOR_SUPER4,
|
||||||
|
"SUPER5", // SKINCOLOR_SUPER5,
|
||||||
|
// Super Tails
|
||||||
|
"TSUPER1", // SKINCOLOR_TSUPER1,
|
||||||
|
"TSUPER2", // SKINCOLOR_TSUPER2,
|
||||||
|
"TSUPER3", // SKINCOLOR_TSUPER3,
|
||||||
|
"TSUPER4", // SKINCOLOR_TSUPER4,
|
||||||
|
"TSUPER5", // SKINCOLOR_TSUPER5,
|
||||||
|
// Super Knuckles
|
||||||
|
"KSUPER1", // SKINCOLOR_KSUPER1,
|
||||||
|
"KSUPER2", // SKINCOLOR_KSUPER2,
|
||||||
|
"KSUPER3", // SKINCOLOR_KSUPER3,
|
||||||
|
"KSUPER4", // SKINCOLOR_KSUPER4,
|
||||||
|
"KSUPER5" // SKINCOLOR_KSUPER5,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const char *const POWERS_LIST[] = {
|
static const char *const POWERS_LIST[] = {
|
||||||
|
@ -7536,8 +7559,9 @@ struct {
|
||||||
{"EMERALD6",EMERALD6},
|
{"EMERALD6",EMERALD6},
|
||||||
{"EMERALD7",EMERALD7},
|
{"EMERALD7",EMERALD7},
|
||||||
|
|
||||||
// SKINCOLOR_ doesn't include this..!
|
// SKINCOLOR_ doesn't include these..!
|
||||||
{"MAXSKINCOLORS",MAXSKINCOLORS},
|
{"MAXSKINCOLORS",MAXSKINCOLORS},
|
||||||
|
{"MAXTRANSLATIONS",MAXTRANSLATIONS},
|
||||||
|
|
||||||
// Precipitation
|
// Precipitation
|
||||||
{"PRECIP_NONE",PRECIP_NONE},
|
{"PRECIP_NONE",PRECIP_NONE},
|
||||||
|
@ -8158,7 +8182,7 @@ static fixed_t find_const(const char **rword)
|
||||||
}
|
}
|
||||||
else if (fastncmp("SKINCOLOR_",word,10)) {
|
else if (fastncmp("SKINCOLOR_",word,10)) {
|
||||||
char *p = word+10;
|
char *p = word+10;
|
||||||
for (i = 0; i < MAXSKINCOLORS; i++)
|
for (i = 0; i < MAXTRANSLATIONS; i++)
|
||||||
if (fastcmp(p, COLOR_ENUMS[i])) {
|
if (fastcmp(p, COLOR_ENUMS[i])) {
|
||||||
free(word);
|
free(word);
|
||||||
return i;
|
return i;
|
||||||
|
@ -8217,8 +8241,8 @@ void DEH_Check(void)
|
||||||
if (dehpowers != NUMPOWERS)
|
if (dehpowers != NUMPOWERS)
|
||||||
I_Error("You forgot to update the Dehacked powers list, you dolt!\n(%d powers defined, versus %s in the Dehacked list)\n", NUMPOWERS, sizeu1(dehpowers));
|
I_Error("You forgot to update the Dehacked powers list, you dolt!\n(%d powers defined, versus %s in the Dehacked list)\n", NUMPOWERS, sizeu1(dehpowers));
|
||||||
|
|
||||||
if (dehcolors != MAXSKINCOLORS)
|
if (dehcolors != MAXTRANSLATIONS)
|
||||||
I_Error("You forgot to update the Dehacked colors list, you dolt!\n(%d colors defined, versus %s in the Dehacked list)\n", MAXSKINCOLORS, sizeu1(dehcolors));
|
I_Error("You forgot to update the Dehacked colors list, you dolt!\n(%d colors defined, versus %s in the Dehacked list)\n", MAXTRANSLATIONS, sizeu1(dehcolors));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8572,7 +8596,7 @@ static inline int lib_getenum(lua_State *L)
|
||||||
}
|
}
|
||||||
else if (fastncmp("SKINCOLOR_",word,10)) {
|
else if (fastncmp("SKINCOLOR_",word,10)) {
|
||||||
p = word+10;
|
p = word+10;
|
||||||
for (i = 0; i < MAXSKINCOLORS; i++)
|
for (i = 0; i < MAXTRANSLATIONS; i++)
|
||||||
if (fastcmp(p, COLOR_ENUMS[i])) {
|
if (fastcmp(p, COLOR_ENUMS[i])) {
|
||||||
lua_pushinteger(L, i);
|
lua_pushinteger(L, i);
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -8697,7 +8721,7 @@ static inline int lib_getenum(lua_State *L)
|
||||||
lua_pushinteger(L, mapmusic);
|
lua_pushinteger(L, mapmusic);
|
||||||
return 1;
|
return 1;
|
||||||
} else if (fastcmp(word,"server")) {
|
} else if (fastcmp(word,"server")) {
|
||||||
if (!playeringame[serverplayer])
|
if ((!multiplayer || !netgame) && !playeringame[serverplayer])
|
||||||
return 0;
|
return 0;
|
||||||
LUA_PushUserdata(L, &players[serverplayer], META_PLAYER);
|
LUA_PushUserdata(L, &players[serverplayer], META_PLAYER);
|
||||||
return 1;
|
return 1;
|
||||||
|
|
|
@ -138,10 +138,12 @@
|
||||||
extern FILE *logstream;
|
extern FILE *logstream;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if 0
|
//#define DEVELOP // Disable this for release builds to remove excessive cheat commands and enable MD5 checking and stuff, all in one go. :3
|
||||||
|
#ifdef DEVELOP
|
||||||
#define VERSION 0 // Game version
|
#define VERSION 0 // Game version
|
||||||
#define SUBVERSION 0 // more precise version number
|
#define SUBVERSION 0 // more precise version number
|
||||||
#define VERSIONSTRING "Trunk"
|
#define VERSIONSTRING "Trunk"
|
||||||
|
#define VERSIONSTRINGW L"Trunk"
|
||||||
#else
|
#else
|
||||||
#define VERSION 201 // Game version
|
#define VERSION 201 // Game version
|
||||||
#define SUBVERSION 14 // more precise version number
|
#define SUBVERSION 14 // more precise version number
|
||||||
|
|
21
src/g_game.c
|
@ -2180,8 +2180,7 @@ void G_PlayerReborn(INT32 player)
|
||||||
p->health = 1; // 0 rings
|
p->health = 1; // 0 rings
|
||||||
p->panim = PA_IDLE; // standing animation
|
p->panim = PA_IDLE; // standing animation
|
||||||
|
|
||||||
if ((netgame || multiplayer) && !p->spectator
|
if ((netgame || multiplayer) && !p->spectator)
|
||||||
&& gametype != GT_RACE)
|
|
||||||
p->powers[pw_flashing] = flashingtics-1; // Babysitting deterrent
|
p->powers[pw_flashing] = flashingtics-1; // Babysitting deterrent
|
||||||
|
|
||||||
if (p-players == consoleplayer)
|
if (p-players == consoleplayer)
|
||||||
|
@ -4330,20 +4329,10 @@ void G_GhostTicker(void)
|
||||||
switch(g->color)
|
switch(g->color)
|
||||||
{
|
{
|
||||||
case GHC_SUPER: // Super Sonic (P_DoSuperStuff)
|
case GHC_SUPER: // Super Sonic (P_DoSuperStuff)
|
||||||
// Yousa yellow now!
|
if (leveltime % 9 < 5)
|
||||||
g->mo->color = SKINCOLOR_SUPER1 + (leveltime/2) % 5;
|
g->mo->color = SKINCOLOR_SUPER1 + leveltime % 9;
|
||||||
if (g->mo->skin)
|
else
|
||||||
switch (((skin_t*)g->mo->skin)-skins)
|
g->mo->color = SKINCOLOR_SUPER1 + 9 - leveltime % 9;
|
||||||
{
|
|
||||||
case 1: // Golden orange supertails.
|
|
||||||
g->mo->color = SKINCOLOR_TSUPER1 + (leveltime/2) % 5;
|
|
||||||
break;
|
|
||||||
case 2: // Pink superknux.
|
|
||||||
g->mo->color = SKINCOLOR_KSUPER1 + (leveltime/2) % 5;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case GHC_INVINCIBLE: // Mario invincibility (P_CheckInvincibilityTimer)
|
case GHC_INVINCIBLE: // Mario invincibility (P_CheckInvincibilityTimer)
|
||||||
g->mo->color = (UINT8)(leveltime % MAXSKINCOLORS);
|
g->mo->color = (UINT8)(leveltime % MAXSKINCOLORS);
|
||||||
|
|
|
@ -3527,6 +3527,184 @@ static boolean HWR_DoCulling(line_t *cullheight, line_t *viewcullheight, float v
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void HWR_DrawSpriteShadow(gr_vissprite_t *spr, GLPatch_t *gpatch, float this_scale)
|
||||||
|
{
|
||||||
|
UINT8 i;
|
||||||
|
float tr_x, tr_y;
|
||||||
|
FOutVector *wv;
|
||||||
|
FOutVector swallVerts[4];
|
||||||
|
FSurfaceInfo sSurf;
|
||||||
|
fixed_t floorheight, mobjfloor;
|
||||||
|
|
||||||
|
mobjfloor = HWR_OpaqueFloorAtPos(
|
||||||
|
spr->mobj->x, spr->mobj->y,
|
||||||
|
spr->mobj->z, spr->mobj->height);
|
||||||
|
if (cv_shadowoffs.value)
|
||||||
|
{
|
||||||
|
angle_t shadowdir;
|
||||||
|
|
||||||
|
// Set direction
|
||||||
|
if (splitscreen && stplyr != &players[displayplayer])
|
||||||
|
shadowdir = localangle2 + FixedAngle(cv_cam2_rotate.value);
|
||||||
|
else
|
||||||
|
shadowdir = localangle + FixedAngle(cv_cam_rotate.value);
|
||||||
|
|
||||||
|
// Find floorheight
|
||||||
|
floorheight = HWR_OpaqueFloorAtPos(
|
||||||
|
spr->mobj->x + P_ReturnThrustX(spr->mobj, shadowdir, spr->mobj->z - mobjfloor),
|
||||||
|
spr->mobj->y + P_ReturnThrustY(spr->mobj, shadowdir, spr->mobj->z - mobjfloor),
|
||||||
|
spr->mobj->z, spr->mobj->height);
|
||||||
|
|
||||||
|
// The shadow is falling ABOVE it's mobj?
|
||||||
|
// Don't draw it, then!
|
||||||
|
if (spr->mobj->z < floorheight)
|
||||||
|
return;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fixed_t floorz;
|
||||||
|
floorz = HWR_OpaqueFloorAtPos(
|
||||||
|
spr->mobj->x + P_ReturnThrustX(spr->mobj, shadowdir, spr->mobj->z - floorheight),
|
||||||
|
spr->mobj->y + P_ReturnThrustY(spr->mobj, shadowdir, spr->mobj->z - floorheight),
|
||||||
|
spr->mobj->z, spr->mobj->height);
|
||||||
|
// The shadow would be falling on a wall? Don't draw it, then.
|
||||||
|
// Would draw midair otherwise.
|
||||||
|
if (floorz < floorheight)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
floorheight = FixedInt(spr->mobj->z - floorheight);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
floorheight = FixedInt(spr->mobj->z - mobjfloor);
|
||||||
|
|
||||||
|
// create the sprite billboard
|
||||||
|
//
|
||||||
|
// 3--2
|
||||||
|
// | /|
|
||||||
|
// |/ |
|
||||||
|
// 0--1
|
||||||
|
|
||||||
|
// x1/x2 were already scaled in HWR_ProjectSprite
|
||||||
|
swallVerts[0].x = swallVerts[3].x = spr->x1;
|
||||||
|
swallVerts[2].x = swallVerts[1].x = spr->x2;
|
||||||
|
|
||||||
|
if (spr->mobj && this_scale != 1.0f)
|
||||||
|
{
|
||||||
|
// Always a pixel above the floor, perfectly flat.
|
||||||
|
swallVerts[0].y = swallVerts[1].y = swallVerts[2].y = swallVerts[3].y = spr->ty - gpatch->topoffset * this_scale - (floorheight+3);
|
||||||
|
|
||||||
|
swallVerts[0].z = swallVerts[1].z = spr->tz - (gpatch->height-gpatch->topoffset) * this_scale;
|
||||||
|
swallVerts[2].z = swallVerts[3].z = spr->tz + gpatch->topoffset * this_scale;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Always a pixel above the floor, perfectly flat.
|
||||||
|
swallVerts[0].y = swallVerts[1].y = swallVerts[2].y = swallVerts[3].y = spr->ty - gpatch->topoffset - (floorheight+3);
|
||||||
|
|
||||||
|
// Spread out top away from the camera. (Fixme: Make it always move out in the same direction!... somehow.)
|
||||||
|
swallVerts[0].z = swallVerts[1].z = spr->tz - (gpatch->height-gpatch->topoffset);
|
||||||
|
swallVerts[2].z = swallVerts[3].z = spr->tz + gpatch->topoffset;
|
||||||
|
}
|
||||||
|
|
||||||
|
// transform
|
||||||
|
wv = swallVerts;
|
||||||
|
|
||||||
|
for (i = 0; i < 4; i++,wv++)
|
||||||
|
{
|
||||||
|
// Offset away from the camera based on height from floor.
|
||||||
|
if (cv_shadowoffs.value)
|
||||||
|
wv->z += floorheight;
|
||||||
|
wv->z += 3;
|
||||||
|
|
||||||
|
//look up/down ----TOTAL SUCKS!!!--- do the 2 in one!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
tr_x = wv->z;
|
||||||
|
tr_y = wv->y;
|
||||||
|
wv->y = (tr_x * gr_viewludcos) + (tr_y * gr_viewludsin);
|
||||||
|
wv->z = (tr_x * gr_viewludsin) - (tr_y * gr_viewludcos);
|
||||||
|
// ---------------------- mega lame test ----------------------------------
|
||||||
|
|
||||||
|
//scale y before frustum so that frustum can be scaled to screen height
|
||||||
|
wv->y *= ORIGINAL_ASPECT * gr_fovlud;
|
||||||
|
wv->x *= gr_fovlud;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (spr->flip)
|
||||||
|
{
|
||||||
|
swallVerts[0].sow = swallVerts[3].sow = gpatch->max_s;
|
||||||
|
swallVerts[2].sow = swallVerts[1].sow = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
swallVerts[0].sow = swallVerts[3].sow = 0;
|
||||||
|
swallVerts[2].sow = swallVerts[1].sow = gpatch->max_s;
|
||||||
|
}
|
||||||
|
|
||||||
|
// flip the texture coords (look familiar?)
|
||||||
|
if (spr->vflip)
|
||||||
|
{
|
||||||
|
swallVerts[3].tow = swallVerts[2].tow = gpatch->max_t;
|
||||||
|
swallVerts[0].tow = swallVerts[1].tow = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
swallVerts[3].tow = swallVerts[2].tow = 0;
|
||||||
|
swallVerts[0].tow = swallVerts[1].tow = gpatch->max_t;
|
||||||
|
}
|
||||||
|
|
||||||
|
sSurf.FlatColor.s.red = 0x00;
|
||||||
|
sSurf.FlatColor.s.blue = 0x00;
|
||||||
|
sSurf.FlatColor.s.green = 0x00;
|
||||||
|
|
||||||
|
/*if (spr->mobj->frame & FF_TRANSMASK || spr->mobj->flags2 & MF2_SHADOW)
|
||||||
|
{
|
||||||
|
sector_t *sector = spr->mobj->subsector->sector;
|
||||||
|
UINT8 lightlevel = 255;
|
||||||
|
extracolormap_t *colormap = sector->extra_colormap;
|
||||||
|
|
||||||
|
if (sector->numlights)
|
||||||
|
{
|
||||||
|
INT32 light = R_GetPlaneLight(sector, spr->mobj->floorz, false);
|
||||||
|
|
||||||
|
if (!(spr->mobj->frame & FF_FULLBRIGHT))
|
||||||
|
lightlevel = *sector->lightlist[light].lightlevel;
|
||||||
|
|
||||||
|
if (sector->lightlist[light].extra_colormap)
|
||||||
|
colormap = sector->lightlist[light].extra_colormap;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
lightlevel = sector->lightlevel;
|
||||||
|
|
||||||
|
if (sector->extra_colormap)
|
||||||
|
colormap = sector->extra_colormap;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (colormap)
|
||||||
|
sSurf.FlatColor.rgba = HWR_Lighting(lightlevel/2, colormap->rgba, colormap->fadergba, false, true);
|
||||||
|
else
|
||||||
|
sSurf.FlatColor.rgba = HWR_Lighting(lightlevel/2, NORMALFOG, FADEFOG, false, true);
|
||||||
|
}*/
|
||||||
|
|
||||||
|
// shadow is always half as translucent as the sprite itself
|
||||||
|
if (!cv_translucency.value) // use default translucency (main sprite won't have any translucency)
|
||||||
|
sSurf.FlatColor.s.alpha = 0x80; // default
|
||||||
|
else if (spr->mobj->flags2 & MF2_SHADOW)
|
||||||
|
sSurf.FlatColor.s.alpha = 0x20;
|
||||||
|
else if (spr->mobj->frame & FF_TRANSMASK)
|
||||||
|
{
|
||||||
|
HWR_TranstableToAlpha((spr->mobj->frame & FF_TRANSMASK)>>FF_TRANSSHIFT, &sSurf);
|
||||||
|
sSurf.FlatColor.s.alpha /= 2; //cut alpha in half!
|
||||||
|
}
|
||||||
|
else
|
||||||
|
sSurf.FlatColor.s.alpha = 0x80; // default
|
||||||
|
|
||||||
|
if (sSurf.FlatColor.s.alpha > floorheight/4)
|
||||||
|
{
|
||||||
|
sSurf.FlatColor.s.alpha = (UINT8)(sSurf.FlatColor.s.alpha - floorheight/4);
|
||||||
|
HWD.pfnDrawPolygon(&sSurf, swallVerts, 4, PF_Translucent|PF_Modulated|PF_Clip);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// -----------------+
|
// -----------------+
|
||||||
// HWR_DrawSprite : Draw flat sprites
|
// HWR_DrawSprite : Draw flat sprites
|
||||||
// : (monsters, bonuses, weapons, lights, ...)
|
// : (monsters, bonuses, weapons, lights, ...)
|
||||||
|
@ -3629,7 +3807,7 @@ static void HWR_DrawSprite(gr_vissprite_t *spr)
|
||||||
|
|
||||||
// Draw shadow BEFORE sprite
|
// Draw shadow BEFORE sprite
|
||||||
if (cv_shadow.value // Shadows enabled
|
if (cv_shadow.value // Shadows enabled
|
||||||
&& !(spr->mobj->flags & MF_SCENERY && spr->mobj->flags & MF_SPAWNCEILING && spr->mobj->flags & MF_NOGRAVITY) // Ceiling scenery have no shadow.
|
&& (spr->mobj->flags & (MF_SCENERY|MF_SPAWNCEILING|MF_NOGRAVITY)) != (MF_SCENERY|MF_SPAWNCEILING|MF_NOGRAVITY) // Ceiling scenery have no shadow.
|
||||||
&& !(spr->mobj->flags2 & MF2_DEBRIS) // Debris have no corona or shadow.
|
&& !(spr->mobj->flags2 & MF2_DEBRIS) // Debris have no corona or shadow.
|
||||||
#ifdef ALAM_LIGHTING
|
#ifdef ALAM_LIGHTING
|
||||||
&& !(t_lspr[spr->mobj->sprite]->type // Things with dynamic lights have no shadow.
|
&& !(t_lspr[spr->mobj->sprite]->type // Things with dynamic lights have no shadow.
|
||||||
|
@ -3640,187 +3818,9 @@ static void HWR_DrawSprite(gr_vissprite_t *spr)
|
||||||
////////////////////
|
////////////////////
|
||||||
// SHADOW SPRITE! //
|
// SHADOW SPRITE! //
|
||||||
////////////////////
|
////////////////////
|
||||||
FOutVector swallVerts[4];
|
HWR_DrawSpriteShadow(spr, gpatch, this_scale);
|
||||||
FSurfaceInfo sSurf;
|
|
||||||
fixed_t floorheight, mobjfloor;
|
|
||||||
|
|
||||||
mobjfloor = HWR_OpaqueFloorAtPos(
|
|
||||||
spr->mobj->x, spr->mobj->y,
|
|
||||||
spr->mobj->z, spr->mobj->height);
|
|
||||||
if (cv_shadowoffs.value)
|
|
||||||
{
|
|
||||||
angle_t shadowdir;
|
|
||||||
|
|
||||||
// Set direction
|
|
||||||
if (splitscreen && stplyr != &players[displayplayer])
|
|
||||||
shadowdir = localangle2 + FixedAngle(cv_cam2_rotate.value);
|
|
||||||
else
|
|
||||||
shadowdir = localangle + FixedAngle(cv_cam_rotate.value);
|
|
||||||
|
|
||||||
// Find floorheight
|
|
||||||
floorheight = HWR_OpaqueFloorAtPos(
|
|
||||||
spr->mobj->x + P_ReturnThrustX(spr->mobj, shadowdir, spr->mobj->z - mobjfloor),
|
|
||||||
spr->mobj->y + P_ReturnThrustY(spr->mobj, shadowdir, spr->mobj->z - mobjfloor),
|
|
||||||
spr->mobj->z, spr->mobj->height);
|
|
||||||
|
|
||||||
// The shadow is falling ABOVE it's mobj?
|
|
||||||
// Don't draw it, then!
|
|
||||||
if (spr->mobj->z < floorheight)
|
|
||||||
goto noshadow;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
fixed_t floorz;
|
|
||||||
floorz = HWR_OpaqueFloorAtPos(
|
|
||||||
spr->mobj->x + P_ReturnThrustX(spr->mobj, shadowdir, spr->mobj->z - floorheight),
|
|
||||||
spr->mobj->y + P_ReturnThrustY(spr->mobj, shadowdir, spr->mobj->z - floorheight),
|
|
||||||
spr->mobj->z, spr->mobj->height);
|
|
||||||
// The shadow would be falling on a wall? Don't draw it, then.
|
|
||||||
// Would draw midair otherwise.
|
|
||||||
if (floorz < floorheight)
|
|
||||||
goto noshadow;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
floorheight = FixedInt(spr->mobj->z - floorheight);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
floorheight = FixedInt(spr->mobj->z - mobjfloor);
|
|
||||||
|
|
||||||
// create the sprite billboard
|
|
||||||
//
|
|
||||||
// 3--2
|
|
||||||
// | /|
|
|
||||||
// |/ |
|
|
||||||
// 0--1
|
|
||||||
|
|
||||||
// x1/x2 were already scaled in HWR_ProjectSprite
|
|
||||||
swallVerts[0].x = swallVerts[3].x = spr->x1;
|
|
||||||
swallVerts[2].x = swallVerts[1].x = spr->x2;
|
|
||||||
|
|
||||||
if (spr->mobj && this_scale != 1.0f)
|
|
||||||
{
|
|
||||||
// Always a pixel above the floor, perfectly flat.
|
|
||||||
swallVerts[0].y = swallVerts[1].y = swallVerts[2].y = swallVerts[3].y = spr->ty - gpatch->topoffset * this_scale - (floorheight+3);
|
|
||||||
|
|
||||||
swallVerts[0].z = swallVerts[1].z = spr->tz - (gpatch->height-gpatch->topoffset) * this_scale;
|
|
||||||
swallVerts[2].z = swallVerts[3].z = spr->tz + gpatch->topoffset * this_scale;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Always a pixel above the floor, perfectly flat.
|
|
||||||
swallVerts[0].y = swallVerts[1].y = swallVerts[2].y = swallVerts[3].y = spr->ty - gpatch->topoffset - (floorheight+3);
|
|
||||||
|
|
||||||
// Spread out top away from the camera. (Fixme: Make it always move out in the same direction!... somehow.)
|
|
||||||
swallVerts[0].z = swallVerts[1].z = spr->tz - (gpatch->height-gpatch->topoffset);
|
|
||||||
swallVerts[2].z = swallVerts[3].z = spr->tz + gpatch->topoffset;
|
|
||||||
}
|
|
||||||
|
|
||||||
// transform
|
|
||||||
wv = swallVerts;
|
|
||||||
|
|
||||||
for (i = 0; i < 4; i++,wv++)
|
|
||||||
{
|
|
||||||
// Offset away from the camera based on height from floor.
|
|
||||||
if (cv_shadowoffs.value)
|
|
||||||
wv->z += floorheight;
|
|
||||||
wv->z += 3;
|
|
||||||
|
|
||||||
//look up/down ----TOTAL SUCKS!!!--- do the 2 in one!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
||||||
tr_x = wv->z;
|
|
||||||
tr_y = wv->y;
|
|
||||||
wv->y = (tr_x * gr_viewludcos) + (tr_y * gr_viewludsin);
|
|
||||||
wv->z = (tr_x * gr_viewludsin) - (tr_y * gr_viewludcos);
|
|
||||||
// ---------------------- mega lame test ----------------------------------
|
|
||||||
|
|
||||||
//scale y before frustum so that frustum can be scaled to screen height
|
|
||||||
wv->y *= ORIGINAL_ASPECT * gr_fovlud;
|
|
||||||
wv->x *= gr_fovlud;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (spr->flip)
|
|
||||||
{
|
|
||||||
swallVerts[0].sow = swallVerts[3].sow = gpatch->max_s;
|
|
||||||
swallVerts[2].sow = swallVerts[1].sow = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
swallVerts[0].sow = swallVerts[3].sow = 0;
|
|
||||||
swallVerts[2].sow = swallVerts[1].sow = gpatch->max_s;
|
|
||||||
}
|
|
||||||
|
|
||||||
// flip the texture coords (look familiar?)
|
|
||||||
if (spr->vflip)
|
|
||||||
{
|
|
||||||
swallVerts[3].tow = swallVerts[2].tow = gpatch->max_t;
|
|
||||||
swallVerts[0].tow = swallVerts[1].tow = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
swallVerts[3].tow = swallVerts[2].tow = 0;
|
|
||||||
swallVerts[0].tow = swallVerts[1].tow = gpatch->max_t;
|
|
||||||
}
|
|
||||||
|
|
||||||
sSurf.FlatColor.s.red = 0x00;
|
|
||||||
sSurf.FlatColor.s.blue = 0x00;
|
|
||||||
sSurf.FlatColor.s.green = 0x00;
|
|
||||||
|
|
||||||
/*if (spr->mobj->frame & FF_TRANSMASK || spr->mobj->flags2 & MF2_SHADOW)
|
|
||||||
{
|
|
||||||
sector_t *sector = spr->mobj->subsector->sector;
|
|
||||||
UINT8 lightlevel = sector->lightlevel;
|
|
||||||
extracolormap_t *colormap = sector->extra_colormap;
|
|
||||||
|
|
||||||
if (sector->numlights)
|
|
||||||
{
|
|
||||||
INT32 light = R_GetPlaneLight(sector, spr->mobj->floorz, false);
|
|
||||||
|
|
||||||
if (!(spr->mobj->frame & FF_FULLBRIGHT))
|
|
||||||
lightlevel = *sector->lightlist[light].lightlevel;
|
|
||||||
else
|
|
||||||
lightlevel = 255;
|
|
||||||
|
|
||||||
if (sector->lightlist[light].extra_colormap)
|
|
||||||
colormap = sector->lightlist[light].extra_colormap;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
lightlevel = sector->lightlevel;
|
|
||||||
|
|
||||||
if (sector->extra_colormap)
|
|
||||||
colormap = sector->extra_colormap;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (colormap)
|
|
||||||
sSurf.FlatColor.rgba = HWR_Lighting(lightlevel/2, colormap->rgba, colormap->fadergba, false, true);
|
|
||||||
else
|
|
||||||
sSurf.FlatColor.rgba = HWR_Lighting(lightlevel/2, NORMALFOG, FADEFOG, false, true);
|
|
||||||
}*/
|
|
||||||
|
|
||||||
// shadow is always half as translucent as the sprite itself
|
|
||||||
if (!cv_translucency.value)
|
|
||||||
; // translucency disabled
|
|
||||||
else if (spr->mobj->flags2 & MF2_SHADOW)
|
|
||||||
sSurf.FlatColor.s.alpha = 0x20;
|
|
||||||
else if (spr->mobj->frame & FF_TRANSMASK)
|
|
||||||
{
|
|
||||||
HWR_TranstableToAlpha((spr->mobj->frame & FF_TRANSMASK)>>FF_TRANSSHIFT, &sSurf);
|
|
||||||
sSurf.FlatColor.s.alpha /= 2; //cut alpha in half!
|
|
||||||
}
|
|
||||||
else
|
|
||||||
sSurf.FlatColor.s.alpha = 0x80; // default
|
|
||||||
|
|
||||||
/// \todo do the test earlier
|
|
||||||
if (!cv_grmd2.value || (md2_models[spr->mobj->sprite].scale < 0.0f) || (md2_models[spr->mobj->sprite].notfound = true) || (md2_playermodels[(skin_t*)spr->mobj->skin-skins].scale < 0.0f) || (md2_playermodels[(skin_t*)spr->mobj->skin-skins].notfound = true))
|
|
||||||
{
|
|
||||||
if (sSurf.FlatColor.s.alpha > floorheight/4)
|
|
||||||
{
|
|
||||||
sSurf.FlatColor.s.alpha = (UINT8)(sSurf.FlatColor.s.alpha - floorheight/4);
|
|
||||||
HWD.pfnDrawPolygon(&sSurf, swallVerts, 4, PF_Translucent|PF_Modulated|PF_Clip);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
noshadow:
|
|
||||||
|
|
||||||
// This needs to be AFTER the shadows so that the regular sprites aren't drawn completely black.
|
// This needs to be AFTER the shadows so that the regular sprites aren't drawn completely black.
|
||||||
// sprite lighting by modulating the RGB components
|
// sprite lighting by modulating the RGB components
|
||||||
/// \todo coloured
|
/// \todo coloured
|
||||||
|
@ -3828,7 +3828,7 @@ noshadow:
|
||||||
// colormap test
|
// colormap test
|
||||||
{
|
{
|
||||||
sector_t *sector = spr->mobj->subsector->sector;
|
sector_t *sector = spr->mobj->subsector->sector;
|
||||||
UINT8 lightlevel = sector->lightlevel;
|
UINT8 lightlevel = 255;
|
||||||
extracolormap_t *colormap = sector->extra_colormap;
|
extracolormap_t *colormap = sector->extra_colormap;
|
||||||
|
|
||||||
if (sector->numlights)
|
if (sector->numlights)
|
||||||
|
@ -3839,8 +3839,6 @@ noshadow:
|
||||||
|
|
||||||
if (!(spr->mobj->frame & FF_FULLBRIGHT))
|
if (!(spr->mobj->frame & FF_FULLBRIGHT))
|
||||||
lightlevel = *sector->lightlist[light].lightlevel;
|
lightlevel = *sector->lightlist[light].lightlevel;
|
||||||
else
|
|
||||||
lightlevel = 255;
|
|
||||||
|
|
||||||
if (sector->lightlist[light].extra_colormap)
|
if (sector->lightlist[light].extra_colormap)
|
||||||
colormap = sector->lightlist[light].extra_colormap;
|
colormap = sector->lightlist[light].extra_colormap;
|
||||||
|
@ -3849,27 +3847,25 @@ noshadow:
|
||||||
{
|
{
|
||||||
if (!(spr->mobj->frame & FF_FULLBRIGHT))
|
if (!(spr->mobj->frame & FF_FULLBRIGHT))
|
||||||
lightlevel = sector->lightlevel;
|
lightlevel = sector->lightlevel;
|
||||||
else
|
|
||||||
lightlevel = 255;
|
|
||||||
|
|
||||||
if (sector->extra_colormap)
|
if (sector->extra_colormap)
|
||||||
colormap = sector->extra_colormap;
|
colormap = sector->extra_colormap;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (spr->mobj->frame & FF_FULLBRIGHT)
|
|
||||||
lightlevel = 255;
|
|
||||||
|
|
||||||
if (colormap)
|
if (colormap)
|
||||||
Surf.FlatColor.rgba = HWR_Lighting(lightlevel, colormap->rgba, colormap->fadergba, false, false);
|
Surf.FlatColor.rgba = HWR_Lighting(lightlevel, colormap->rgba, colormap->fadergba, false, false);
|
||||||
else
|
else
|
||||||
Surf.FlatColor.rgba = HWR_Lighting(lightlevel, NORMALFOG, FADEFOG, false, false);
|
Surf.FlatColor.rgba = HWR_Lighting(lightlevel, NORMALFOG, FADEFOG, false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// \todo do the test earlier
|
|
||||||
if (!cv_grmd2.value || (md2_models[spr->mobj->sprite].scale < 0.0f))
|
|
||||||
{
|
{
|
||||||
FBITFIELD blend = 0;
|
FBITFIELD blend = 0;
|
||||||
if (spr->mobj->flags2 & MF2_SHADOW)
|
if (!cv_translucency.value) // translucency disabled
|
||||||
|
{
|
||||||
|
Surf.FlatColor.s.alpha = 0xFF;
|
||||||
|
blend = PF_Translucent|PF_Occlude;
|
||||||
|
}
|
||||||
|
else if (spr->mobj->flags2 & MF2_SHADOW)
|
||||||
{
|
{
|
||||||
Surf.FlatColor.s.alpha = 0x40;
|
Surf.FlatColor.s.alpha = 0x40;
|
||||||
blend = PF_Translucent;
|
blend = PF_Translucent;
|
||||||
|
@ -4390,10 +4386,10 @@ static void HWR_DrawSprites(void)
|
||||||
#endif
|
#endif
|
||||||
if (spr->mobj && spr->mobj->skin && spr->mobj->sprite == SPR_PLAY)
|
if (spr->mobj && spr->mobj->skin && spr->mobj->sprite == SPR_PLAY)
|
||||||
{
|
{
|
||||||
if (!cv_grmd2.value || (cv_grmd2.value && md2_playermodels[(skin_t*)spr->mobj->skin-skins].notfound == true))
|
if (!cv_grmd2.value || md2_playermodels[(skin_t*)spr->mobj->skin-skins].notfound || md2_playermodels[(skin_t*)spr->mobj->skin-skins].scale < 0.0f)
|
||||||
HWR_DrawSprite(spr);
|
HWR_DrawSprite(spr);
|
||||||
}
|
}
|
||||||
else if (!cv_grmd2.value || (cv_grmd2.value && md2_models[spr->mobj->sprite].notfound == true))
|
else if (!cv_grmd2.value || md2_models[spr->mobj->sprite].notfound || md2_models[spr->mobj->sprite].scale < 0.0f)
|
||||||
HWR_DrawSprite(spr);
|
HWR_DrawSprite(spr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4419,7 +4415,7 @@ static void HWR_DrawMD2S(void)
|
||||||
#endif
|
#endif
|
||||||
if (spr->mobj && spr->mobj->skin && spr->mobj->sprite == SPR_PLAY)
|
if (spr->mobj && spr->mobj->skin && spr->mobj->sprite == SPR_PLAY)
|
||||||
{
|
{
|
||||||
if ((md2_playermodels[(skin_t*)spr->mobj->skin-skins].notfound == false) && (md2_playermodels[(skin_t*)spr->mobj->skin-skins].scale > 0.0f))
|
if (md2_playermodels[(skin_t*)spr->mobj->skin-skins].notfound == false && md2_playermodels[(skin_t*)spr->mobj->skin-skins].scale > 0.0f)
|
||||||
HWR_DrawMD2(spr);
|
HWR_DrawMD2(spr);
|
||||||
}
|
}
|
||||||
else if (md2_models[spr->mobj->sprite].notfound == false && md2_models[spr->mobj->sprite].scale > 0.0f)
|
else if (md2_models[spr->mobj->sprite].notfound == false && md2_models[spr->mobj->sprite].scale > 0.0f)
|
||||||
|
@ -4461,23 +4457,12 @@ static void HWR_AddSprites(sector_t *sec)
|
||||||
// If a limit exists, handle things a tiny bit different.
|
// If a limit exists, handle things a tiny bit different.
|
||||||
if ((limit_dist = (fixed_t)((maptol & TOL_NIGHTS) ? cv_drawdist_nights.value : cv_drawdist.value) << FRACBITS))
|
if ((limit_dist = (fixed_t)((maptol & TOL_NIGHTS) ? cv_drawdist_nights.value : cv_drawdist.value) << FRACBITS))
|
||||||
{
|
{
|
||||||
if (!players[displayplayer].mo)
|
|
||||||
return; // Draw nothing if no player.
|
|
||||||
// todo: is this really the best option for this situation?
|
|
||||||
|
|
||||||
for (thing = sec->thinglist; thing; thing = thing->snext)
|
for (thing = sec->thinglist; thing; thing = thing->snext)
|
||||||
{
|
{
|
||||||
if (thing->sprite == SPR_NULL || thing->flags2 & MF2_DONTDRAW)
|
if (thing->sprite == SPR_NULL || thing->flags2 & MF2_DONTDRAW)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
approx_dist = P_AproxDistance(
|
approx_dist = P_AproxDistance(viewx-thing->x, viewy-thing->y);
|
||||||
players[displayplayer].mo->x - thing->x,
|
|
||||||
players[displayplayer].mo->y - thing->y);
|
|
||||||
|
|
||||||
if (splitscreen && approx_dist > limit_dist && players[secondarydisplayplayer].mo)
|
|
||||||
approx_dist = P_AproxDistance(
|
|
||||||
players[secondarydisplayplayer].mo->x - thing->x,
|
|
||||||
players[secondarydisplayplayer].mo->y - thing->y);
|
|
||||||
|
|
||||||
if (approx_dist <= limit_dist)
|
if (approx_dist <= limit_dist)
|
||||||
HWR_ProjectSprite(thing);
|
HWR_ProjectSprite(thing);
|
||||||
|
@ -4495,23 +4480,12 @@ static void HWR_AddSprites(sector_t *sec)
|
||||||
// Someone seriously wants infinite draw distance for precipitation?
|
// Someone seriously wants infinite draw distance for precipitation?
|
||||||
if ((limit_dist = (fixed_t)cv_drawdist_precip.value << FRACBITS))
|
if ((limit_dist = (fixed_t)cv_drawdist_precip.value << FRACBITS))
|
||||||
{
|
{
|
||||||
if (!players[displayplayer].mo)
|
|
||||||
return; // Draw nothing if no player.
|
|
||||||
// todo: is this really the best option for this situation?
|
|
||||||
|
|
||||||
for (precipthing = sec->preciplist; precipthing; precipthing = precipthing->snext)
|
for (precipthing = sec->preciplist; precipthing; precipthing = precipthing->snext)
|
||||||
{
|
{
|
||||||
if (precipthing->invisible)
|
if (precipthing->precipflags & PCF_INVISIBLE)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
approx_dist = P_AproxDistance(
|
approx_dist = P_AproxDistance(viewx-precipthing->x, viewy-precipthing->y);
|
||||||
players[displayplayer].mo->x - precipthing->x,
|
|
||||||
players[displayplayer].mo->y - precipthing->y);
|
|
||||||
|
|
||||||
if (splitscreen && approx_dist > limit_dist && players[secondarydisplayplayer].mo)
|
|
||||||
approx_dist = P_AproxDistance(
|
|
||||||
players[secondarydisplayplayer].mo->x - precipthing->x,
|
|
||||||
players[secondarydisplayplayer].mo->y - precipthing->y);
|
|
||||||
|
|
||||||
if (approx_dist <= limit_dist)
|
if (approx_dist <= limit_dist)
|
||||||
HWR_ProjectPrecipitationSprite(precipthing);
|
HWR_ProjectPrecipitationSprite(precipthing);
|
||||||
|
@ -4521,7 +4495,7 @@ static void HWR_AddSprites(sector_t *sec)
|
||||||
{
|
{
|
||||||
// Draw everything in sector, no checks
|
// Draw everything in sector, no checks
|
||||||
for (precipthing = sec->preciplist; precipthing; precipthing = precipthing->snext)
|
for (precipthing = sec->preciplist; precipthing; precipthing = precipthing->snext)
|
||||||
if (!precipthing->invisible)
|
if (!(precipthing->precipflags & PCF_INVISIBLE))
|
||||||
HWR_ProjectPrecipitationSprite(precipthing);
|
HWR_ProjectPrecipitationSprite(precipthing);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -4582,10 +4556,11 @@ static void HWR_ProjectSprite(mobj_t *thing)
|
||||||
|
|
||||||
if (rot >= sprdef->numframes)
|
if (rot >= sprdef->numframes)
|
||||||
{
|
{
|
||||||
CONS_Alert(CONS_ERROR, M_GetText("R_ProjectSprite: invalid sprite frame %s/%s for %s\n"),
|
CONS_Alert(CONS_ERROR, M_GetText("HWR_ProjectSprite: invalid sprite frame %s/%s for %s\n"),
|
||||||
sizeu1(rot), sizeu2(sprdef->numframes), sprnames[thing->sprite]);
|
sizeu1(rot), sizeu2(sprdef->numframes), sprnames[thing->sprite]);
|
||||||
thing->sprite = states[S_UNKNOWN].sprite;
|
thing->sprite = states[S_UNKNOWN].sprite;
|
||||||
thing->frame = states[S_UNKNOWN].frame;
|
thing->frame = states[S_UNKNOWN].frame;
|
||||||
|
sprdef = &sprites[thing->sprite];
|
||||||
rot = thing->frame&FF_FRAMEMASK;
|
rot = thing->frame&FF_FRAMEMASK;
|
||||||
thing->state->sprite = thing->sprite;
|
thing->state->sprite = thing->sprite;
|
||||||
thing->state->frame = thing->frame;
|
thing->state->frame = thing->frame;
|
||||||
|
|
|
@ -921,24 +921,25 @@ void HWR_InitMD2(void)
|
||||||
}
|
}
|
||||||
while (fscanf(f, "%19s %31s %f %f", name, filename, &scale, &offset) == 4)
|
while (fscanf(f, "%19s %31s %f %f", name, filename, &scale, &offset) == 4)
|
||||||
{
|
{
|
||||||
|
if (stricmp(name, "PLAY") == 0)
|
||||||
|
{
|
||||||
|
CONS_Printf("MD2 for sprite PLAY detected in md2.dat, use a player skin instead!\n");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; i < NUMSPRITES; i++)
|
for (i = 0; i < NUMSPRITES; i++)
|
||||||
{
|
{
|
||||||
if (stricmp(name, sprnames[i]) == 0)
|
if (stricmp(name, sprnames[i]) == 0)
|
||||||
{
|
{
|
||||||
if (stricmp(name, "PLAY") == 0)
|
//if (stricmp(name, "PLAY") == 0)
|
||||||
continue;
|
//continue;
|
||||||
|
|
||||||
//CONS_Debug(DBG_RENDER, " Found: %s %s %f %f\n", name, filename, scale, offset);
|
//CONS_Debug(DBG_RENDER, " Found: %s %s %f %f\n", name, filename, scale, offset);
|
||||||
md2_models[i].scale = scale;
|
md2_models[i].scale = scale;
|
||||||
md2_models[i].offset = offset;
|
md2_models[i].offset = offset;
|
||||||
md2_models[i].notfound = false;
|
md2_models[i].notfound = false;
|
||||||
strcpy(md2_models[i].filename, filename);
|
strcpy(md2_models[i].filename, filename);
|
||||||
break;
|
goto md2found;
|
||||||
}
|
|
||||||
if (i == NUMSPRITES)
|
|
||||||
{
|
|
||||||
CONS_Printf("MD2 for sprite %s not found\n", name);
|
|
||||||
md2_models[i].notfound = true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -952,15 +953,14 @@ void HWR_InitMD2(void)
|
||||||
md2_playermodels[s].offset = offset;
|
md2_playermodels[s].offset = offset;
|
||||||
md2_playermodels[s].notfound = false;
|
md2_playermodels[s].notfound = false;
|
||||||
strcpy(md2_playermodels[s].filename, filename);
|
strcpy(md2_playermodels[s].filename, filename);
|
||||||
break;
|
goto md2found;
|
||||||
}
|
|
||||||
if (s == MAXSKINS-1)
|
|
||||||
{
|
|
||||||
CONS_Printf("MD2 for player skin %s not found\n", name);
|
|
||||||
md2_playermodels[s].notfound = true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// no sprite/player skin name found?!?
|
||||||
|
CONS_Printf("Unknown sprite/player skin %s detected in md2.dat\n", name);
|
||||||
|
md2found:
|
||||||
|
// move on to next line...
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
fclose(f);
|
fclose(f);
|
||||||
}
|
}
|
||||||
|
@ -996,17 +996,14 @@ void HWR_AddPlayerMD2(int skin) // For MD2's that were added after startup
|
||||||
md2_playermodels[skin].offset = offset;
|
md2_playermodels[skin].offset = offset;
|
||||||
md2_playermodels[skin].notfound = false;
|
md2_playermodels[skin].notfound = false;
|
||||||
strcpy(md2_playermodels[skin].filename, filename);
|
strcpy(md2_playermodels[skin].filename, filename);
|
||||||
break;
|
goto playermd2found;
|
||||||
}
|
}
|
||||||
if (skin == MAXSKINS-1)
|
}
|
||||||
{
|
|
||||||
CONS_Printf("MD2 for player skin %s not found\n", name);
|
//CONS_Printf("MD2 for player skin %s not found\n", skins[skin].name);
|
||||||
md2_playermodels[skin].notfound = true;
|
md2_playermodels[skin].notfound = true;
|
||||||
}
|
playermd2found:
|
||||||
}
|
|
||||||
|
|
||||||
fclose(f);
|
fclose(f);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1021,6 +1018,9 @@ void HWR_AddSpriteMD2(size_t spritenum) // For MD2s that were added after startu
|
||||||
if (nomd2s)
|
if (nomd2s)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (spritenum == SPR_PLAY) // Handled already NEWMD2: Per sprite, per-skin check
|
||||||
|
return;
|
||||||
|
|
||||||
// Read the md2.dat file
|
// Read the md2.dat file
|
||||||
f = fopen("md2.dat", "rt");
|
f = fopen("md2.dat", "rt");
|
||||||
|
|
||||||
|
@ -1033,28 +1033,20 @@ void HWR_AddSpriteMD2(size_t spritenum) // For MD2s that were added after startu
|
||||||
|
|
||||||
// Check for any MD2s that match the names of player skins!
|
// Check for any MD2s that match the names of player skins!
|
||||||
while (fscanf(f, "%19s %31s %f %f", name, filename, &scale, &offset) == 4)
|
while (fscanf(f, "%19s %31s %f %f", name, filename, &scale, &offset) == 4)
|
||||||
{
|
|
||||||
{
|
{
|
||||||
if (stricmp(name, sprnames[spritenum]) == 0)
|
if (stricmp(name, sprnames[spritenum]) == 0)
|
||||||
{
|
{
|
||||||
if (stricmp(name, "PLAY") == 0) // Handled already NEWMD2: Per sprite, per-skin check
|
|
||||||
continue;
|
|
||||||
|
|
||||||
md2_models[spritenum].scale = scale;
|
md2_models[spritenum].scale = scale;
|
||||||
md2_models[spritenum].offset = offset;
|
md2_models[spritenum].offset = offset;
|
||||||
md2_models[spritenum].notfound = false;
|
md2_models[spritenum].notfound = false;
|
||||||
strcpy(md2_models[spritenum].filename, filename);
|
strcpy(md2_models[spritenum].filename, filename);
|
||||||
break;
|
goto spritemd2found;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (spritenum == NUMSPRITES-1)
|
//CONS_Printf("MD2 for sprite %s not found\n", sprnames[spritenum]);
|
||||||
{
|
|
||||||
CONS_Printf("MD2 for sprite %s not found\n", name);
|
|
||||||
md2_models[spritenum].notfound = true;
|
md2_models[spritenum].notfound = true;
|
||||||
}
|
spritemd2found:
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fclose(f);
|
fclose(f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1090,11 +1082,17 @@ void HWR_DrawMD2(gr_vissprite_t *spr)
|
||||||
md2_t *md2;
|
md2_t *md2;
|
||||||
UINT8 color[4];
|
UINT8 color[4];
|
||||||
|
|
||||||
|
if (!cv_grmd2.value)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!spr->precip)
|
||||||
|
return;
|
||||||
|
|
||||||
// MD2 colormap fix
|
// MD2 colormap fix
|
||||||
// colormap test
|
// colormap test
|
||||||
{
|
{
|
||||||
sector_t *sector = spr->mobj->subsector->sector;
|
sector_t *sector = spr->mobj->subsector->sector;
|
||||||
UINT8 lightlevel = sector->lightlevel;
|
UINT8 lightlevel = 255;
|
||||||
extracolormap_t *colormap = sector->extra_colormap;
|
extracolormap_t *colormap = sector->extra_colormap;
|
||||||
|
|
||||||
if (sector->numlights)
|
if (sector->numlights)
|
||||||
|
@ -1105,8 +1103,6 @@ void HWR_DrawMD2(gr_vissprite_t *spr)
|
||||||
|
|
||||||
if (!(spr->mobj->frame & FF_FULLBRIGHT))
|
if (!(spr->mobj->frame & FF_FULLBRIGHT))
|
||||||
lightlevel = *sector->lightlist[light].lightlevel;
|
lightlevel = *sector->lightlist[light].lightlevel;
|
||||||
else
|
|
||||||
lightlevel = 255;
|
|
||||||
|
|
||||||
if (sector->lightlist[light].extra_colormap)
|
if (sector->lightlist[light].extra_colormap)
|
||||||
colormap = sector->lightlist[light].extra_colormap;
|
colormap = sector->lightlist[light].extra_colormap;
|
||||||
|
@ -1115,24 +1111,18 @@ void HWR_DrawMD2(gr_vissprite_t *spr)
|
||||||
{
|
{
|
||||||
if (!(spr->mobj->frame & FF_FULLBRIGHT))
|
if (!(spr->mobj->frame & FF_FULLBRIGHT))
|
||||||
lightlevel = sector->lightlevel;
|
lightlevel = sector->lightlevel;
|
||||||
else
|
|
||||||
lightlevel = 255;
|
|
||||||
|
|
||||||
if (sector->extra_colormap)
|
if (sector->extra_colormap)
|
||||||
colormap = sector->extra_colormap;
|
colormap = sector->extra_colormap;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (spr->mobj->frame & FF_FULLBRIGHT)
|
|
||||||
lightlevel = 255;
|
|
||||||
|
|
||||||
if (colormap)
|
if (colormap)
|
||||||
Surf.FlatColor.rgba = HWR_Lighting(lightlevel, colormap->rgba, colormap->fadergba, false, false);
|
Surf.FlatColor.rgba = HWR_Lighting(lightlevel, colormap->rgba, colormap->fadergba, false, false);
|
||||||
else
|
else
|
||||||
Surf.FlatColor.rgba = HWR_Lighting(lightlevel, NORMALFOG, FADEFOG, false, false);
|
Surf.FlatColor.rgba = HWR_Lighting(lightlevel, NORMALFOG, FADEFOG, false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Look at HWR_ProjetctSprite for more
|
// Look at HWR_ProjectSprite for more
|
||||||
if (cv_grmd2.value && ((md2_models[spr->mobj->sprite].scale > 0.0f) || (md2_playermodels[(skin_t*)spr->mobj->skin-skins].scale > 0.0f)) && !spr->precip)
|
|
||||||
{
|
{
|
||||||
GLPatch_t *gpatch;
|
GLPatch_t *gpatch;
|
||||||
INT32 *buff;
|
INT32 *buff;
|
||||||
|
@ -1149,15 +1139,11 @@ void HWR_DrawMD2(gr_vissprite_t *spr)
|
||||||
//durs = tics;
|
//durs = tics;
|
||||||
|
|
||||||
if (spr->mobj->flags2 & MF2_SHADOW)
|
if (spr->mobj->flags2 & MF2_SHADOW)
|
||||||
{
|
|
||||||
Surf.FlatColor.s.alpha = 0x40;
|
Surf.FlatColor.s.alpha = 0x40;
|
||||||
}
|
|
||||||
else if (spr->mobj->frame & FF_TRANSMASK)
|
else if (spr->mobj->frame & FF_TRANSMASK)
|
||||||
HWR_TranstableToAlpha((spr->mobj->frame & FF_TRANSMASK)>>FF_TRANSSHIFT, &Surf);
|
HWR_TranstableToAlpha((spr->mobj->frame & FF_TRANSMASK)>>FF_TRANSSHIFT, &Surf);
|
||||||
else
|
else
|
||||||
{
|
|
||||||
Surf.FlatColor.s.alpha = 0xFF;
|
Surf.FlatColor.s.alpha = 0xFF;
|
||||||
}
|
|
||||||
|
|
||||||
// dont forget to enabled the depth test because we can't do this like
|
// dont forget to enabled the depth test because we can't do this like
|
||||||
// before: polygons models are not sorted
|
// before: polygons models are not sorted
|
||||||
|
@ -1263,8 +1249,6 @@ void HWR_DrawMD2(gr_vissprite_t *spr)
|
||||||
p.flip = false;
|
p.flip = false;
|
||||||
|
|
||||||
HWD.pfnDrawMD2i(buff, curr, durs, tics, next, &p, finalscale, flip, color);
|
HWD.pfnDrawMD2i(buff, curr, durs, tics, next, &p, finalscale, flip, color);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1910,6 +1910,13 @@ EXPORT void HWRAPI(DrawMD2i) (INT32 *gl_cmd_buffer, md2_frame_t *frame, UINT32 d
|
||||||
pglRotatef(pos->anglex, -1.0f, 0.0f, 0.0f);
|
pglRotatef(pos->anglex, -1.0f, 0.0f, 0.0f);
|
||||||
//pglBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // alpha = level of transparency
|
//pglBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // alpha = level of transparency
|
||||||
|
|
||||||
|
// Remove depth mask when the model is transparent so it doesn't cut thorugh sprites // SRB2CBTODO: For all stuff too?!
|
||||||
|
if (color[3] < 255)
|
||||||
|
{
|
||||||
|
pglBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // alpha = level of transparency
|
||||||
|
pglDepthMask(GL_FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
val = *gl_cmd_buffer++;
|
val = *gl_cmd_buffer++;
|
||||||
|
|
||||||
while (val != 0)
|
while (val != 0)
|
||||||
|
|
|
@ -150,8 +150,7 @@ state_t states[NUMSTATES] =
|
||||||
{SPR_PLAY, 34, 1, {NULL}, 0, 24, S_PLAY_SIGN}, // S_PLAY_SIGN
|
{SPR_PLAY, 34, 1, {NULL}, 0, 24, S_PLAY_SIGN}, // S_PLAY_SIGN
|
||||||
|
|
||||||
// Blue Crawla
|
// Blue Crawla
|
||||||
{SPR_POSS, 0, 5, {A_Look}, 0, 0, S_POSS_STND2}, // S_POSS_STND
|
{SPR_POSS, 0, 5, {A_Look}, 0, 0, S_POSS_STND}, // S_POSS_STND
|
||||||
{SPR_POSS, 0, 5, {A_Look}, 0, 0, S_POSS_STND}, // S_POSS_STND2
|
|
||||||
{SPR_POSS, 0, 3, {A_Chase}, 0, 0, S_POSS_RUN2}, // S_POSS_RUN1
|
{SPR_POSS, 0, 3, {A_Chase}, 0, 0, S_POSS_RUN2}, // S_POSS_RUN1
|
||||||
{SPR_POSS, 1, 3, {A_Chase}, 0, 0, S_POSS_RUN3}, // S_POSS_RUN2
|
{SPR_POSS, 1, 3, {A_Chase}, 0, 0, S_POSS_RUN3}, // S_POSS_RUN2
|
||||||
{SPR_POSS, 2, 3, {A_Chase}, 0, 0, S_POSS_RUN4}, // S_POSS_RUN3
|
{SPR_POSS, 2, 3, {A_Chase}, 0, 0, S_POSS_RUN4}, // S_POSS_RUN3
|
||||||
|
@ -160,8 +159,7 @@ state_t states[NUMSTATES] =
|
||||||
{SPR_POSS, 5, 3, {A_Chase}, 0, 0, S_POSS_RUN1}, // S_POSS_RUN6
|
{SPR_POSS, 5, 3, {A_Chase}, 0, 0, S_POSS_RUN1}, // S_POSS_RUN6
|
||||||
|
|
||||||
// Red Crawla
|
// Red Crawla
|
||||||
{SPR_SPOS, 0, 5, {A_Look}, 0, 0, S_SPOS_STND2}, // S_SPOS_STND
|
{SPR_SPOS, 0, 5, {A_Look}, 0, 0, S_SPOS_STND}, // S_SPOS_STND
|
||||||
{SPR_SPOS, 0, 5, {A_Look}, 0, 0, S_SPOS_STND}, // S_SPOS_STND2
|
|
||||||
{SPR_SPOS, 0, 1, {A_Chase}, 0, 0, S_SPOS_RUN2}, // S_SPOS_RUN1
|
{SPR_SPOS, 0, 1, {A_Chase}, 0, 0, S_SPOS_RUN2}, // S_SPOS_RUN1
|
||||||
{SPR_SPOS, 1, 1, {A_Chase}, 0, 0, S_SPOS_RUN3}, // S_SPOS_RUN2
|
{SPR_SPOS, 1, 1, {A_Chase}, 0, 0, S_SPOS_RUN3}, // S_SPOS_RUN2
|
||||||
{SPR_SPOS, 2, 1, {A_Chase}, 0, 0, S_SPOS_RUN4}, // S_SPOS_RUN3
|
{SPR_SPOS, 2, 1, {A_Chase}, 0, 0, S_SPOS_RUN4}, // S_SPOS_RUN3
|
||||||
|
|
|
@ -663,7 +663,6 @@ typedef enum state
|
||||||
|
|
||||||
// Blue Crawla
|
// Blue Crawla
|
||||||
S_POSS_STND,
|
S_POSS_STND,
|
||||||
S_POSS_STND2,
|
|
||||||
S_POSS_RUN1,
|
S_POSS_RUN1,
|
||||||
S_POSS_RUN2,
|
S_POSS_RUN2,
|
||||||
S_POSS_RUN3,
|
S_POSS_RUN3,
|
||||||
|
@ -673,7 +672,6 @@ typedef enum state
|
||||||
|
|
||||||
// Red Crawla
|
// Red Crawla
|
||||||
S_SPOS_STND,
|
S_SPOS_STND,
|
||||||
S_SPOS_STND2,
|
|
||||||
S_SPOS_RUN1,
|
S_SPOS_RUN1,
|
||||||
S_SPOS_RUN2,
|
S_SPOS_RUN2,
|
||||||
S_SPOS_RUN3,
|
S_SPOS_RUN3,
|
||||||
|
|
|
@ -126,8 +126,6 @@ static const char *const widtht_opt[] = {
|
||||||
enum cameraf {
|
enum cameraf {
|
||||||
camera_chase = 0,
|
camera_chase = 0,
|
||||||
camera_aiming,
|
camera_aiming,
|
||||||
camera_viewheight,
|
|
||||||
camera_startangle,
|
|
||||||
camera_x,
|
camera_x,
|
||||||
camera_y,
|
camera_y,
|
||||||
camera_z,
|
camera_z,
|
||||||
|
@ -137,7 +135,6 @@ enum cameraf {
|
||||||
camera_ceilingz,
|
camera_ceilingz,
|
||||||
camera_radius,
|
camera_radius,
|
||||||
camera_height,
|
camera_height,
|
||||||
camera_relativex,
|
|
||||||
camera_momx,
|
camera_momx,
|
||||||
camera_momy,
|
camera_momy,
|
||||||
camera_momz
|
camera_momz
|
||||||
|
@ -147,8 +144,6 @@ enum cameraf {
|
||||||
static const char *const camera_opt[] = {
|
static const char *const camera_opt[] = {
|
||||||
"chase",
|
"chase",
|
||||||
"aiming",
|
"aiming",
|
||||||
"viewheight",
|
|
||||||
"startangle",
|
|
||||||
"x",
|
"x",
|
||||||
"y",
|
"y",
|
||||||
"z",
|
"z",
|
||||||
|
@ -158,7 +153,6 @@ static const char *const camera_opt[] = {
|
||||||
"ceilingz",
|
"ceilingz",
|
||||||
"radius",
|
"radius",
|
||||||
"height",
|
"height",
|
||||||
"relativex",
|
|
||||||
"momx",
|
"momx",
|
||||||
"momy",
|
"momy",
|
||||||
"momz",
|
"momz",
|
||||||
|
@ -279,12 +273,6 @@ static int camera_get(lua_State *L)
|
||||||
case camera_aiming:
|
case camera_aiming:
|
||||||
lua_pushinteger(L, cam->aiming);
|
lua_pushinteger(L, cam->aiming);
|
||||||
break;
|
break;
|
||||||
case camera_viewheight:
|
|
||||||
lua_pushinteger(L, cam->viewheight);
|
|
||||||
break;
|
|
||||||
case camera_startangle:
|
|
||||||
lua_pushinteger(L, cam->startangle);
|
|
||||||
break;
|
|
||||||
case camera_x:
|
case camera_x:
|
||||||
lua_pushinteger(L, cam->x);
|
lua_pushinteger(L, cam->x);
|
||||||
break;
|
break;
|
||||||
|
@ -312,9 +300,6 @@ static int camera_get(lua_State *L)
|
||||||
case camera_height:
|
case camera_height:
|
||||||
lua_pushinteger(L, cam->height);
|
lua_pushinteger(L, cam->height);
|
||||||
break;
|
break;
|
||||||
case camera_relativex:
|
|
||||||
lua_pushinteger(L, cam->relativex);
|
|
||||||
break;
|
|
||||||
case camera_momx:
|
case camera_momx:
|
||||||
lua_pushinteger(L, cam->momx);
|
lua_pushinteger(L, cam->momx);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -60,7 +60,6 @@ enum subsector_e {
|
||||||
subsector_sector,
|
subsector_sector,
|
||||||
subsector_numlines,
|
subsector_numlines,
|
||||||
subsector_firstline,
|
subsector_firstline,
|
||||||
subsector_validcount
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static const char *const subsector_opt[] = {
|
static const char *const subsector_opt[] = {
|
||||||
|
@ -68,7 +67,6 @@ static const char *const subsector_opt[] = {
|
||||||
"sector",
|
"sector",
|
||||||
"numlines",
|
"numlines",
|
||||||
"firstline",
|
"firstline",
|
||||||
"validcount",
|
|
||||||
NULL};
|
NULL};
|
||||||
|
|
||||||
enum line_e {
|
enum line_e {
|
||||||
|
@ -86,7 +84,6 @@ enum line_e {
|
||||||
line_slopetype,
|
line_slopetype,
|
||||||
line_frontsector,
|
line_frontsector,
|
||||||
line_backsector,
|
line_backsector,
|
||||||
line_validcount,
|
|
||||||
line_firsttag,
|
line_firsttag,
|
||||||
line_nexttag,
|
line_nexttag,
|
||||||
line_text,
|
line_text,
|
||||||
|
@ -108,7 +105,6 @@ static const char *const line_opt[] = {
|
||||||
"slopetype",
|
"slopetype",
|
||||||
"frontsector",
|
"frontsector",
|
||||||
"backsector",
|
"backsector",
|
||||||
"validcount",
|
|
||||||
"firsttag",
|
"firsttag",
|
||||||
"nexttag",
|
"nexttag",
|
||||||
"text",
|
"text",
|
||||||
|
@ -476,9 +472,6 @@ static int subsector_get(lua_State *L)
|
||||||
case subsector_firstline:
|
case subsector_firstline:
|
||||||
lua_pushinteger(L, subsector->firstline);
|
lua_pushinteger(L, subsector->firstline);
|
||||||
return 1;
|
return 1;
|
||||||
case subsector_validcount:
|
|
||||||
lua_pushinteger(L, subsector->validcount);
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -564,9 +557,6 @@ static int line_get(lua_State *L)
|
||||||
case line_backsector:
|
case line_backsector:
|
||||||
LUA_PushUserdata(L, line->backsector, META_SECTOR);
|
LUA_PushUserdata(L, line->backsector, META_SECTOR);
|
||||||
return 1;
|
return 1;
|
||||||
case line_validcount:
|
|
||||||
lua_pushinteger(L, line->validcount);
|
|
||||||
return 1;
|
|
||||||
case line_firsttag:
|
case line_firsttag:
|
||||||
lua_pushinteger(L, line->firsttag);
|
lua_pushinteger(L, line->firsttag);
|
||||||
return 1;
|
return 1;
|
||||||
|
|
|
@ -501,7 +501,7 @@ static int mobj_set(lua_State *L)
|
||||||
return luaL_error(L, "mobj.skin '%s' not found!", skin);
|
return luaL_error(L, "mobj.skin '%s' not found!", skin);
|
||||||
}
|
}
|
||||||
case mobj_color:
|
case mobj_color:
|
||||||
mo->color = ((UINT8)luaL_checkinteger(L, 3)) % MAXSKINCOLORS;
|
mo->color = ((UINT8)luaL_checkinteger(L, 3)) % MAXTRANSLATIONS;
|
||||||
break;
|
break;
|
||||||
case mobj_bnext:
|
case mobj_bnext:
|
||||||
return NOSETPOS;
|
return NOSETPOS;
|
||||||
|
|
|
@ -91,6 +91,33 @@ static UINT8 cheatf_warp(void)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef DEVELOP
|
||||||
|
static UINT8 cheatf_devmode(void)
|
||||||
|
{
|
||||||
|
UINT8 i;
|
||||||
|
|
||||||
|
if (modifiedgame)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (menuactive && currentMenu != &MainDef)
|
||||||
|
return 0; // Only on the main menu!
|
||||||
|
|
||||||
|
S_StartSound(0, sfx_itemup);
|
||||||
|
|
||||||
|
// Just unlock all the things and turn on -debug and console devmode.
|
||||||
|
G_SetGameModified(false);
|
||||||
|
for (i = 0; i < MAXUNLOCKABLES; i++)
|
||||||
|
unlockables[i].unlocked = true;
|
||||||
|
devparm = TRUE;
|
||||||
|
cv_debug |= 0x8000;
|
||||||
|
|
||||||
|
// Refresh secrets menu existing.
|
||||||
|
M_ClearMenus(true);
|
||||||
|
M_StartControlPanel();
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static cheatseq_t cheat_ultimate = {
|
static cheatseq_t cheat_ultimate = {
|
||||||
0, cheatf_ultimate,
|
0, cheatf_ultimate,
|
||||||
{ SCRAMBLE('u'), SCRAMBLE('l'), SCRAMBLE('t'), SCRAMBLE('i'), SCRAMBLE('m'), SCRAMBLE('a'), SCRAMBLE('t'), SCRAMBLE('e'), 0xff }
|
{ SCRAMBLE('u'), SCRAMBLE('l'), SCRAMBLE('t'), SCRAMBLE('i'), SCRAMBLE('m'), SCRAMBLE('a'), SCRAMBLE('t'), SCRAMBLE('e'), 0xff }
|
||||||
|
@ -115,6 +142,14 @@ static cheatseq_t cheat_warp_joy = {
|
||||||
SCRAMBLE(KEY_LEFTARROW), SCRAMBLE(KEY_UPARROW),
|
SCRAMBLE(KEY_LEFTARROW), SCRAMBLE(KEY_UPARROW),
|
||||||
SCRAMBLE(KEY_ENTER), 0xff }
|
SCRAMBLE(KEY_ENTER), 0xff }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifdef DEVELOP
|
||||||
|
static cheatseq_t cheat_devmode = {
|
||||||
|
0, cheatf_devmode,
|
||||||
|
{ SCRAMBLE('d'), SCRAMBLE('e'), SCRAMBLE('v'), SCRAMBLE('m'), SCRAMBLE('o'), SCRAMBLE('d'), SCRAMBLE('e'), 0xff }
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
// ==========================================================================
|
// ==========================================================================
|
||||||
// CHEAT SEQUENCE PACKAGE
|
// CHEAT SEQUENCE PACKAGE
|
||||||
// ==========================================================================
|
// ==========================================================================
|
||||||
|
@ -221,6 +256,9 @@ boolean cht_Responder(event_t *ev)
|
||||||
ret += cht_CheckCheat(&cheat_ultimate_joy, (char)ch);
|
ret += cht_CheckCheat(&cheat_ultimate_joy, (char)ch);
|
||||||
ret += cht_CheckCheat(&cheat_warp, (char)ch);
|
ret += cht_CheckCheat(&cheat_warp, (char)ch);
|
||||||
ret += cht_CheckCheat(&cheat_warp_joy, (char)ch);
|
ret += cht_CheckCheat(&cheat_warp_joy, (char)ch);
|
||||||
|
#ifdef DEVELOP
|
||||||
|
ret += cht_CheckCheat(&cheat_devmode, (char)ch);
|
||||||
|
#endif
|
||||||
return (ret != 0);
|
return (ret != 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -363,12 +363,12 @@ boolean P_CheckMissileRange(mobj_t *actor)
|
||||||
if (!actor->target)
|
if (!actor->target)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (!P_CheckSight(actor, actor->target))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if (actor->reactiontime)
|
if (actor->reactiontime)
|
||||||
return false; // do not attack yet
|
return false; // do not attack yet
|
||||||
|
|
||||||
|
if (!P_CheckSight(actor, actor->target))
|
||||||
|
return false;
|
||||||
|
|
||||||
// OPTIMIZE: get this from a global checksight
|
// OPTIMIZE: get this from a global checksight
|
||||||
dist = P_AproxDistance(actor->x-actor->target->x, actor->y-actor->target->y) - FixedMul(64*FRACUNIT, actor->scale);
|
dist = P_AproxDistance(actor->x-actor->target->x, actor->y-actor->target->y) - FixedMul(64*FRACUNIT, actor->scale);
|
||||||
|
|
||||||
|
@ -652,6 +652,9 @@ boolean P_LookForPlayers(mobj_t *actor, boolean allaround, boolean tracer, fixed
|
||||||
|
|
||||||
player = &players[actor->lastlook];
|
player = &players[actor->lastlook];
|
||||||
|
|
||||||
|
if ((netgame || multiplayer) && player->spectator)
|
||||||
|
continue;
|
||||||
|
|
||||||
if (player->health <= 0)
|
if (player->health <= 0)
|
||||||
continue; // dead
|
continue; // dead
|
||||||
|
|
||||||
|
@ -661,12 +664,6 @@ boolean P_LookForPlayers(mobj_t *actor, boolean allaround, boolean tracer, fixed
|
||||||
if (!player->mo || P_MobjWasRemoved(player->mo))
|
if (!player->mo || P_MobjWasRemoved(player->mo))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (!P_CheckSight(actor, player->mo))
|
|
||||||
continue; // out of sight
|
|
||||||
|
|
||||||
if ((netgame || multiplayer) && player->spectator)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (dist > 0
|
if (dist > 0
|
||||||
&& P_AproxDistance(P_AproxDistance(player->mo->x - actor->x, player->mo->y - actor->y), player->mo->z - actor->z) > dist)
|
&& P_AproxDistance(P_AproxDistance(player->mo->x - actor->x, player->mo->y - actor->y), player->mo->z - actor->z) > dist)
|
||||||
continue; // Too far away
|
continue; // Too far away
|
||||||
|
@ -683,6 +680,9 @@ boolean P_LookForPlayers(mobj_t *actor, boolean allaround, boolean tracer, fixed
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!P_CheckSight(actor, player->mo))
|
||||||
|
continue; // out of sight
|
||||||
|
|
||||||
if (tracer)
|
if (tracer)
|
||||||
P_SetTarget(&actor->tracer, player->mo);
|
P_SetTarget(&actor->tracer, player->mo);
|
||||||
else
|
else
|
||||||
|
@ -5024,7 +5024,7 @@ void A_MaceRotate(mobj_t *actor)
|
||||||
actor->movecount += actor->target->lastlook;
|
actor->movecount += actor->target->lastlook;
|
||||||
actor->movecount &= FINEMASK;
|
actor->movecount &= FINEMASK;
|
||||||
|
|
||||||
actor->threshold = FixedMul(FINECOSINE(actor->movecount), actor->target->lastlook);
|
actor->threshold = FixedMul(FINECOSINE(actor->movecount), actor->target->lastlook << FRACBITS);
|
||||||
|
|
||||||
v[0] = FRACUNIT;
|
v[0] = FRACUNIT;
|
||||||
v[1] = 0;
|
v[1] = 0;
|
||||||
|
@ -5032,7 +5032,7 @@ void A_MaceRotate(mobj_t *actor)
|
||||||
v[3] = FRACUNIT;
|
v[3] = FRACUNIT;
|
||||||
|
|
||||||
// Calculate the angle matrixes for the link.
|
// Calculate the angle matrixes for the link.
|
||||||
res = VectorMatrixMultiply(v, *RotateXMatrix(FixedAngle(actor->threshold << FRACBITS)));
|
res = VectorMatrixMultiply(v, *RotateXMatrix(FixedAngle(actor->threshold)));
|
||||||
M_Memcpy(&v, res, sizeof(v));
|
M_Memcpy(&v, res, sizeof(v));
|
||||||
res = VectorMatrixMultiply(v, *RotateZMatrix(actor->target->health << ANGLETOFINESHIFT));
|
res = VectorMatrixMultiply(v, *RotateZMatrix(actor->target->health << ANGLETOFINESHIFT));
|
||||||
M_Memcpy(&v, res, sizeof(v));
|
M_Memcpy(&v, res, sizeof(v));
|
||||||
|
@ -5660,6 +5660,11 @@ void A_RecyclePowers(mobj_t *actor)
|
||||||
if (playeringame[i] && players[i].mo && players[i].mo->health > 0 && players[i].playerstate == PST_LIVE
|
if (playeringame[i] && players[i].mo && players[i].mo->health > 0 && players[i].playerstate == PST_LIVE
|
||||||
&& !players[i].exiting && !((netgame || multiplayer) && players[i].spectator))
|
&& !players[i].exiting && !((netgame || multiplayer) && players[i].spectator))
|
||||||
{
|
{
|
||||||
|
#ifndef WEIGHTEDRECYCLER
|
||||||
|
if (players[i].powers[pw_super])
|
||||||
|
continue; // Ignore super players
|
||||||
|
#endif
|
||||||
|
|
||||||
numplayers++;
|
numplayers++;
|
||||||
postscramble[j] = playerslist[j] = (UINT8)i;
|
postscramble[j] = playerslist[j] = (UINT8)i;
|
||||||
|
|
||||||
|
|
|
@ -1968,51 +1968,71 @@ void T_NoEnemiesSector(levelspecthink_t *nobaddies)
|
||||||
{
|
{
|
||||||
size_t i;
|
size_t i;
|
||||||
fixed_t upperbound, lowerbound;
|
fixed_t upperbound, lowerbound;
|
||||||
INT32 s;
|
sector_t *sec = NULL;
|
||||||
sector_t *checksector;
|
sector_t *targetsec = NULL;
|
||||||
|
INT32 secnum = -1;
|
||||||
msecnode_t *node;
|
msecnode_t *node;
|
||||||
mobj_t *thing;
|
mobj_t *thing;
|
||||||
boolean exists = false;
|
boolean FOFsector = false;
|
||||||
|
|
||||||
for (i = 0; i < nobaddies->sector->linecount; i++)
|
while ((secnum = P_FindSectorFromLineTag(nobaddies->sourceline, secnum)) >= 0)
|
||||||
{
|
{
|
||||||
if (nobaddies->sector->lines[i]->special == 223)
|
sec = §ors[secnum];
|
||||||
|
|
||||||
|
FOFsector = false;
|
||||||
|
|
||||||
|
// Check the lines of this sector, to see if it is a FOF control sector.
|
||||||
|
for (i = 0; i < sec->linecount; i++)
|
||||||
{
|
{
|
||||||
|
INT32 targetsecnum = -1;
|
||||||
|
|
||||||
upperbound = nobaddies->sector->ceilingheight;
|
if (sec->lines[i]->special < 100 || sec->lines[i]->special >= 300)
|
||||||
lowerbound = nobaddies->sector->floorheight;
|
continue;
|
||||||
|
|
||||||
for (s = -1; (s = P_FindSectorFromLineTag(nobaddies->sector->lines[i], s)) >= 0 ;)
|
FOFsector = true;
|
||||||
|
|
||||||
|
while ((targetsecnum = P_FindSectorFromLineTag(sec->lines[i], targetsecnum)) >= 0)
|
||||||
{
|
{
|
||||||
checksector = §ors[s];
|
targetsec = §ors[targetsecnum];
|
||||||
|
|
||||||
node = checksector->touching_thinglist; // things touching this sector
|
upperbound = targetsec->ceilingheight;
|
||||||
|
lowerbound = targetsec->floorheight;
|
||||||
|
node = targetsec->touching_thinglist; // things touching this sector
|
||||||
while (node)
|
while (node)
|
||||||
{
|
{
|
||||||
thing = node->m_thing;
|
thing = node->m_thing;
|
||||||
|
|
||||||
if ((thing->flags & (MF_ENEMY|MF_BOSS)) && thing->health > 0
|
if ((thing->flags & (MF_ENEMY|MF_BOSS)) && thing->health > 0
|
||||||
&& thing->z < upperbound && thing->z+thing->height > lowerbound)
|
&& thing->z < upperbound && thing->z+thing->height > lowerbound)
|
||||||
{
|
return;
|
||||||
exists = true;
|
|
||||||
goto foundenemy;
|
|
||||||
}
|
|
||||||
|
|
||||||
node = node->m_snext;
|
node = node->m_snext;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
foundenemy:
|
if (!FOFsector)
|
||||||
if (exists)
|
{
|
||||||
|
upperbound = sec->ceilingheight;
|
||||||
|
lowerbound = sec->floorheight;
|
||||||
|
node = sec->touching_thinglist; // things touching this sector
|
||||||
|
while (node)
|
||||||
|
{
|
||||||
|
thing = node->m_thing;
|
||||||
|
|
||||||
|
if ((thing->flags & (MF_ENEMY|MF_BOSS)) && thing->health > 0
|
||||||
|
&& thing->z < upperbound && thing->z+thing->height > lowerbound)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
s = P_AproxDistance(nobaddies->sourceline->dx, nobaddies->sourceline->dy)>>FRACBITS;
|
node = node->m_snext;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
CONS_Debug(DBG_GAMELOGIC, "Running no-more-enemies exec with tag of %d\n", s);
|
CONS_Debug(DBG_GAMELOGIC, "Running no-more-enemies exec with tag of %d\n", nobaddies->sourceline->tag);
|
||||||
|
|
||||||
// Otherwise, run the linedef exec and terminate this thinker
|
// No enemies found, run the linedef exec and terminate this thinker
|
||||||
P_LinedefExecute((INT16)s, NULL, NULL);
|
P_RunTriggerLinedef(nobaddies->sourceline, NULL, NULL);
|
||||||
P_RemoveThinker(&nobaddies->thinker);
|
P_RemoveThinker(&nobaddies->thinker);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2217,7 +2237,7 @@ void T_EachTimeThinker(levelspecthink_t *eachtime)
|
||||||
oldPlayersArea = oldPlayersInArea;
|
oldPlayersArea = oldPlayersInArea;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((affectPlayer = P_HavePlayersEnteredArea(playersArea, oldPlayersArea, inAndOut)) != -1)
|
while ((affectPlayer = P_HavePlayersEnteredArea(playersArea, oldPlayersArea, inAndOut)) != -1)
|
||||||
{
|
{
|
||||||
if (GETSECSPECIAL(sec->special, 2) == 2 || GETSECSPECIAL(sec->special, 2) == 3)
|
if (GETSECSPECIAL(sec->special, 2) == 2 || GETSECSPECIAL(sec->special, 2) == 3)
|
||||||
{
|
{
|
||||||
|
@ -2250,6 +2270,8 @@ void T_EachTimeThinker(levelspecthink_t *eachtime)
|
||||||
|
|
||||||
if (!eachtime->sourceline->special) // this happens only for "Trigger on X calls" linedefs
|
if (!eachtime->sourceline->special) // this happens only for "Trigger on X calls" linedefs
|
||||||
P_RemoveThinker(&eachtime->thinker);
|
P_RemoveThinker(&eachtime->thinker);
|
||||||
|
|
||||||
|
oldPlayersArea[affectPlayer]=playersArea[affectPlayer];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -38,6 +38,9 @@
|
||||||
#define MAPBMASK (MAPBLOCKSIZE-1)
|
#define MAPBMASK (MAPBLOCKSIZE-1)
|
||||||
#define MAPBTOFRAC (MAPBLOCKSHIFT-FRACBITS)
|
#define MAPBTOFRAC (MAPBLOCKSHIFT-FRACBITS)
|
||||||
|
|
||||||
|
// Convenience macro to fix issue with collision along bottom/left edges of blockmap -Red
|
||||||
|
#define BMBOUNDFIX(xl, xh, yl, yh) {if (xl > xh) xl = 0; if (yl > yh) yl = 0;}
|
||||||
|
|
||||||
// player radius used only in am_map.c
|
// player radius used only in am_map.c
|
||||||
#define PLAYERRADIUS (16*FRACUNIT)
|
#define PLAYERRADIUS (16*FRACUNIT)
|
||||||
|
|
||||||
|
@ -273,7 +276,6 @@ boolean P_LookForPlayers(mobj_t *actor, boolean allaround, boolean tracer, fixed
|
||||||
extern boolean floatok;
|
extern boolean floatok;
|
||||||
extern fixed_t tmfloorz;
|
extern fixed_t tmfloorz;
|
||||||
extern fixed_t tmceilingz;
|
extern fixed_t tmceilingz;
|
||||||
extern boolean tmsprung;
|
|
||||||
extern mobj_t *tmfloorthing, *tmthing;
|
extern mobj_t *tmfloorthing, *tmthing;
|
||||||
extern camera_t *mapcampointer;
|
extern camera_t *mapcampointer;
|
||||||
|
|
||||||
|
|
69
src/p_map.c
|
@ -49,9 +49,6 @@ static fixed_t tmdropoffz, tmdrpoffceilz; // drop-off floor/ceiling heights
|
||||||
mobj_t *tmfloorthing; // the thing corresponding to tmfloorz or NULL if tmfloorz is from a sector
|
mobj_t *tmfloorthing; // the thing corresponding to tmfloorz or NULL if tmfloorz is from a sector
|
||||||
static mobj_t *tmhitthing; // the solid thing you bumped into (for collisions)
|
static mobj_t *tmhitthing; // the solid thing you bumped into (for collisions)
|
||||||
|
|
||||||
// turned on or off in PIT_CheckThing
|
|
||||||
boolean tmsprung;
|
|
||||||
|
|
||||||
// keep track of the line that lowers the ceiling,
|
// keep track of the line that lowers the ceiling,
|
||||||
// so missiles don't explode against sky hack walls
|
// so missiles don't explode against sky hack walls
|
||||||
line_t *ceilingline;
|
line_t *ceilingline;
|
||||||
|
@ -111,7 +108,9 @@ void P_DoSpring(mobj_t *spring, mobj_t *object)
|
||||||
fixed_t offx, offy;
|
fixed_t offx, offy;
|
||||||
fixed_t vertispeed = spring->info->mass;
|
fixed_t vertispeed = spring->info->mass;
|
||||||
fixed_t horizspeed = spring->info->damage;
|
fixed_t horizspeed = spring->info->damage;
|
||||||
fixed_t origvertispeed = vertispeed; // for vertical flipping
|
|
||||||
|
if (object->eflags & MFE_SPRUNG) // Object was already sprung this tic
|
||||||
|
return;
|
||||||
|
|
||||||
// Spectators don't trigger springs.
|
// Spectators don't trigger springs.
|
||||||
if (object->player && object->player->spectator)
|
if (object->player && object->player->spectator)
|
||||||
|
@ -123,6 +122,7 @@ void P_DoSpring(mobj_t *spring, mobj_t *object)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
object->eflags |= MFE_SPRUNG; // apply this flag asap!
|
||||||
spring->flags &= ~(MF_SOLID|MF_SPECIAL); // De-solidify
|
spring->flags &= ~(MF_SOLID|MF_SPECIAL); // De-solidify
|
||||||
|
|
||||||
if (horizspeed && vertispeed) // Mimic SA
|
if (horizspeed && vertispeed) // Mimic SA
|
||||||
|
@ -191,9 +191,9 @@ void P_DoSpring(mobj_t *spring, mobj_t *object)
|
||||||
pflags = object->player->pflags & (PF_JUMPED|PF_SPINNING|PF_THOKKED); // I still need these.
|
pflags = object->player->pflags & (PF_JUMPED|PF_SPINNING|PF_THOKKED); // I still need these.
|
||||||
P_ResetPlayer(object->player);
|
P_ResetPlayer(object->player);
|
||||||
|
|
||||||
if (origvertispeed > 0)
|
if (P_MobjFlip(object)*vertispeed > 0)
|
||||||
P_SetPlayerMobjState(object, S_PLAY_SPRING);
|
P_SetPlayerMobjState(object, S_PLAY_SPRING);
|
||||||
else if (origvertispeed < 0)
|
else if (P_MobjFlip(object)*vertispeed < 0)
|
||||||
P_SetPlayerMobjState(object, S_PLAY_FALL1);
|
P_SetPlayerMobjState(object, S_PLAY_FALL1);
|
||||||
else // horizontal spring
|
else // horizontal spring
|
||||||
{
|
{
|
||||||
|
@ -367,10 +367,11 @@ static boolean PIT_CheckThing(mobj_t *thing)
|
||||||
fixed_t blockdist;
|
fixed_t blockdist;
|
||||||
|
|
||||||
// don't clip against self
|
// don't clip against self
|
||||||
tmsprung = false;
|
if (thing == tmthing)
|
||||||
|
return true;
|
||||||
|
|
||||||
// Ignore... things.
|
// Ignore... things.
|
||||||
if (!tmthing || !thing)
|
if (!tmthing || !thing || P_MobjWasRemoved(thing))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
I_Assert(!P_MobjWasRemoved(tmthing));
|
I_Assert(!P_MobjWasRemoved(tmthing));
|
||||||
|
@ -438,9 +439,6 @@ static boolean PIT_CheckThing(mobj_t *thing)
|
||||||
if (!(thing->flags & (MF_SOLID|MF_SPECIAL|MF_PAIN|MF_SHOOTABLE)))
|
if (!(thing->flags & (MF_SOLID|MF_SPECIAL|MF_PAIN|MF_SHOOTABLE)))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
if (!tmthing || !thing || thing == tmthing || P_MobjWasRemoved(thing))
|
|
||||||
return true;
|
|
||||||
|
|
||||||
// Don't collide with your buddies while NiGHTS-flying.
|
// Don't collide with your buddies while NiGHTS-flying.
|
||||||
if (tmthing->player && thing->player && (maptol & TOL_NIGHTS)
|
if (tmthing->player && thing->player && (maptol & TOL_NIGHTS)
|
||||||
&& ((tmthing->player->pflags & PF_NIGHTSMODE) || (thing->player->pflags & PF_NIGHTSMODE)))
|
&& ((tmthing->player->pflags & PF_NIGHTSMODE) || (thing->player->pflags & PF_NIGHTSMODE)))
|
||||||
|
@ -549,7 +547,6 @@ static boolean PIT_CheckThing(mobj_t *thing)
|
||||||
if ((tmznext <= thzh && tmz > thzh) || (tmznext > thzh - sprarea && tmznext < thzh))
|
if ((tmznext <= thzh && tmz > thzh) || (tmznext > thzh - sprarea && tmznext < thzh))
|
||||||
{
|
{
|
||||||
P_DoSpring(thing, tmthing);
|
P_DoSpring(thing, tmthing);
|
||||||
tmsprung = true;
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else if (tmz > thzh - sprarea && tmz < thzh) // Don't damage people springing up / down
|
else if (tmz > thzh - sprarea && tmz < thzh) // Don't damage people springing up / down
|
||||||
|
@ -818,15 +815,11 @@ static boolean PIT_CheckThing(mobj_t *thing)
|
||||||
{
|
{
|
||||||
if (thing->type == MT_FAN || thing->type == MT_STEAM)
|
if (thing->type == MT_FAN || thing->type == MT_STEAM)
|
||||||
P_DoFanAndGasJet(thing, tmthing);
|
P_DoFanAndGasJet(thing, tmthing);
|
||||||
|
else if (thing->flags & MF_SPRING)
|
||||||
if ((!(thing->eflags & MFE_VERTICALFLIP) && (tmthing->z <= (thing->z + thing->height + FixedMul(FRACUNIT, thing->scale)) && (tmthing->z + tmthing->height) >= thing->z))
|
|
||||||
|| ((thing->eflags & MFE_VERTICALFLIP) && (tmthing->z + tmthing->height >= (thing->z - FixedMul(FRACUNIT, thing->scale)) && tmthing->z <= (thing->z + thing->height))))
|
|
||||||
{
|
|
||||||
if (thing->flags & MF_SPRING)
|
|
||||||
{
|
{
|
||||||
|
if ( thing->z <= tmthing->z + tmthing->height
|
||||||
|
&& tmthing->z <= thing->z + thing->height)
|
||||||
P_DoSpring(thing, tmthing);
|
P_DoSpring(thing, tmthing);
|
||||||
tmsprung = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -875,7 +868,7 @@ static boolean PIT_CheckThing(mobj_t *thing)
|
||||||
{
|
{
|
||||||
// Doesn't matter what gravity player's following! Just do your stuff in YOUR direction only
|
// Doesn't matter what gravity player's following! Just do your stuff in YOUR direction only
|
||||||
if (tmthing->eflags & MFE_VERTICALFLIP
|
if (tmthing->eflags & MFE_VERTICALFLIP
|
||||||
&& (tmthing->z + tmthing->height + tmthing->momz > thing->z
|
&& (tmthing->z + tmthing->height + tmthing->momz < thing->z
|
||||||
|| tmthing->z + tmthing->height + tmthing->momz >= thing->z + thing->height))
|
|| tmthing->z + tmthing->height + tmthing->momz >= thing->z + thing->height))
|
||||||
;
|
;
|
||||||
else if (!(tmthing->eflags & MFE_VERTICALFLIP)
|
else if (!(tmthing->eflags & MFE_VERTICALFLIP)
|
||||||
|
@ -909,17 +902,17 @@ static boolean PIT_CheckThing(mobj_t *thing)
|
||||||
|
|
||||||
if (thing->type == MT_FAN || thing->type == MT_STEAM)
|
if (thing->type == MT_FAN || thing->type == MT_STEAM)
|
||||||
P_DoFanAndGasJet(thing, tmthing);
|
P_DoFanAndGasJet(thing, tmthing);
|
||||||
|
else if (thing->flags & MF_SPRING)
|
||||||
|
{
|
||||||
|
if ( thing->z <= tmthing->z + tmthing->height
|
||||||
|
&& tmthing->z <= thing->z + thing->height)
|
||||||
|
P_DoSpring(thing, tmthing);
|
||||||
|
}
|
||||||
// Are you touching the side of the object you're interacting with?
|
// Are you touching the side of the object you're interacting with?
|
||||||
if (thing->z - FixedMul(FRACUNIT, thing->scale) <= tmthing->z + tmthing->height
|
else if (thing->z - FixedMul(FRACUNIT, thing->scale) <= tmthing->z + tmthing->height
|
||||||
&& thing->z + thing->height + FixedMul(FRACUNIT, thing->scale) >= tmthing->z)
|
&& thing->z + thing->height + FixedMul(FRACUNIT, thing->scale) >= tmthing->z)
|
||||||
{
|
{
|
||||||
if (thing->flags & MF_SPRING)
|
if (thing->flags & MF_MONITOR
|
||||||
{
|
|
||||||
P_DoSpring(thing, tmthing);
|
|
||||||
tmsprung = true;
|
|
||||||
}
|
|
||||||
else if (thing->flags & MF_MONITOR
|
|
||||||
&& tmthing->player->pflags & (PF_JUMPED|PF_SPINNING|PF_GLIDING))
|
&& tmthing->player->pflags & (PF_JUMPED|PF_SPINNING|PF_GLIDING))
|
||||||
{
|
{
|
||||||
SINT8 flipval = P_MobjFlip(thing); // Save this value in case monitor gets removed.
|
SINT8 flipval = P_MobjFlip(thing); // Save this value in case monitor gets removed.
|
||||||
|
@ -932,14 +925,12 @@ static boolean PIT_CheckThing(mobj_t *thing)
|
||||||
*momz = -*momz; // Therefore, you should be thrust in the opposite direction, vertically.
|
*momz = -*momz; // Therefore, you should be thrust in the opposite direction, vertically.
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
else if ((thing->flags & (MF_SOLID|MF_NOCLIP|MF_PUSHABLE)) == MF_SOLID)
|
|
||||||
return false; // this fixes both monitors and non-pushable solids being walked through on bobbing FOFs... for now!
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (thing->flags & MF_SPRING && (tmthing->player || tmthing->flags & MF_PUSHABLE));
|
||||||
|
else
|
||||||
// Monitors are not treated as solid to players who are jumping, spinning or gliding,
|
// Monitors are not treated as solid to players who are jumping, spinning or gliding,
|
||||||
// unless it's a CTF team monitor and you're on the wrong team
|
// unless it's a CTF team monitor and you're on the wrong team
|
||||||
if (thing->flags & MF_MONITOR && tmthing->player && tmthing->player->pflags & (PF_JUMPED|PF_SPINNING|PF_GLIDING)
|
if (thing->flags & MF_MONITOR && tmthing->player && tmthing->player->pflags & (PF_JUMPED|PF_SPINNING|PF_GLIDING)
|
||||||
|
@ -1308,6 +1299,8 @@ boolean P_CheckPosition(mobj_t *thing, fixed_t x, fixed_t y)
|
||||||
yl = (unsigned)(tmbbox[BOXBOTTOM] - bmaporgy - MAXRADIUS)>>MAPBLOCKSHIFT;
|
yl = (unsigned)(tmbbox[BOXBOTTOM] - bmaporgy - MAXRADIUS)>>MAPBLOCKSHIFT;
|
||||||
yh = (unsigned)(tmbbox[BOXTOP] - bmaporgy + MAXRADIUS)>>MAPBLOCKSHIFT;
|
yh = (unsigned)(tmbbox[BOXTOP] - bmaporgy + MAXRADIUS)>>MAPBLOCKSHIFT;
|
||||||
|
|
||||||
|
BMBOUNDFIX(xl, xh, yl, yh);
|
||||||
|
|
||||||
#ifdef POLYOBJECTS
|
#ifdef POLYOBJECTS
|
||||||
// Check polyobjects and see if tmfloorz/tmceilingz need to be altered
|
// Check polyobjects and see if tmfloorz/tmceilingz need to be altered
|
||||||
{
|
{
|
||||||
|
@ -1525,6 +1518,8 @@ boolean P_CheckCameraPosition(fixed_t x, fixed_t y, camera_t *thiscam)
|
||||||
yl = (unsigned)(tmbbox[BOXBOTTOM] - bmaporgy)>>MAPBLOCKSHIFT;
|
yl = (unsigned)(tmbbox[BOXBOTTOM] - bmaporgy)>>MAPBLOCKSHIFT;
|
||||||
yh = (unsigned)(tmbbox[BOXTOP] - bmaporgy)>>MAPBLOCKSHIFT;
|
yh = (unsigned)(tmbbox[BOXTOP] - bmaporgy)>>MAPBLOCKSHIFT;
|
||||||
|
|
||||||
|
BMBOUNDFIX(xl, xh, yl, yh);
|
||||||
|
|
||||||
#ifdef POLYOBJECTS
|
#ifdef POLYOBJECTS
|
||||||
// Check polyobjects and see if tmfloorz/tmceilingz need to be altered
|
// Check polyobjects and see if tmfloorz/tmceilingz need to be altered
|
||||||
{
|
{
|
||||||
|
@ -1766,7 +1761,6 @@ boolean PIT_PushableMoved(mobj_t *thing)
|
||||||
boolean oldfltok = floatok;
|
boolean oldfltok = floatok;
|
||||||
fixed_t oldflrz = tmfloorz;
|
fixed_t oldflrz = tmfloorz;
|
||||||
fixed_t oldceilz = tmceilingz;
|
fixed_t oldceilz = tmceilingz;
|
||||||
boolean oldsprung = tmsprung;
|
|
||||||
mobj_t *oldflrthing = tmfloorthing;
|
mobj_t *oldflrthing = tmfloorthing;
|
||||||
mobj_t *oldthing = tmthing;
|
mobj_t *oldthing = tmthing;
|
||||||
line_t *oldceilline = ceilingline;
|
line_t *oldceilline = ceilingline;
|
||||||
|
@ -1779,7 +1773,6 @@ boolean PIT_PushableMoved(mobj_t *thing)
|
||||||
floatok = oldfltok;
|
floatok = oldfltok;
|
||||||
tmfloorz = oldflrz;
|
tmfloorz = oldflrz;
|
||||||
tmceilingz = oldceilz;
|
tmceilingz = oldceilz;
|
||||||
tmsprung = oldsprung;
|
|
||||||
tmfloorthing = oldflrthing;
|
tmfloorthing = oldflrthing;
|
||||||
P_SetTarget(&tmthing, oldthing);
|
P_SetTarget(&tmthing, oldthing);
|
||||||
ceilingline = oldceilline;
|
ceilingline = oldceilline;
|
||||||
|
@ -1954,6 +1947,8 @@ boolean P_TryMove(mobj_t *thing, fixed_t x, fixed_t y, boolean allowdropoff)
|
||||||
xh = (unsigned)(thing->x + MAXRADIUS - bmaporgx)>>MAPBLOCKSHIFT;
|
xh = (unsigned)(thing->x + MAXRADIUS - bmaporgx)>>MAPBLOCKSHIFT;
|
||||||
xl = (unsigned)(thing->x - MAXRADIUS - bmaporgx)>>MAPBLOCKSHIFT;
|
xl = (unsigned)(thing->x - MAXRADIUS - bmaporgx)>>MAPBLOCKSHIFT;
|
||||||
|
|
||||||
|
BMBOUNDFIX(xl, xh, yl, yh);
|
||||||
|
|
||||||
stand = thing;
|
stand = thing;
|
||||||
standx = x;
|
standx = x;
|
||||||
standy = y;
|
standy = y;
|
||||||
|
@ -3037,6 +3032,8 @@ void P_RadiusAttack(mobj_t *spot, mobj_t *source, fixed_t damagedist)
|
||||||
xh = (unsigned)(spot->x + dist - bmaporgx)>>MAPBLOCKSHIFT;
|
xh = (unsigned)(spot->x + dist - bmaporgx)>>MAPBLOCKSHIFT;
|
||||||
xl = (unsigned)(spot->x - dist - bmaporgx)>>MAPBLOCKSHIFT;
|
xl = (unsigned)(spot->x - dist - bmaporgx)>>MAPBLOCKSHIFT;
|
||||||
|
|
||||||
|
BMBOUNDFIX(xl, xh, yl, yh);
|
||||||
|
|
||||||
bombspot = spot;
|
bombspot = spot;
|
||||||
bombsource = source;
|
bombsource = source;
|
||||||
bombdamage = FixedMul(damagedist, spot->scale);
|
bombdamage = FixedMul(damagedist, spot->scale);
|
||||||
|
@ -3658,6 +3655,8 @@ void P_CreateSecNodeList(mobj_t *thing, fixed_t x, fixed_t y)
|
||||||
yl = (unsigned)(tmbbox[BOXBOTTOM] - bmaporgy)>>MAPBLOCKSHIFT;
|
yl = (unsigned)(tmbbox[BOXBOTTOM] - bmaporgy)>>MAPBLOCKSHIFT;
|
||||||
yh = (unsigned)(tmbbox[BOXTOP] - bmaporgy)>>MAPBLOCKSHIFT;
|
yh = (unsigned)(tmbbox[BOXTOP] - bmaporgy)>>MAPBLOCKSHIFT;
|
||||||
|
|
||||||
|
BMBOUNDFIX(xl, xh, yl, yh);
|
||||||
|
|
||||||
for (bx = xl; bx <= xh; bx++)
|
for (bx = xl; bx <= xh; bx++)
|
||||||
for (by = yl; by <= yh; by++)
|
for (by = yl; by <= yh; by++)
|
||||||
P_BlockLinesIterator(bx, by, PIT_GetSectors);
|
P_BlockLinesIterator(bx, by, PIT_GetSectors);
|
||||||
|
@ -3735,6 +3734,8 @@ void P_CreatePrecipSecNodeList(precipmobj_t *thing,fixed_t x,fixed_t y)
|
||||||
yl = (unsigned)(preciptmbbox[BOXBOTTOM] - bmaporgy)>>MAPBLOCKSHIFT;
|
yl = (unsigned)(preciptmbbox[BOXBOTTOM] - bmaporgy)>>MAPBLOCKSHIFT;
|
||||||
yh = (unsigned)(preciptmbbox[BOXTOP] - bmaporgy)>>MAPBLOCKSHIFT;
|
yh = (unsigned)(preciptmbbox[BOXTOP] - bmaporgy)>>MAPBLOCKSHIFT;
|
||||||
|
|
||||||
|
BMBOUNDFIX(xl, xh, yl, yh);
|
||||||
|
|
||||||
for (bx = xl; bx <= xh; bx++)
|
for (bx = xl; bx <= xh; bx++)
|
||||||
for (by = yl; by <= yh; by++)
|
for (by = yl; by <= yh; by++)
|
||||||
P_BlockLinesIterator(bx, by, PIT_GetPrecipSectors);
|
P_BlockLinesIterator(bx, by, PIT_GetPrecipSectors);
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
|
|
||||||
#include "p_local.h"
|
#include "p_local.h"
|
||||||
#include "r_main.h"
|
#include "r_main.h"
|
||||||
|
#include "r_data.h"
|
||||||
#include "p_maputl.h"
|
#include "p_maputl.h"
|
||||||
#include "p_polyobj.h"
|
#include "p_polyobj.h"
|
||||||
#include "z_zone.h"
|
#include "z_zone.h"
|
||||||
|
@ -520,6 +521,51 @@ void P_LineOpening(line_t *linedef)
|
||||||
{
|
{
|
||||||
fixed_t thingtop = tmthing->z + tmthing->height;
|
fixed_t thingtop = tmthing->z + tmthing->height;
|
||||||
|
|
||||||
|
// Check for collision with front side's midtexture if Effect 4 is set
|
||||||
|
if (linedef->flags & ML_EFFECT4) {
|
||||||
|
side_t *side = &sides[linedef->sidenum[0]];
|
||||||
|
fixed_t textop, texbottom, texheight;
|
||||||
|
fixed_t texmid, delta1, delta2;
|
||||||
|
|
||||||
|
// Get the midtexture's height
|
||||||
|
texheight = textures[texturetranslation[side->midtexture]]->height << FRACBITS;
|
||||||
|
|
||||||
|
// Set texbottom and textop to the Z coordinates of the texture's boundaries
|
||||||
|
#ifdef POLYOBJECTS
|
||||||
|
if (linedef->polyobj && (linedef->polyobj->flags & POF_TESTHEIGHT)) {
|
||||||
|
if (linedef->flags & ML_DONTPEGBOTTOM) {
|
||||||
|
texbottom = back->floorheight + side->rowoffset;
|
||||||
|
textop = texbottom + texheight*(side->repeatcnt+1);
|
||||||
|
} else {
|
||||||
|
textop = back->ceilingheight - side->rowoffset;
|
||||||
|
texbottom = textop - texheight*(side->repeatcnt+1);
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
if (linedef->flags & ML_DONTPEGBOTTOM) {
|
||||||
|
texbottom = openbottom + side->rowoffset;
|
||||||
|
textop = texbottom + texheight*(side->repeatcnt+1);
|
||||||
|
} else {
|
||||||
|
textop = opentop - side->rowoffset;
|
||||||
|
texbottom = textop - texheight*(side->repeatcnt+1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
texmid = texbottom+(textop-texbottom)/2;
|
||||||
|
|
||||||
|
delta1 = abs(tmthing->z - texmid);
|
||||||
|
delta2 = abs(thingtop - texmid);
|
||||||
|
|
||||||
|
if (delta1 > delta2) { // Below
|
||||||
|
if (opentop > texbottom)
|
||||||
|
opentop = texbottom;
|
||||||
|
} else { // Above
|
||||||
|
if (openbottom < textop)
|
||||||
|
openbottom = textop;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Check for fake floors in the sector.
|
// Check for fake floors in the sector.
|
||||||
if (front->ffloors || back->ffloors
|
if (front->ffloors || back->ffloors
|
||||||
#ifdef POLYOBJECTS
|
#ifdef POLYOBJECTS
|
||||||
|
|
|
@ -1154,7 +1154,7 @@ void P_XYMovement(mobj_t *mo)
|
||||||
if (CheckForBustableBlocks && mo->flags & MF_PUSHABLE)
|
if (CheckForBustableBlocks && mo->flags & MF_PUSHABLE)
|
||||||
P_PushableCheckBustables(mo);
|
P_PushableCheckBustables(mo);
|
||||||
|
|
||||||
if (!P_TryMove(mo, mo->x + xmove, mo->y + ymove, true) && !tmsprung)
|
if (!P_TryMove(mo, mo->x + xmove, mo->y + ymove, true) && !(mo->eflags & MFE_SPRUNG))
|
||||||
{
|
{
|
||||||
// blocked move
|
// blocked move
|
||||||
|
|
||||||
|
@ -5444,7 +5444,7 @@ void P_MobjThinker(mobj_t *mobj)
|
||||||
if (mobj->tracer && P_MobjWasRemoved(mobj->tracer))
|
if (mobj->tracer && P_MobjWasRemoved(mobj->tracer))
|
||||||
P_SetTarget(&mobj->tracer, NULL);
|
P_SetTarget(&mobj->tracer, NULL);
|
||||||
|
|
||||||
mobj->flags2 &= ~MF2_PUSHED;
|
mobj->eflags &= ~(MFE_PUSHED|MFE_SPRUNG);
|
||||||
|
|
||||||
// 970 allows ANY mobj to trigger a linedef exec
|
// 970 allows ANY mobj to trigger a linedef exec
|
||||||
if (mobj->subsector && GETSECSPECIAL(mobj->subsector->sector->special, 2) == 8)
|
if (mobj->subsector && GETSECSPECIAL(mobj->subsector->sector->special, 2) == 8)
|
||||||
|
|
44
src/p_mobj.h
|
@ -175,24 +175,23 @@ typedef enum
|
||||||
MF2_EXPLOSION = 1<<7, // Thrown ring has explosive properties
|
MF2_EXPLOSION = 1<<7, // Thrown ring has explosive properties
|
||||||
MF2_SCATTER = 1<<8, // Thrown ring has scatter properties
|
MF2_SCATTER = 1<<8, // Thrown ring has scatter properties
|
||||||
MF2_BEYONDTHEGRAVE = 1<<9, // Source of this missile has died and has since respawned.
|
MF2_BEYONDTHEGRAVE = 1<<9, // Source of this missile has died and has since respawned.
|
||||||
MF2_PUSHED = 1<<10, // Mobj was already pushed this tic
|
MF2_SLIDEPUSH = 1<<10, // MF_PUSHABLE that pushes continuously.
|
||||||
MF2_SLIDEPUSH = 1<<11, // MF_PUSHABLE that pushes continuously.
|
MF2_CLASSICPUSH = 1<<11, // Drops straight down when object has negative Z.
|
||||||
MF2_CLASSICPUSH = 1<<12, // Drops straight down when object has negative Z.
|
MF2_STANDONME = 1<<12, // While not pushable, stand on me anyway.
|
||||||
MF2_STANDONME = 1<<13, // While not pushable, stand on me anyway.
|
MF2_INFLOAT = 1<<13, // Floating to a height for a move, don't auto float to target's height.
|
||||||
MF2_INFLOAT = 1<<14, // Floating to a height for a move, don't auto float to target's height.
|
MF2_DEBRIS = 1<<14, // Splash ring from explosion ring
|
||||||
MF2_DEBRIS = 1<<15, // Splash ring from explosion ring
|
MF2_NIGHTSPULL = 1<<15, // Attracted from a paraloop
|
||||||
MF2_NIGHTSPULL = 1<<16, // Attracted from a paraloop
|
MF2_JUSTATTACKED = 1<<16, // can be pushed by other moving mobjs
|
||||||
MF2_JUSTATTACKED = 1<<17, // can be pushed by other moving mobjs
|
MF2_FIRING = 1<<17, // turret fire
|
||||||
MF2_FIRING = 1<<18, // turret fire
|
MF2_SUPERFIRE = 1<<18, // Firing something with Super Sonic-stopping properties. Or, if mobj has MF_MISSILE, this is the actual fire from it.
|
||||||
MF2_SUPERFIRE = 1<<19, // Firing something with Super Sonic-stopping properties. Or, if mobj has MF_MISSILE, this is the actual fire from it.
|
MF2_SHADOW = 1<<19, // Fuzzy draw, makes targeting harder.
|
||||||
MF2_SHADOW = 1<<20, // Fuzzy draw, makes targeting harder.
|
MF2_STRONGBOX = 1<<20, // Flag used for "strong" random monitors.
|
||||||
MF2_STRONGBOX = 1<<21, // Flag used for "strong" random monitors.
|
MF2_OBJECTFLIP = 1<<21, // Flag for objects that always have flipped gravity.
|
||||||
MF2_OBJECTFLIP = 1<<22, // Flag for objects that always have flipped gravity.
|
MF2_SKULLFLY = 1<<22, // Special handling: skull in flight.
|
||||||
MF2_SKULLFLY = 1<<23, // Special handling: skull in flight.
|
MF2_FRET = 1<<23, // Flashing from a previous hit
|
||||||
MF2_FRET = 1<<24, // Flashing from a previous hit
|
MF2_BOSSNOTRAP = 1<<24, // No Egg Trap after boss
|
||||||
MF2_BOSSNOTRAP = 1<<25, // No Egg Trap after boss
|
MF2_BOSSFLEE = 1<<25, // Boss is fleeing!
|
||||||
MF2_BOSSFLEE = 1<<26, // Boss is fleeing!
|
MF2_BOSSDEAD = 1<<26, // Boss is dead! (Not necessarily fleeing, if a fleeing point doesn't exist.)
|
||||||
MF2_BOSSDEAD = 1<<27, // Boss is dead! (Not necessarily fleeing, if a fleeing point doesn't exist.)
|
|
||||||
// free: to and including 1<<31
|
// free: to and including 1<<31
|
||||||
} mobjflag2_t;
|
} mobjflag2_t;
|
||||||
|
|
||||||
|
@ -232,8 +231,13 @@ typedef enum
|
||||||
MFE_VERTICALFLIP = 1<<5,
|
MFE_VERTICALFLIP = 1<<5,
|
||||||
// Goo water
|
// Goo water
|
||||||
MFE_GOOWATER = 1<<6,
|
MFE_GOOWATER = 1<<6,
|
||||||
|
// Mobj was already pushed this tic
|
||||||
|
MFE_PUSHED = 1<<7,
|
||||||
|
// Mobj was already sprung this tic
|
||||||
|
MFE_SPRUNG = 1<<8,
|
||||||
// Platform movement
|
// Platform movement
|
||||||
MFE_APPLYPMOMZ = 1<<7
|
MFE_APPLYPMOMZ = 1<<9,
|
||||||
|
// free: to and including 1<<15
|
||||||
} mobjeflag_t;
|
} mobjeflag_t;
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -287,7 +291,7 @@ typedef struct mobj_s
|
||||||
state_t *state;
|
state_t *state;
|
||||||
UINT32 flags; // flags from mobjinfo tables
|
UINT32 flags; // flags from mobjinfo tables
|
||||||
UINT32 flags2; // MF2_ flags
|
UINT32 flags2; // MF2_ flags
|
||||||
UINT8 eflags; // extra flags
|
UINT16 eflags; // extra flags
|
||||||
|
|
||||||
void *skin; // overrides 'sprite' when non-NULL (for player bodies to 'remember' the skin)
|
void *skin; // overrides 'sprite' when non-NULL (for player bodies to 'remember' the skin)
|
||||||
// Player and mobj sprites in multiplayer modes are modified
|
// Player and mobj sprites in multiplayer modes are modified
|
||||||
|
|
|
@ -1043,9 +1043,10 @@ static void Polyobj_carryThings(polyobj_t *po, fixed_t dx, fixed_t dy)
|
||||||
|
|
||||||
mo->lastlook = pomovecount;
|
mo->lastlook = pomovecount;
|
||||||
|
|
||||||
// always push players even if not solid
|
// Don't scroll objects that aren't affected by gravity
|
||||||
if (!((mo->flags & MF_SOLID) || mo->player))
|
if (mo->flags & MF_NOGRAVITY)
|
||||||
continue;
|
continue;
|
||||||
|
// (The above check used to only move MF_SOLID objects, but that's inconsistent with conveyor behavior. -Red)
|
||||||
|
|
||||||
if (mo->flags & MF_NOCLIP)
|
if (mo->flags & MF_NOCLIP)
|
||||||
continue;
|
continue;
|
||||||
|
@ -1097,9 +1098,11 @@ static INT32 Polyobj_clipThings(polyobj_t *po, line_t *line)
|
||||||
|
|
||||||
for (; mo; mo = mo->bnext)
|
for (; mo; mo = mo->bnext)
|
||||||
{
|
{
|
||||||
// always push players even if not solid
|
|
||||||
if (!((mo->flags & MF_SOLID) || mo->player))
|
// Don't scroll objects that aren't affected by gravity
|
||||||
|
if (mo->flags & MF_NOGRAVITY)
|
||||||
continue;
|
continue;
|
||||||
|
// (The above check used to only move MF_SOLID objects, but that's inconsistent with conveyor behavior. -Red)
|
||||||
|
|
||||||
if (mo->flags & MF_NOCLIP)
|
if (mo->flags & MF_NOCLIP)
|
||||||
continue;
|
continue;
|
||||||
|
@ -1259,6 +1262,7 @@ static void Polyobj_rotateThings(polyobj_t *po, vertex_t origin, angle_t delta,
|
||||||
{
|
{
|
||||||
static INT32 pomovecount = 10000;
|
static INT32 pomovecount = 10000;
|
||||||
INT32 x, y;
|
INT32 x, y;
|
||||||
|
angle_t deltafine = delta >> ANGLETOFINESHIFT;
|
||||||
|
|
||||||
pomovecount++;
|
pomovecount++;
|
||||||
|
|
||||||
|
@ -1283,9 +1287,10 @@ static void Polyobj_rotateThings(polyobj_t *po, vertex_t origin, angle_t delta,
|
||||||
|
|
||||||
mo->lastlook = pomovecount;
|
mo->lastlook = pomovecount;
|
||||||
|
|
||||||
// always push players even if not solid
|
// Don't scroll objects that aren't affected by gravity
|
||||||
if (!((mo->flags & MF_SOLID) || mo->player))
|
if (mo->flags & MF_NOGRAVITY)
|
||||||
continue;
|
continue;
|
||||||
|
// (The above check used to only move MF_SOLID objects, but that's inconsistent with conveyor behavior. -Red)
|
||||||
|
|
||||||
if (mo->flags & MF_NOCLIP)
|
if (mo->flags & MF_NOCLIP)
|
||||||
continue;
|
continue;
|
||||||
|
@ -1300,21 +1305,28 @@ static void Polyobj_rotateThings(polyobj_t *po, vertex_t origin, angle_t delta,
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
{
|
{
|
||||||
fixed_t newxoff, newyoff;
|
fixed_t oldxoff, oldyoff, newxoff, newyoff;
|
||||||
angle_t angletoobj = R_PointToAngle2(origin.x, origin.y, mo->x, mo->y);
|
fixed_t c, s;
|
||||||
fixed_t disttoobj = R_PointToDist2(origin.x, origin.y, mo->x, mo->y);
|
|
||||||
|
c = FINECOSINE(deltafine);
|
||||||
|
s = FINESINE(deltafine);
|
||||||
|
|
||||||
|
oldxoff = mo->x-origin.x;
|
||||||
|
oldyoff = mo->y-origin.y;
|
||||||
|
|
||||||
if (mo->player) // Hack to fix players sliding off of spinning polys -Red
|
if (mo->player) // Hack to fix players sliding off of spinning polys -Red
|
||||||
{
|
{
|
||||||
disttoobj = FixedMul(disttoobj, 0xfe40);
|
fixed_t temp;
|
||||||
|
|
||||||
|
temp = FixedMul(oldxoff, c)-FixedMul(oldyoff, s);
|
||||||
|
oldyoff = FixedMul(oldyoff, c)+FixedMul(oldxoff, s);
|
||||||
|
oldxoff = temp;
|
||||||
}
|
}
|
||||||
|
|
||||||
angletoobj += delta;
|
newxoff = FixedMul(oldxoff, c)-FixedMul(oldyoff, s);
|
||||||
angletoobj >>= ANGLETOFINESHIFT;
|
newyoff = FixedMul(oldyoff, c)+FixedMul(oldxoff, s);
|
||||||
newxoff = FixedMul(FINECOSINE(angletoobj), disttoobj);
|
|
||||||
newyoff = FixedMul(FINESINE(angletoobj), disttoobj);
|
|
||||||
|
|
||||||
Polyobj_slideThing(mo, origin.x+newxoff-mo->x, origin.y+newyoff-mo->y);
|
Polyobj_slideThing(mo, newxoff-oldxoff, newyoff-oldyoff);
|
||||||
|
|
||||||
if (turnthings == 2 || (turnthings == 1 && !mo->player)) {
|
if (turnthings == 2 || (turnthings == 1 && !mo->player)) {
|
||||||
mo->angle += delta;
|
mo->angle += delta;
|
||||||
|
@ -2491,6 +2503,10 @@ INT32 EV_DoPolyObjWaypoint(polywaypointdata_t *pwdata)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Hotfix to not crash on single-waypoint sequences -Red
|
||||||
|
if (!last)
|
||||||
|
last = first;
|
||||||
|
|
||||||
// Set diffx, diffy, diffz
|
// Set diffx, diffy, diffz
|
||||||
// Put these at 0 for now...might not be needed after all.
|
// Put these at 0 for now...might not be needed after all.
|
||||||
th->diffx = 0;//first->x - po->centerPt.x;
|
th->diffx = 0;//first->x - po->centerPt.x;
|
||||||
|
|
|
@ -100,6 +100,8 @@ typedef struct polyobj_s
|
||||||
UINT8 isBad; // a bad polyobject: should not be rendered/manipulated
|
UINT8 isBad; // a bad polyobject: should not be rendered/manipulated
|
||||||
INT32 translucency; // index to translucency tables
|
INT32 translucency; // index to translucency tables
|
||||||
|
|
||||||
|
struct visplane_s *visplane; // polyobject's visplane, for ease of putting into the list later
|
||||||
|
|
||||||
// these are saved for netgames, so do not let Lua touch these!
|
// these are saved for netgames, so do not let Lua touch these!
|
||||||
INT32 spawnflags; // Flags the polyobject originally spawned with
|
INT32 spawnflags; // Flags the polyobject originally spawned with
|
||||||
} polyobj_t;
|
} polyobj_t;
|
||||||
|
|
|
@ -1174,7 +1174,7 @@ static void SaveMobjThinker(const thinker_t *th, const UINT8 type)
|
||||||
if (diff & MD_FRAME)
|
if (diff & MD_FRAME)
|
||||||
WRITEUINT32(save_p, mobj->frame);
|
WRITEUINT32(save_p, mobj->frame);
|
||||||
if (diff & MD_EFLAGS)
|
if (diff & MD_EFLAGS)
|
||||||
WRITEUINT8(save_p, mobj->eflags);
|
WRITEUINT16(save_p, mobj->eflags);
|
||||||
if (diff & MD_PLAYER)
|
if (diff & MD_PLAYER)
|
||||||
WRITEUINT8(save_p, mobj->player-players);
|
WRITEUINT8(save_p, mobj->player-players);
|
||||||
if (diff & MD_MOVEDIR)
|
if (diff & MD_MOVEDIR)
|
||||||
|
@ -2000,7 +2000,7 @@ static void LoadMobjThinker(actionf_p1 thinker)
|
||||||
else
|
else
|
||||||
mobj->frame = mobj->state->frame;
|
mobj->frame = mobj->state->frame;
|
||||||
if (diff & MD_EFLAGS)
|
if (diff & MD_EFLAGS)
|
||||||
mobj->eflags = READUINT8(save_p);
|
mobj->eflags = READUINT16(save_p);
|
||||||
if (diff & MD_PLAYER)
|
if (diff & MD_PLAYER)
|
||||||
{
|
{
|
||||||
i = READUINT8(save_p);
|
i = READUINT8(save_p);
|
||||||
|
|
19
src/p_spec.c
|
@ -1890,6 +1890,7 @@ boolean P_RunTriggerLinedef(line_t *triggerline, mobj_t *actor, sector_t *caller
|
||||||
|| specialtype == 304 // Ring count - Once
|
|| specialtype == 304 // Ring count - Once
|
||||||
|| specialtype == 307 // Character ability - Once
|
|| specialtype == 307 // Character ability - Once
|
||||||
|| specialtype == 308 // Race only - Once
|
|| specialtype == 308 // Race only - Once
|
||||||
|
|| specialtype == 313 // No More Enemies - Once
|
||||||
|| specialtype == 315 // No of pushables - Once
|
|| specialtype == 315 // No of pushables - Once
|
||||||
|| specialtype == 318 // Unlockable trigger - Once
|
|| specialtype == 318 // Unlockable trigger - Once
|
||||||
|| specialtype == 320 // Unlockable - Once
|
|| specialtype == 320 // Unlockable - Once
|
||||||
|
@ -6526,7 +6527,7 @@ static void P_DoScrollMove(mobj_t *thing, fixed_t dx, fixed_t dy, INT32 exclusiv
|
||||||
thing->momy += dy;
|
thing->momy += dy;
|
||||||
|
|
||||||
if (exclusive)
|
if (exclusive)
|
||||||
thing->flags2 |= MF2_PUSHED;
|
thing->eflags |= MFE_PUSHED;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Processes an active scroller.
|
/** Processes an active scroller.
|
||||||
|
@ -6630,7 +6631,7 @@ void T_Scroll(scroll_t *s)
|
||||||
{
|
{
|
||||||
thing = node->m_thing;
|
thing = node->m_thing;
|
||||||
|
|
||||||
if (thing->flags2 & MF2_PUSHED) // Already pushed this tic by an exclusive pusher.
|
if (thing->eflags & MFE_PUSHED) // Already pushed this tic by an exclusive pusher.
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (!(thing->flags & MF_NOCLIP)) // Thing must be clipped
|
if (!(thing->flags & MF_NOCLIP)) // Thing must be clipped
|
||||||
|
@ -6650,7 +6651,7 @@ void T_Scroll(scroll_t *s)
|
||||||
{
|
{
|
||||||
thing = node->m_thing;
|
thing = node->m_thing;
|
||||||
|
|
||||||
if (thing->flags2 & MF2_PUSHED)
|
if (thing->eflags & MFE_PUSHED)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (!(thing->flags & MF_NOCLIP) &&
|
if (!(thing->flags & MF_NOCLIP) &&
|
||||||
|
@ -6689,7 +6690,7 @@ void T_Scroll(scroll_t *s)
|
||||||
{
|
{
|
||||||
thing = node->m_thing;
|
thing = node->m_thing;
|
||||||
|
|
||||||
if (thing->flags2 & MF2_PUSHED)
|
if (thing->eflags & MFE_PUSHED)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (!(thing->flags & MF_NOCLIP)) // Thing must be clipped
|
if (!(thing->flags & MF_NOCLIP)) // Thing must be clipped
|
||||||
|
@ -6709,7 +6710,7 @@ void T_Scroll(scroll_t *s)
|
||||||
{
|
{
|
||||||
thing = node->m_thing;
|
thing = node->m_thing;
|
||||||
|
|
||||||
if (thing->flags2 & MF2_PUSHED)
|
if (thing->eflags & MFE_PUSHED)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (!(thing->flags & MF_NOCLIP) &&
|
if (!(thing->flags & MF_NOCLIP) &&
|
||||||
|
@ -7192,7 +7193,7 @@ static pusher_t *tmpusher; // pusher structure for blockmap searches
|
||||||
*/
|
*/
|
||||||
static inline boolean PIT_PushThing(mobj_t *thing)
|
static inline boolean PIT_PushThing(mobj_t *thing)
|
||||||
{
|
{
|
||||||
if (thing->flags2 & MF2_PUSHED)
|
if (thing->eflags & MFE_PUSHED)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (thing->player && thing->player->pflags & PF_ROPEHANG)
|
if (thing->player && thing->player->pflags & PF_ROPEHANG)
|
||||||
|
@ -7322,7 +7323,7 @@ static inline boolean PIT_PushThing(mobj_t *thing)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tmpusher->exclusive)
|
if (tmpusher->exclusive)
|
||||||
thing->flags2 |= MF2_PUSHED;
|
thing->eflags |= MFE_PUSHED;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -7429,7 +7430,7 @@ void T_Pusher(pusher_t *p)
|
||||||
|| thing->type == MT_BIGTUMBLEWEED))
|
|| thing->type == MT_BIGTUMBLEWEED))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (thing->flags2 & MF2_PUSHED)
|
if (thing->eflags & MFE_PUSHED)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (thing->player && thing->player->pflags & PF_ROPEHANG)
|
if (thing->player && thing->player->pflags & PF_ROPEHANG)
|
||||||
|
@ -7599,7 +7600,7 @@ void T_Pusher(pusher_t *p)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p->exclusive)
|
if (p->exclusive)
|
||||||
thing->flags2 |= MF2_PUSHED;
|
thing->eflags |= MFE_PUSHED;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
48
src/p_user.c
|
@ -2963,6 +2963,8 @@ static void P_DoTeeter(player_t *player)
|
||||||
xh = (unsigned)(player->mo->x + player->mo->radius - bmaporgx)>>MAPBLOCKSHIFT;
|
xh = (unsigned)(player->mo->x + player->mo->radius - bmaporgx)>>MAPBLOCKSHIFT;
|
||||||
xl = (unsigned)(player->mo->x - player->mo->radius - bmaporgx)>>MAPBLOCKSHIFT;
|
xl = (unsigned)(player->mo->x - player->mo->radius - bmaporgx)>>MAPBLOCKSHIFT;
|
||||||
|
|
||||||
|
BMBOUNDFIX(xl, xh, yl, yh);
|
||||||
|
|
||||||
// Polyobjects
|
// Polyobjects
|
||||||
#ifdef POLYOBJECTS
|
#ifdef POLYOBJECTS
|
||||||
validcount++;
|
validcount++;
|
||||||
|
@ -3330,6 +3332,7 @@ firenormal:
|
||||||
//
|
//
|
||||||
static void P_DoSuperStuff(player_t *player)
|
static void P_DoSuperStuff(player_t *player)
|
||||||
{
|
{
|
||||||
|
mobj_t *spark;
|
||||||
ticcmd_t *cmd = &player->cmd;
|
ticcmd_t *cmd = &player->cmd;
|
||||||
if (player->mo->state >= &states[S_PLAY_SUPERTRANS1] && player->mo->state <= &states[S_PLAY_SUPERTRANS9])
|
if (player->mo->state >= &states[S_PLAY_SUPERTRANS1] && player->mo->state <= &states[S_PLAY_SUPERTRANS9])
|
||||||
return; // don't do anything right now, we're in the middle of transforming!
|
return; // don't do anything right now, we're in the middle of transforming!
|
||||||
|
@ -3384,19 +3387,32 @@ static void P_DoSuperStuff(player_t *player)
|
||||||
switch (player->skin)
|
switch (player->skin)
|
||||||
{
|
{
|
||||||
case 1: // Golden orange supertails.
|
case 1: // Golden orange supertails.
|
||||||
player->mo->color = SKINCOLOR_TSUPER1 + (leveltime/2) % 5;
|
if (leveltime % 9 < 5)
|
||||||
|
player->mo->color = SKINCOLOR_TSUPER1 + leveltime % 9;
|
||||||
|
else
|
||||||
|
player->mo->color = SKINCOLOR_TSUPER1 + 9 - leveltime % 9;
|
||||||
break;
|
break;
|
||||||
case 2: // Pink superknux.
|
case 2: // Pink superknux.
|
||||||
player->mo->color = SKINCOLOR_KSUPER1 + (leveltime/2) % 5;
|
if (leveltime % 9 < 5)
|
||||||
|
player->mo->color = SKINCOLOR_KSUPER1 + leveltime % 9;
|
||||||
|
else
|
||||||
|
player->mo->color = SKINCOLOR_KSUPER1 + 9 - leveltime % 9;
|
||||||
break;
|
break;
|
||||||
default: // Yousa yellow now!
|
default: // Yousa yellow now!
|
||||||
player->mo->color = SKINCOLOR_SUPER1 + (leveltime/2) % 5;
|
if (leveltime % 9 < 5)
|
||||||
|
player->mo->color = SKINCOLOR_SUPER1 + leveltime % 9;
|
||||||
|
else
|
||||||
|
player->mo->color = SKINCOLOR_SUPER1 + 9 - leveltime % 9;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((cmd->forwardmove != 0 || cmd->sidemove != 0 || player->pflags & (PF_CARRIED|PF_ROPEHANG|PF_ITEMHANG|PF_MACESPIN))
|
if ((cmd->forwardmove != 0 || cmd->sidemove != 0 || player->pflags & (PF_CARRIED|PF_ROPEHANG|PF_ITEMHANG|PF_MACESPIN))
|
||||||
&& !(leveltime % TICRATE) && (player->mo->momx || player->mo->momy))
|
&& !(leveltime % TICRATE) && (player->mo->momx || player->mo->momy))
|
||||||
P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_SUPERSPARK);
|
{
|
||||||
|
spark = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_SUPERSPARK);
|
||||||
|
spark->destscale = player->mo->scale;
|
||||||
|
P_SetScale(spark, player->mo->scale);
|
||||||
|
}
|
||||||
|
|
||||||
G_GhostAddColor(GHC_SUPER);
|
G_GhostAddColor(GHC_SUPER);
|
||||||
|
|
||||||
|
@ -7780,24 +7796,24 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall
|
||||||
angle_t angle = 0, focusangle = 0, focusaiming = 0;
|
angle_t angle = 0, focusangle = 0, focusaiming = 0;
|
||||||
fixed_t x, y, z, dist, checkdist, viewpointx, viewpointy, camspeed, camdist, camheight, pviewheight;
|
fixed_t x, y, z, dist, checkdist, viewpointx, viewpointy, camspeed, camdist, camheight, pviewheight;
|
||||||
INT32 camrotate;
|
INT32 camrotate;
|
||||||
boolean camstill, forceon = false, cameranoclip;
|
boolean camstill, cameranoclip;
|
||||||
mobj_t *mo;
|
mobj_t *mo;
|
||||||
subsector_t *newsubsec;
|
subsector_t *newsubsec;
|
||||||
fixed_t f1, f2;
|
fixed_t f1, f2;
|
||||||
|
|
||||||
cameranoclip = (player->pflags & (PF_NOCLIP|PF_NIGHTSMODE)) || (player->mo->flags & (MF_NOCLIP|MF_NOCLIPHEIGHT)); // Noclipping player camera noclips too!!
|
cameranoclip = (player->pflags & (PF_NOCLIP|PF_NIGHTSMODE)) || (player->mo->flags & (MF_NOCLIP|MF_NOCLIPHEIGHT)); // Noclipping player camera noclips too!!
|
||||||
|
|
||||||
if (player->climbing || (player->pflags & PF_NIGHTSMODE) || player->playerstate == PST_DEAD)
|
if (!(player->climbing || (player->pflags & PF_NIGHTSMODE) || player->playerstate == PST_DEAD))
|
||||||
forceon = true;
|
{
|
||||||
|
if (player->spectator) // force cam off for spectators
|
||||||
if (!forceon && player->spectator) // force cam off for spectators
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
if (!forceon && !cv_chasecam.value && thiscam == &camera)
|
if (!cv_chasecam.value && thiscam == &camera)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
if (!forceon && !cv_chasecam2.value && thiscam == &camera2)
|
if (!cv_chasecam2.value && thiscam == &camera2)
|
||||||
return true;
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
if (!thiscam->chase && !resetcalled)
|
if (!thiscam->chase && !resetcalled)
|
||||||
{
|
{
|
||||||
|
@ -8096,6 +8112,8 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall
|
||||||
yl = (unsigned)(tmbbox[BOXBOTTOM] - bmaporgy)>>MAPBLOCKSHIFT;
|
yl = (unsigned)(tmbbox[BOXBOTTOM] - bmaporgy)>>MAPBLOCKSHIFT;
|
||||||
yh = (unsigned)(tmbbox[BOXTOP] - bmaporgy)>>MAPBLOCKSHIFT;
|
yh = (unsigned)(tmbbox[BOXTOP] - bmaporgy)>>MAPBLOCKSHIFT;
|
||||||
|
|
||||||
|
BMBOUNDFIX(xl, xh, yl, yh);
|
||||||
|
|
||||||
for (by = yl; by <= yh; by++)
|
for (by = yl; by <= yh; by++)
|
||||||
for (bx = xl; bx <= xh; bx++)
|
for (bx = xl; bx <= xh; bx++)
|
||||||
{
|
{
|
||||||
|
@ -9087,7 +9105,7 @@ void P_PlayerAfterThink(player_t *player)
|
||||||
{
|
{
|
||||||
ticcmd_t *cmd;
|
ticcmd_t *cmd;
|
||||||
INT32 oldweapon = player->currentweapon;
|
INT32 oldweapon = player->currentweapon;
|
||||||
camera_t *thiscam;
|
camera_t *thiscam = NULL; // if not one of the displayed players, just don't bother
|
||||||
|
|
||||||
#ifdef PARANOIA
|
#ifdef PARANOIA
|
||||||
if (!player->mo)
|
if (!player->mo)
|
||||||
|
@ -9101,7 +9119,7 @@ void P_PlayerAfterThink(player_t *player)
|
||||||
|
|
||||||
if (splitscreen && player == &players[secondarydisplayplayer])
|
if (splitscreen && player == &players[secondarydisplayplayer])
|
||||||
thiscam = &camera2;
|
thiscam = &camera2;
|
||||||
else
|
else if (player == &players[displayplayer])
|
||||||
thiscam = &camera;
|
thiscam = &camera;
|
||||||
|
|
||||||
if (player->playerstate == PST_DEAD)
|
if (player->playerstate == PST_DEAD)
|
||||||
|
@ -9109,7 +9127,7 @@ void P_PlayerAfterThink(player_t *player)
|
||||||
// camera may still move when guy is dead
|
// camera may still move when guy is dead
|
||||||
//if (!netgame)
|
//if (!netgame)
|
||||||
{
|
{
|
||||||
if (((splitscreen && player == &players[secondarydisplayplayer]) || player == &players[displayplayer]) && thiscam->chase)
|
if (thiscam && thiscam->chase)
|
||||||
P_MoveChaseCamera(player, thiscam, false);
|
P_MoveChaseCamera(player, thiscam, false);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
@ -9364,7 +9382,7 @@ void P_PlayerAfterThink(player_t *player)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((splitscreen && player == &players[secondarydisplayplayer]) || player == &players[displayplayer])
|
if (thiscam)
|
||||||
{
|
{
|
||||||
if (!thiscam->chase) // bob view only if looking through the player's eyes
|
if (!thiscam->chase) // bob view only if looking through the player's eyes
|
||||||
{
|
{
|
||||||
|
|
|
@ -978,11 +978,12 @@ static void R_Subsector(size_t num)
|
||||||
polysec->floorpic_angle-po->angle,
|
polysec->floorpic_angle-po->angle,
|
||||||
NULL,
|
NULL,
|
||||||
NULL);
|
NULL);
|
||||||
ffloor[numffloors].plane->polyobj = po;
|
//ffloor[numffloors].plane->polyobj = po;
|
||||||
|
|
||||||
ffloor[numffloors].height = polysec->floorheight;
|
ffloor[numffloors].height = polysec->floorheight;
|
||||||
ffloor[numffloors].polyobj = po;
|
ffloor[numffloors].polyobj = po;
|
||||||
// ffloor[numffloors].ffloor = rover;
|
// ffloor[numffloors].ffloor = rover;
|
||||||
|
po->visplane = ffloor[numffloors].plane;
|
||||||
numffloors++;
|
numffloors++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1014,11 +1015,12 @@ static void R_Subsector(size_t num)
|
||||||
ffloor[numffloors].plane = R_FindPlane(polysec->ceilingheight, polysec->ceilingpic,
|
ffloor[numffloors].plane = R_FindPlane(polysec->ceilingheight, polysec->ceilingpic,
|
||||||
polysec->lightlevel, xoff, yoff, polysec->ceilingpic_angle-po->angle,
|
polysec->lightlevel, xoff, yoff, polysec->ceilingpic_angle-po->angle,
|
||||||
NULL, NULL);
|
NULL, NULL);
|
||||||
ffloor[numffloors].plane->polyobj = po;
|
//ffloor[numffloors].plane->polyobj = po;
|
||||||
|
|
||||||
ffloor[numffloors].polyobj = po;
|
ffloor[numffloors].polyobj = po;
|
||||||
ffloor[numffloors].height = polysec->ceilingheight;
|
ffloor[numffloors].height = polysec->ceilingheight;
|
||||||
// ffloor[numffloors].ffloor = rover;
|
// ffloor[numffloors].ffloor = rover;
|
||||||
|
po->visplane = ffloor[numffloors].plane;
|
||||||
numffloors++;
|
numffloors++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
32
src/r_main.c
|
@ -1026,34 +1026,31 @@ void R_SetupFrame(player_t *player, boolean skybox)
|
||||||
{
|
{
|
||||||
INT32 dy = 0;
|
INT32 dy = 0;
|
||||||
camera_t *thiscam;
|
camera_t *thiscam;
|
||||||
boolean forcechase = false;
|
boolean chasecam = false;
|
||||||
|
|
||||||
if (splitscreen && player == &players[secondarydisplayplayer]
|
if (splitscreen && player == &players[secondarydisplayplayer]
|
||||||
&& player != &players[consoleplayer])
|
&& player != &players[consoleplayer])
|
||||||
{
|
{
|
||||||
thiscam = &camera2;
|
thiscam = &camera2;
|
||||||
|
chasecam = (cv_chasecam2.value != 0);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
thiscam = &camera;
|
thiscam = &camera;
|
||||||
|
chasecam = (cv_chasecam.value != 0);
|
||||||
|
}
|
||||||
|
|
||||||
if (player->climbing || (player->pflags & PF_NIGHTSMODE) || player->playerstate == PST_DEAD)
|
if (player->climbing || (player->pflags & PF_NIGHTSMODE) || player->playerstate == PST_DEAD)
|
||||||
forcechase = true;
|
chasecam = true; // force chasecam on
|
||||||
|
else if (player->spectator) // no spectator chasecam
|
||||||
|
chasecam = false; // force chasecam off
|
||||||
|
|
||||||
if (!forcechase && player->spectator) // no spectator chasecam
|
if (chasecam && !thiscam->chase)
|
||||||
thiscam->chase = false;
|
|
||||||
else if ((cv_chasecam.value || forcechase) && !player->spectator && thiscam == &camera && !thiscam->chase)
|
|
||||||
{
|
{
|
||||||
P_ResetCamera(player, &camera);
|
P_ResetCamera(player, thiscam);
|
||||||
thiscam->chase = true;
|
thiscam->chase = true;
|
||||||
}
|
}
|
||||||
else if ((cv_chasecam2.value || forcechase) && !player->spectator && thiscam == &camera2 && !thiscam->chase)
|
else if (!chasecam)
|
||||||
{
|
|
||||||
P_ResetCamera(player, &camera2);
|
|
||||||
thiscam->chase = true;
|
|
||||||
}
|
|
||||||
else if (!(cv_chasecam.value || forcechase) && thiscam == &camera)
|
|
||||||
thiscam->chase = false;
|
|
||||||
else if (!(cv_chasecam2.value || forcechase) && thiscam == &camera2)
|
|
||||||
thiscam->chase = false;
|
thiscam->chase = false;
|
||||||
|
|
||||||
viewsky = !skybox;
|
viewsky = !skybox;
|
||||||
|
@ -1066,9 +1063,7 @@ void R_SetupFrame(player_t *player, boolean skybox)
|
||||||
aimingangle = player->awayviewaiming;
|
aimingangle = player->awayviewaiming;
|
||||||
viewangle = viewmobj->angle;
|
viewangle = viewmobj->angle;
|
||||||
}
|
}
|
||||||
else if (!player->spectator && (forcechase
|
else if (!player->spectator && chasecam)
|
||||||
|| (cv_chasecam.value && thiscam == &camera)
|
|
||||||
|| (cv_chasecam2.value && thiscam == &camera2)))
|
|
||||||
// use outside cam view
|
// use outside cam view
|
||||||
{
|
{
|
||||||
viewmobj = NULL;
|
viewmobj = NULL;
|
||||||
|
@ -1105,8 +1100,7 @@ void R_SetupFrame(player_t *player, boolean skybox)
|
||||||
|
|
||||||
viewplayer = player;
|
viewplayer = player;
|
||||||
|
|
||||||
if ((forcechase || (cv_chasecam.value && thiscam == &camera) || (cv_chasecam2.value && thiscam == &camera2))
|
if (chasecam && !player->awayviewtics && !player->spectator)
|
||||||
&& !player->awayviewtics && !player->spectator)
|
|
||||||
{
|
{
|
||||||
viewx = thiscam->x;
|
viewx = thiscam->x;
|
||||||
viewy = thiscam->y;
|
viewy = thiscam->y;
|
||||||
|
|
|
@ -1546,23 +1546,12 @@ void R_AddSprites(sector_t *sec, INT32 lightlevel)
|
||||||
// If a limit exists, handle things a tiny bit different.
|
// If a limit exists, handle things a tiny bit different.
|
||||||
if ((limit_dist = (fixed_t)((maptol & TOL_NIGHTS) ? cv_drawdist_nights.value : cv_drawdist.value) << FRACBITS))
|
if ((limit_dist = (fixed_t)((maptol & TOL_NIGHTS) ? cv_drawdist_nights.value : cv_drawdist.value) << FRACBITS))
|
||||||
{
|
{
|
||||||
if (!players[displayplayer].mo)
|
|
||||||
return; // Draw nothing if no player.
|
|
||||||
// todo: is this really the best option for this situation?
|
|
||||||
|
|
||||||
for (thing = sec->thinglist; thing; thing = thing->snext)
|
for (thing = sec->thinglist; thing; thing = thing->snext)
|
||||||
{
|
{
|
||||||
if (thing->sprite == SPR_NULL || thing->flags2 & MF2_DONTDRAW)
|
if (thing->sprite == SPR_NULL || thing->flags2 & MF2_DONTDRAW)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
approx_dist = P_AproxDistance(
|
approx_dist = P_AproxDistance(viewx-thing->x, viewy-thing->y);
|
||||||
players[displayplayer].mo->x - thing->x,
|
|
||||||
players[displayplayer].mo->y - thing->y);
|
|
||||||
|
|
||||||
if (splitscreen && approx_dist > limit_dist && players[secondarydisplayplayer].mo)
|
|
||||||
approx_dist = P_AproxDistance(
|
|
||||||
players[secondarydisplayplayer].mo->x - thing->x,
|
|
||||||
players[secondarydisplayplayer].mo->y - thing->y);
|
|
||||||
|
|
||||||
if (approx_dist <= limit_dist)
|
if (approx_dist <= limit_dist)
|
||||||
R_ProjectSprite(thing);
|
R_ProjectSprite(thing);
|
||||||
|
@ -1579,23 +1568,12 @@ void R_AddSprites(sector_t *sec, INT32 lightlevel)
|
||||||
// Someone seriously wants infinite draw distance for precipitation?
|
// Someone seriously wants infinite draw distance for precipitation?
|
||||||
if ((limit_dist = (fixed_t)cv_drawdist_precip.value << FRACBITS))
|
if ((limit_dist = (fixed_t)cv_drawdist_precip.value << FRACBITS))
|
||||||
{
|
{
|
||||||
if (!players[displayplayer].mo)
|
|
||||||
return; // Draw nothing if no player.
|
|
||||||
// todo: is this really the best option for this situation?
|
|
||||||
|
|
||||||
for (precipthing = sec->preciplist; precipthing; precipthing = precipthing->snext)
|
for (precipthing = sec->preciplist; precipthing; precipthing = precipthing->snext)
|
||||||
{
|
{
|
||||||
if (precipthing->precipflags & PCF_INVISIBLE)
|
if (precipthing->precipflags & PCF_INVISIBLE)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
approx_dist = P_AproxDistance(
|
approx_dist = P_AproxDistance(viewx-precipthing->x, viewy-precipthing->y);
|
||||||
players[displayplayer].mo->x - precipthing->x,
|
|
||||||
players[displayplayer].mo->y - precipthing->y);
|
|
||||||
|
|
||||||
if (splitscreen && approx_dist > limit_dist && players[secondarydisplayplayer].mo)
|
|
||||||
approx_dist = P_AproxDistance(
|
|
||||||
players[secondarydisplayplayer].mo->x - precipthing->x,
|
|
||||||
players[secondarydisplayplayer].mo->y - precipthing->y);
|
|
||||||
|
|
||||||
if (approx_dist <= limit_dist)
|
if (approx_dist <= limit_dist)
|
||||||
R_ProjectPrecipitationSprite(precipthing);
|
R_ProjectPrecipitationSprite(precipthing);
|
||||||
|
@ -1704,6 +1682,19 @@ static void R_CreateDrawNodes(void)
|
||||||
}
|
}
|
||||||
if (ds->maskedtexturecol)
|
if (ds->maskedtexturecol)
|
||||||
{
|
{
|
||||||
|
#ifdef POLYOBJECTS_PLANES
|
||||||
|
// Check for a polyobject plane, but only if this is a front line
|
||||||
|
if (ds->curline->polyseg && ds->curline->polyseg->visplane && !ds->curline->side) {
|
||||||
|
// Put it in!
|
||||||
|
|
||||||
|
entry = R_CreateDrawNode(&nodehead);
|
||||||
|
entry->plane = ds->curline->polyseg->visplane;
|
||||||
|
entry->seg = ds;
|
||||||
|
ds->curline->polyseg->visplane->polyobj = ds->curline->polyseg;
|
||||||
|
ds->curline->polyseg->visplane = NULL;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
entry = R_CreateDrawNode(&nodehead);
|
entry = R_CreateDrawNode(&nodehead);
|
||||||
entry->seg = ds;
|
entry->seg = ds;
|
||||||
}
|
}
|
||||||
|
@ -1720,7 +1711,7 @@ static void R_CreateDrawNodes(void)
|
||||||
plane = ds->ffloorplanes[p];
|
plane = ds->ffloorplanes[p];
|
||||||
R_PlaneBounds(plane);
|
R_PlaneBounds(plane);
|
||||||
|
|
||||||
if (plane->low < con_clipviewtop || plane->high > vid.height || plane->high > plane->low)
|
if (plane->low < con_clipviewtop || plane->high > vid.height || plane->high > plane->low || plane->polyobj)
|
||||||
{
|
{
|
||||||
ds->ffloorplanes[p] = NULL;
|
ds->ffloorplanes[p] = NULL;
|
||||||
continue;
|
continue;
|
||||||
|
@ -1831,7 +1822,7 @@ static void R_CreateDrawNodes(void)
|
||||||
}
|
}
|
||||||
else if (r2->seg)
|
else if (r2->seg)
|
||||||
{
|
{
|
||||||
#ifdef POLYOBJECTS_PLANES
|
#if 0 //#ifdef POLYOBJECTS_PLANES
|
||||||
if (r2->seg->curline->polyseg && rover->mobj && P_MobjInsidePolyobj(r2->seg->curline->polyseg, rover->mobj)) {
|
if (r2->seg->curline->polyseg && rover->mobj && P_MobjInsidePolyobj(r2->seg->curline->polyseg, rover->mobj)) {
|
||||||
// Determine if we need to sort in front of the polyobj, based on the planes. This fixes the issue where
|
// Determine if we need to sort in front of the polyobj, based on the planes. This fixes the issue where
|
||||||
// polyobject planes render above the object standing on them. (A bit hacky... but it works.) -Red
|
// polyobject planes render above the object standing on them. (A bit hacky... but it works.) -Red
|
||||||
|
|
|
@ -1,80 +1,425 @@
|
||||||
/* XPM */
|
/* XPM */
|
||||||
static const char * SDL_icon_xpm[] = {
|
static char * C:\Repo\srb2\src\sdl\SDL_icon_xpm[] = {
|
||||||
"32 32 45 1",
|
"32 32 390 2",
|
||||||
" c None",
|
" c None",
|
||||||
". c #6B6BFF",
|
". c #4F4F70",
|
||||||
"+ c #3D00B9",
|
"+ c #4D4D87",
|
||||||
"@ c #4848FF",
|
"@ c #4D4D84",
|
||||||
"# c #2525FF",
|
"# c #4E4E6C",
|
||||||
"$ c #310096",
|
"$ c #6C6C95",
|
||||||
"% c #003196",
|
"% c #5E5EB2",
|
||||||
"& c #003DB9",
|
"& c #6B6BE7",
|
||||||
"* c #620096",
|
"* c #7373F9",
|
||||||
"= c #6E6E6E",
|
"= c #7C7CFF",
|
||||||
"- c #966200",
|
"- c #6F70E7",
|
||||||
"; c #250073",
|
"; c #494BB2",
|
||||||
"> c #626262",
|
"> c #4F4FA3",
|
||||||
", c #FF8F6B",
|
", c #6464D4",
|
||||||
"' c #FFC66B",
|
"' c #7979F5",
|
||||||
") c #FFAB8E",
|
") c #5F5FCA",
|
||||||
"! c #000080",
|
"! c #5D5D93",
|
||||||
"~ c #B6B6B6",
|
"~ c #3A3A9F",
|
||||||
"{ c #929292",
|
"{ c #6060AC",
|
||||||
"] c #FFD48E",
|
"] c #777793",
|
||||||
"^ c #0000B9",
|
"^ c #5C5CB3",
|
||||||
"/ c #565656",
|
"/ c #7373EA",
|
||||||
"( c #868686",
|
"( c #7A7AFF",
|
||||||
"_ c #808080",
|
"_ c #7575FF",
|
||||||
": c #C0C0C0",
|
": c #7979FF",
|
||||||
"< c #DADADA",
|
"< c #6264DD",
|
||||||
"[ c #F2F2F2",
|
"[ c #47478C",
|
||||||
"} c #FFFFFF",
|
"} c #564567",
|
||||||
"| c #CECECE",
|
"| c #4647D0",
|
||||||
"1 c #AAAAAA",
|
"1 c #5C5CAE",
|
||||||
"2 c #E6E6E6",
|
"2 c #5E5EFF",
|
||||||
"3 c #000096",
|
"3 c #2929FF",
|
||||||
"4 c #AB8EFF",
|
"4 c #1D1DFF",
|
||||||
"5 c #190050",
|
"5 c #1919D1",
|
||||||
"6 c #000000",
|
"6 c #4F4F90",
|
||||||
"7 c #8E8EFF",
|
"7 c #1E1ECE",
|
||||||
"8 c #3E3E3E",
|
"8 c #5858FF",
|
||||||
"9 c #7A7A7A",
|
"9 c #6767A8",
|
||||||
"0 c #0E0E0E",
|
"0 c #4949A0",
|
||||||
"a c #9E9E9E",
|
"a c #7070FB",
|
||||||
"b c #001950",
|
"b c #7D7DFF",
|
||||||
"c c #C2C2C2",
|
"c c #7777FF",
|
||||||
"d c #323232",
|
"d c #7373FF",
|
||||||
"e c #002573",
|
"e c #7272FF",
|
||||||
"f c #A0A0A4",
|
"f c #7878FF",
|
||||||
|
"g c #6465D8",
|
||||||
|
"h c #363886",
|
||||||
|
"i c #9F7655",
|
||||||
|
"j c #C89B5C",
|
||||||
|
"k c #1D1CB7",
|
||||||
|
"l c #3031B1",
|
||||||
|
"m c #1919F4",
|
||||||
|
"n c #1111FF",
|
||||||
|
"o c #1818FF",
|
||||||
|
"p c #1B1BFF",
|
||||||
|
"q c #1C1CFF",
|
||||||
|
"r c #2626B3",
|
||||||
|
"s c #1E1EC8",
|
||||||
|
"t c #1A1AE8",
|
||||||
|
"u c #24249F",
|
||||||
|
"v c #2F2FD2",
|
||||||
|
"w c #7676FF",
|
||||||
|
"x c #6869E2",
|
||||||
|
"y c #414290",
|
||||||
|
"z c #8C6751",
|
||||||
|
"A c #FCBA68",
|
||||||
|
"B c #E9BD7D",
|
||||||
|
"C c #201EB8",
|
||||||
|
"D c #090AB8",
|
||||||
|
"E c #1616EB",
|
||||||
|
"F c #1818FD",
|
||||||
|
"G c #1414EE",
|
||||||
|
"H c #1010E1",
|
||||||
|
"I c #0E0EE2",
|
||||||
|
"J c #0E0EF4",
|
||||||
|
"K c #0606B2",
|
||||||
|
"L c #7A7A89",
|
||||||
|
"M c #0C0C9A",
|
||||||
|
"N c #0A0AA7",
|
||||||
|
"O c #2424E4",
|
||||||
|
"P c #6669E6",
|
||||||
|
"Q c #4F4A8F",
|
||||||
|
"R c #BF853B",
|
||||||
|
"S c #FFD98D",
|
||||||
|
"T c #CDAB76",
|
||||||
|
"U c #1717C4",
|
||||||
|
"V c #0F10BA",
|
||||||
|
"W c #0909B6",
|
||||||
|
"X c #0505C3",
|
||||||
|
"Y c #0000B6",
|
||||||
|
"Z c #0000BE",
|
||||||
|
"` c #0000AD",
|
||||||
|
" . c #1D1D83",
|
||||||
|
".. c #63638E",
|
||||||
|
"+. c #090975",
|
||||||
|
"@. c #1414F3",
|
||||||
|
"#. c #5B5BFF",
|
||||||
|
"$. c #7B7BFF",
|
||||||
|
"%. c #7070FF",
|
||||||
|
"&. c #6E6EFF",
|
||||||
|
"*. c #7172F6",
|
||||||
|
"=. c #625DAF",
|
||||||
|
"-. c #BA9E6C",
|
||||||
|
";. c #887167",
|
||||||
|
">. c #090DF2",
|
||||||
|
",. c #1313BE",
|
||||||
|
"'. c #000085",
|
||||||
|
"). c #0000AC",
|
||||||
|
"!. c #0202AA",
|
||||||
|
"~. c #242488",
|
||||||
|
"{. c #1414C7",
|
||||||
|
"]. c #1717FF",
|
||||||
|
"^. c #5959FF",
|
||||||
|
"/. c #7F7FFF",
|
||||||
|
"(. c #7474FF",
|
||||||
|
"_. c #7171FF",
|
||||||
|
":. c #8686FF",
|
||||||
|
"<. c #7574FF",
|
||||||
|
"[. c #797CFF",
|
||||||
|
"}. c #5756B8",
|
||||||
|
"|. c #1C19A4",
|
||||||
|
"1. c #1617FF",
|
||||||
|
"2. c #1212BD",
|
||||||
|
"3. c #040485",
|
||||||
|
"4. c #0707A4",
|
||||||
|
"5. c #1B1B71",
|
||||||
|
"6. c #373797",
|
||||||
|
"7. c #1616FF",
|
||||||
|
"8. c #5050FF",
|
||||||
|
"9. c #8080FF",
|
||||||
|
"0. c #AAAAFF",
|
||||||
|
"a. c #AEAEF6",
|
||||||
|
"b. c #8A8AEF",
|
||||||
|
"c. c #6969FB",
|
||||||
|
"d. c #2728FF",
|
||||||
|
"e. c #1314FF",
|
||||||
|
"f. c #1919FF",
|
||||||
|
"g. c #1313E8",
|
||||||
|
"h. c #1F1FF4",
|
||||||
|
"i. c #5454FF",
|
||||||
|
"j. c #6D6DF0",
|
||||||
|
"k. c #6868B5",
|
||||||
|
"l. c #0B0BB8",
|
||||||
|
"m. c #1212C5",
|
||||||
|
"n. c #1616FC",
|
||||||
|
"o. c #1515FF",
|
||||||
|
"p. c #1212FF",
|
||||||
|
"q. c #2323FF",
|
||||||
|
"r. c #3636FF",
|
||||||
|
"s. c #4040FF",
|
||||||
|
"t. c #4343F9",
|
||||||
|
"u. c #5D5DB8",
|
||||||
|
"v. c #7F7F92",
|
||||||
|
"w. c #878793",
|
||||||
|
"x. c #4B4B94",
|
||||||
|
"y. c #0B0CE2",
|
||||||
|
"z. c #1313FF",
|
||||||
|
"A. c #4C4CFF",
|
||||||
|
"B. c #8282FF",
|
||||||
|
"C. c #7171ED",
|
||||||
|
"D. c #636394",
|
||||||
|
"E. c #575785",
|
||||||
|
"F. c #A9A99C",
|
||||||
|
"G. c #1414BC",
|
||||||
|
"H. c #1414FF",
|
||||||
|
"I. c #0707FD",
|
||||||
|
"J. c #2525AA",
|
||||||
|
"K. c #A8A8A4",
|
||||||
|
"L. c #EBEBE2",
|
||||||
|
"M. c #F9F9F2",
|
||||||
|
"N. c #E1E1CC",
|
||||||
|
"O. c #4D4D9F",
|
||||||
|
"P. c #0B0BF7",
|
||||||
|
"Q. c #2121FF",
|
||||||
|
"R. c #3232FF",
|
||||||
|
"S. c #5555FF",
|
||||||
|
"T. c #6161B4",
|
||||||
|
"U. c #B5B5B2",
|
||||||
|
"V. c #FFFFF8",
|
||||||
|
"W. c #4F4F9A",
|
||||||
|
"X. c #0B0BF5",
|
||||||
|
"Y. c #1616C5",
|
||||||
|
"Z. c #A8A8A1",
|
||||||
|
"`. c #FFFFFC",
|
||||||
|
" + c #FFFFFF",
|
||||||
|
".+ c #C0C0C4",
|
||||||
|
"++ c #1212D4",
|
||||||
|
"@+ c #4444FF",
|
||||||
|
"#+ c #6464FF",
|
||||||
|
"$+ c #8383FF",
|
||||||
|
"%+ c #6767C3",
|
||||||
|
"&+ c #E4E4E4",
|
||||||
|
"*+ c #9494AE",
|
||||||
|
"=+ c #0808DF",
|
||||||
|
"-+ c #0D0DF2",
|
||||||
|
";+ c #61619A",
|
||||||
|
">+ c #F1F1E0",
|
||||||
|
",+ c #E8E8DD",
|
||||||
|
"'+ c #2424BB",
|
||||||
|
")+ c #1010FF",
|
||||||
|
"!+ c #3434FF",
|
||||||
|
"~+ c #6161FF",
|
||||||
|
"{+ c #6969D2",
|
||||||
|
"]+ c #EFEFF0",
|
||||||
|
"^+ c #C2C2BA",
|
||||||
|
"/+ c #1010B6",
|
||||||
|
"(+ c #0909AC",
|
||||||
|
"_+ c #A4A49A",
|
||||||
|
":+ c #EAEADE",
|
||||||
|
"<+ c #2525B8",
|
||||||
|
"[+ c #2F2FFF",
|
||||||
|
"}+ c #3C3CB5",
|
||||||
|
"|+ c #EEEEEE",
|
||||||
|
"1+ c #BBBBAD",
|
||||||
|
"2+ c #0B0B56",
|
||||||
|
"3+ c #0B0BFC",
|
||||||
|
"4+ c #1212EF",
|
||||||
|
"5+ c #0C0C3E",
|
||||||
|
"6+ c #919187",
|
||||||
|
"7+ c #DEDED6",
|
||||||
|
"8+ c #1F1FC0",
|
||||||
|
"9+ c #1A1AFF",
|
||||||
|
"0+ c #1717FA",
|
||||||
|
"a+ c #1515F8",
|
||||||
|
"b+ c #1111FC",
|
||||||
|
"c+ c #494992",
|
||||||
|
"d+ c #999998",
|
||||||
|
"e+ c #3E3E3B",
|
||||||
|
"f+ c #3C3C99",
|
||||||
|
"g+ c #535397",
|
||||||
|
"h+ c #5A5A4D",
|
||||||
|
"i+ c #6F6F70",
|
||||||
|
"j+ c #BFBFC9",
|
||||||
|
"k+ c #1111D6",
|
||||||
|
"l+ c #1515F1",
|
||||||
|
"m+ c #0F0FE2",
|
||||||
|
"n+ c #0D0DD9",
|
||||||
|
"o+ c #0909CD",
|
||||||
|
"p+ c #0808C7",
|
||||||
|
"q+ c #0505C7",
|
||||||
|
"r+ c #0303CB",
|
||||||
|
"s+ c #0101C0",
|
||||||
|
"t+ c #0202AF",
|
||||||
|
"u+ c #0606AC",
|
||||||
|
"v+ c #121283",
|
||||||
|
"w+ c #BBBBBB",
|
||||||
|
"x+ c #BEBEBE",
|
||||||
|
"y+ c #2F2F2E",
|
||||||
|
"z+ c #C7C8BB",
|
||||||
|
"A+ c #D8DAD1",
|
||||||
|
"B+ c #272828",
|
||||||
|
"C+ c #929292",
|
||||||
|
"D+ c #8688C7",
|
||||||
|
"E+ c #0506F6",
|
||||||
|
"F+ c #1616F5",
|
||||||
|
"G+ c #0B0BD3",
|
||||||
|
"H+ c #0202B6",
|
||||||
|
"I+ c #0000AF",
|
||||||
|
"J+ c #0000B4",
|
||||||
|
"K+ c #0000BD",
|
||||||
|
"L+ c #0000BB",
|
||||||
|
"M+ c #00009E",
|
||||||
|
"N+ c #2C2C7E",
|
||||||
|
"O+ c #6A6A8B",
|
||||||
|
"P+ c #959595",
|
||||||
|
"Q+ c #F0F0F1",
|
||||||
|
"R+ c #E1E1E1",
|
||||||
|
"S+ c #8C8E90",
|
||||||
|
"T+ c #BEBEBF",
|
||||||
|
"U+ c #C9C7C5",
|
||||||
|
"V+ c #939699",
|
||||||
|
"W+ c #E7EAED",
|
||||||
|
"X+ c #CBCBC7",
|
||||||
|
"Y+ c #413B9B",
|
||||||
|
"Z+ c #0607DD",
|
||||||
|
"`+ c #0C0CE2",
|
||||||
|
" @ c #0303B9",
|
||||||
|
".@ c #0000A8",
|
||||||
|
"+@ c #181888",
|
||||||
|
"@@ c #6A6A6A",
|
||||||
|
"#@ c #626263",
|
||||||
|
"$@ c #4B4B4C",
|
||||||
|
"%@ c #3E3B36",
|
||||||
|
"&@ c #9B805C",
|
||||||
|
"*@ c #D9B07D",
|
||||||
|
"=@ c #C9AE89",
|
||||||
|
"-@ c #B9AF9E",
|
||||||
|
";@ c #C7C5C4",
|
||||||
|
">@ c #CBCCCF",
|
||||||
|
",@ c #C7C6C6",
|
||||||
|
"'@ c #AEA59A",
|
||||||
|
")@ c #B69974",
|
||||||
|
"!@ c #D8B87F",
|
||||||
|
"~@ c #9B8272",
|
||||||
|
"{@ c #0E0B9B",
|
||||||
|
"]@ c #0000B7",
|
||||||
|
"^@ c #0000B8",
|
||||||
|
"/@ c #000082",
|
||||||
|
"(@ c #00007A",
|
||||||
|
"_@ c #636379",
|
||||||
|
":@ c #62533E",
|
||||||
|
"<@ c #B59B6C",
|
||||||
|
"[@ c #DEB07B",
|
||||||
|
"}@ c #FECC90",
|
||||||
|
"|@ c #FFCE92",
|
||||||
|
"1@ c #FEC98C",
|
||||||
|
"2@ c #F1BD82",
|
||||||
|
"3@ c #D1A979",
|
||||||
|
"4@ c #BC9E73",
|
||||||
|
"5@ c #CCA777",
|
||||||
|
"6@ c #EAB980",
|
||||||
|
"7@ c #FFCD90",
|
||||||
|
"8@ c #FFD595",
|
||||||
|
"9@ c #FDD782",
|
||||||
|
"0@ c #413678",
|
||||||
|
"a@ c #0000AE",
|
||||||
|
"b@ c #000077",
|
||||||
|
"c@ c #010193",
|
||||||
|
"d@ c #0C0CE4",
|
||||||
|
"e@ c #38389E",
|
||||||
|
"f@ c #EEC585",
|
||||||
|
"g@ c #FFDA9D",
|
||||||
|
"h@ c #FFC992",
|
||||||
|
"i@ c #FFC88F",
|
||||||
|
"j@ c #FFC990",
|
||||||
|
"k@ c #FFCE93",
|
||||||
|
"l@ c #FFD094",
|
||||||
|
"m@ c #FFCC92",
|
||||||
|
"n@ c #C9A174",
|
||||||
|
"o@ c #EDBD88",
|
||||||
|
"p@ c #FAD287",
|
||||||
|
"q@ c #3A2F7F",
|
||||||
|
"r@ c #0000BA",
|
||||||
|
"s@ c #0000B0",
|
||||||
|
"t@ c #0101B2",
|
||||||
|
"u@ c #1111ED",
|
||||||
|
"v@ c #1919C1",
|
||||||
|
"w@ c #95887C",
|
||||||
|
"x@ c #DCAC6E",
|
||||||
|
"y@ c #FFD393",
|
||||||
|
"z@ c #FFCD94",
|
||||||
|
"A@ c #FFCA93",
|
||||||
|
"B@ c #FFC991",
|
||||||
|
"C@ c #FFC78E",
|
||||||
|
"D@ c #FFCB91",
|
||||||
|
"E@ c #E0B581",
|
||||||
|
"F@ c #BB9A6F",
|
||||||
|
"G@ c #FFDC97",
|
||||||
|
"H@ c #C1A173",
|
||||||
|
"I@ c #0E0B9A",
|
||||||
|
"J@ c #0000B5",
|
||||||
|
"K@ c #0101B6",
|
||||||
|
"L@ c #1010E0",
|
||||||
|
"M@ c #1616EC",
|
||||||
|
"N@ c #A68156",
|
||||||
|
"O@ c #E7AC6B",
|
||||||
|
"P@ c #FFC582",
|
||||||
|
"Q@ c #FFCF8F",
|
||||||
|
"R@ c #FFD195",
|
||||||
|
"S@ c #FFD296",
|
||||||
|
"T@ c #FFD396",
|
||||||
|
"U@ c #FFD193",
|
||||||
|
"V@ c #FFD28F",
|
||||||
|
"W@ c #D2A96B",
|
||||||
|
"X@ c #2F2482",
|
||||||
|
"Y@ c #0000C1",
|
||||||
|
"Z@ c #0000C0",
|
||||||
|
"`@ c #0000BF",
|
||||||
|
" # c #0101BF",
|
||||||
|
".# c #1212F0",
|
||||||
|
"+# c #767698",
|
||||||
|
"@# c #9C866E",
|
||||||
|
"## c #A9865D",
|
||||||
|
"$# c #C0915D",
|
||||||
|
"%# c #C89760",
|
||||||
|
"&# c #C29360",
|
||||||
|
"*# c #AD8A61",
|
||||||
|
"=# c #9D8971",
|
||||||
|
"-# c #7F7A7A",
|
||||||
|
";# c #70708F",
|
||||||
|
"># c #6F6F91",
|
||||||
|
",# c #575788",
|
||||||
|
"'# c #464687",
|
||||||
|
")# c #2F2F87",
|
||||||
|
"!# c #15158F",
|
||||||
|
"~# c #0101A8",
|
||||||
|
"{# c #1313FB",
|
||||||
|
"]# c #57579F",
|
||||||
|
"^# c #343487",
|
||||||
|
"/# c #434388",
|
||||||
" ",
|
" ",
|
||||||
" ",
|
" ",
|
||||||
" ",
|
" ",
|
||||||
" .+@##@. ",
|
" . + @ # ",
|
||||||
" @@.@#######@ ",
|
" $ % & * = - ; > , ' ) ! ",
|
||||||
" @@....######### ",
|
" ~ { ] ^ / = ( _ : < [ } | 1 2 3 4 5 6 ",
|
||||||
" .. .@.....@+##$%%%&&% ",
|
" 7 8 9 0 a b c d e f g h i j k l m n o p q r ",
|
||||||
" ..@# @@....@+#*=-;%%%%% ",
|
" s t u v _ f d d d w x y z A B C D E F G H I J K L ",
|
||||||
" ..@#@......@>,')!%%%$ ",
|
" M N O _ c e d d d _ P Q R S T U V W X Y Z ` ... ",
|
||||||
" ~..$#.........{])^#+%/ ",
|
" +.@.#.$.d d d d %.&._ *.=.-.;.>.,.'.).!.~. ",
|
||||||
" +##@.........()^@@@@@_ ",
|
" {.].^./.(.d d _.$.:._ <.[.}.|.1.2.3.4.5. ",
|
||||||
" $####@........#=#######+ ",
|
" 6.7.7.4 8.e : w 9.0.a.b.c.2 d.e.f.g.h.i.j.k. ",
|
||||||
" +######....@@##^#########_ ",
|
" l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.o o z.A.B./.b C.D. ",
|
||||||
" +#####=:<<:+##############/ ",
|
" E.F.G.].o H.z.I.J.K.L.M.N.O.P.o o o Q.R.S._.b B.T. ",
|
||||||
"[<=####{<}}}}|###############= ",
|
" U.V.W.X.f.f.7.Y.Z.`. + + +.+++].o o o.n z.q.@+#+$+%+ ",
|
||||||
" }1###=2}}}}}}.############### ",
|
" &+ +*+=+].o -+;+>+ + + + +,+'+H.o o o o o H.)+o !+~+{+ ",
|
||||||
" }<3#3~}}}}}}}4################ ",
|
" ]+ +^+/+H.o.(+_+ + + + + +:+<+z.o o o o o o o 7.n H.[+}+ ",
|
||||||
" }<5#6:}}}}}}}7################/",
|
" |+ +1+2+3+4+5+6+ + + + + +7+8+H.o o f.9+f.9+f.F 0+a+b+o.c+ ",
|
||||||
" }:6861}}}}}}}.########$$ 9 .@$",
|
" &+ +d+e+f+g+h+i+ + + + + +j+k+].f.9+l+m+n+o+p+q+r+s+t+u+v+ ",
|
||||||
" }:0a6~}}}}}}}@######5b ",
|
" w+ +x+y+z+A+B+C+ + + + + +D+E+9+F+G+H+I+J+K+L+M+N+O+ ",
|
||||||
"22cd262}}}}}}2######5b$ ",
|
" P+Q+R+S+T+U+V+W+ + + + +X+Y+Z+`+ @I+J+Z .@+@E. ",
|
||||||
" 2>1a}}}}}}}{(*###%be## ",
|
" @@#@$@%@&@*@=@-@;@>@,@'@)@!@~@{@]@^@I+/@(@_@ ",
|
||||||
" 860)1<[22c1)]]+##be### ",
|
" :@<@[@}@|@1@2@3@4@5@6@7@8@9@0@L+a@b@c@d@e@ ",
|
||||||
" ~)]]]))))]]]]]=#bb#### ",
|
" f@g@h@i@i@j@k@l@|@m@n@o@p@q@r@s@t@u@p v@ ",
|
||||||
" )]]]]]]]]](]]=eb$#### ",
|
" w@x@y@z@A@B@i@C@D@E@F@G@H@I@L+J@K@L@p M@ ",
|
||||||
" :]]]]]]]]]'9bbb$##### ",
|
" N@O@P@Q@R@S@T@U@V@W@X@Y@Z@Y@`@ #.#p +# ",
|
||||||
" ),'''''( >db+### ",
|
" @###$#%#&#*#=#-#;#>#,#'#)#!#~#{#]# ",
|
||||||
" =##f ",
|
" ^#/# ",
|
||||||
" { ",
|
" ",
|
||||||
" ",
|
" ",
|
||||||
" ",
|
" ",
|
||||||
" "};
|
" "};
|
||||||
|
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 364 KiB |
|
@ -1,80 +1,425 @@
|
||||||
/* XPM */
|
/* XPM */
|
||||||
static const char * SDL_icon_xpm[] = {
|
static char * C:\Repo\srb2\src\sdl\SDL_icon_xpm[] = {
|
||||||
"32 32 45 1",
|
"32 32 390 2",
|
||||||
" c None",
|
" c None",
|
||||||
". c #6B6BFF",
|
". c #4F4F70",
|
||||||
"+ c #3D00B9",
|
"+ c #4D4D87",
|
||||||
"@ c #4848FF",
|
"@ c #4D4D84",
|
||||||
"# c #2525FF",
|
"# c #4E4E6C",
|
||||||
"$ c #310096",
|
"$ c #6C6C95",
|
||||||
"% c #003196",
|
"% c #5E5EB2",
|
||||||
"& c #003DB9",
|
"& c #6B6BE7",
|
||||||
"* c #620096",
|
"* c #7373F9",
|
||||||
"= c #6E6E6E",
|
"= c #7C7CFF",
|
||||||
"- c #966200",
|
"- c #6F70E7",
|
||||||
"; c #250073",
|
"; c #494BB2",
|
||||||
"> c #626262",
|
"> c #4F4FA3",
|
||||||
", c #FF8F6B",
|
", c #6464D4",
|
||||||
"' c #FFC66B",
|
"' c #7979F5",
|
||||||
") c #FFAB8E",
|
") c #5F5FCA",
|
||||||
"! c #000080",
|
"! c #5D5D93",
|
||||||
"~ c #B6B6B6",
|
"~ c #3A3A9F",
|
||||||
"{ c #929292",
|
"{ c #6060AC",
|
||||||
"] c #FFD48E",
|
"] c #777793",
|
||||||
"^ c #0000B9",
|
"^ c #5C5CB3",
|
||||||
"/ c #565656",
|
"/ c #7373EA",
|
||||||
"( c #868686",
|
"( c #7A7AFF",
|
||||||
"_ c #808080",
|
"_ c #7575FF",
|
||||||
": c #C0C0C0",
|
": c #7979FF",
|
||||||
"< c #DADADA",
|
"< c #6264DD",
|
||||||
"[ c #F2F2F2",
|
"[ c #47478C",
|
||||||
"} c #FFFFFF",
|
"} c #564567",
|
||||||
"| c #CECECE",
|
"| c #4647D0",
|
||||||
"1 c #AAAAAA",
|
"1 c #5C5CAE",
|
||||||
"2 c #E6E6E6",
|
"2 c #5E5EFF",
|
||||||
"3 c #000096",
|
"3 c #2929FF",
|
||||||
"4 c #AB8EFF",
|
"4 c #1D1DFF",
|
||||||
"5 c #190050",
|
"5 c #1919D1",
|
||||||
"6 c #000000",
|
"6 c #4F4F90",
|
||||||
"7 c #8E8EFF",
|
"7 c #1E1ECE",
|
||||||
"8 c #3E3E3E",
|
"8 c #5858FF",
|
||||||
"9 c #7A7A7A",
|
"9 c #6767A8",
|
||||||
"0 c #0E0E0E",
|
"0 c #4949A0",
|
||||||
"a c #9E9E9E",
|
"a c #7070FB",
|
||||||
"b c #001950",
|
"b c #7D7DFF",
|
||||||
"c c #C2C2C2",
|
"c c #7777FF",
|
||||||
"d c #323232",
|
"d c #7373FF",
|
||||||
"e c #002573",
|
"e c #7272FF",
|
||||||
"f c #A0A0A4",
|
"f c #7878FF",
|
||||||
|
"g c #6465D8",
|
||||||
|
"h c #363886",
|
||||||
|
"i c #9F7655",
|
||||||
|
"j c #C89B5C",
|
||||||
|
"k c #1D1CB7",
|
||||||
|
"l c #3031B1",
|
||||||
|
"m c #1919F4",
|
||||||
|
"n c #1111FF",
|
||||||
|
"o c #1818FF",
|
||||||
|
"p c #1B1BFF",
|
||||||
|
"q c #1C1CFF",
|
||||||
|
"r c #2626B3",
|
||||||
|
"s c #1E1EC8",
|
||||||
|
"t c #1A1AE8",
|
||||||
|
"u c #24249F",
|
||||||
|
"v c #2F2FD2",
|
||||||
|
"w c #7676FF",
|
||||||
|
"x c #6869E2",
|
||||||
|
"y c #414290",
|
||||||
|
"z c #8C6751",
|
||||||
|
"A c #FCBA68",
|
||||||
|
"B c #E9BD7D",
|
||||||
|
"C c #201EB8",
|
||||||
|
"D c #090AB8",
|
||||||
|
"E c #1616EB",
|
||||||
|
"F c #1818FD",
|
||||||
|
"G c #1414EE",
|
||||||
|
"H c #1010E1",
|
||||||
|
"I c #0E0EE2",
|
||||||
|
"J c #0E0EF4",
|
||||||
|
"K c #0606B2",
|
||||||
|
"L c #7A7A89",
|
||||||
|
"M c #0C0C9A",
|
||||||
|
"N c #0A0AA7",
|
||||||
|
"O c #2424E4",
|
||||||
|
"P c #6669E6",
|
||||||
|
"Q c #4F4A8F",
|
||||||
|
"R c #BF853B",
|
||||||
|
"S c #FFD98D",
|
||||||
|
"T c #CDAB76",
|
||||||
|
"U c #1717C4",
|
||||||
|
"V c #0F10BA",
|
||||||
|
"W c #0909B6",
|
||||||
|
"X c #0505C3",
|
||||||
|
"Y c #0000B6",
|
||||||
|
"Z c #0000BE",
|
||||||
|
"` c #0000AD",
|
||||||
|
" . c #1D1D83",
|
||||||
|
".. c #63638E",
|
||||||
|
"+. c #090975",
|
||||||
|
"@. c #1414F3",
|
||||||
|
"#. c #5B5BFF",
|
||||||
|
"$. c #7B7BFF",
|
||||||
|
"%. c #7070FF",
|
||||||
|
"&. c #6E6EFF",
|
||||||
|
"*. c #7172F6",
|
||||||
|
"=. c #625DAF",
|
||||||
|
"-. c #BA9E6C",
|
||||||
|
";. c #887167",
|
||||||
|
">. c #090DF2",
|
||||||
|
",. c #1313BE",
|
||||||
|
"'. c #000085",
|
||||||
|
"). c #0000AC",
|
||||||
|
"!. c #0202AA",
|
||||||
|
"~. c #242488",
|
||||||
|
"{. c #1414C7",
|
||||||
|
"]. c #1717FF",
|
||||||
|
"^. c #5959FF",
|
||||||
|
"/. c #7F7FFF",
|
||||||
|
"(. c #7474FF",
|
||||||
|
"_. c #7171FF",
|
||||||
|
":. c #8686FF",
|
||||||
|
"<. c #7574FF",
|
||||||
|
"[. c #797CFF",
|
||||||
|
"}. c #5756B8",
|
||||||
|
"|. c #1C19A4",
|
||||||
|
"1. c #1617FF",
|
||||||
|
"2. c #1212BD",
|
||||||
|
"3. c #040485",
|
||||||
|
"4. c #0707A4",
|
||||||
|
"5. c #1B1B71",
|
||||||
|
"6. c #373797",
|
||||||
|
"7. c #1616FF",
|
||||||
|
"8. c #5050FF",
|
||||||
|
"9. c #8080FF",
|
||||||
|
"0. c #AAAAFF",
|
||||||
|
"a. c #AEAEF6",
|
||||||
|
"b. c #8A8AEF",
|
||||||
|
"c. c #6969FB",
|
||||||
|
"d. c #2728FF",
|
||||||
|
"e. c #1314FF",
|
||||||
|
"f. c #1919FF",
|
||||||
|
"g. c #1313E8",
|
||||||
|
"h. c #1F1FF4",
|
||||||
|
"i. c #5454FF",
|
||||||
|
"j. c #6D6DF0",
|
||||||
|
"k. c #6868B5",
|
||||||
|
"l. c #0B0BB8",
|
||||||
|
"m. c #1212C5",
|
||||||
|
"n. c #1616FC",
|
||||||
|
"o. c #1515FF",
|
||||||
|
"p. c #1212FF",
|
||||||
|
"q. c #2323FF",
|
||||||
|
"r. c #3636FF",
|
||||||
|
"s. c #4040FF",
|
||||||
|
"t. c #4343F9",
|
||||||
|
"u. c #5D5DB8",
|
||||||
|
"v. c #7F7F92",
|
||||||
|
"w. c #878793",
|
||||||
|
"x. c #4B4B94",
|
||||||
|
"y. c #0B0CE2",
|
||||||
|
"z. c #1313FF",
|
||||||
|
"A. c #4C4CFF",
|
||||||
|
"B. c #8282FF",
|
||||||
|
"C. c #7171ED",
|
||||||
|
"D. c #636394",
|
||||||
|
"E. c #575785",
|
||||||
|
"F. c #A9A99C",
|
||||||
|
"G. c #1414BC",
|
||||||
|
"H. c #1414FF",
|
||||||
|
"I. c #0707FD",
|
||||||
|
"J. c #2525AA",
|
||||||
|
"K. c #A8A8A4",
|
||||||
|
"L. c #EBEBE2",
|
||||||
|
"M. c #F9F9F2",
|
||||||
|
"N. c #E1E1CC",
|
||||||
|
"O. c #4D4D9F",
|
||||||
|
"P. c #0B0BF7",
|
||||||
|
"Q. c #2121FF",
|
||||||
|
"R. c #3232FF",
|
||||||
|
"S. c #5555FF",
|
||||||
|
"T. c #6161B4",
|
||||||
|
"U. c #B5B5B2",
|
||||||
|
"V. c #FFFFF8",
|
||||||
|
"W. c #4F4F9A",
|
||||||
|
"X. c #0B0BF5",
|
||||||
|
"Y. c #1616C5",
|
||||||
|
"Z. c #A8A8A1",
|
||||||
|
"`. c #FFFFFC",
|
||||||
|
" + c #FFFFFF",
|
||||||
|
".+ c #C0C0C4",
|
||||||
|
"++ c #1212D4",
|
||||||
|
"@+ c #4444FF",
|
||||||
|
"#+ c #6464FF",
|
||||||
|
"$+ c #8383FF",
|
||||||
|
"%+ c #6767C3",
|
||||||
|
"&+ c #E4E4E4",
|
||||||
|
"*+ c #9494AE",
|
||||||
|
"=+ c #0808DF",
|
||||||
|
"-+ c #0D0DF2",
|
||||||
|
";+ c #61619A",
|
||||||
|
">+ c #F1F1E0",
|
||||||
|
",+ c #E8E8DD",
|
||||||
|
"'+ c #2424BB",
|
||||||
|
")+ c #1010FF",
|
||||||
|
"!+ c #3434FF",
|
||||||
|
"~+ c #6161FF",
|
||||||
|
"{+ c #6969D2",
|
||||||
|
"]+ c #EFEFF0",
|
||||||
|
"^+ c #C2C2BA",
|
||||||
|
"/+ c #1010B6",
|
||||||
|
"(+ c #0909AC",
|
||||||
|
"_+ c #A4A49A",
|
||||||
|
":+ c #EAEADE",
|
||||||
|
"<+ c #2525B8",
|
||||||
|
"[+ c #2F2FFF",
|
||||||
|
"}+ c #3C3CB5",
|
||||||
|
"|+ c #EEEEEE",
|
||||||
|
"1+ c #BBBBAD",
|
||||||
|
"2+ c #0B0B56",
|
||||||
|
"3+ c #0B0BFC",
|
||||||
|
"4+ c #1212EF",
|
||||||
|
"5+ c #0C0C3E",
|
||||||
|
"6+ c #919187",
|
||||||
|
"7+ c #DEDED6",
|
||||||
|
"8+ c #1F1FC0",
|
||||||
|
"9+ c #1A1AFF",
|
||||||
|
"0+ c #1717FA",
|
||||||
|
"a+ c #1515F8",
|
||||||
|
"b+ c #1111FC",
|
||||||
|
"c+ c #494992",
|
||||||
|
"d+ c #999998",
|
||||||
|
"e+ c #3E3E3B",
|
||||||
|
"f+ c #3C3C99",
|
||||||
|
"g+ c #535397",
|
||||||
|
"h+ c #5A5A4D",
|
||||||
|
"i+ c #6F6F70",
|
||||||
|
"j+ c #BFBFC9",
|
||||||
|
"k+ c #1111D6",
|
||||||
|
"l+ c #1515F1",
|
||||||
|
"m+ c #0F0FE2",
|
||||||
|
"n+ c #0D0DD9",
|
||||||
|
"o+ c #0909CD",
|
||||||
|
"p+ c #0808C7",
|
||||||
|
"q+ c #0505C7",
|
||||||
|
"r+ c #0303CB",
|
||||||
|
"s+ c #0101C0",
|
||||||
|
"t+ c #0202AF",
|
||||||
|
"u+ c #0606AC",
|
||||||
|
"v+ c #121283",
|
||||||
|
"w+ c #BBBBBB",
|
||||||
|
"x+ c #BEBEBE",
|
||||||
|
"y+ c #2F2F2E",
|
||||||
|
"z+ c #C7C8BB",
|
||||||
|
"A+ c #D8DAD1",
|
||||||
|
"B+ c #272828",
|
||||||
|
"C+ c #929292",
|
||||||
|
"D+ c #8688C7",
|
||||||
|
"E+ c #0506F6",
|
||||||
|
"F+ c #1616F5",
|
||||||
|
"G+ c #0B0BD3",
|
||||||
|
"H+ c #0202B6",
|
||||||
|
"I+ c #0000AF",
|
||||||
|
"J+ c #0000B4",
|
||||||
|
"K+ c #0000BD",
|
||||||
|
"L+ c #0000BB",
|
||||||
|
"M+ c #00009E",
|
||||||
|
"N+ c #2C2C7E",
|
||||||
|
"O+ c #6A6A8B",
|
||||||
|
"P+ c #959595",
|
||||||
|
"Q+ c #F0F0F1",
|
||||||
|
"R+ c #E1E1E1",
|
||||||
|
"S+ c #8C8E90",
|
||||||
|
"T+ c #BEBEBF",
|
||||||
|
"U+ c #C9C7C5",
|
||||||
|
"V+ c #939699",
|
||||||
|
"W+ c #E7EAED",
|
||||||
|
"X+ c #CBCBC7",
|
||||||
|
"Y+ c #413B9B",
|
||||||
|
"Z+ c #0607DD",
|
||||||
|
"`+ c #0C0CE2",
|
||||||
|
" @ c #0303B9",
|
||||||
|
".@ c #0000A8",
|
||||||
|
"+@ c #181888",
|
||||||
|
"@@ c #6A6A6A",
|
||||||
|
"#@ c #626263",
|
||||||
|
"$@ c #4B4B4C",
|
||||||
|
"%@ c #3E3B36",
|
||||||
|
"&@ c #9B805C",
|
||||||
|
"*@ c #D9B07D",
|
||||||
|
"=@ c #C9AE89",
|
||||||
|
"-@ c #B9AF9E",
|
||||||
|
";@ c #C7C5C4",
|
||||||
|
">@ c #CBCCCF",
|
||||||
|
",@ c #C7C6C6",
|
||||||
|
"'@ c #AEA59A",
|
||||||
|
")@ c #B69974",
|
||||||
|
"!@ c #D8B87F",
|
||||||
|
"~@ c #9B8272",
|
||||||
|
"{@ c #0E0B9B",
|
||||||
|
"]@ c #0000B7",
|
||||||
|
"^@ c #0000B8",
|
||||||
|
"/@ c #000082",
|
||||||
|
"(@ c #00007A",
|
||||||
|
"_@ c #636379",
|
||||||
|
":@ c #62533E",
|
||||||
|
"<@ c #B59B6C",
|
||||||
|
"[@ c #DEB07B",
|
||||||
|
"}@ c #FECC90",
|
||||||
|
"|@ c #FFCE92",
|
||||||
|
"1@ c #FEC98C",
|
||||||
|
"2@ c #F1BD82",
|
||||||
|
"3@ c #D1A979",
|
||||||
|
"4@ c #BC9E73",
|
||||||
|
"5@ c #CCA777",
|
||||||
|
"6@ c #EAB980",
|
||||||
|
"7@ c #FFCD90",
|
||||||
|
"8@ c #FFD595",
|
||||||
|
"9@ c #FDD782",
|
||||||
|
"0@ c #413678",
|
||||||
|
"a@ c #0000AE",
|
||||||
|
"b@ c #000077",
|
||||||
|
"c@ c #010193",
|
||||||
|
"d@ c #0C0CE4",
|
||||||
|
"e@ c #38389E",
|
||||||
|
"f@ c #EEC585",
|
||||||
|
"g@ c #FFDA9D",
|
||||||
|
"h@ c #FFC992",
|
||||||
|
"i@ c #FFC88F",
|
||||||
|
"j@ c #FFC990",
|
||||||
|
"k@ c #FFCE93",
|
||||||
|
"l@ c #FFD094",
|
||||||
|
"m@ c #FFCC92",
|
||||||
|
"n@ c #C9A174",
|
||||||
|
"o@ c #EDBD88",
|
||||||
|
"p@ c #FAD287",
|
||||||
|
"q@ c #3A2F7F",
|
||||||
|
"r@ c #0000BA",
|
||||||
|
"s@ c #0000B0",
|
||||||
|
"t@ c #0101B2",
|
||||||
|
"u@ c #1111ED",
|
||||||
|
"v@ c #1919C1",
|
||||||
|
"w@ c #95887C",
|
||||||
|
"x@ c #DCAC6E",
|
||||||
|
"y@ c #FFD393",
|
||||||
|
"z@ c #FFCD94",
|
||||||
|
"A@ c #FFCA93",
|
||||||
|
"B@ c #FFC991",
|
||||||
|
"C@ c #FFC78E",
|
||||||
|
"D@ c #FFCB91",
|
||||||
|
"E@ c #E0B581",
|
||||||
|
"F@ c #BB9A6F",
|
||||||
|
"G@ c #FFDC97",
|
||||||
|
"H@ c #C1A173",
|
||||||
|
"I@ c #0E0B9A",
|
||||||
|
"J@ c #0000B5",
|
||||||
|
"K@ c #0101B6",
|
||||||
|
"L@ c #1010E0",
|
||||||
|
"M@ c #1616EC",
|
||||||
|
"N@ c #A68156",
|
||||||
|
"O@ c #E7AC6B",
|
||||||
|
"P@ c #FFC582",
|
||||||
|
"Q@ c #FFCF8F",
|
||||||
|
"R@ c #FFD195",
|
||||||
|
"S@ c #FFD296",
|
||||||
|
"T@ c #FFD396",
|
||||||
|
"U@ c #FFD193",
|
||||||
|
"V@ c #FFD28F",
|
||||||
|
"W@ c #D2A96B",
|
||||||
|
"X@ c #2F2482",
|
||||||
|
"Y@ c #0000C1",
|
||||||
|
"Z@ c #0000C0",
|
||||||
|
"`@ c #0000BF",
|
||||||
|
" # c #0101BF",
|
||||||
|
".# c #1212F0",
|
||||||
|
"+# c #767698",
|
||||||
|
"@# c #9C866E",
|
||||||
|
"## c #A9865D",
|
||||||
|
"$# c #C0915D",
|
||||||
|
"%# c #C89760",
|
||||||
|
"&# c #C29360",
|
||||||
|
"*# c #AD8A61",
|
||||||
|
"=# c #9D8971",
|
||||||
|
"-# c #7F7A7A",
|
||||||
|
";# c #70708F",
|
||||||
|
"># c #6F6F91",
|
||||||
|
",# c #575788",
|
||||||
|
"'# c #464687",
|
||||||
|
")# c #2F2F87",
|
||||||
|
"!# c #15158F",
|
||||||
|
"~# c #0101A8",
|
||||||
|
"{# c #1313FB",
|
||||||
|
"]# c #57579F",
|
||||||
|
"^# c #343487",
|
||||||
|
"/# c #434388",
|
||||||
" ",
|
" ",
|
||||||
" ",
|
" ",
|
||||||
" ",
|
" ",
|
||||||
" .+@##@. ",
|
" . + @ # ",
|
||||||
" @@.@#######@ ",
|
" $ % & * = - ; > , ' ) ! ",
|
||||||
" @@....######### ",
|
" ~ { ] ^ / = ( _ : < [ } | 1 2 3 4 5 6 ",
|
||||||
" .. .@.....@+##$%%%&&% ",
|
" 7 8 9 0 a b c d e f g h i j k l m n o p q r ",
|
||||||
" ..@# @@....@+#*=-;%%%%% ",
|
" s t u v _ f d d d w x y z A B C D E F G H I J K L ",
|
||||||
" ..@#@......@>,')!%%%$ ",
|
" M N O _ c e d d d _ P Q R S T U V W X Y Z ` ... ",
|
||||||
" ~..$#.........{])^#+%/ ",
|
" +.@.#.$.d d d d %.&._ *.=.-.;.>.,.'.).!.~. ",
|
||||||
" +##@.........()^@@@@@_ ",
|
" {.].^./.(.d d _.$.:._ <.[.}.|.1.2.3.4.5. ",
|
||||||
" $####@........#=#######+ ",
|
" 6.7.7.4 8.e : w 9.0.a.b.c.2 d.e.f.g.h.i.j.k. ",
|
||||||
" +######....@@##^#########_ ",
|
" l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.o o z.A.B./.b C.D. ",
|
||||||
" +#####=:<<:+##############/ ",
|
" E.F.G.].o H.z.I.J.K.L.M.N.O.P.o o o Q.R.S._.b B.T. ",
|
||||||
"[<=####{<}}}}|###############= ",
|
" U.V.W.X.f.f.7.Y.Z.`. + + +.+++].o o o.n z.q.@+#+$+%+ ",
|
||||||
" }1###=2}}}}}}.############### ",
|
" &+ +*+=+].o -+;+>+ + + + +,+'+H.o o o o o H.)+o !+~+{+ ",
|
||||||
" }<3#3~}}}}}}}4################ ",
|
" ]+ +^+/+H.o.(+_+ + + + + +:+<+z.o o o o o o o 7.n H.[+}+ ",
|
||||||
" }<5#6:}}}}}}}7################/",
|
" |+ +1+2+3+4+5+6+ + + + + +7+8+H.o o f.9+f.9+f.F 0+a+b+o.c+ ",
|
||||||
" }:6861}}}}}}}.########$$ 9 .@$",
|
" &+ +d+e+f+g+h+i+ + + + + +j+k+].f.9+l+m+n+o+p+q+r+s+t+u+v+ ",
|
||||||
" }:0a6~}}}}}}}@######5b ",
|
" w+ +x+y+z+A+B+C+ + + + + +D+E+9+F+G+H+I+J+K+L+M+N+O+ ",
|
||||||
"22cd262}}}}}}2######5b$ ",
|
" P+Q+R+S+T+U+V+W+ + + + +X+Y+Z+`+ @I+J+Z .@+@E. ",
|
||||||
" 2>1a}}}}}}}{(*###%be## ",
|
" @@#@$@%@&@*@=@-@;@>@,@'@)@!@~@{@]@^@I+/@(@_@ ",
|
||||||
" 860)1<[22c1)]]+##be### ",
|
" :@<@[@}@|@1@2@3@4@5@6@7@8@9@0@L+a@b@c@d@e@ ",
|
||||||
" ~)]]]))))]]]]]=#bb#### ",
|
" f@g@h@i@i@j@k@l@|@m@n@o@p@q@r@s@t@u@p v@ ",
|
||||||
" )]]]]]]]]](]]=eb$#### ",
|
" w@x@y@z@A@B@i@C@D@E@F@G@H@I@L+J@K@L@p M@ ",
|
||||||
" :]]]]]]]]]'9bbb$##### ",
|
" N@O@P@Q@R@S@T@U@V@W@X@Y@Z@Y@`@ #.#p +# ",
|
||||||
" ),'''''( >db+### ",
|
" @###$#%#&#*#=#-#;#>#,#'#)#!#~#{#]# ",
|
||||||
" =##f ",
|
" ^#/# ",
|
||||||
" { ",
|
" ",
|
||||||
" ",
|
" ",
|
||||||
" ",
|
" ",
|
||||||
" "};
|
" "};
|
||||||
|
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 364 KiB |
|
@ -1590,7 +1590,7 @@ static void ST_drawSpecialStageHUD(void)
|
||||||
if (sstimer)
|
if (sstimer)
|
||||||
{
|
{
|
||||||
V_DrawString(hudinfo[HUD_TIMELEFT].x, STRINGY(hudinfo[HUD_TIMELEFT].y), V_HUDTRANS, M_GetText("TIME LEFT"));
|
V_DrawString(hudinfo[HUD_TIMELEFT].x, STRINGY(hudinfo[HUD_TIMELEFT].y), V_HUDTRANS, M_GetText("TIME LEFT"));
|
||||||
ST_DrawNightsOverlayNum(SCX(hudinfo[HUD_TIMELEFTNUM].x), SCY(hudinfo[HUD_TIMELEFTNUM].y), V_HUDTRANS, sstimer/TICRATE, tallnum, SKINCOLOR_WHITE);
|
ST_DrawNumFromHud(HUD_TIMELEFTNUM, sstimer/TICRATE);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
ST_DrawPatchFromHud(HUD_TIMEUP, timeup);
|
ST_DrawPatchFromHud(HUD_TIMEUP, timeup);
|
||||||
|
|
|
@ -413,6 +413,7 @@ UINT16 W_LoadWadFile(const char *filename)
|
||||||
lump_p->disksize -= 4;
|
lump_p->disksize -= 4;
|
||||||
}
|
}
|
||||||
else lump_p->compressed = 0;
|
else lump_p->compressed = 0;
|
||||||
|
memset(lump_p->name, 0x00, 9);
|
||||||
strncpy(lump_p->name, fileinfo->name, 8);
|
strncpy(lump_p->name, fileinfo->name, 8);
|
||||||
}
|
}
|
||||||
free(fileinfov);
|
free(fileinfov);
|
||||||
|
|
Before Width: | Height: | Size: 5.9 KiB After Width: | Height: | Size: 364 KiB |
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 364 KiB |