Merge branch 'public_todo_next' into next
All commits that was in private that are not SRB2 2.2 had moved to public's next
							
								
								
									
										433
									
								
								SRB2.cbp
									
										
									
									
									
								
							
							
						
						| 
						 | 
				
			
			@ -154,8 +154,8 @@ HW3SOUND for 3D hardware sound  support
 | 
			
		|||
					<Add directory="libs/gme/include" />
 | 
			
		||||
				</Compiler>
 | 
			
		||||
				<Linker>
 | 
			
		||||
					<Add library="SDL" />
 | 
			
		||||
					<Add library="SDL_mixer" />
 | 
			
		||||
					<Add library="SDL2" />
 | 
			
		||||
					<Add library="SDL2_mixer" />
 | 
			
		||||
					<Add library="advapi32" />
 | 
			
		||||
					<Add library="kernel32" />
 | 
			
		||||
					<Add library="msvcrt" />
 | 
			
		||||
| 
						 | 
				
			
			@ -200,8 +200,8 @@ HW3SOUND for 3D hardware sound  support
 | 
			
		|||
					<Add directory="libs/gme/include" />
 | 
			
		||||
				</Compiler>
 | 
			
		||||
				<Linker>
 | 
			
		||||
					<Add library="SDL" />
 | 
			
		||||
					<Add library="SDL_mixer" />
 | 
			
		||||
					<Add library="SDL2" />
 | 
			
		||||
					<Add library="SDL2_mixer" />
 | 
			
		||||
					<Add library="advapi32" />
 | 
			
		||||
					<Add library="kernel32" />
 | 
			
		||||
					<Add library="msvcrt" />
 | 
			
		||||
| 
						 | 
				
			
			@ -4141,283 +4141,170 @@ HW3SOUND for 3D hardware sound  support
 | 
			
		|||
			<Option target="Debug Mingw64/DirectX" />
 | 
			
		||||
			<Option target="Release Mingw64/DirectX" />
 | 
			
		||||
		</Unit>
 | 
			
		||||
		<Unit filename="src/sdl/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">
 | 
			
		||||
		<Unit filename="src/sdl2/IMG_xpm.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 Mingw64/SDL" />
 | 
			
		||||
			<Option target="Release Mingw64/SDL" />
 | 
			
		||||
			<Option target="Debug Mingw/SDL" />
 | 
			
		||||
			<Option target="Release Mingw/SDL" />
 | 
			
		||||
		</Unit>
 | 
			
		||||
		<Unit filename="src/sdl/sdlmain.h">
 | 
			
		||||
		<Unit filename="src/sdl2/SDL_icon.xpm">
 | 
			
		||||
			<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" />
 | 
			
		||||
			<Option target="Debug Mingw/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 filename="src/sounds.c">
 | 
			
		||||
			<Option compilerVar="CC" />
 | 
			
		||||
| 
						 | 
				
			
			@ -4590,13 +4477,13 @@ HW3SOUND for 3D hardware sound  support
 | 
			
		|||
		</Unit>
 | 
			
		||||
		<Unit filename="src/vid_copy.s">
 | 
			
		||||
			<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_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="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="gcc" 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="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="Release Native/SDL" />
 | 
			
		||||
			<Option target="Debug Linux/SDL" />
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -27,7 +27,6 @@ find_library(SDL2_LIBRARY
 | 
			
		|||
		"/usr/local/lib"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# set include dir variables
 | 
			
		||||
set(SDL2_PROCESS_INCLUDES SDL2_INCLUDE_DIR)
 | 
			
		||||
set(SDL2_PROCESS_LIBS SDL2_LIBRARY)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -943,9 +943,9 @@ void D_SRB2Main(void)
 | 
			
		|||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined (_WIN32_WCE) //|| defined (_DEBUG) || defined (GP2X)
 | 
			
		||||
	devparm = !M_CheckParm("-nodebug");
 | 
			
		||||
	devparm = M_CheckParm("-nodebug") == 0;
 | 
			
		||||
#else
 | 
			
		||||
	devparm = M_CheckParm("-debug");
 | 
			
		||||
	devparm = M_CheckParm("-debug") != 0;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	// for dedicated server
 | 
			
		||||
| 
						 | 
				
			
			@ -1118,7 +1118,7 @@ void D_SRB2Main(void)
 | 
			
		|||
#endif
 | 
			
		||||
	D_CleanFile();
 | 
			
		||||
 | 
			
		||||
#if 1 // md5s last updated 12/14/14
 | 
			
		||||
#ifndef DEVELOP // md5s last updated 12/14/14
 | 
			
		||||
 | 
			
		||||
	// Check MD5s of autoloaded files
 | 
			
		||||
	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)
 | 
			
		||||
{
 | 
			
		||||
	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.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -473,6 +473,7 @@ static void readPlayer(MYFILE *f, INT32 num)
 | 
			
		|||
 | 
			
		||||
				if (!slotfound && (slotfound = findFreeSlot(&num)) == false)
 | 
			
		||||
					goto done;
 | 
			
		||||
				PlayerMenu[num].status = IT_CALL;
 | 
			
		||||
 | 
			
		||||
				for (i = 0; i < MAXLINELEN-3; i++)
 | 
			
		||||
				{
 | 
			
		||||
| 
						 | 
				
			
			@ -545,6 +546,7 @@ static void readPlayer(MYFILE *f, INT32 num)
 | 
			
		|||
				if (!slotfound && (slotfound = findFreeSlot(&num)) == false)
 | 
			
		||||
					goto done;
 | 
			
		||||
				DEH_WriteUndoline(word, &description[num].picname[0], UNDO_NONE);
 | 
			
		||||
				PlayerMenu[num].status = IT_CALL;
 | 
			
		||||
				strncpy(description[num].picname, word2, 8);
 | 
			
		||||
			}
 | 
			
		||||
			else if (fastcmp(word, "STATUS"))
 | 
			
		||||
| 
						 | 
				
			
			@ -576,6 +578,8 @@ static void readPlayer(MYFILE *f, INT32 num)
 | 
			
		|||
				if (!slotfound && (slotfound = findFreeSlot(&num)) == false)
 | 
			
		||||
					goto done;
 | 
			
		||||
				DEH_WriteUndoline(word, description[num].skinname, UNDO_NONE);
 | 
			
		||||
				PlayerMenu[num].status = IT_CALL;
 | 
			
		||||
 | 
			
		||||
				strlcpy(description[num].skinname, word2, sizeof 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
 | 
			
		||||
	"S_POSS_STND",
 | 
			
		||||
	"S_POSS_STND2",
 | 
			
		||||
	"S_POSS_RUN1",
 | 
			
		||||
	"S_POSS_RUN2",
 | 
			
		||||
	"S_POSS_RUN3",
 | 
			
		||||
| 
						 | 
				
			
			@ -3817,7 +3820,6 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
 | 
			
		|||
 | 
			
		||||
	// Red Crawla
 | 
			
		||||
	"S_SPOS_STND",
 | 
			
		||||
	"S_SPOS_STND2",
 | 
			
		||||
	"S_SPOS_RUN1",
 | 
			
		||||
	"S_SPOS_RUN2",
 | 
			
		||||
	"S_SPOS_RUN3",
 | 
			
		||||
| 
						 | 
				
			
			@ -7172,7 +7174,6 @@ static const char *const MOBJFLAG2_LIST[] = {
 | 
			
		|||
	"EXPLOSION",	// Thrown ring has explosive properties
 | 
			
		||||
	"SCATTER",		// Thrown ring has scatter properties
 | 
			
		||||
	"BEYONDTHEGRAVE",// Source of this missile has died and has since respawned.
 | 
			
		||||
	"PUSHED",		// Mobj was already pushed this tic
 | 
			
		||||
	"SLIDEPUSH",	// MF_PUSHABLE that pushes continuously.
 | 
			
		||||
	"CLASSICPUSH",	// Drops straight down when object has negative Z.
 | 
			
		||||
	"STANDONME",	// While not pushable, stand on me anyway.
 | 
			
		||||
| 
						 | 
				
			
			@ -7201,6 +7202,8 @@ static const char *const MOBJEFLAG_LIST[] = {
 | 
			
		|||
	"JUSTSTEPPEDDOWN", // used for ramp sectors
 | 
			
		||||
	"VERTICALFLIP", // Vertically flip sprite/allow upside-down physics
 | 
			
		||||
	"GOOWATER", // Goo water
 | 
			
		||||
	"PUSHED", // Mobj was already pushed this tic
 | 
			
		||||
	"SPRUNG", // Mobj was already sprung this tic
 | 
			
		||||
	NULL
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -7303,6 +7306,7 @@ static const char *const ML_LIST[16] = {
 | 
			
		|||
};
 | 
			
		||||
 | 
			
		||||
// This DOES differ from r_draw's Color_Names, unfortunately.
 | 
			
		||||
// Also includes Super colors
 | 
			
		||||
static const char *COLOR_ENUMS[] = {
 | 
			
		||||
	"NONE",     	// SKINCOLOR_NONE
 | 
			
		||||
	"WHITE",    	// SKINCOLOR_WHITE
 | 
			
		||||
| 
						 | 
				
			
			@ -7329,7 +7333,25 @@ static const char *COLOR_ENUMS[] = {
 | 
			
		|||
	"ZIM",      	// SKINCOLOR_ZIM
 | 
			
		||||
	"OLIVE",    	// SKINCOLOR_OLIVE
 | 
			
		||||
	"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[] = {
 | 
			
		||||
| 
						 | 
				
			
			@ -7536,8 +7558,9 @@ struct {
 | 
			
		|||
	{"EMERALD6",EMERALD6},
 | 
			
		||||
	{"EMERALD7",EMERALD7},
 | 
			
		||||
 | 
			
		||||
	// SKINCOLOR_ doesn't include this..!
 | 
			
		||||
	// SKINCOLOR_ doesn't include these..!
 | 
			
		||||
	{"MAXSKINCOLORS",MAXSKINCOLORS},
 | 
			
		||||
	{"MAXTRANSLATIONS",MAXTRANSLATIONS},
 | 
			
		||||
 | 
			
		||||
	// Precipitation
 | 
			
		||||
	{"PRECIP_NONE",PRECIP_NONE},
 | 
			
		||||
| 
						 | 
				
			
			@ -8158,7 +8181,7 @@ static fixed_t find_const(const char **rword)
 | 
			
		|||
	}
 | 
			
		||||
	else if (fastncmp("SKINCOLOR_",word,10)) {
 | 
			
		||||
		char *p = word+10;
 | 
			
		||||
		for (i = 0; i < MAXSKINCOLORS; i++)
 | 
			
		||||
		for (i = 0; i < MAXTRANSLATIONS; i++)
 | 
			
		||||
			if (fastcmp(p, COLOR_ENUMS[i])) {
 | 
			
		||||
				free(word);
 | 
			
		||||
				return i;
 | 
			
		||||
| 
						 | 
				
			
			@ -8217,8 +8240,8 @@ void DEH_Check(void)
 | 
			
		|||
	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));
 | 
			
		||||
 | 
			
		||||
	if (dehcolors != MAXSKINCOLORS)
 | 
			
		||||
		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));
 | 
			
		||||
	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", MAXTRANSLATIONS, sizeu1(dehcolors));
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -8572,7 +8595,7 @@ static inline int lib_getenum(lua_State *L)
 | 
			
		|||
	}
 | 
			
		||||
	else if (fastncmp("SKINCOLOR_",word,10)) {
 | 
			
		||||
		p = word+10;
 | 
			
		||||
		for (i = 0; i < MAXSKINCOLORS; i++)
 | 
			
		||||
		for (i = 0; i < MAXTRANSLATIONS; i++)
 | 
			
		||||
			if (fastcmp(p, COLOR_ENUMS[i])) {
 | 
			
		||||
				lua_pushinteger(L, i);
 | 
			
		||||
				return 1;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -138,10 +138,12 @@
 | 
			
		|||
extern FILE *logstream;
 | 
			
		||||
#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 SUBVERSION 0 // more precise version number
 | 
			
		||||
#define VERSIONSTRING "Trunk"
 | 
			
		||||
#define VERSIONSTRINGW L"Trunk"
 | 
			
		||||
#else
 | 
			
		||||
#define VERSION    201 // Game version
 | 
			
		||||
#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->panim = PA_IDLE; // standing animation
 | 
			
		||||
 | 
			
		||||
	if ((netgame || multiplayer) && !p->spectator
 | 
			
		||||
	&& gametype != GT_RACE)
 | 
			
		||||
	if ((netgame || multiplayer) && !p->spectator)
 | 
			
		||||
		p->powers[pw_flashing] = flashingtics-1; // Babysitting deterrent
 | 
			
		||||
 | 
			
		||||
	if (p-players == consoleplayer)
 | 
			
		||||
| 
						 | 
				
			
			@ -4330,20 +4329,10 @@ void G_GhostTicker(void)
 | 
			
		|||
		switch(g->color)
 | 
			
		||||
		{
 | 
			
		||||
		case GHC_SUPER: // Super Sonic (P_DoSuperStuff)
 | 
			
		||||
			// Yousa yellow now!
 | 
			
		||||
			g->mo->color = SKINCOLOR_SUPER1 + (leveltime/2) % 5;
 | 
			
		||||
			if (g->mo->skin)
 | 
			
		||||
				switch (((skin_t*)g->mo->skin)-skins)
 | 
			
		||||
				{
 | 
			
		||||
				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;
 | 
			
		||||
				}
 | 
			
		||||
			if (leveltime % 9 < 5)
 | 
			
		||||
				g->mo->color = SKINCOLOR_SUPER1 + leveltime % 9;
 | 
			
		||||
			else
 | 
			
		||||
				g->mo->color = SKINCOLOR_SUPER1 + 9 - leveltime % 9;
 | 
			
		||||
			break;
 | 
			
		||||
		case GHC_INVINCIBLE: // Mario invincibility (P_CheckInvincibilityTimer)
 | 
			
		||||
			g->mo->color = (UINT8)(leveltime % MAXSKINCOLORS);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3527,6 +3527,184 @@ static boolean HWR_DoCulling(line_t *cullheight, line_t *viewcullheight, float v
 | 
			
		|||
	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
 | 
			
		||||
//                  : (monsters, bonuses, weapons, lights, ...)
 | 
			
		||||
| 
						 | 
				
			
			@ -3629,7 +3807,7 @@ static void HWR_DrawSprite(gr_vissprite_t *spr)
 | 
			
		|||
 | 
			
		||||
	// Draw shadow BEFORE sprite
 | 
			
		||||
	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.
 | 
			
		||||
#ifdef ALAM_LIGHTING
 | 
			
		||||
		&& !(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! //
 | 
			
		||||
		////////////////////
 | 
			
		||||
		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)
 | 
			
		||||
				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);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		HWR_DrawSpriteShadow(spr, gpatch, this_scale);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
noshadow:
 | 
			
		||||
 | 
			
		||||
	// This needs to be AFTER the shadows so that the regular sprites aren't drawn completely black.
 | 
			
		||||
	// sprite lighting by modulating the RGB components
 | 
			
		||||
	/// \todo coloured
 | 
			
		||||
| 
						 | 
				
			
			@ -3828,7 +3828,7 @@ noshadow:
 | 
			
		|||
	// colormap test
 | 
			
		||||
	{
 | 
			
		||||
		sector_t *sector = spr->mobj->subsector->sector;
 | 
			
		||||
		UINT8 lightlevel = sector->lightlevel;
 | 
			
		||||
		UINT8 lightlevel = 255;
 | 
			
		||||
		extracolormap_t *colormap = sector->extra_colormap;
 | 
			
		||||
 | 
			
		||||
		if (sector->numlights)
 | 
			
		||||
| 
						 | 
				
			
			@ -3839,8 +3839,6 @@ noshadow:
 | 
			
		|||
 | 
			
		||||
			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;
 | 
			
		||||
| 
						 | 
				
			
			@ -3849,27 +3847,25 @@ noshadow:
 | 
			
		|||
		{
 | 
			
		||||
			if (!(spr->mobj->frame & FF_FULLBRIGHT))
 | 
			
		||||
				lightlevel = sector->lightlevel;
 | 
			
		||||
			else
 | 
			
		||||
				lightlevel = 255;
 | 
			
		||||
 | 
			
		||||
			if (sector->extra_colormap)
 | 
			
		||||
				colormap = sector->extra_colormap;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (spr->mobj->frame & FF_FULLBRIGHT)
 | 
			
		||||
			lightlevel = 255;
 | 
			
		||||
 | 
			
		||||
		if (colormap)
 | 
			
		||||
			Surf.FlatColor.rgba = HWR_Lighting(lightlevel, colormap->rgba, colormap->fadergba, false, false);
 | 
			
		||||
		else
 | 
			
		||||
			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;
 | 
			
		||||
		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;
 | 
			
		||||
			blend = PF_Translucent;
 | 
			
		||||
| 
						 | 
				
			
			@ -4390,10 +4386,10 @@ static void HWR_DrawSprites(void)
 | 
			
		|||
#endif
 | 
			
		||||
				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);
 | 
			
		||||
				}
 | 
			
		||||
				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);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -4419,7 +4415,7 @@ static void HWR_DrawMD2S(void)
 | 
			
		|||
#endif
 | 
			
		||||
				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);
 | 
			
		||||
				}
 | 
			
		||||
				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 ((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)
 | 
			
		||||
		{
 | 
			
		||||
			if (thing->sprite == SPR_NULL || thing->flags2 & MF2_DONTDRAW)
 | 
			
		||||
				continue;
 | 
			
		||||
 | 
			
		||||
			approx_dist = P_AproxDistance(
 | 
			
		||||
				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);
 | 
			
		||||
			approx_dist = P_AproxDistance(viewx-thing->x, viewy-thing->y);
 | 
			
		||||
 | 
			
		||||
			if (approx_dist <= limit_dist)
 | 
			
		||||
				HWR_ProjectSprite(thing);
 | 
			
		||||
| 
						 | 
				
			
			@ -4495,23 +4480,12 @@ static void HWR_AddSprites(sector_t *sec)
 | 
			
		|||
	// Someone seriously wants infinite draw distance for precipitation?
 | 
			
		||||
	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)
 | 
			
		||||
		{
 | 
			
		||||
			if (precipthing->invisible)
 | 
			
		||||
			if (precipthing->precipflags & PCF_INVISIBLE)
 | 
			
		||||
				continue;
 | 
			
		||||
 | 
			
		||||
			approx_dist = P_AproxDistance(
 | 
			
		||||
				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);
 | 
			
		||||
			approx_dist = P_AproxDistance(viewx-precipthing->x, viewy-precipthing->y);
 | 
			
		||||
 | 
			
		||||
			if (approx_dist <= limit_dist)
 | 
			
		||||
				HWR_ProjectPrecipitationSprite(precipthing);
 | 
			
		||||
| 
						 | 
				
			
			@ -4521,7 +4495,7 @@ static void HWR_AddSprites(sector_t *sec)
 | 
			
		|||
	{
 | 
			
		||||
		// Draw everything in sector, no checks
 | 
			
		||||
		for (precipthing = sec->preciplist; precipthing; precipthing = precipthing->snext)
 | 
			
		||||
			if (!precipthing->invisible)
 | 
			
		||||
			if (!(precipthing->precipflags & PCF_INVISIBLE))
 | 
			
		||||
				HWR_ProjectPrecipitationSprite(precipthing);
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -4582,10 +4556,11 @@ static void HWR_ProjectSprite(mobj_t *thing)
 | 
			
		|||
 | 
			
		||||
	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]);
 | 
			
		||||
		thing->sprite = states[S_UNKNOWN].sprite;
 | 
			
		||||
		thing->frame = states[S_UNKNOWN].frame;
 | 
			
		||||
		sprdef = &sprites[thing->sprite];
 | 
			
		||||
		rot = thing->frame&FF_FRAMEMASK;
 | 
			
		||||
		thing->state->sprite = thing->sprite;
 | 
			
		||||
		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)
 | 
			
		||||
	{
 | 
			
		||||
		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++)
 | 
			
		||||
		{
 | 
			
		||||
			if (stricmp(name, sprnames[i]) == 0)
 | 
			
		||||
			{
 | 
			
		||||
				if (stricmp(name, "PLAY") == 0)
 | 
			
		||||
					continue;
 | 
			
		||||
				//if (stricmp(name, "PLAY") == 0)
 | 
			
		||||
					//continue;
 | 
			
		||||
 | 
			
		||||
				//CONS_Debug(DBG_RENDER, "  Found: %s %s %f %f\n", name, filename, scale, offset);
 | 
			
		||||
				md2_models[i].scale = scale;
 | 
			
		||||
				md2_models[i].offset = offset;
 | 
			
		||||
				md2_models[i].notfound = false;
 | 
			
		||||
				strcpy(md2_models[i].filename, filename);
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			if (i == NUMSPRITES)
 | 
			
		||||
			{
 | 
			
		||||
				CONS_Printf("MD2 for sprite %s not found\n", name);
 | 
			
		||||
				md2_models[i].notfound = true;
 | 
			
		||||
				goto md2found;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -952,15 +953,14 @@ void HWR_InitMD2(void)
 | 
			
		|||
				md2_playermodels[s].offset = offset;
 | 
			
		||||
				md2_playermodels[s].notfound = false;
 | 
			
		||||
				strcpy(md2_playermodels[s].filename, filename);
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			if (s == MAXSKINS-1)
 | 
			
		||||
			{
 | 
			
		||||
				CONS_Printf("MD2 for player skin %s not found\n", name);
 | 
			
		||||
				md2_playermodels[s].notfound = true;
 | 
			
		||||
				goto md2found;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// 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);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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].notfound = false;
 | 
			
		||||
			strcpy(md2_playermodels[skin].filename, filename);
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
		if (skin == MAXSKINS-1)
 | 
			
		||||
		{
 | 
			
		||||
			CONS_Printf("MD2 for player skin %s not found\n", name);
 | 
			
		||||
			md2_playermodels[skin].notfound = true;
 | 
			
		||||
			goto playermd2found;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	//CONS_Printf("MD2 for player skin %s not found\n", skins[skin].name);
 | 
			
		||||
	md2_playermodels[skin].notfound = true;
 | 
			
		||||
playermd2found:
 | 
			
		||||
	fclose(f);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1021,6 +1018,9 @@ void HWR_AddSpriteMD2(size_t spritenum) // For MD2s that were added after startu
 | 
			
		|||
	if (nomd2s)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	if (spritenum == SPR_PLAY) // Handled already NEWMD2: Per sprite, per-skin check
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	// Read the md2.dat file
 | 
			
		||||
	f = fopen("md2.dat", "rt");
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1034,27 +1034,19 @@ void HWR_AddSpriteMD2(size_t spritenum) // For MD2s that were added after startu
 | 
			
		|||
	// Check for any MD2s that match the names of player skins!
 | 
			
		||||
	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].offset = offset;
 | 
			
		||||
				md2_models[spritenum].notfound = false;
 | 
			
		||||
				strcpy(md2_models[spritenum].filename, filename);
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if (spritenum == NUMSPRITES-1)
 | 
			
		||||
			{
 | 
			
		||||
				CONS_Printf("MD2 for sprite %s not found\n", name);
 | 
			
		||||
				md2_models[spritenum].notfound = true;
 | 
			
		||||
			}
 | 
			
		||||
			md2_models[spritenum].scale = scale;
 | 
			
		||||
			md2_models[spritenum].offset = offset;
 | 
			
		||||
			md2_models[spritenum].notfound = false;
 | 
			
		||||
			strcpy(md2_models[spritenum].filename, filename);
 | 
			
		||||
			goto spritemd2found;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	//CONS_Printf("MD2 for sprite %s not found\n", sprnames[spritenum]);
 | 
			
		||||
	md2_models[spritenum].notfound = true;
 | 
			
		||||
spritemd2found:
 | 
			
		||||
	fclose(f);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1090,11 +1082,17 @@ void HWR_DrawMD2(gr_vissprite_t *spr)
 | 
			
		|||
	md2_t *md2;
 | 
			
		||||
	UINT8 color[4];
 | 
			
		||||
 | 
			
		||||
	if (!cv_grmd2.value)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	if (!spr->precip)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	// MD2 colormap fix
 | 
			
		||||
	// colormap test
 | 
			
		||||
	{
 | 
			
		||||
		sector_t *sector = spr->mobj->subsector->sector;
 | 
			
		||||
		UINT8 lightlevel = sector->lightlevel;
 | 
			
		||||
		UINT8 lightlevel = 255;
 | 
			
		||||
		extracolormap_t *colormap = sector->extra_colormap;
 | 
			
		||||
 | 
			
		||||
		if (sector->numlights)
 | 
			
		||||
| 
						 | 
				
			
			@ -1105,8 +1103,6 @@ void HWR_DrawMD2(gr_vissprite_t *spr)
 | 
			
		|||
 | 
			
		||||
			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;
 | 
			
		||||
| 
						 | 
				
			
			@ -1115,24 +1111,18 @@ void HWR_DrawMD2(gr_vissprite_t *spr)
 | 
			
		|||
		{
 | 
			
		||||
			if (!(spr->mobj->frame & FF_FULLBRIGHT))
 | 
			
		||||
				lightlevel = sector->lightlevel;
 | 
			
		||||
			else
 | 
			
		||||
				lightlevel = 255;
 | 
			
		||||
 | 
			
		||||
			if (sector->extra_colormap)
 | 
			
		||||
				colormap = sector->extra_colormap;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (spr->mobj->frame & FF_FULLBRIGHT)
 | 
			
		||||
			lightlevel = 255;
 | 
			
		||||
 | 
			
		||||
		if (colormap)
 | 
			
		||||
			Surf.FlatColor.rgba = HWR_Lighting(lightlevel, colormap->rgba, colormap->fadergba, false, false);
 | 
			
		||||
		else
 | 
			
		||||
			Surf.FlatColor.rgba = HWR_Lighting(lightlevel, NORMALFOG, FADEFOG, false, false);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Look at HWR_ProjetctSprite 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)
 | 
			
		||||
	// Look at HWR_ProjectSprite for more
 | 
			
		||||
	{
 | 
			
		||||
		GLPatch_t *gpatch;
 | 
			
		||||
		INT32 *buff;
 | 
			
		||||
| 
						 | 
				
			
			@ -1149,15 +1139,11 @@ void HWR_DrawMD2(gr_vissprite_t *spr)
 | 
			
		|||
			//durs = tics;
 | 
			
		||||
 | 
			
		||||
		if (spr->mobj->flags2 & MF2_SHADOW)
 | 
			
		||||
		{
 | 
			
		||||
			Surf.FlatColor.s.alpha = 0x40;
 | 
			
		||||
		}
 | 
			
		||||
		else if (spr->mobj->frame & FF_TRANSMASK)
 | 
			
		||||
			HWR_TranstableToAlpha((spr->mobj->frame & FF_TRANSMASK)>>FF_TRANSSHIFT, &Surf);
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			Surf.FlatColor.s.alpha = 0xFF;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// dont forget to enabled the depth test because we can't do this like
 | 
			
		||||
		// before: polygons models are not sorted
 | 
			
		||||
| 
						 | 
				
			
			@ -1263,8 +1249,6 @@ void HWR_DrawMD2(gr_vissprite_t *spr)
 | 
			
		|||
			p.flip = false;
 | 
			
		||||
 | 
			
		||||
		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);
 | 
			
		||||
	//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++;
 | 
			
		||||
 | 
			
		||||
	while (val != 0)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -150,8 +150,7 @@ state_t states[NUMSTATES] =
 | 
			
		|||
	{SPR_PLAY, 34, 1, {NULL}, 0, 24, S_PLAY_SIGN},         // S_PLAY_SIGN
 | 
			
		||||
 | 
			
		||||
	// 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_STND2
 | 
			
		||||
	{SPR_POSS, 0, 5, {A_Look}, 0, 0, S_POSS_STND},   // S_POSS_STND
 | 
			
		||||
	{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, 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
 | 
			
		||||
 | 
			
		||||
	// 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_STND2
 | 
			
		||||
	{SPR_SPOS, 0, 5, {A_Look}, 0, 0, S_SPOS_STND},   // S_SPOS_STND
 | 
			
		||||
	{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, 2, 1, {A_Chase}, 0, 0, S_SPOS_RUN4},   // S_SPOS_RUN3
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -663,7 +663,6 @@ typedef enum state
 | 
			
		|||
 | 
			
		||||
	// Blue Crawla
 | 
			
		||||
	S_POSS_STND,
 | 
			
		||||
	S_POSS_STND2,
 | 
			
		||||
	S_POSS_RUN1,
 | 
			
		||||
	S_POSS_RUN2,
 | 
			
		||||
	S_POSS_RUN3,
 | 
			
		||||
| 
						 | 
				
			
			@ -673,7 +672,6 @@ typedef enum state
 | 
			
		|||
 | 
			
		||||
	// Red Crawla
 | 
			
		||||
	S_SPOS_STND,
 | 
			
		||||
	S_SPOS_STND2,
 | 
			
		||||
	S_SPOS_RUN1,
 | 
			
		||||
	S_SPOS_RUN2,
 | 
			
		||||
	S_SPOS_RUN3,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -126,8 +126,6 @@ static const char *const widtht_opt[] = {
 | 
			
		|||
enum cameraf {
 | 
			
		||||
	camera_chase = 0,
 | 
			
		||||
	camera_aiming,
 | 
			
		||||
	camera_viewheight,
 | 
			
		||||
	camera_startangle,
 | 
			
		||||
	camera_x,
 | 
			
		||||
	camera_y,
 | 
			
		||||
	camera_z,
 | 
			
		||||
| 
						 | 
				
			
			@ -137,7 +135,6 @@ enum cameraf {
 | 
			
		|||
	camera_ceilingz,
 | 
			
		||||
	camera_radius,
 | 
			
		||||
	camera_height,
 | 
			
		||||
	camera_relativex,
 | 
			
		||||
	camera_momx,
 | 
			
		||||
	camera_momy,
 | 
			
		||||
	camera_momz
 | 
			
		||||
| 
						 | 
				
			
			@ -147,8 +144,6 @@ enum cameraf {
 | 
			
		|||
static const char *const camera_opt[] = {
 | 
			
		||||
	"chase",
 | 
			
		||||
	"aiming",
 | 
			
		||||
	"viewheight",
 | 
			
		||||
	"startangle",
 | 
			
		||||
	"x",
 | 
			
		||||
	"y",
 | 
			
		||||
	"z",
 | 
			
		||||
| 
						 | 
				
			
			@ -158,7 +153,6 @@ static const char *const camera_opt[] = {
 | 
			
		|||
	"ceilingz",
 | 
			
		||||
	"radius",
 | 
			
		||||
	"height",
 | 
			
		||||
	"relativex",
 | 
			
		||||
	"momx",
 | 
			
		||||
	"momy",
 | 
			
		||||
	"momz",
 | 
			
		||||
| 
						 | 
				
			
			@ -279,12 +273,6 @@ static int camera_get(lua_State *L)
 | 
			
		|||
	case camera_aiming:
 | 
			
		||||
		lua_pushinteger(L, cam->aiming);
 | 
			
		||||
		break;
 | 
			
		||||
	case camera_viewheight:
 | 
			
		||||
		lua_pushinteger(L, cam->viewheight);
 | 
			
		||||
		break;
 | 
			
		||||
	case camera_startangle:
 | 
			
		||||
		lua_pushinteger(L, cam->startangle);
 | 
			
		||||
		break;
 | 
			
		||||
	case camera_x:
 | 
			
		||||
		lua_pushinteger(L, cam->x);
 | 
			
		||||
		break;
 | 
			
		||||
| 
						 | 
				
			
			@ -312,9 +300,6 @@ static int camera_get(lua_State *L)
 | 
			
		|||
	case camera_height:
 | 
			
		||||
		lua_pushinteger(L, cam->height);
 | 
			
		||||
		break;
 | 
			
		||||
	case camera_relativex:
 | 
			
		||||
		lua_pushinteger(L, cam->relativex);
 | 
			
		||||
		break;
 | 
			
		||||
	case camera_momx:
 | 
			
		||||
		lua_pushinteger(L, cam->momx);
 | 
			
		||||
		break;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -60,7 +60,6 @@ enum subsector_e {
 | 
			
		|||
	subsector_sector,
 | 
			
		||||
	subsector_numlines,
 | 
			
		||||
	subsector_firstline,
 | 
			
		||||
	subsector_validcount
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const char *const subsector_opt[] = {
 | 
			
		||||
| 
						 | 
				
			
			@ -68,7 +67,6 @@ static const char *const subsector_opt[] = {
 | 
			
		|||
	"sector",
 | 
			
		||||
	"numlines",
 | 
			
		||||
	"firstline",
 | 
			
		||||
	"validcount",
 | 
			
		||||
	NULL};
 | 
			
		||||
 | 
			
		||||
enum line_e {
 | 
			
		||||
| 
						 | 
				
			
			@ -86,7 +84,6 @@ enum line_e {
 | 
			
		|||
	line_slopetype,
 | 
			
		||||
	line_frontsector,
 | 
			
		||||
	line_backsector,
 | 
			
		||||
	line_validcount,
 | 
			
		||||
	line_firsttag,
 | 
			
		||||
	line_nexttag,
 | 
			
		||||
	line_text,
 | 
			
		||||
| 
						 | 
				
			
			@ -108,7 +105,6 @@ static const char *const line_opt[] = {
 | 
			
		|||
	"slopetype",
 | 
			
		||||
	"frontsector",
 | 
			
		||||
	"backsector",
 | 
			
		||||
	"validcount",
 | 
			
		||||
	"firsttag",
 | 
			
		||||
	"nexttag",
 | 
			
		||||
	"text",
 | 
			
		||||
| 
						 | 
				
			
			@ -476,9 +472,6 @@ static int subsector_get(lua_State *L)
 | 
			
		|||
	case subsector_firstline:
 | 
			
		||||
		lua_pushinteger(L, subsector->firstline);
 | 
			
		||||
		return 1;
 | 
			
		||||
	case subsector_validcount:
 | 
			
		||||
		lua_pushinteger(L, subsector->validcount);
 | 
			
		||||
		return 1;
 | 
			
		||||
	}
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -564,9 +557,6 @@ static int line_get(lua_State *L)
 | 
			
		|||
	case line_backsector:
 | 
			
		||||
		LUA_PushUserdata(L, line->backsector, META_SECTOR);
 | 
			
		||||
		return 1;
 | 
			
		||||
	case line_validcount:
 | 
			
		||||
		lua_pushinteger(L, line->validcount);
 | 
			
		||||
		return 1;
 | 
			
		||||
	case line_firsttag:
 | 
			
		||||
		lua_pushinteger(L, line->firsttag);
 | 
			
		||||
		return 1;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -500,7 +500,7 @@ static int mobj_set(lua_State *L)
 | 
			
		|||
		return luaL_error(L, "mobj.skin '%s' not found!", skin);
 | 
			
		||||
	}
 | 
			
		||||
	case mobj_color:
 | 
			
		||||
		mo->color = ((UINT8)luaL_checkinteger(L, 3)) % MAXSKINCOLORS;
 | 
			
		||||
		mo->color = ((UINT8)luaL_checkinteger(L, 3)) % MAXTRANSLATIONS;
 | 
			
		||||
		break;
 | 
			
		||||
	case mobj_bnext:
 | 
			
		||||
		return NOSETPOS;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -91,6 +91,33 @@ static UINT8 cheatf_warp(void)
 | 
			
		|||
	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 = {
 | 
			
		||||
	0, cheatf_ultimate,
 | 
			
		||||
	{ 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_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
 | 
			
		||||
// ==========================================================================
 | 
			
		||||
| 
						 | 
				
			
			@ -221,6 +256,9 @@ boolean cht_Responder(event_t *ev)
 | 
			
		|||
	ret += cht_CheckCheat(&cheat_ultimate_joy, (char)ch);
 | 
			
		||||
	ret += cht_CheckCheat(&cheat_warp, (char)ch);
 | 
			
		||||
	ret += cht_CheckCheat(&cheat_warp_joy, (char)ch);
 | 
			
		||||
#ifdef DEVELOP
 | 
			
		||||
	ret += cht_CheckCheat(&cheat_devmode, (char)ch);
 | 
			
		||||
#endif
 | 
			
		||||
	return (ret != 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -363,12 +363,12 @@ boolean P_CheckMissileRange(mobj_t *actor)
 | 
			
		|||
	if (!actor->target)
 | 
			
		||||
		return false;
 | 
			
		||||
 | 
			
		||||
	if (!P_CheckSight(actor, actor->target))
 | 
			
		||||
		return false;
 | 
			
		||||
 | 
			
		||||
	if (actor->reactiontime)
 | 
			
		||||
		return false; // do not attack yet
 | 
			
		||||
 | 
			
		||||
	if (!P_CheckSight(actor, actor->target))
 | 
			
		||||
		return false;
 | 
			
		||||
 | 
			
		||||
	// 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);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -652,6 +652,9 @@ boolean P_LookForPlayers(mobj_t *actor, boolean allaround, boolean tracer, fixed
 | 
			
		|||
 | 
			
		||||
		player = &players[actor->lastlook];
 | 
			
		||||
 | 
			
		||||
		if ((netgame || multiplayer) && player->spectator)
 | 
			
		||||
			continue;
 | 
			
		||||
 | 
			
		||||
		if (player->health <= 0)
 | 
			
		||||
			continue; // dead
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -661,12 +664,6 @@ boolean P_LookForPlayers(mobj_t *actor, boolean allaround, boolean tracer, fixed
 | 
			
		|||
		if (!player->mo || P_MobjWasRemoved(player->mo))
 | 
			
		||||
			continue;
 | 
			
		||||
 | 
			
		||||
		if (!P_CheckSight(actor, player->mo))
 | 
			
		||||
			continue; // out of sight
 | 
			
		||||
 | 
			
		||||
		if ((netgame || multiplayer) && player->spectator)
 | 
			
		||||
			continue;
 | 
			
		||||
 | 
			
		||||
		if (dist > 0
 | 
			
		||||
			&& P_AproxDistance(P_AproxDistance(player->mo->x - actor->x, player->mo->y - actor->y), player->mo->z - actor->z) > dist)
 | 
			
		||||
			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)
 | 
			
		||||
			P_SetTarget(&actor->tracer, player->mo);
 | 
			
		||||
		else
 | 
			
		||||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
			&& !players[i].exiting && !((netgame || multiplayer) && players[i].spectator))
 | 
			
		||||
		{
 | 
			
		||||
#ifndef WEIGHTEDRECYCLER
 | 
			
		||||
			if (players[i].powers[pw_super])
 | 
			
		||||
				continue; // Ignore super players
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
			numplayers++;
 | 
			
		||||
			postscramble[j] = playerslist[j] = (UINT8)i;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1968,51 +1968,71 @@ void T_NoEnemiesSector(levelspecthink_t *nobaddies)
 | 
			
		|||
{
 | 
			
		||||
	size_t i;
 | 
			
		||||
	fixed_t upperbound, lowerbound;
 | 
			
		||||
	INT32 s;
 | 
			
		||||
	sector_t *checksector;
 | 
			
		||||
	sector_t *sec = NULL;
 | 
			
		||||
	sector_t *targetsec = NULL;
 | 
			
		||||
	INT32 secnum = -1;
 | 
			
		||||
	msecnode_t *node;
 | 
			
		||||
	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;
 | 
			
		||||
			lowerbound = nobaddies->sector->floorheight;
 | 
			
		||||
			if (sec->lines[i]->special < 100 || sec->lines[i]->special >= 300)
 | 
			
		||||
				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)
 | 
			
		||||
				{
 | 
			
		||||
					thing = node->m_thing;
 | 
			
		||||
 | 
			
		||||
					if ((thing->flags & (MF_ENEMY|MF_BOSS)) && thing->health > 0
 | 
			
		||||
						&& thing->z < upperbound && thing->z+thing->height > lowerbound)
 | 
			
		||||
					{
 | 
			
		||||
						exists = true;
 | 
			
		||||
						goto foundenemy;
 | 
			
		||||
					}
 | 
			
		||||
					&& thing->z < upperbound && thing->z+thing->height > lowerbound)
 | 
			
		||||
						return;
 | 
			
		||||
 | 
			
		||||
					node = node->m_snext;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (!FOFsector)
 | 
			
		||||
		{
 | 
			
		||||
			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;
 | 
			
		||||
 | 
			
		||||
				node = node->m_snext;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
foundenemy:
 | 
			
		||||
	if (exists)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	s = P_AproxDistance(nobaddies->sourceline->dx, nobaddies->sourceline->dy)>>FRACBITS;
 | 
			
		||||
	CONS_Debug(DBG_GAMELOGIC, "Running no-more-enemies exec with tag of %d\n", nobaddies->sourceline->tag);
 | 
			
		||||
 | 
			
		||||
	CONS_Debug(DBG_GAMELOGIC, "Running no-more-enemies exec with tag of %d\n", s);
 | 
			
		||||
 | 
			
		||||
	// Otherwise, run the linedef exec and terminate this thinker
 | 
			
		||||
	P_LinedefExecute((INT16)s, NULL, NULL);
 | 
			
		||||
	// No enemies found, run the linedef exec and terminate this thinker
 | 
			
		||||
	P_RunTriggerLinedef(nobaddies->sourceline, NULL, NULL);
 | 
			
		||||
	P_RemoveThinker(&nobaddies->thinker);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -273,7 +273,6 @@ boolean P_LookForPlayers(mobj_t *actor, boolean allaround, boolean tracer, fixed
 | 
			
		|||
extern boolean floatok;
 | 
			
		||||
extern fixed_t tmfloorz;
 | 
			
		||||
extern fixed_t tmceilingz;
 | 
			
		||||
extern boolean tmsprung;
 | 
			
		||||
extern mobj_t *tmfloorthing, *tmthing;
 | 
			
		||||
extern camera_t *mapcampointer;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										105
									
								
								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
 | 
			
		||||
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,
 | 
			
		||||
// so missiles don't explode against sky hack walls
 | 
			
		||||
line_t *ceilingline;
 | 
			
		||||
| 
						 | 
				
			
			@ -111,7 +108,9 @@ void P_DoSpring(mobj_t *spring, mobj_t *object)
 | 
			
		|||
	fixed_t offx, offy;
 | 
			
		||||
	fixed_t vertispeed = spring->info->mass;
 | 
			
		||||
	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.
 | 
			
		||||
	if (object->player && object->player->spectator)
 | 
			
		||||
| 
						 | 
				
			
			@ -123,6 +122,7 @@ void P_DoSpring(mobj_t *spring, mobj_t *object)
 | 
			
		|||
		return;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	object->eflags |= MFE_SPRUNG; // apply this flag asap!
 | 
			
		||||
	spring->flags &= ~(MF_SOLID|MF_SPECIAL); // De-solidify
 | 
			
		||||
 | 
			
		||||
	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.
 | 
			
		||||
		P_ResetPlayer(object->player);
 | 
			
		||||
 | 
			
		||||
		if (origvertispeed > 0)
 | 
			
		||||
		if (P_MobjFlip(object)*vertispeed > 0)
 | 
			
		||||
			P_SetPlayerMobjState(object, S_PLAY_SPRING);
 | 
			
		||||
		else if (origvertispeed < 0)
 | 
			
		||||
		else if (P_MobjFlip(object)*vertispeed < 0)
 | 
			
		||||
			P_SetPlayerMobjState(object, S_PLAY_FALL1);
 | 
			
		||||
		else // horizontal spring
 | 
			
		||||
		{
 | 
			
		||||
| 
						 | 
				
			
			@ -367,10 +367,11 @@ static boolean PIT_CheckThing(mobj_t *thing)
 | 
			
		|||
	fixed_t blockdist;
 | 
			
		||||
 | 
			
		||||
	// don't clip against self
 | 
			
		||||
	tmsprung = false;
 | 
			
		||||
	if (thing == tmthing)
 | 
			
		||||
		return true;
 | 
			
		||||
 | 
			
		||||
	// Ignore... things.
 | 
			
		||||
	if (!tmthing || !thing)
 | 
			
		||||
	if (!tmthing || !thing || P_MobjWasRemoved(thing))
 | 
			
		||||
		return true;
 | 
			
		||||
 | 
			
		||||
	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)))
 | 
			
		||||
		return true;
 | 
			
		||||
 | 
			
		||||
	if (!tmthing || !thing || thing == tmthing || P_MobjWasRemoved(thing))
 | 
			
		||||
		return true;
 | 
			
		||||
 | 
			
		||||
	// Don't collide with your buddies while NiGHTS-flying.
 | 
			
		||||
	if (tmthing->player && thing->player && (maptol & TOL_NIGHTS)
 | 
			
		||||
		&& ((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))
 | 
			
		||||
		{
 | 
			
		||||
			P_DoSpring(thing, tmthing);
 | 
			
		||||
			tmsprung = true;
 | 
			
		||||
			return true;
 | 
			
		||||
		}
 | 
			
		||||
		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)
 | 
			
		||||
			P_DoFanAndGasJet(thing, tmthing);
 | 
			
		||||
 | 
			
		||||
		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))))
 | 
			
		||||
		else if (thing->flags & MF_SPRING)
 | 
			
		||||
		{
 | 
			
		||||
			if (thing->flags & MF_SPRING)
 | 
			
		||||
			{
 | 
			
		||||
			if ( thing->z <= tmthing->z + tmthing->height
 | 
			
		||||
			&& tmthing->z <= thing->z + thing->height)
 | 
			
		||||
				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
 | 
			
		||||
		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))
 | 
			
		||||
			;
 | 
			
		||||
		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)
 | 
			
		||||
			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?
 | 
			
		||||
		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)
 | 
			
		||||
		{
 | 
			
		||||
			if (thing->flags & MF_SPRING)
 | 
			
		||||
			{
 | 
			
		||||
				P_DoSpring(thing, tmthing);
 | 
			
		||||
				tmsprung = true;
 | 
			
		||||
			}
 | 
			
		||||
			else if (thing->flags & MF_MONITOR
 | 
			
		||||
			if (thing->flags & MF_MONITOR
 | 
			
		||||
				&& tmthing->player->pflags & (PF_JUMPED|PF_SPINNING|PF_GLIDING))
 | 
			
		||||
			{
 | 
			
		||||
				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.
 | 
			
		||||
				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,
 | 
			
		||||
	// 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)
 | 
			
		||||
| 
						 | 
				
			
			@ -1303,10 +1294,10 @@ boolean P_CheckPosition(mobj_t *thing, fixed_t x, fixed_t y)
 | 
			
		|||
	// based on their origin point, and can overlap
 | 
			
		||||
	// into adjacent blocks by up to MAXRADIUS units.
 | 
			
		||||
 | 
			
		||||
	xl = (unsigned)(tmbbox[BOXLEFT] - bmaporgx - MAXRADIUS)>>MAPBLOCKSHIFT;
 | 
			
		||||
	xh = (unsigned)(tmbbox[BOXRIGHT] - bmaporgx + MAXRADIUS)>>MAPBLOCKSHIFT;
 | 
			
		||||
	yl = (unsigned)(tmbbox[BOXBOTTOM] - bmaporgy - MAXRADIUS)>>MAPBLOCKSHIFT;
 | 
			
		||||
	yh = (unsigned)(tmbbox[BOXTOP] - bmaporgy + MAXRADIUS)>>MAPBLOCKSHIFT;
 | 
			
		||||
	xl = (tmbbox[BOXLEFT] - bmaporgx - MAXRADIUS)>>MAPBLOCKSHIFT;
 | 
			
		||||
	xh = (tmbbox[BOXRIGHT] - bmaporgx + MAXRADIUS)>>MAPBLOCKSHIFT;
 | 
			
		||||
	yl = (tmbbox[BOXBOTTOM] - bmaporgy - MAXRADIUS)>>MAPBLOCKSHIFT;
 | 
			
		||||
	yh = (tmbbox[BOXTOP] - bmaporgy + MAXRADIUS)>>MAPBLOCKSHIFT;
 | 
			
		||||
 | 
			
		||||
#ifdef POLYOBJECTS
 | 
			
		||||
	// Check polyobjects and see if tmfloorz/tmceilingz need to be altered
 | 
			
		||||
| 
						 | 
				
			
			@ -1520,10 +1511,10 @@ boolean P_CheckCameraPosition(fixed_t x, fixed_t y, camera_t *thiscam)
 | 
			
		|||
	// based on their origin point, and can overlap
 | 
			
		||||
	// into adjacent blocks by up to MAXRADIUS units.
 | 
			
		||||
 | 
			
		||||
	xl = (unsigned)(tmbbox[BOXLEFT] - bmaporgx)>>MAPBLOCKSHIFT;
 | 
			
		||||
	xh = (unsigned)(tmbbox[BOXRIGHT] - bmaporgx)>>MAPBLOCKSHIFT;
 | 
			
		||||
	yl = (unsigned)(tmbbox[BOXBOTTOM] - bmaporgy)>>MAPBLOCKSHIFT;
 | 
			
		||||
	yh = (unsigned)(tmbbox[BOXTOP] - bmaporgy)>>MAPBLOCKSHIFT;
 | 
			
		||||
	xl = (tmbbox[BOXLEFT] - bmaporgx)>>MAPBLOCKSHIFT;
 | 
			
		||||
	xh = (tmbbox[BOXRIGHT] - bmaporgx)>>MAPBLOCKSHIFT;
 | 
			
		||||
	yl = (tmbbox[BOXBOTTOM] - bmaporgy)>>MAPBLOCKSHIFT;
 | 
			
		||||
	yh = (tmbbox[BOXTOP] - bmaporgy)>>MAPBLOCKSHIFT;
 | 
			
		||||
 | 
			
		||||
#ifdef POLYOBJECTS
 | 
			
		||||
	// Check polyobjects and see if tmfloorz/tmceilingz need to be altered
 | 
			
		||||
| 
						 | 
				
			
			@ -1766,7 +1757,6 @@ boolean PIT_PushableMoved(mobj_t *thing)
 | 
			
		|||
		boolean oldfltok = floatok;
 | 
			
		||||
		fixed_t oldflrz = tmfloorz;
 | 
			
		||||
		fixed_t oldceilz = tmceilingz;
 | 
			
		||||
		boolean oldsprung = tmsprung;
 | 
			
		||||
		mobj_t *oldflrthing = tmfloorthing;
 | 
			
		||||
		mobj_t *oldthing = tmthing;
 | 
			
		||||
		line_t *oldceilline = ceilingline;
 | 
			
		||||
| 
						 | 
				
			
			@ -1779,7 +1769,6 @@ boolean PIT_PushableMoved(mobj_t *thing)
 | 
			
		|||
		floatok = oldfltok;
 | 
			
		||||
		tmfloorz = oldflrz;
 | 
			
		||||
		tmceilingz = oldceilz;
 | 
			
		||||
		tmsprung = oldsprung;
 | 
			
		||||
		tmfloorthing = oldflrthing;
 | 
			
		||||
		P_SetTarget(&tmthing, oldthing);
 | 
			
		||||
		ceilingline = oldceilline;
 | 
			
		||||
| 
						 | 
				
			
			@ -1949,10 +1938,10 @@ boolean P_TryMove(mobj_t *thing, fixed_t x, fixed_t y, boolean allowdropoff)
 | 
			
		|||
	{
 | 
			
		||||
		INT32 bx, by, xl, xh, yl, yh;
 | 
			
		||||
 | 
			
		||||
		yh = (unsigned)(thing->y + MAXRADIUS - bmaporgy)>>MAPBLOCKSHIFT;
 | 
			
		||||
		yl = (unsigned)(thing->y - MAXRADIUS - bmaporgy)>>MAPBLOCKSHIFT;
 | 
			
		||||
		xh = (unsigned)(thing->x + MAXRADIUS - bmaporgx)>>MAPBLOCKSHIFT;
 | 
			
		||||
		xl = (unsigned)(thing->x - MAXRADIUS - bmaporgx)>>MAPBLOCKSHIFT;
 | 
			
		||||
		yh = (thing->y + MAXRADIUS - bmaporgy)>>MAPBLOCKSHIFT;
 | 
			
		||||
		yl = (thing->y - MAXRADIUS - bmaporgy)>>MAPBLOCKSHIFT;
 | 
			
		||||
		xh = (thing->x + MAXRADIUS - bmaporgx)>>MAPBLOCKSHIFT;
 | 
			
		||||
		xl = (thing->x - MAXRADIUS - bmaporgx)>>MAPBLOCKSHIFT;
 | 
			
		||||
 | 
			
		||||
		stand = thing;
 | 
			
		||||
		standx = x;
 | 
			
		||||
| 
						 | 
				
			
			@ -3035,10 +3024,10 @@ void P_RadiusAttack(mobj_t *spot, mobj_t *source, fixed_t damagedist)
 | 
			
		|||
	fixed_t dist;
 | 
			
		||||
 | 
			
		||||
	dist = FixedMul(damagedist, spot->scale) + MAXRADIUS;
 | 
			
		||||
	yh = (unsigned)(spot->y + dist - bmaporgy)>>MAPBLOCKSHIFT;
 | 
			
		||||
	yl = (unsigned)(spot->y - dist - bmaporgy)>>MAPBLOCKSHIFT;
 | 
			
		||||
	xh = (unsigned)(spot->x + dist - bmaporgx)>>MAPBLOCKSHIFT;
 | 
			
		||||
	xl = (unsigned)(spot->x - dist - bmaporgx)>>MAPBLOCKSHIFT;
 | 
			
		||||
	yh = (spot->y + dist - bmaporgy)>>MAPBLOCKSHIFT;
 | 
			
		||||
	yl = (spot->y - dist - bmaporgy)>>MAPBLOCKSHIFT;
 | 
			
		||||
	xh = (spot->x + dist - bmaporgx)>>MAPBLOCKSHIFT;
 | 
			
		||||
	xl = (spot->x - dist - bmaporgx)>>MAPBLOCKSHIFT;
 | 
			
		||||
 | 
			
		||||
	bombspot = spot;
 | 
			
		||||
	bombsource = source;
 | 
			
		||||
| 
						 | 
				
			
			@ -3656,10 +3645,10 @@ void P_CreateSecNodeList(mobj_t *thing, fixed_t x, fixed_t y)
 | 
			
		|||
 | 
			
		||||
	validcount++; // used to make sure we only process a line once
 | 
			
		||||
 | 
			
		||||
	xl = (unsigned)(tmbbox[BOXLEFT] - bmaporgx)>>MAPBLOCKSHIFT;
 | 
			
		||||
	xh = (unsigned)(tmbbox[BOXRIGHT] - bmaporgx)>>MAPBLOCKSHIFT;
 | 
			
		||||
	yl = (unsigned)(tmbbox[BOXBOTTOM] - bmaporgy)>>MAPBLOCKSHIFT;
 | 
			
		||||
	yh = (unsigned)(tmbbox[BOXTOP] - bmaporgy)>>MAPBLOCKSHIFT;
 | 
			
		||||
	xl = (tmbbox[BOXLEFT] - bmaporgx)>>MAPBLOCKSHIFT;
 | 
			
		||||
	xh = (tmbbox[BOXRIGHT] - bmaporgx)>>MAPBLOCKSHIFT;
 | 
			
		||||
	yl = (tmbbox[BOXBOTTOM] - bmaporgy)>>MAPBLOCKSHIFT;
 | 
			
		||||
	yh = (tmbbox[BOXTOP] - bmaporgy)>>MAPBLOCKSHIFT;
 | 
			
		||||
 | 
			
		||||
	for (bx = xl; bx <= xh; bx++)
 | 
			
		||||
		for (by = yl; by <= yh; by++)
 | 
			
		||||
| 
						 | 
				
			
			@ -3733,10 +3722,10 @@ void P_CreatePrecipSecNodeList(precipmobj_t *thing,fixed_t x,fixed_t y)
 | 
			
		|||
 | 
			
		||||
	validcount++; // used to make sure we only process a line once
 | 
			
		||||
 | 
			
		||||
	xl = (unsigned)(preciptmbbox[BOXLEFT] - bmaporgx)>>MAPBLOCKSHIFT;
 | 
			
		||||
	xh = (unsigned)(preciptmbbox[BOXRIGHT] - bmaporgx)>>MAPBLOCKSHIFT;
 | 
			
		||||
	yl = (unsigned)(preciptmbbox[BOXBOTTOM] - bmaporgy)>>MAPBLOCKSHIFT;
 | 
			
		||||
	yh = (unsigned)(preciptmbbox[BOXTOP] - bmaporgy)>>MAPBLOCKSHIFT;
 | 
			
		||||
	xl = (preciptmbbox[BOXLEFT] - bmaporgx)>>MAPBLOCKSHIFT;
 | 
			
		||||
	xh = (preciptmbbox[BOXRIGHT] - bmaporgx)>>MAPBLOCKSHIFT;
 | 
			
		||||
	yl = (preciptmbbox[BOXBOTTOM] - bmaporgy)>>MAPBLOCKSHIFT;
 | 
			
		||||
	yh = (preciptmbbox[BOXTOP] - bmaporgy)>>MAPBLOCKSHIFT;
 | 
			
		||||
 | 
			
		||||
	for (bx = xl; bx <= xh; bx++)
 | 
			
		||||
		for (by = yl; by <= yh; by++)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -814,8 +814,8 @@ void P_SetThingPosition(mobj_t *thing)
 | 
			
		|||
	if (!(thing->flags & MF_NOBLOCKMAP))
 | 
			
		||||
	{
 | 
			
		||||
		// inert things don't need to be in blockmap
 | 
			
		||||
		const INT32 blockx = (unsigned)(thing->x - bmaporgx)>>MAPBLOCKSHIFT;
 | 
			
		||||
		const INT32 blocky = (unsigned)(thing->y - bmaporgy)>>MAPBLOCKSHIFT;
 | 
			
		||||
		const INT32 blockx = (thing->x - bmaporgx)>>MAPBLOCKSHIFT;
 | 
			
		||||
		const INT32 blocky = (thing->y - bmaporgy)>>MAPBLOCKSHIFT;
 | 
			
		||||
		if (blockx >= 0 && blockx < bmapwidth
 | 
			
		||||
			&& blocky >= 0 && blocky < bmapheight)
 | 
			
		||||
		{
 | 
			
		||||
| 
						 | 
				
			
			@ -1317,10 +1317,10 @@ boolean P_RadiusLinesCheck(fixed_t radius, fixed_t x, fixed_t y,
 | 
			
		|||
	tmbbox[BOXLEFT] = x - radius;
 | 
			
		||||
 | 
			
		||||
	// check lines
 | 
			
		||||
	xl = (unsigned)(tmbbox[BOXLEFT] - bmaporgx)>>MAPBLOCKSHIFT;
 | 
			
		||||
	xh = (unsigned)(tmbbox[BOXRIGHT] - bmaporgx)>>MAPBLOCKSHIFT;
 | 
			
		||||
	yl = (unsigned)(tmbbox[BOXBOTTOM] - bmaporgy)>>MAPBLOCKSHIFT;
 | 
			
		||||
	yh = (unsigned)(tmbbox[BOXTOP] - bmaporgy)>>MAPBLOCKSHIFT;
 | 
			
		||||
	xl = (tmbbox[BOXLEFT] - bmaporgx)>>MAPBLOCKSHIFT;
 | 
			
		||||
	xh = (tmbbox[BOXRIGHT] - bmaporgx)>>MAPBLOCKSHIFT;
 | 
			
		||||
	yl = (tmbbox[BOXBOTTOM] - bmaporgy)>>MAPBLOCKSHIFT;
 | 
			
		||||
	yh = (tmbbox[BOXTOP] - bmaporgy)>>MAPBLOCKSHIFT;
 | 
			
		||||
 | 
			
		||||
	for (bx = xl; bx <= xh; bx++)
 | 
			
		||||
		for (by = yl; by <= yh; by++)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1154,7 +1154,7 @@ void P_XYMovement(mobj_t *mo)
 | 
			
		|||
	if (CheckForBustableBlocks && mo->flags & MF_PUSHABLE)
 | 
			
		||||
		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
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -5448,7 +5448,7 @@ void P_MobjThinker(mobj_t *mobj)
 | 
			
		|||
	if (mobj->tracer && P_MobjWasRemoved(mobj->tracer))
 | 
			
		||||
		P_SetTarget(&mobj->tracer, NULL);
 | 
			
		||||
 | 
			
		||||
	mobj->flags2 &= ~MF2_PUSHED;
 | 
			
		||||
	mobj->eflags &= ~(MFE_PUSHED|MFE_SPRUNG);
 | 
			
		||||
 | 
			
		||||
	// 970 allows ANY mobj to trigger a linedef exec
 | 
			
		||||
	if (mobj->subsector && GETSECSPECIAL(mobj->subsector->sector->special, 2) == 8)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										43
									
								
								src/p_mobj.h
									
										
									
									
									
								
							
							
						
						| 
						 | 
				
			
			@ -175,24 +175,23 @@ typedef enum
 | 
			
		|||
	MF2_EXPLOSION      = 1<<7,  // Thrown ring has explosive 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_PUSHED         = 1<<10, // Mobj was already pushed this tic
 | 
			
		||||
	MF2_SLIDEPUSH      = 1<<11, // MF_PUSHABLE that pushes continuously.
 | 
			
		||||
	MF2_CLASSICPUSH    = 1<<12, // Drops straight down when object has negative Z.
 | 
			
		||||
	MF2_STANDONME      = 1<<13, // While not pushable, stand on me anyway.
 | 
			
		||||
	MF2_INFLOAT        = 1<<14, // Floating to a height for a move, don't auto float to target's height.
 | 
			
		||||
	MF2_DEBRIS         = 1<<15, // Splash ring from explosion ring
 | 
			
		||||
	MF2_NIGHTSPULL     = 1<<16, // Attracted from a paraloop
 | 
			
		||||
	MF2_JUSTATTACKED   = 1<<17, // can be pushed by other moving mobjs
 | 
			
		||||
	MF2_FIRING         = 1<<18, // turret fire
 | 
			
		||||
	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<<20, // Fuzzy draw, makes targeting harder.
 | 
			
		||||
	MF2_STRONGBOX      = 1<<21, // Flag used for "strong" random monitors.
 | 
			
		||||
	MF2_OBJECTFLIP     = 1<<22, // Flag for objects that always have flipped gravity.
 | 
			
		||||
	MF2_SKULLFLY       = 1<<23, // Special handling: skull in flight.
 | 
			
		||||
	MF2_FRET           = 1<<24, // Flashing from a previous hit
 | 
			
		||||
	MF2_BOSSNOTRAP     = 1<<25, // No Egg Trap after boss
 | 
			
		||||
	MF2_BOSSFLEE       = 1<<26, // Boss is fleeing!
 | 
			
		||||
	MF2_BOSSDEAD       = 1<<27, // Boss is dead! (Not necessarily fleeing, if a fleeing point doesn't exist.)
 | 
			
		||||
	MF2_SLIDEPUSH      = 1<<10, // MF_PUSHABLE that pushes continuously.
 | 
			
		||||
	MF2_CLASSICPUSH    = 1<<11, // Drops straight down when object has negative Z.
 | 
			
		||||
	MF2_STANDONME      = 1<<12, // 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_DEBRIS         = 1<<14, // Splash ring from explosion ring
 | 
			
		||||
	MF2_NIGHTSPULL     = 1<<15, // Attracted from a paraloop
 | 
			
		||||
	MF2_JUSTATTACKED   = 1<<16, // can be pushed by other moving mobjs
 | 
			
		||||
	MF2_FIRING         = 1<<17, // 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_SHADOW         = 1<<19, // Fuzzy draw, makes targeting harder.
 | 
			
		||||
	MF2_STRONGBOX      = 1<<20, // Flag used for "strong" random monitors.
 | 
			
		||||
	MF2_OBJECTFLIP     = 1<<21, // Flag for objects that always have flipped gravity.
 | 
			
		||||
	MF2_SKULLFLY       = 1<<22, // Special handling: skull in flight.
 | 
			
		||||
	MF2_FRET           = 1<<23, // Flashing from a previous hit
 | 
			
		||||
	MF2_BOSSNOTRAP     = 1<<24, // No Egg Trap after boss
 | 
			
		||||
	MF2_BOSSFLEE       = 1<<25, // Boss is fleeing!
 | 
			
		||||
	MF2_BOSSDEAD       = 1<<26, // Boss is dead! (Not necessarily fleeing, if a fleeing point doesn't exist.)
 | 
			
		||||
	// free: to and including 1<<31
 | 
			
		||||
} mobjflag2_t;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -232,7 +231,11 @@ typedef enum
 | 
			
		|||
	MFE_VERTICALFLIP      = 1<<5,
 | 
			
		||||
	// Goo water
 | 
			
		||||
	MFE_GOOWATER          = 1<<6,
 | 
			
		||||
	// free: to and including 1<<7
 | 
			
		||||
	// Mobj was already pushed this tic
 | 
			
		||||
	MFE_PUSHED            = 1<<7,
 | 
			
		||||
	// Mobj was already sprung this tic
 | 
			
		||||
	MFE_SPRUNG            = 1<<8,
 | 
			
		||||
	// free: to and including 1<<15
 | 
			
		||||
} mobjeflag_t;
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
| 
						 | 
				
			
			@ -286,7 +289,7 @@ typedef struct mobj_s
 | 
			
		|||
	state_t *state;
 | 
			
		||||
	UINT32 flags; // flags from mobjinfo tables
 | 
			
		||||
	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)
 | 
			
		||||
	// Player and mobj sprites in multiplayer modes are modified
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -851,10 +851,10 @@ static void Polyobj_linkToBlockmap(polyobj_t *po)
 | 
			
		|||
		M_AddToBox(blockbox, po->vertices[i]->x, po->vertices[i]->y);
 | 
			
		||||
 | 
			
		||||
	// adjust bounding box relative to blockmap
 | 
			
		||||
	blockbox[BOXRIGHT]  = (unsigned)(blockbox[BOXRIGHT]  - bmaporgx) >> MAPBLOCKSHIFT;
 | 
			
		||||
	blockbox[BOXLEFT]   = (unsigned)(blockbox[BOXLEFT]   - bmaporgx) >> MAPBLOCKSHIFT;
 | 
			
		||||
	blockbox[BOXTOP]    = (unsigned)(blockbox[BOXTOP]    - bmaporgy) >> MAPBLOCKSHIFT;
 | 
			
		||||
	blockbox[BOXBOTTOM] = (unsigned)(blockbox[BOXBOTTOM] - bmaporgy) >> MAPBLOCKSHIFT;
 | 
			
		||||
	blockbox[BOXRIGHT]  = (blockbox[BOXRIGHT]  - bmaporgx) >> MAPBLOCKSHIFT;
 | 
			
		||||
	blockbox[BOXLEFT]   = (blockbox[BOXLEFT]   - bmaporgx) >> MAPBLOCKSHIFT;
 | 
			
		||||
	blockbox[BOXTOP]    = (blockbox[BOXTOP]    - bmaporgy) >> MAPBLOCKSHIFT;
 | 
			
		||||
	blockbox[BOXBOTTOM] = (blockbox[BOXBOTTOM] - bmaporgy) >> MAPBLOCKSHIFT;
 | 
			
		||||
 | 
			
		||||
	// link polyobject to every block its bounding box intersects
 | 
			
		||||
	for (y = blockbox[BOXBOTTOM]; y <= blockbox[BOXTOP]; ++y)
 | 
			
		||||
| 
						 | 
				
			
			@ -1081,10 +1081,10 @@ static INT32 Polyobj_clipThings(polyobj_t *po, line_t *line)
 | 
			
		|||
		return hitflags;
 | 
			
		||||
 | 
			
		||||
	// adjust linedef bounding box to blockmap, extend by MAXRADIUS
 | 
			
		||||
	linebox[BOXLEFT]   = (unsigned)(line->bbox[BOXLEFT]   - bmaporgx - MAXRADIUS) >> MAPBLOCKSHIFT;
 | 
			
		||||
	linebox[BOXRIGHT]  = (unsigned)(line->bbox[BOXRIGHT]  - bmaporgx + MAXRADIUS) >> MAPBLOCKSHIFT;
 | 
			
		||||
	linebox[BOXBOTTOM] = (unsigned)(line->bbox[BOXBOTTOM] - bmaporgy - MAXRADIUS) >> MAPBLOCKSHIFT;
 | 
			
		||||
	linebox[BOXTOP]    = (unsigned)(line->bbox[BOXTOP]    - bmaporgy + MAXRADIUS) >> MAPBLOCKSHIFT;
 | 
			
		||||
	linebox[BOXLEFT]   = (line->bbox[BOXLEFT]   - bmaporgx - MAXRADIUS) >> MAPBLOCKSHIFT;
 | 
			
		||||
	linebox[BOXRIGHT]  = (line->bbox[BOXRIGHT]  - bmaporgx + MAXRADIUS) >> MAPBLOCKSHIFT;
 | 
			
		||||
	linebox[BOXBOTTOM] = (line->bbox[BOXBOTTOM] - bmaporgy - MAXRADIUS) >> MAPBLOCKSHIFT;
 | 
			
		||||
	linebox[BOXTOP]    = (line->bbox[BOXTOP]    - bmaporgy + MAXRADIUS) >> MAPBLOCKSHIFT;
 | 
			
		||||
 | 
			
		||||
	// check all mobj blockmap cells the line contacts
 | 
			
		||||
	for (y = linebox[BOXBOTTOM]; y <= linebox[BOXTOP]; ++y)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1174,7 +1174,7 @@ static void SaveMobjThinker(const thinker_t *th, const UINT8 type)
 | 
			
		|||
	if (diff & MD_FRAME)
 | 
			
		||||
		WRITEUINT32(save_p, mobj->frame);
 | 
			
		||||
	if (diff & MD_EFLAGS)
 | 
			
		||||
		WRITEUINT8(save_p, mobj->eflags);
 | 
			
		||||
		WRITEUINT16(save_p, mobj->eflags);
 | 
			
		||||
	if (diff & MD_PLAYER)
 | 
			
		||||
		WRITEUINT8(save_p, mobj->player-players);
 | 
			
		||||
	if (diff & MD_MOVEDIR)
 | 
			
		||||
| 
						 | 
				
			
			@ -2000,7 +2000,7 @@ static void LoadMobjThinker(actionf_p1 thinker)
 | 
			
		|||
	else
 | 
			
		||||
		mobj->frame = mobj->state->frame;
 | 
			
		||||
	if (diff & MD_EFLAGS)
 | 
			
		||||
		mobj->eflags = READUINT8(save_p);
 | 
			
		||||
		mobj->eflags = READUINT16(save_p);
 | 
			
		||||
	if (diff & MD_PLAYER)
 | 
			
		||||
	{
 | 
			
		||||
		i = READUINT8(save_p);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										27
									
								
								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 == 307  // Character ability - Once
 | 
			
		||||
	 || specialtype == 308  // Race only - Once
 | 
			
		||||
	 || specialtype == 313  // No More Enemies - Once
 | 
			
		||||
	 || specialtype == 315  // No of pushables - Once
 | 
			
		||||
	 || specialtype == 318  // Unlockable trigger - 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;
 | 
			
		||||
 | 
			
		||||
	if (exclusive)
 | 
			
		||||
		thing->flags2 |= MF2_PUSHED;
 | 
			
		||||
		thing->eflags |= MFE_PUSHED;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Processes an active scroller.
 | 
			
		||||
| 
						 | 
				
			
			@ -6630,7 +6631,7 @@ void T_Scroll(scroll_t *s)
 | 
			
		|||
					{
 | 
			
		||||
						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;
 | 
			
		||||
 | 
			
		||||
						if (!(thing->flags & MF_NOCLIP)) // Thing must be clipped
 | 
			
		||||
| 
						 | 
				
			
			@ -6650,7 +6651,7 @@ void T_Scroll(scroll_t *s)
 | 
			
		|||
				{
 | 
			
		||||
					thing = node->m_thing;
 | 
			
		||||
 | 
			
		||||
					if (thing->flags2 & MF2_PUSHED)
 | 
			
		||||
					if (thing->eflags & MFE_PUSHED)
 | 
			
		||||
						continue;
 | 
			
		||||
 | 
			
		||||
					if (!(thing->flags & MF_NOCLIP) &&
 | 
			
		||||
| 
						 | 
				
			
			@ -6689,7 +6690,7 @@ void T_Scroll(scroll_t *s)
 | 
			
		|||
					{
 | 
			
		||||
						thing = node->m_thing;
 | 
			
		||||
 | 
			
		||||
						if (thing->flags2 & MF2_PUSHED)
 | 
			
		||||
						if (thing->eflags & MFE_PUSHED)
 | 
			
		||||
							continue;
 | 
			
		||||
 | 
			
		||||
						if (!(thing->flags & MF_NOCLIP)) // Thing must be clipped
 | 
			
		||||
| 
						 | 
				
			
			@ -6709,7 +6710,7 @@ void T_Scroll(scroll_t *s)
 | 
			
		|||
				{
 | 
			
		||||
					thing = node->m_thing;
 | 
			
		||||
 | 
			
		||||
					if (thing->flags2 & MF2_PUSHED)
 | 
			
		||||
					if (thing->eflags & MFE_PUSHED)
 | 
			
		||||
						continue;
 | 
			
		||||
 | 
			
		||||
					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)
 | 
			
		||||
{
 | 
			
		||||
	if (thing->flags2 & MF2_PUSHED)
 | 
			
		||||
	if (thing->eflags & MFE_PUSHED)
 | 
			
		||||
		return false;
 | 
			
		||||
 | 
			
		||||
	if (thing->player && thing->player->pflags & PF_ROPEHANG)
 | 
			
		||||
| 
						 | 
				
			
			@ -7322,7 +7323,7 @@ static inline boolean PIT_PushThing(mobj_t *thing)
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	if (tmpusher->exclusive)
 | 
			
		||||
		thing->flags2 |= MF2_PUSHED;
 | 
			
		||||
		thing->eflags |= MFE_PUSHED;
 | 
			
		||||
 | 
			
		||||
	return true;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -7400,10 +7401,10 @@ void T_Pusher(pusher_t *p)
 | 
			
		|||
		tmbbox[BOXRIGHT]  = p->x + radius;
 | 
			
		||||
		tmbbox[BOXLEFT]   = p->x - radius;
 | 
			
		||||
 | 
			
		||||
		xl = (unsigned)(tmbbox[BOXLEFT] - bmaporgx - MAXRADIUS)>>MAPBLOCKSHIFT;
 | 
			
		||||
		xh = (unsigned)(tmbbox[BOXRIGHT] - bmaporgx + MAXRADIUS)>>MAPBLOCKSHIFT;
 | 
			
		||||
		yl = (unsigned)(tmbbox[BOXBOTTOM] - bmaporgy - MAXRADIUS)>>MAPBLOCKSHIFT;
 | 
			
		||||
		yh = (unsigned)(tmbbox[BOXTOP] - bmaporgy + MAXRADIUS)>>MAPBLOCKSHIFT;
 | 
			
		||||
		xl = (tmbbox[BOXLEFT] - bmaporgx - MAXRADIUS)>>MAPBLOCKSHIFT;
 | 
			
		||||
		xh = (tmbbox[BOXRIGHT] - bmaporgx + MAXRADIUS)>>MAPBLOCKSHIFT;
 | 
			
		||||
		yl = (tmbbox[BOXBOTTOM] - bmaporgy - MAXRADIUS)>>MAPBLOCKSHIFT;
 | 
			
		||||
		yh = (tmbbox[BOXTOP] - bmaporgy + MAXRADIUS)>>MAPBLOCKSHIFT;
 | 
			
		||||
		for (bx = xl; bx <= xh; bx++)
 | 
			
		||||
			for (by = yl; by <= yh; by++)
 | 
			
		||||
				P_BlockThingsIterator(bx,by, PIT_PushThing);
 | 
			
		||||
| 
						 | 
				
			
			@ -7429,7 +7430,7 @@ void T_Pusher(pusher_t *p)
 | 
			
		|||
			|| thing->type == MT_BIGTUMBLEWEED))
 | 
			
		||||
			continue;
 | 
			
		||||
 | 
			
		||||
		if (thing->flags2 & MF2_PUSHED)
 | 
			
		||||
		if (thing->eflags & MFE_PUSHED)
 | 
			
		||||
			continue;
 | 
			
		||||
 | 
			
		||||
		if (thing->player && thing->player->pflags & PF_ROPEHANG)
 | 
			
		||||
| 
						 | 
				
			
			@ -7599,7 +7600,7 @@ void T_Pusher(pusher_t *p)
 | 
			
		|||
			}
 | 
			
		||||
 | 
			
		||||
			if (p->exclusive)
 | 
			
		||||
				thing->flags2 |= MF2_PUSHED;
 | 
			
		||||
				thing->eflags |= MFE_PUSHED;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										59
									
								
								src/p_user.c
									
										
									
									
									
								
							
							
						
						| 
						 | 
				
			
			@ -2958,10 +2958,10 @@ static void P_DoTeeter(player_t *player)
 | 
			
		|||
	{
 | 
			
		||||
		INT32 bx, by, xl, xh, yl, yh;
 | 
			
		||||
 | 
			
		||||
		yh = (unsigned)(player->mo->y + player->mo->radius - bmaporgy)>>MAPBLOCKSHIFT;
 | 
			
		||||
		yl = (unsigned)(player->mo->y - player->mo->radius - bmaporgy)>>MAPBLOCKSHIFT;
 | 
			
		||||
		xh = (unsigned)(player->mo->x + player->mo->radius - bmaporgx)>>MAPBLOCKSHIFT;
 | 
			
		||||
		xl = (unsigned)(player->mo->x - player->mo->radius - bmaporgx)>>MAPBLOCKSHIFT;
 | 
			
		||||
		yh = (player->mo->y + player->mo->radius - bmaporgy)>>MAPBLOCKSHIFT;
 | 
			
		||||
		yl = (player->mo->y - player->mo->radius - bmaporgy)>>MAPBLOCKSHIFT;
 | 
			
		||||
		xh = (player->mo->x + player->mo->radius - bmaporgx)>>MAPBLOCKSHIFT;
 | 
			
		||||
		xl = (player->mo->x - player->mo->radius - bmaporgx)>>MAPBLOCKSHIFT;
 | 
			
		||||
 | 
			
		||||
	// Polyobjects
 | 
			
		||||
#ifdef POLYOBJECTS
 | 
			
		||||
| 
						 | 
				
			
			@ -3385,13 +3385,22 @@ static void P_DoSuperStuff(player_t *player)
 | 
			
		|||
		switch (player->skin)
 | 
			
		||||
		{
 | 
			
		||||
		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;
 | 
			
		||||
		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;
 | 
			
		||||
		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;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -7774,24 +7783,24 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall
 | 
			
		|||
	angle_t angle = 0, focusangle = 0, focusaiming = 0;
 | 
			
		||||
	fixed_t x, y, z, dist, checkdist, viewpointx, viewpointy, camspeed, camdist, camheight, pviewheight;
 | 
			
		||||
	INT32 camrotate;
 | 
			
		||||
	boolean camstill, forceon = false, cameranoclip;
 | 
			
		||||
	boolean camstill, cameranoclip;
 | 
			
		||||
	mobj_t *mo;
 | 
			
		||||
	subsector_t *newsubsec;
 | 
			
		||||
	fixed_t f1, f2;
 | 
			
		||||
 | 
			
		||||
	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)
 | 
			
		||||
		forceon = true;
 | 
			
		||||
	if (!(player->climbing || (player->pflags & PF_NIGHTSMODE) || player->playerstate == PST_DEAD))
 | 
			
		||||
	{
 | 
			
		||||
		if (player->spectator) // force cam off for spectators
 | 
			
		||||
			return true;
 | 
			
		||||
 | 
			
		||||
	if (!forceon && player->spectator) // force cam off for spectators
 | 
			
		||||
		return true;
 | 
			
		||||
		if (!cv_chasecam.value && thiscam == &camera)
 | 
			
		||||
			return true;
 | 
			
		||||
 | 
			
		||||
	if (!forceon && !cv_chasecam.value && thiscam == &camera)
 | 
			
		||||
		return true;
 | 
			
		||||
 | 
			
		||||
	if (!forceon && !cv_chasecam2.value && thiscam == &camera2)
 | 
			
		||||
		return true;
 | 
			
		||||
		if (!cv_chasecam2.value && thiscam == &camera2)
 | 
			
		||||
			return true;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!thiscam->chase && !resetcalled)
 | 
			
		||||
	{
 | 
			
		||||
| 
						 | 
				
			
			@ -8085,10 +8094,10 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall
 | 
			
		|||
		INT32 xl, xh, yl, yh, bx, by;
 | 
			
		||||
		validcount++;
 | 
			
		||||
 | 
			
		||||
		xl = (unsigned)(tmbbox[BOXLEFT] - bmaporgx)>>MAPBLOCKSHIFT;
 | 
			
		||||
		xh = (unsigned)(tmbbox[BOXRIGHT] - bmaporgx)>>MAPBLOCKSHIFT;
 | 
			
		||||
		yl = (unsigned)(tmbbox[BOXBOTTOM] - bmaporgy)>>MAPBLOCKSHIFT;
 | 
			
		||||
		yh = (unsigned)(tmbbox[BOXTOP] - bmaporgy)>>MAPBLOCKSHIFT;
 | 
			
		||||
		xl = (tmbbox[BOXLEFT] - bmaporgx)>>MAPBLOCKSHIFT;
 | 
			
		||||
		xh = (tmbbox[BOXRIGHT] - bmaporgx)>>MAPBLOCKSHIFT;
 | 
			
		||||
		yl = (tmbbox[BOXBOTTOM] - bmaporgy)>>MAPBLOCKSHIFT;
 | 
			
		||||
		yh = (tmbbox[BOXTOP] - bmaporgy)>>MAPBLOCKSHIFT;
 | 
			
		||||
 | 
			
		||||
		for (by = yl; by <= yh; by++)
 | 
			
		||||
			for (bx = xl; bx <= xh; bx++)
 | 
			
		||||
| 
						 | 
				
			
			@ -9082,7 +9091,7 @@ void P_PlayerAfterThink(player_t *player)
 | 
			
		|||
{
 | 
			
		||||
	ticcmd_t *cmd;
 | 
			
		||||
	INT32 oldweapon = player->currentweapon;
 | 
			
		||||
	camera_t *thiscam;
 | 
			
		||||
	camera_t *thiscam = NULL; // if not one of the displayed players, just don't bother
 | 
			
		||||
 | 
			
		||||
#ifdef PARANOIA
 | 
			
		||||
	if (!player->mo)
 | 
			
		||||
| 
						 | 
				
			
			@ -9096,7 +9105,7 @@ void P_PlayerAfterThink(player_t *player)
 | 
			
		|||
 | 
			
		||||
	if (splitscreen && player == &players[secondarydisplayplayer])
 | 
			
		||||
		thiscam = &camera2;
 | 
			
		||||
	else
 | 
			
		||||
	else if (player == &players[displayplayer])
 | 
			
		||||
		thiscam = &camera;
 | 
			
		||||
 | 
			
		||||
	if (player->playerstate == PST_DEAD)
 | 
			
		||||
| 
						 | 
				
			
			@ -9104,7 +9113,7 @@ void P_PlayerAfterThink(player_t *player)
 | 
			
		|||
		// camera may still move when guy is dead
 | 
			
		||||
		//if (!netgame)
 | 
			
		||||
		{
 | 
			
		||||
			if (((splitscreen && player == &players[secondarydisplayplayer]) || player == &players[displayplayer]) && thiscam->chase)
 | 
			
		||||
			if (thiscam && thiscam->chase)
 | 
			
		||||
				P_MoveChaseCamera(player, thiscam, false);
 | 
			
		||||
		}
 | 
			
		||||
		return;
 | 
			
		||||
| 
						 | 
				
			
			@ -9359,7 +9368,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
 | 
			
		||||
		{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										32
									
								
								src/r_main.c
									
										
									
									
									
								
							
							
						
						| 
						 | 
				
			
			@ -1026,34 +1026,31 @@ void R_SetupFrame(player_t *player, boolean skybox)
 | 
			
		|||
{
 | 
			
		||||
	INT32 dy = 0;
 | 
			
		||||
	camera_t *thiscam;
 | 
			
		||||
	boolean forcechase = false;
 | 
			
		||||
	boolean chasecam = false;
 | 
			
		||||
 | 
			
		||||
	if (splitscreen && player == &players[secondarydisplayplayer]
 | 
			
		||||
		&& player != &players[consoleplayer])
 | 
			
		||||
	{
 | 
			
		||||
		thiscam = &camera2;
 | 
			
		||||
		chasecam = (cv_chasecam2.value != 0);
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		thiscam = &camera;
 | 
			
		||||
		chasecam = (cv_chasecam.value != 0);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	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
 | 
			
		||||
		thiscam->chase = false;
 | 
			
		||||
	else if ((cv_chasecam.value || forcechase) && !player->spectator && thiscam == &camera && !thiscam->chase)
 | 
			
		||||
	if (chasecam && !thiscam->chase)
 | 
			
		||||
	{
 | 
			
		||||
		P_ResetCamera(player, &camera);
 | 
			
		||||
		P_ResetCamera(player, thiscam);
 | 
			
		||||
		thiscam->chase = true;
 | 
			
		||||
	}
 | 
			
		||||
	else if ((cv_chasecam2.value || forcechase) && !player->spectator && thiscam == &camera2 && !thiscam->chase)
 | 
			
		||||
	{
 | 
			
		||||
		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)
 | 
			
		||||
	else if (!chasecam)
 | 
			
		||||
		thiscam->chase = false;
 | 
			
		||||
 | 
			
		||||
	viewsky = !skybox;
 | 
			
		||||
| 
						 | 
				
			
			@ -1066,9 +1063,7 @@ void R_SetupFrame(player_t *player, boolean skybox)
 | 
			
		|||
		aimingangle = player->awayviewaiming;
 | 
			
		||||
		viewangle = viewmobj->angle;
 | 
			
		||||
	}
 | 
			
		||||
	else if (!player->spectator && (forcechase
 | 
			
		||||
		|| (cv_chasecam.value && thiscam == &camera)
 | 
			
		||||
		|| (cv_chasecam2.value && thiscam == &camera2)))
 | 
			
		||||
	else if (!player->spectator && chasecam)
 | 
			
		||||
	// use outside cam view
 | 
			
		||||
	{
 | 
			
		||||
		viewmobj = NULL;
 | 
			
		||||
| 
						 | 
				
			
			@ -1105,8 +1100,7 @@ void R_SetupFrame(player_t *player, boolean skybox)
 | 
			
		|||
 | 
			
		||||
	viewplayer = player;
 | 
			
		||||
 | 
			
		||||
	if ((forcechase || (cv_chasecam.value && thiscam == &camera) || (cv_chasecam2.value && thiscam == &camera2))
 | 
			
		||||
		&& !player->awayviewtics && !player->spectator)
 | 
			
		||||
	if (chasecam && !player->awayviewtics && !player->spectator)
 | 
			
		||||
	{
 | 
			
		||||
		viewx = thiscam->x;
 | 
			
		||||
		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 ((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)
 | 
			
		||||
		{
 | 
			
		||||
			if (thing->sprite == SPR_NULL || thing->flags2 & MF2_DONTDRAW)
 | 
			
		||||
				continue;
 | 
			
		||||
 | 
			
		||||
			approx_dist = P_AproxDistance(
 | 
			
		||||
				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);
 | 
			
		||||
			approx_dist = P_AproxDistance(viewx-thing->x, viewy-thing->y);
 | 
			
		||||
 | 
			
		||||
			if (approx_dist <= limit_dist)
 | 
			
		||||
				R_ProjectSprite(thing);
 | 
			
		||||
| 
						 | 
				
			
			@ -1579,23 +1568,12 @@ void R_AddSprites(sector_t *sec, INT32 lightlevel)
 | 
			
		|||
	// Someone seriously wants infinite draw distance for precipitation?
 | 
			
		||||
	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)
 | 
			
		||||
		{
 | 
			
		||||
			if (precipthing->precipflags & PCF_INVISIBLE)
 | 
			
		||||
				continue;
 | 
			
		||||
 | 
			
		||||
			approx_dist = P_AproxDistance(
 | 
			
		||||
				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);
 | 
			
		||||
			approx_dist = P_AproxDistance(viewx-precipthing->x, viewy-precipthing->y);
 | 
			
		||||
 | 
			
		||||
			if (approx_dist <= limit_dist)
 | 
			
		||||
				R_ProjectPrecipitationSprite(precipthing);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,80 +1,425 @@
 | 
			
		|||
/* XPM */
 | 
			
		||||
static const char * SDL_icon_xpm[] = {
 | 
			
		||||
"32 32 45 1",
 | 
			
		||||
" 	c None",
 | 
			
		||||
".	c #6B6BFF",
 | 
			
		||||
"+	c #3D00B9",
 | 
			
		||||
"@	c #4848FF",
 | 
			
		||||
"#	c #2525FF",
 | 
			
		||||
"$	c #310096",
 | 
			
		||||
"%	c #003196",
 | 
			
		||||
"&	c #003DB9",
 | 
			
		||||
"*	c #620096",
 | 
			
		||||
"=	c #6E6E6E",
 | 
			
		||||
"-	c #966200",
 | 
			
		||||
";	c #250073",
 | 
			
		||||
">	c #626262",
 | 
			
		||||
",	c #FF8F6B",
 | 
			
		||||
"'	c #FFC66B",
 | 
			
		||||
")	c #FFAB8E",
 | 
			
		||||
"!	c #000080",
 | 
			
		||||
"~	c #B6B6B6",
 | 
			
		||||
"{	c #929292",
 | 
			
		||||
"]	c #FFD48E",
 | 
			
		||||
"^	c #0000B9",
 | 
			
		||||
"/	c #565656",
 | 
			
		||||
"(	c #868686",
 | 
			
		||||
"_	c #808080",
 | 
			
		||||
":	c #C0C0C0",
 | 
			
		||||
"<	c #DADADA",
 | 
			
		||||
"[	c #F2F2F2",
 | 
			
		||||
"}	c #FFFFFF",
 | 
			
		||||
"|	c #CECECE",
 | 
			
		||||
"1	c #AAAAAA",
 | 
			
		||||
"2	c #E6E6E6",
 | 
			
		||||
"3	c #000096",
 | 
			
		||||
"4	c #AB8EFF",
 | 
			
		||||
"5	c #190050",
 | 
			
		||||
"6	c #000000",
 | 
			
		||||
"7	c #8E8EFF",
 | 
			
		||||
"8	c #3E3E3E",
 | 
			
		||||
"9	c #7A7A7A",
 | 
			
		||||
"0	c #0E0E0E",
 | 
			
		||||
"a	c #9E9E9E",
 | 
			
		||||
"b	c #001950",
 | 
			
		||||
"c	c #C2C2C2",
 | 
			
		||||
"d	c #323232",
 | 
			
		||||
"e	c #002573",
 | 
			
		||||
"f	c #A0A0A4",
 | 
			
		||||
"                                ",
 | 
			
		||||
"                                ",
 | 
			
		||||
"                                ",
 | 
			
		||||
"             .+@##@.            ",
 | 
			
		||||
"           @@.@#######@         ",
 | 
			
		||||
"         @@....#########        ",
 | 
			
		||||
" ..    .@.....@+##$%%%&&%       ",
 | 
			
		||||
" ..@# @@....@+#*=-;%%%%%        ",
 | 
			
		||||
"  ..@#@......@>,')!%%%$         ",
 | 
			
		||||
" ~..$#.........{])^#+%/         ",
 | 
			
		||||
"   +##@.........()^@@@@@_       ",
 | 
			
		||||
"  $####@........#=#######+      ",
 | 
			
		||||
"  +######....@@##^#########_    ",
 | 
			
		||||
"  +#####=:<<:+##############/   ",
 | 
			
		||||
"[<=####{<}}}}|###############=  ",
 | 
			
		||||
" }1###=2}}}}}}.###############  ",
 | 
			
		||||
" }<3#3~}}}}}}}4################ ",
 | 
			
		||||
" }<5#6:}}}}}}}7################/",
 | 
			
		||||
" }:6861}}}}}}}.########$$ 9  .@$",
 | 
			
		||||
" }:0a6~}}}}}}}@######5b         ",
 | 
			
		||||
"22cd262}}}}}}2######5b$         ",
 | 
			
		||||
"  2>1a}}}}}}}{(*###%be##        ",
 | 
			
		||||
"  860)1<[22c1)]]+##be###        ",
 | 
			
		||||
"  ~)]]]))))]]]]]=#bb####        ",
 | 
			
		||||
"   )]]]]]]]]](]]=eb$####        ",
 | 
			
		||||
"    :]]]]]]]]]'9bbb$#####       ",
 | 
			
		||||
"      ),'''''(    >db+###       ",
 | 
			
		||||
"                      =##f      ",
 | 
			
		||||
"                        {       ",
 | 
			
		||||
"                                ",
 | 
			
		||||
"                                ",
 | 
			
		||||
"                                "};
 | 
			
		||||
static char * C:\Repo\srb2\src\sdl\SDL_icon_xpm[] = {
 | 
			
		||||
"32 32 390 2",
 | 
			
		||||
"  	c None",
 | 
			
		||||
". 	c #4F4F70",
 | 
			
		||||
"+ 	c #4D4D87",
 | 
			
		||||
"@ 	c #4D4D84",
 | 
			
		||||
"# 	c #4E4E6C",
 | 
			
		||||
"$ 	c #6C6C95",
 | 
			
		||||
"% 	c #5E5EB2",
 | 
			
		||||
"& 	c #6B6BE7",
 | 
			
		||||
"* 	c #7373F9",
 | 
			
		||||
"= 	c #7C7CFF",
 | 
			
		||||
"- 	c #6F70E7",
 | 
			
		||||
"; 	c #494BB2",
 | 
			
		||||
"> 	c #4F4FA3",
 | 
			
		||||
", 	c #6464D4",
 | 
			
		||||
"' 	c #7979F5",
 | 
			
		||||
") 	c #5F5FCA",
 | 
			
		||||
"! 	c #5D5D93",
 | 
			
		||||
"~ 	c #3A3A9F",
 | 
			
		||||
"{ 	c #6060AC",
 | 
			
		||||
"] 	c #777793",
 | 
			
		||||
"^ 	c #5C5CB3",
 | 
			
		||||
"/ 	c #7373EA",
 | 
			
		||||
"( 	c #7A7AFF",
 | 
			
		||||
"_ 	c #7575FF",
 | 
			
		||||
": 	c #7979FF",
 | 
			
		||||
"< 	c #6264DD",
 | 
			
		||||
"[ 	c #47478C",
 | 
			
		||||
"} 	c #564567",
 | 
			
		||||
"| 	c #4647D0",
 | 
			
		||||
"1 	c #5C5CAE",
 | 
			
		||||
"2 	c #5E5EFF",
 | 
			
		||||
"3 	c #2929FF",
 | 
			
		||||
"4 	c #1D1DFF",
 | 
			
		||||
"5 	c #1919D1",
 | 
			
		||||
"6 	c #4F4F90",
 | 
			
		||||
"7 	c #1E1ECE",
 | 
			
		||||
"8 	c #5858FF",
 | 
			
		||||
"9 	c #6767A8",
 | 
			
		||||
"0 	c #4949A0",
 | 
			
		||||
"a 	c #7070FB",
 | 
			
		||||
"b 	c #7D7DFF",
 | 
			
		||||
"c 	c #7777FF",
 | 
			
		||||
"d 	c #7373FF",
 | 
			
		||||
"e 	c #7272FF",
 | 
			
		||||
"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.@+#+$+%+        ",
 | 
			
		||||
"    &+ +*+=+].o -+;+>+ + + + +,+'+H.o o o o o H.)+o !+~+{+      ",
 | 
			
		||||
"    ]+ +^+/+H.o.(+_+ + + + + +:+<+z.o o o o o o o 7.n H.[+}+    ",
 | 
			
		||||
"    |+ +1+2+3+4+5+6+ + + + + +7+8+H.o o f.9+f.9+f.F 0+a+b+o.c+  ",
 | 
			
		||||
"    &+ +d+e+f+g+h+i+ + + + + +j+k+].f.9+l+m+n+o+p+q+r+s+t+u+v+  ",
 | 
			
		||||
"    w+ +x+y+z+A+B+C+ + + + + +D+E+9+F+G+H+I+J+K+L+M+N+O+        ",
 | 
			
		||||
"    P+Q+R+S+T+U+V+W+ + + + +X+Y+Z+`+ @I+J+Z .@+@E.              ",
 | 
			
		||||
"    @@#@$@%@&@*@=@-@;@>@,@'@)@!@~@{@]@^@I+/@(@_@                ",
 | 
			
		||||
"      :@<@[@}@|@1@2@3@4@5@6@7@8@9@0@L+a@b@c@d@e@                ",
 | 
			
		||||
"        f@g@h@i@i@j@k@l@|@m@n@o@p@q@r@s@t@u@p v@                ",
 | 
			
		||||
"        w@x@y@z@A@B@i@C@D@E@F@G@H@I@L+J@K@L@p M@                ",
 | 
			
		||||
"            N@O@P@Q@R@S@T@U@V@W@X@Y@Z@Y@`@ #.#p +#              ",
 | 
			
		||||
"                @###$#%#&#*#=#-#;#>#,#'#)#!#~#{#]#              ",
 | 
			
		||||
"                                              ^#/#              ",
 | 
			
		||||
"                                                                ",
 | 
			
		||||
"                                                                ",
 | 
			
		||||
"                                                                ",
 | 
			
		||||
"                                                                "};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
		 Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 364 KiB  | 
| 
						 | 
				
			
			@ -1,80 +1,425 @@
 | 
			
		|||
/* XPM */
 | 
			
		||||
static const char * SDL_icon_xpm[] = {
 | 
			
		||||
"32 32 45 1",
 | 
			
		||||
" 	c None",
 | 
			
		||||
".	c #6B6BFF",
 | 
			
		||||
"+	c #3D00B9",
 | 
			
		||||
"@	c #4848FF",
 | 
			
		||||
"#	c #2525FF",
 | 
			
		||||
"$	c #310096",
 | 
			
		||||
"%	c #003196",
 | 
			
		||||
"&	c #003DB9",
 | 
			
		||||
"*	c #620096",
 | 
			
		||||
"=	c #6E6E6E",
 | 
			
		||||
"-	c #966200",
 | 
			
		||||
";	c #250073",
 | 
			
		||||
">	c #626262",
 | 
			
		||||
",	c #FF8F6B",
 | 
			
		||||
"'	c #FFC66B",
 | 
			
		||||
")	c #FFAB8E",
 | 
			
		||||
"!	c #000080",
 | 
			
		||||
"~	c #B6B6B6",
 | 
			
		||||
"{	c #929292",
 | 
			
		||||
"]	c #FFD48E",
 | 
			
		||||
"^	c #0000B9",
 | 
			
		||||
"/	c #565656",
 | 
			
		||||
"(	c #868686",
 | 
			
		||||
"_	c #808080",
 | 
			
		||||
":	c #C0C0C0",
 | 
			
		||||
"<	c #DADADA",
 | 
			
		||||
"[	c #F2F2F2",
 | 
			
		||||
"}	c #FFFFFF",
 | 
			
		||||
"|	c #CECECE",
 | 
			
		||||
"1	c #AAAAAA",
 | 
			
		||||
"2	c #E6E6E6",
 | 
			
		||||
"3	c #000096",
 | 
			
		||||
"4	c #AB8EFF",
 | 
			
		||||
"5	c #190050",
 | 
			
		||||
"6	c #000000",
 | 
			
		||||
"7	c #8E8EFF",
 | 
			
		||||
"8	c #3E3E3E",
 | 
			
		||||
"9	c #7A7A7A",
 | 
			
		||||
"0	c #0E0E0E",
 | 
			
		||||
"a	c #9E9E9E",
 | 
			
		||||
"b	c #001950",
 | 
			
		||||
"c	c #C2C2C2",
 | 
			
		||||
"d	c #323232",
 | 
			
		||||
"e	c #002573",
 | 
			
		||||
"f	c #A0A0A4",
 | 
			
		||||
"                                ",
 | 
			
		||||
"                                ",
 | 
			
		||||
"                                ",
 | 
			
		||||
"             .+@##@.            ",
 | 
			
		||||
"           @@.@#######@         ",
 | 
			
		||||
"         @@....#########        ",
 | 
			
		||||
" ..    .@.....@+##$%%%&&%       ",
 | 
			
		||||
" ..@# @@....@+#*=-;%%%%%        ",
 | 
			
		||||
"  ..@#@......@>,')!%%%$         ",
 | 
			
		||||
" ~..$#.........{])^#+%/         ",
 | 
			
		||||
"   +##@.........()^@@@@@_       ",
 | 
			
		||||
"  $####@........#=#######+      ",
 | 
			
		||||
"  +######....@@##^#########_    ",
 | 
			
		||||
"  +#####=:<<:+##############/   ",
 | 
			
		||||
"[<=####{<}}}}|###############=  ",
 | 
			
		||||
" }1###=2}}}}}}.###############  ",
 | 
			
		||||
" }<3#3~}}}}}}}4################ ",
 | 
			
		||||
" }<5#6:}}}}}}}7################/",
 | 
			
		||||
" }:6861}}}}}}}.########$$ 9  .@$",
 | 
			
		||||
" }:0a6~}}}}}}}@######5b         ",
 | 
			
		||||
"22cd262}}}}}}2######5b$         ",
 | 
			
		||||
"  2>1a}}}}}}}{(*###%be##        ",
 | 
			
		||||
"  860)1<[22c1)]]+##be###        ",
 | 
			
		||||
"  ~)]]]))))]]]]]=#bb####        ",
 | 
			
		||||
"   )]]]]]]]]](]]=eb$####        ",
 | 
			
		||||
"    :]]]]]]]]]'9bbb$#####       ",
 | 
			
		||||
"      ),'''''(    >db+###       ",
 | 
			
		||||
"                      =##f      ",
 | 
			
		||||
"                        {       ",
 | 
			
		||||
"                                ",
 | 
			
		||||
"                                ",
 | 
			
		||||
"                                "};
 | 
			
		||||
static char * C:\Repo\srb2\src\sdl\SDL_icon_xpm[] = {
 | 
			
		||||
"32 32 390 2",
 | 
			
		||||
"  	c None",
 | 
			
		||||
". 	c #4F4F70",
 | 
			
		||||
"+ 	c #4D4D87",
 | 
			
		||||
"@ 	c #4D4D84",
 | 
			
		||||
"# 	c #4E4E6C",
 | 
			
		||||
"$ 	c #6C6C95",
 | 
			
		||||
"% 	c #5E5EB2",
 | 
			
		||||
"& 	c #6B6BE7",
 | 
			
		||||
"* 	c #7373F9",
 | 
			
		||||
"= 	c #7C7CFF",
 | 
			
		||||
"- 	c #6F70E7",
 | 
			
		||||
"; 	c #494BB2",
 | 
			
		||||
"> 	c #4F4FA3",
 | 
			
		||||
", 	c #6464D4",
 | 
			
		||||
"' 	c #7979F5",
 | 
			
		||||
") 	c #5F5FCA",
 | 
			
		||||
"! 	c #5D5D93",
 | 
			
		||||
"~ 	c #3A3A9F",
 | 
			
		||||
"{ 	c #6060AC",
 | 
			
		||||
"] 	c #777793",
 | 
			
		||||
"^ 	c #5C5CB3",
 | 
			
		||||
"/ 	c #7373EA",
 | 
			
		||||
"( 	c #7A7AFF",
 | 
			
		||||
"_ 	c #7575FF",
 | 
			
		||||
": 	c #7979FF",
 | 
			
		||||
"< 	c #6264DD",
 | 
			
		||||
"[ 	c #47478C",
 | 
			
		||||
"} 	c #564567",
 | 
			
		||||
"| 	c #4647D0",
 | 
			
		||||
"1 	c #5C5CAE",
 | 
			
		||||
"2 	c #5E5EFF",
 | 
			
		||||
"3 	c #2929FF",
 | 
			
		||||
"4 	c #1D1DFF",
 | 
			
		||||
"5 	c #1919D1",
 | 
			
		||||
"6 	c #4F4F90",
 | 
			
		||||
"7 	c #1E1ECE",
 | 
			
		||||
"8 	c #5858FF",
 | 
			
		||||
"9 	c #6767A8",
 | 
			
		||||
"0 	c #4949A0",
 | 
			
		||||
"a 	c #7070FB",
 | 
			
		||||
"b 	c #7D7DFF",
 | 
			
		||||
"c 	c #7777FF",
 | 
			
		||||
"d 	c #7373FF",
 | 
			
		||||
"e 	c #7272FF",
 | 
			
		||||
"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.@+#+$+%+        ",
 | 
			
		||||
"    &+ +*+=+].o -+;+>+ + + + +,+'+H.o o o o o H.)+o !+~+{+      ",
 | 
			
		||||
"    ]+ +^+/+H.o.(+_+ + + + + +:+<+z.o o o o o o o 7.n H.[+}+    ",
 | 
			
		||||
"    |+ +1+2+3+4+5+6+ + + + + +7+8+H.o o f.9+f.9+f.F 0+a+b+o.c+  ",
 | 
			
		||||
"    &+ +d+e+f+g+h+i+ + + + + +j+k+].f.9+l+m+n+o+p+q+r+s+t+u+v+  ",
 | 
			
		||||
"    w+ +x+y+z+A+B+C+ + + + + +D+E+9+F+G+H+I+J+K+L+M+N+O+        ",
 | 
			
		||||
"    P+Q+R+S+T+U+V+W+ + + + +X+Y+Z+`+ @I+J+Z .@+@E.              ",
 | 
			
		||||
"    @@#@$@%@&@*@=@-@;@>@,@'@)@!@~@{@]@^@I+/@(@_@                ",
 | 
			
		||||
"      :@<@[@}@|@1@2@3@4@5@6@7@8@9@0@L+a@b@c@d@e@                ",
 | 
			
		||||
"        f@g@h@i@i@j@k@l@|@m@n@o@p@q@r@s@t@u@p v@                ",
 | 
			
		||||
"        w@x@y@z@A@B@i@C@D@E@F@G@H@I@L+J@K@L@p M@                ",
 | 
			
		||||
"            N@O@P@Q@R@S@T@U@V@W@X@Y@Z@Y@`@ #.#p +#              ",
 | 
			
		||||
"                @###$#%#&#*#=#-#;#>#,#'#)#!#~#{#]#              ",
 | 
			
		||||
"                                              ^#/#              ",
 | 
			
		||||
"                                                                ",
 | 
			
		||||
"                                                                ",
 | 
			
		||||
"                                                                ",
 | 
			
		||||
"                                                                "};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
		 Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 364 KiB  | 
| 
						 | 
				
			
			@ -1590,7 +1590,7 @@ static void ST_drawSpecialStageHUD(void)
 | 
			
		|||
	if (sstimer)
 | 
			
		||||
	{
 | 
			
		||||
		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
 | 
			
		||||
		ST_DrawPatchFromHud(HUD_TIMEUP, timeup);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -413,6 +413,7 @@ UINT16 W_LoadWadFile(const char *filename)
 | 
			
		|||
				lump_p->disksize -= 4;
 | 
			
		||||
			}
 | 
			
		||||
			else lump_p->compressed = 0;
 | 
			
		||||
			memset(lump_p->name, 0x00, 9);
 | 
			
		||||
			strncpy(lump_p->name, fileinfo->name, 8);
 | 
			
		||||
		}
 | 
			
		||||
		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  |