From d65fc51c0600e6f9143efd7d2d803474a05f7854 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Wed, 23 Jul 2008 18:35:55 +0000 Subject: [PATCH] Update to ZDoom r1083. Not fully tested yet! - Converted most sprintf (and all wsprintf) calls to either mysnprintf or FStrings, depending on the situation. - Changed the strings in the wbstartstruct to be FStrings. - Changed myvsnprintf() to output nothing if count is greater than INT_MAX. This is so that I can use a series of mysnprintf() calls and advance the pointer for each one. Once the pointer goes beyond the end of the buffer, the count will go negative, but since it's an unsigned type it will be seen as excessively huge instead. This should not be a problem, as there's no reason for ZDoom to be using text buffers larger than 2 GB anywhere. - Ripped out the disabled bit from FGameConfigFile::MigrateOldConfig(). - Changed CalcMapName() to return an FString instead of a pointer to a static buffer. - Changed startmap in d_main.cpp into an FString. - Changed CheckWarpTransMap() to take an FString& as the first argument. - Changed d_mapname in g_level.cpp into an FString. - Changed DoSubstitution() in ct_chat.cpp to place the substitutions in an FString. - Fixed: The MAPINFO parser wrote into the string buffer to construct a map name when given a Hexen map number. This was fine with the old scanner code, but only a happy coincidence prevents it from crashing with the new code. - Added the 'B' conversion specifier to StringFormat::VWorker() for printing binary numbers. - Added CMake support for building with MinGW, MSYS, and NMake. Linux support is probably broken until I get around to booting into Linux again. Niceties provided over the existing Makefiles they're replacing: * All command-line builds can use the same build system, rather than having a separate one for MinGW and another for Linux. * Microsoft's NMake tool is supported as a target. * Progress meters. * Parallel makes work from a fresh checkout without needing to be primed first with a single-threaded make. * Porting to other architectures should be simplified, whenever that day comes. - Replaced the makewad tool with zipdir. This handles the dependency tracking itself instead of generating an external makefile to do it, since I couldn't figure out how to generate a makefile with an external tool and include it with a CMake-generated makefile. Where makewad used a master list of files to generate the package file, zipdir just zips the entire contents of one or more directories. git-svn-id: http://mancubus.net/svn/hosted/gzdoom/trunk@138 b0f79afe-0144-0410-b225-9a4edf0717df --- docs/classes.txt | 6 +- docs/rh-log.txt | 61 + gzdoom.sln | 10 +- gzdoom.vcproj | 158 +- jpeg-6b/jpeg-6b.vcproj | 135 ++ snes_spc/snes_spc.vcproj | 295 ++- src/a.nas | 2 +- src/am_map.cpp | 2 +- src/b_game.cpp | 5 +- src/c_bind.cpp | 2 +- src/c_cmds.cpp | 6 +- src/c_console.cpp | 5 +- src/c_cvars.cpp | 12 +- src/c_dispatch.cpp | 4 +- src/c_expr.cpp | 2 +- src/cmdlib.cpp | 6 +- src/cmdlib.h | 2 +- src/codepointers.h | 57 +- src/ct_chat.cpp | 55 +- src/d_dehacked.cpp | 8 +- src/d_main.cpp | 20 +- src/d_net.cpp | 10 +- src/d_netinfo.cpp | 2 +- src/dobjtype.cpp | 45 +- src/dobjtype.h | 3 +- src/doomstat.h | 2 +- src/doomtype.h | 22 +- src/f_finale.cpp | 2 +- src/g_game.cpp | 4 +- src/g_heretic/a_chicken.cpp | 256 +-- src/g_heretic/a_dsparil.cpp | 416 +--- src/g_heretic/a_hereticartifacts.cpp | 76 +- src/g_heretic/a_hereticglobal.h | 19 - src/g_heretic/a_hereticimp.cpp | 316 +-- src/g_heretic/a_hereticmisc.cpp | 387 +--- src/g_heretic/a_hereticweaps.cpp | 928 ++------ src/g_heretic/a_ironlich.cpp | 237 +-- src/g_heretic/a_knight.cpp | 178 +- src/g_heretic/a_wizard.cpp | 127 +- src/g_level.cpp | 122 +- src/g_level.h | 4 +- src/g_raven/a_minotaur.cpp | 3 +- src/g_shared/a_debris.cpp | 2 +- src/g_shared/a_morph.cpp | 11 +- src/g_shared/a_weapons.cpp | 5 +- src/g_shared/shared_hud.cpp | 32 +- src/g_shared/shared_sbar.cpp | 43 +- src/g_strife/a_alienspectres.cpp | 2 +- src/g_strife/a_coin.cpp | 2 +- src/g_strife/a_thingstoblowup.cpp | 2 +- src/g_strife/strife_sbar.cpp | 2 +- src/gameconfigfile.cpp | 141 +- src/gameconfigfile.h | 1 + src/hu_scores.cpp | 8 +- src/i_net.cpp | 2 +- src/m_alloc.cpp | 2 +- src/m_cheat.cpp | 2 +- src/m_menu.cpp | 19 +- src/m_misc.h | 2 +- src/m_options.cpp | 78 +- src/oplsynth/music_opl_mididevice.cpp | 4 +- src/p_buildmap.cpp | 10 +- src/p_conversation.cpp | 10 +- src/p_interaction.cpp | 2 +- src/p_lnspec.cpp | 2 +- src/p_user.cpp | 2 +- src/r_main.cpp | 2 +- src/r_plane.cpp | 1 + src/r_polymost.cpp | 2 +- src/r_things.cpp | 4 +- src/s_advsound.cpp | 2 +- src/s_sound.cpp | 30 +- src/sound/music_midi_timidity.cpp | 2 +- src/sound/music_timidity_mididevice.cpp | 4 +- src/st_stuff.cpp | 4 +- src/stats.h | 4 + src/svnrevision.h | 4 +- src/textures/buildtexture.cpp | 2 +- src/thingdef/thingdef.cpp | 99 +- src/thingdef/thingdef_properties.cpp | 1 + src/timidity/instrum_dls.cpp | 6 +- src/tmap.nas | 2 +- src/tmap2.nas | 2 +- src/tmap3.nas | 2 +- src/v_font.cpp | 2 +- src/v_video.cpp | 2 +- src/w_wad.cpp | 9 +- src/wi_stuff.cpp | 16 +- src/wi_stuff.h | 8 +- src/win32/eaxedit.cpp | 22 +- src/win32/fb_ddraw.cpp | 2 +- src/win32/i_crash.cpp | 49 +- src/win32/i_input.cpp | 4 +- src/win32/i_main.cpp | 25 +- src/win32/i_system.cpp | 68 - src/win32/st_start.cpp | 2 +- src/win32/win32iface.h | 10 +- src/zstrformat.cpp | 651 ++++-- src/zstring.cpp | 2 +- src/zstring.h | 1 + tools/fixrtext/fixrtext.vcproj | 4 + tools/lemon/lemon.vcproj | 5 +- tools/re2c/re2c.vcproj | 9 +- tools/updaterevision/updaterevision.vcproj | 43 +- wadsrc/Makefile | 30 - wadsrc/Makefile.mgw | 21 - wadsrc/Makefile2 | 2 - wadsrc/althudcf.txt | 4 - wadsrc/amrka0.png | Bin 234 -> 0 bytes wadsrc/animated.lmp | Bin 1450 -> 0 bytes wadsrc/animdefs.txt | 291 --- wadsrc/artibox.png | Bin 650 -> 0 bytes wadsrc/badpatch.lmp | Bin 546 -> 0 bytes wadsrc/clerface.lmp | Bin 260 -> 0 bytes wadsrc/confont.lmp | Bin 10239 -> 0 bytes wadsrc/crouch/plyca1.lmp | Bin 923 -> 0 bytes wadsrc/crouch/plyca2a8.lmp | Bin 1216 -> 0 bytes wadsrc/crouch/plyca3a7.lmp | Bin 1395 -> 0 bytes wadsrc/crouch/plyca4a6.lmp | Bin 1129 -> 0 bytes wadsrc/crouch/plyca5.lmp | Bin 802 -> 0 bytes wadsrc/crouch/plycb1.lmp | Bin 948 -> 0 bytes wadsrc/crouch/plycb2b8.lmp | Bin 1228 -> 0 bytes wadsrc/crouch/plycb3b7.lmp | Bin 1386 -> 0 bytes wadsrc/crouch/plycb4b6.lmp | Bin 1138 -> 0 bytes wadsrc/crouch/plycb5.lmp | Bin 797 -> 0 bytes wadsrc/crouch/plycc1.lmp | Bin 918 -> 0 bytes wadsrc/crouch/plycc2c8.lmp | Bin 1222 -> 0 bytes wadsrc/crouch/plycc3c7.lmp | Bin 1387 -> 0 bytes wadsrc/crouch/plycc4c6.lmp | Bin 1131 -> 0 bytes wadsrc/crouch/plycc5.lmp | Bin 799 -> 0 bytes wadsrc/crouch/plycd1.lmp | Bin 948 -> 0 bytes wadsrc/crouch/plycd2d8.lmp | Bin 1228 -> 0 bytes wadsrc/crouch/plycd3d7.lmp | Bin 1386 -> 0 bytes wadsrc/crouch/plycd4d6.lmp | Bin 1138 -> 0 bytes wadsrc/crouch/plycd5.lmp | Bin 797 -> 0 bytes wadsrc/crouch/plyce1.lmp | Bin 984 -> 0 bytes wadsrc/crouch/plyce2e8.lmp | Bin 1198 -> 0 bytes wadsrc/crouch/plyce3e7.lmp | Bin 1410 -> 0 bytes wadsrc/crouch/plyce4e6.lmp | Bin 1129 -> 0 bytes wadsrc/crouch/plyce5.lmp | Bin 847 -> 0 bytes wadsrc/crouch/plycf1.lmp | Bin 984 -> 0 bytes wadsrc/crouch/plycf2f8.lmp | Bin 1276 -> 0 bytes wadsrc/crouch/plycf3f7.lmp | Bin 1492 -> 0 bytes wadsrc/crouch/plycf4f6.lmp | Bin 1208 -> 0 bytes wadsrc/crouch/plycf5.lmp | Bin 847 -> 0 bytes wadsrc/crouch/plycg1.lmp | Bin 991 -> 0 bytes wadsrc/crouch/plycg2g8.lmp | Bin 1196 -> 0 bytes wadsrc/crouch/plycg3g7.lmp | Bin 1413 -> 0 bytes wadsrc/crouch/plycg4g6.lmp | Bin 1133 -> 0 bytes wadsrc/crouch/plycg5.lmp | Bin 829 -> 0 bytes wadsrc/crouch/plych0.lmp | Bin 1248 -> 0 bytes wadsrc/crouch/plyci0.lmp | Bin 1044 -> 0 bytes wadsrc/crouch/plycj0.lmp | Bin 954 -> 0 bytes wadsrc/crouch/plyck0.lmp | Bin 984 -> 0 bytes wadsrc/crouch/plycl0.lmp | Bin 962 -> 0 bytes wadsrc/crouch/plycm0.lmp | Bin 966 -> 0 bytes wadsrc/crouch/plycn0.lmp | Bin 971 -> 0 bytes wadsrc/crouch/plyco0.lmp | Bin 1262 -> 0 bytes wadsrc/crouch/plycp0.lmp | Bin 1481 -> 0 bytes wadsrc/crouch/plycq0.lmp | Bin 1883 -> 0 bytes wadsrc/crouch/plycr0.lmp | Bin 1794 -> 0 bytes wadsrc/crouch/plycs0.lmp | Bin 1773 -> 0 bytes wadsrc/crouch/plyct0.lmp | Bin 1605 -> 0 bytes wadsrc/crouch/plycu0.lmp | Bin 1480 -> 0 bytes wadsrc/crouch/plycv0.lmp | Bin 1384 -> 0 bytes wadsrc/crouch/plycw0.lmp | Bin 1364 -> 0 bytes wadsrc/dbigfont.lmp | Bin 6671 -> 0 bytes wadsrc/decals/bal7scr1.png | Bin 637 -> 0 bytes wadsrc/decals/bal7scr2.png | Bin 665 -> 0 bytes wadsrc/decals/bfglite1.png | Bin 1107 -> 0 bytes wadsrc/decals/bfglite2.png | Bin 1020 -> 0 bytes wadsrc/decals/bfgscrc1.png | Bin 2263 -> 0 bytes wadsrc/decals/bfgscrc2.png | Bin 2681 -> 0 bytes wadsrc/decals/blast1.png | Bin 2172 -> 0 bytes wadsrc/decals/bsmear1.png | Bin 1004 -> 0 bytes wadsrc/decals/bsmear2.png | Bin 1060 -> 0 bytes wadsrc/decals/bsplat1.png | Bin 595 -> 0 bytes wadsrc/decals/bsplat2.png | Bin 810 -> 0 bytes wadsrc/decals/bsplat3.png | Bin 346 -> 0 bytes wadsrc/decals/bsplat4.png | Bin 366 -> 0 bytes wadsrc/decals/bsplat5.png | Bin 399 -> 0 bytes wadsrc/decals/bsplat6.png | Bin 615 -> 0 bytes wadsrc/decals/bsplat7.png | Bin 229 -> 0 bytes wadsrc/decals/cbalscr1.png | Bin 636 -> 0 bytes wadsrc/decals/cbalscr2.png | Bin 665 -> 0 bytes wadsrc/decals/cbowmark.png | Bin 1680 -> 0 bytes wadsrc/decals/chip1.png | Bin 150 -> 0 bytes wadsrc/decals/chip2.png | Bin 137 -> 0 bytes wadsrc/decals/chip3.png | Bin 140 -> 0 bytes wadsrc/decals/chip4.png | Bin 132 -> 0 bytes wadsrc/decals/chip5.png | Bin 141 -> 0 bytes wadsrc/decals/decaldef.txt | 1061 ---------- wadsrc/decals/plasma1.png | Bin 1214 -> 0 bytes wadsrc/decals/plasma2.png | Bin 1446 -> 0 bytes wadsrc/decals/scorch1.png | Bin 3488 -> 0 bytes wadsrc/decorate/constants.txt | 30 - wadsrc/decorate/decorate.txt | 85 - wadsrc/decorate/doom/arachnotron.txt | 89 - wadsrc/decorate/doom/archvile.txt | 87 - wadsrc/decorate/doom/bossbrain.txt | 123 -- wadsrc/decorate/doom/bruiser.txt | 135 -- wadsrc/decorate/doom/cacodemon.txt | 86 - wadsrc/decorate/doom/cyberdemon.txt | 63 - wadsrc/decorate/doom/deadthings.txt | 124 -- wadsrc/decorate/doom/demon.txt | 75 - wadsrc/decorate/doom/doomammo.txt | 160 -- wadsrc/decorate/doom/doomarmor.txt | 66 - wadsrc/decorate/doom/doomartifacts.txt | 187 -- wadsrc/decorate/doom/doomdecorations.txt | 754 ------- wadsrc/decorate/doom/doomhealth.txt | 51 - wadsrc/decorate/doom/doomimp.txt | 91 - wadsrc/decorate/doom/doomkeys.txt | 110 - wadsrc/decorate/doom/doommisc.txt | 80 - wadsrc/decorate/doom/doomplayer.txt | 70 - wadsrc/decorate/doom/doomweapons.txt | 501 ----- wadsrc/decorate/doom/fatso.txt | 93 - wadsrc/decorate/doom/keen.txt | 42 - wadsrc/decorate/doom/lostsoul.txt | 51 - wadsrc/decorate/doom/painelemental.txt | 52 - wadsrc/decorate/doom/possessed.txt | 249 --- wadsrc/decorate/doom/revenant.txt | 117 -- wadsrc/decorate/doom/spidermaster.txt | 61 - wadsrc/decorate/doom/stealthmonsters.txt | 127 -- wadsrc/decorate/heretic/beast.txt | 114 - wadsrc/decorate/heretic/clink.txt | 48 - wadsrc/decorate/heretic/hereticammo.txt | 230 -- wadsrc/decorate/heretic/hereticarmor.txt | 39 - wadsrc/decorate/heretic/hereticartifacts.txt | 44 - .../decorate/heretic/hereticdecorations.txt | 266 --- wadsrc/decorate/heretic/hereticimp.txt | 154 -- wadsrc/decorate/heretic/heretickeys.txt | 150 -- wadsrc/decorate/heretic/hereticplayer.txt | 109 - wadsrc/decorate/heretic/mummy.txt | 142 -- wadsrc/decorate/heretic/snake.txt | 101 - wadsrc/decorate/hexen/centaur.txt | 191 -- wadsrc/decorate/hexen/clericplayer.txt | 85 - wadsrc/decorate/hexen/demons.txt | 391 ---- wadsrc/decorate/hexen/ettin.txt | 110 - wadsrc/decorate/hexen/fighterplayer.txt | 85 - wadsrc/decorate/hexen/flame.txt | 116 - wadsrc/decorate/hexen/hexenarmor.txt | 73 - wadsrc/decorate/hexen/hexendecorations.txt | 1499 ------------- wadsrc/decorate/hexen/hexenkeys.txt | 160 -- wadsrc/decorate/hexen/hexenspecialdecs.txt | 309 --- wadsrc/decorate/hexen/mageplayer.txt | 86 - wadsrc/decorate/hexen/mana.txt | 94 - wadsrc/decorate/hexen/puzzleitems.txt | 296 --- wadsrc/decorate/hexen/scriptprojectiles.txt | 135 -- wadsrc/decorate/hexen/speedboots.txt | 19 - wadsrc/decorate/nativeclasses.txt | 222 -- wadsrc/decorate/raven/artiegg.txt | 108 - wadsrc/decorate/raven/ravenambient.txt | 42 - wadsrc/decorate/raven/ravenartifacts.txt | 108 - wadsrc/decorate/raven/ravenhealth.txt | 15 - wadsrc/decorate/shared/blood.txt | 67 - wadsrc/decorate/shared/botstuff.txt | 19 - wadsrc/decorate/shared/debris.txt | 410 ---- wadsrc/decorate/shared/fountain.txt | 35 - wadsrc/decorate/shared/pickups.txt | 18 - wadsrc/decorate/shared/sharedmisc.txt | 92 - wadsrc/decorate/shared/soundsequence.txt | 63 - wadsrc/decorate/shared/splashes.txt | 237 --- wadsrc/decorate/strife/beggars.txt | 97 - wadsrc/decorate/strife/merchants.txt | 99 - wadsrc/decorate/strife/peasants.txt | 224 -- wadsrc/decorate/strife/questitems.txt | 206 -- wadsrc/decorate/strife/ratbuddy.txt | 36 - wadsrc/decorate/strife/strifeammo.txt | 231 -- wadsrc/decorate/strife/strifearmor.txt | 49 - wadsrc/decorate/strife/strifebishop.txt | 100 - wadsrc/decorate/strife/strifeitems.txt | 373 ---- wadsrc/decorate/strife/strifekeys.txt | 516 ----- wadsrc/decorate/strife/strifeplayer.txt | 76 - wadsrc/decorate/strife/strifestuff.txt | 1659 --------------- wadsrc/decorate/strife/zombie.txt | 61 - wadsrc/dehsupp.lmp | Bin 9569 -> 0 bytes wadsrc/dsempty.lmp | Bin 12 -> 0 bytes wadsrc/fiteface.lmp | Bin 296 -> 0 bytes wadsrc/fonta164.lmp | Bin 168 -> 0 bytes wadsrc/fonta165.lmp | Bin 165 -> 0 bytes wadsrc/fonta182.lmp | Bin 171 -> 0 bytes wadsrc/fonta188.lmp | Bin 173 -> 0 bytes wadsrc/fonta191.lmp | Bin 163 -> 0 bytes wadsrc/fonta60.lmp | Bin 92 -> 0 bytes wadsrc/fonta61.lmp | Bin 92 -> 0 bytes wadsrc/fonta62.lmp | Bin 28 -> 0 bytes wadsrc/fonta63.lmp | Bin 92 -> 0 bytes wadsrc/fontdefs.txt | 47 - wadsrc/gzd/decorate.gzd | 3 - wadsrc/gzd/etc.h.txt | Bin 491 -> 0 bytes wadsrc/gzd/lspec.h.txt | 172 -- wadsrc/gzd/shaders/light/light_brightmap.fp | 21 - wadsrc/gzd/shaders/light/light_doom.fp | 5 - wadsrc/gzd/shaders/light/light_eyefog.fp | 14 - wadsrc/gzd/shaders/light/light_gold.fp | 8 - wadsrc/gzd/shaders/light/light_green.fp | 8 - wadsrc/gzd/shaders/light/light_inverse.fp | 7 - wadsrc/gzd/shaders/light/light_norm.fp | 5 - wadsrc/gzd/shaders/light/light_red.fp | 9 - wadsrc/gzd/shaders/main.fp | 15 - wadsrc/gzd/shaders/main.vp | 13 - wadsrc/gzd/shaders/main_desat.fp | 8 - wadsrc/gzd/shaders/main_nofog.vp | 7 - wadsrc/gzd/shaders/tex/tex_norm.fp | 7 - wadsrc/gzd/shaders/tex/tex_warp1.fp | 16 - wadsrc/gzd/shaders/tex/tex_warp2.fp | 17 - wadsrc/gzd/textures/gllight.png | Bin 13073 -> 0 bytes wadsrc/gzd/textures/glpart.png | Bin 13343 -> 0 bytes wadsrc/gzd/textures/glpart2.png | Bin 358 -> 0 bytes wadsrc/gzd/textures/mirror.png | Bin 26089 -> 0 bytes wadsrc/gzd/things.h.txt | 224 -- wadsrc/hamoback.png | Bin 831 -> 0 bytes wadsrc/icebreak.flac | Bin 13218 -> 0 bytes wadsrc/iceca0.png | Bin 202 -> 0 bytes wadsrc/icecb0.png | Bin 193 -> 0 bytes wadsrc/icecc0.png | Bin 163 -> 0 bytes wadsrc/icecd0.png | Bin 120 -> 0 bytes wadsrc/icedeath.flac | Bin 9652 -> 0 bytes wadsrc/in_epi1.txt | 89 - wadsrc/in_epi2.txt | 46 - wadsrc/in_epi3.txt | 60 - wadsrc/in_htc1.txt | 18 - wadsrc/in_htc2.txt | 18 - wadsrc/in_htc3.txt | 18 - wadsrc/indexfont.fon | Bin 309 -> 0 bytes wadsrc/invgeml1.png | Bin 205 -> 0 bytes wadsrc/invgeml2.png | Bin 207 -> 0 bytes wadsrc/invgemr1.png | Bin 209 -> 0 bytes wadsrc/invgemr2.png | Bin 215 -> 0 bytes wadsrc/languages/english-us.txt | 1292 ------------ wadsrc/languages/french.txt | 376 ---- wadsrc/languages/italian.txt | 1016 --------- wadsrc/lockdefs.txt | 560 ----- wadsrc/mageface.lmp | Bin 330 -> 0 bytes wadsrc/mapinfo/doom1.txt | 456 ---- wadsrc/mapinfo/doom2.txt | 365 ---- wadsrc/mapinfo/doomcommon.txt | 33 - wadsrc/mapinfo/heretic.txt | 454 ---- wadsrc/mapinfo/hexen.txt | 95 - wadsrc/mapinfo/plutonia.txt | 365 ---- wadsrc/mapinfo/strife.txt | 278 --- wadsrc/mapinfo/tnt.txt | 365 ---- wadsrc/noflat.png | Bin 96 -> 0 bytes wadsrc/pista0.png | Bin 408 -> 0 bytes wadsrc/quake.flac | Bin 6453 -> 0 bytes wadsrc/railgunfire.flac | Bin 15431 -> 0 bytes wadsrc/reverbs.txt | 1861 ----------------- wadsrc/rsmka0.png | Bin 410 -> 0 bytes wadsrc/rsmkb0.png | Bin 412 -> 0 bytes wadsrc/rsmkc0.png | Bin 589 -> 0 bytes wadsrc/rsmkd0.png | Bin 409 -> 0 bytes wadsrc/rsmke0.png | Bin 261 -> 0 bytes wadsrc/sbarinfo.txt | 49 - wadsrc/sbigfont.lmp | Bin 7546 -> 0 bytes wadsrc/secret.flac | Bin 14333 -> 0 bytes wadsrc/selectbo.png | Bin 183 -> 0 bytes wadsrc/sndinfo.txt | 1278 ----------- wadsrc/sndseq.txt | 339 --- wadsrc/spaldoom.lmp | Bin 768 -> 0 bytes wadsrc/spalhtic.lmp | Bin 768 -> 0 bytes wadsrc/spark1.flac | Bin 1555 -> 0 bytes wadsrc/spark2.flac | Bin 5574 -> 0 bytes wadsrc/spark3.flac | Bin 2128 -> 0 bytes wadsrc/stcfn196.lmp | Bin 142 -> 0 bytes wadsrc/stcfn197.lmp | Bin 127 -> 0 bytes wadsrc/stcfn214.lmp | Bin 135 -> 0 bytes wadsrc/stcfn220.lmp | Bin 130 -> 0 bytes wadsrc/stcfn223.lmp | Bin 136 -> 0 bytes wadsrc/stfbany.lmp | Bin 1408 -> 0 bytes wadsrc/stkeys6.lmp | Bin 104 -> 0 bytes wadsrc/stkeys7.lmp | Bin 104 -> 0 bytes wadsrc/stkeys8.lmp | Bin 104 -> 0 bytes wadsrc/stpbany.lmp | Bin 1478 -> 0 bytes wadsrc/strfhelp.o | Bin 3124 -> 0 bytes wadsrc/teaminfo.txt | 49 - wadsrc/terrain.txt | 145 -- wadsrc/textcolors.txt | 209 -- wadsrc/tlgl.png | Bin 159 -> 0 bytes wadsrc/tnt1a0.png | Bin 13 -> 0 bytes wadsrc/unkna0.png | Bin 222 -> 0 bytes wadsrc/vga-rom.f16 | Bin 4096 -> 0 bytes wadsrc/wadsrc.vcproj | 718 +------ wadsrc/x11r6rgb.txt | 757 ------- wadsrc/xhairb1.imgz | Bin 90 -> 0 bytes wadsrc/xhairb2.png | Bin 128 -> 0 bytes wadsrc/xhairb3.imgz | Bin 116 -> 0 bytes wadsrc/xhairb4.imgz | Bin 82 -> 0 bytes wadsrc/xhairb5.imgz | Bin 50 -> 0 bytes wadsrc/xhairb6.imgz | Bin 72 -> 0 bytes wadsrc/xhairb7.imgz | Bin 33 -> 0 bytes wadsrc/xhairs.txt | 7 - wadsrc/xhairs1.imgz | Bin 49 -> 0 bytes wadsrc/xhairs2.imgz | Bin 72 -> 0 bytes wadsrc/xhairs3.imgz | Bin 49 -> 0 bytes wadsrc/xhairs4.imgz | Bin 49 -> 0 bytes wadsrc/xhairs5.imgz | Bin 33 -> 0 bytes wadsrc/xhairs6.imgz | Bin 48 -> 0 bytes wadsrc/xhairs7.imgz | Bin 25 -> 0 bytes wadsrc/xlat/base.txt | 553 ----- wadsrc/xlat/defines.i | 211 -- wadsrc/xlat/doom.txt | 30 - wadsrc/xlat/doom_base.txt | 17 - wadsrc/xlat/heretic.txt | 67 - wadsrc/xlat/heretic_base.txt | 8 - wadsrc/xlat/strife.txt | 354 ---- wadsrc/xlat/strife_base.txt | 14 - wadsrc/zdoom.lst | 385 ---- wadsrc_bm/Makefile | 30 - wadsrc_bm/Makefile.mgw | 18 - wadsrc_bm/Makefile2 | 2 - wadsrc_bm/brightmaps.vcproj | 1690 +-------------- .../{ => static}/brightmaps/doom/BON2B0.png | Bin .../{ => static}/brightmaps/doom/BON2C0.png | Bin .../{ => static}/brightmaps/doom/BON2D0.png | Bin .../{ => static}/brightmaps/doom/BOS2A6C4.png | Bin .../{ => static}/brightmaps/doom/BOS2A7C3.png | Bin .../{ => static}/brightmaps/doom/BOS2A8C2.png | Bin .../{ => static}/brightmaps/doom/BOS2B6D4.png | Bin .../{ => static}/brightmaps/doom/BOS2B7D3.png | Bin .../{ => static}/brightmaps/doom/BOS2B8D2.png | Bin .../{ => static}/brightmaps/doom/BOSSA1.png | Bin .../{ => static}/brightmaps/doom/BOSSA2A8.png | Bin .../{ => static}/brightmaps/doom/BOSSA3A7.png | Bin .../{ => static}/brightmaps/doom/BOSSA4A6.png | Bin .../{ => static}/brightmaps/doom/BOSSA5.png | Bin .../{ => static}/brightmaps/doom/BOSSB1.png | Bin .../{ => static}/brightmaps/doom/BOSSB2B8.png | Bin .../{ => static}/brightmaps/doom/BOSSB3B7.png | Bin .../{ => static}/brightmaps/doom/BOSSB4B6.png | Bin .../{ => static}/brightmaps/doom/BOSSB5.png | Bin .../{ => static}/brightmaps/doom/BOSSC1.png | Bin .../{ => static}/brightmaps/doom/BOSSC2C8.png | Bin .../{ => static}/brightmaps/doom/BOSSC3C7.png | Bin .../{ => static}/brightmaps/doom/BOSSC4C6.png | Bin .../{ => static}/brightmaps/doom/BOSSC5.png | Bin .../{ => static}/brightmaps/doom/BOSSD1.png | Bin .../{ => static}/brightmaps/doom/BOSSD2D8.png | Bin .../{ => static}/brightmaps/doom/BOSSD3D7.png | Bin .../{ => static}/brightmaps/doom/BOSSD4D6.png | Bin .../{ => static}/brightmaps/doom/BOSSD5.png | Bin .../{ => static}/brightmaps/doom/BOSSE1.png | Bin .../{ => static}/brightmaps/doom/BOSSE2.png | Bin .../{ => static}/brightmaps/doom/BOSSE3.png | Bin .../{ => static}/brightmaps/doom/BOSSE4.png | Bin .../{ => static}/brightmaps/doom/BOSSE5.png | Bin .../{ => static}/brightmaps/doom/BOSSE6.png | Bin .../{ => static}/brightmaps/doom/BOSSE7.png | Bin .../{ => static}/brightmaps/doom/BOSSE8.png | Bin .../{ => static}/brightmaps/doom/BOSSF1.png | Bin .../{ => static}/brightmaps/doom/BOSSF2.png | Bin .../{ => static}/brightmaps/doom/BOSSF3.png | Bin .../{ => static}/brightmaps/doom/BOSSF4.png | Bin .../{ => static}/brightmaps/doom/BOSSF5.png | Bin .../{ => static}/brightmaps/doom/BOSSF6.png | Bin .../{ => static}/brightmaps/doom/BOSSF7.png | Bin .../{ => static}/brightmaps/doom/BOSSF8.png | Bin .../{ => static}/brightmaps/doom/BOSSG1.png | Bin .../{ => static}/brightmaps/doom/BOSSG2.png | Bin .../{ => static}/brightmaps/doom/BOSSG3.png | Bin .../{ => static}/brightmaps/doom/BOSSG4.png | Bin .../{ => static}/brightmaps/doom/BOSSG5.png | Bin .../{ => static}/brightmaps/doom/BOSSG6.png | Bin .../{ => static}/brightmaps/doom/BOSSG7.png | Bin .../{ => static}/brightmaps/doom/BOSSG8.png | Bin .../{ => static}/brightmaps/doom/BOSSH1.png | Bin .../{ => static}/brightmaps/doom/BOSSH2.png | Bin .../{ => static}/brightmaps/doom/BOSSH3.png | Bin .../{ => static}/brightmaps/doom/BOSSH4.png | Bin .../{ => static}/brightmaps/doom/BOSSH5.png | Bin .../{ => static}/brightmaps/doom/BOSSH6.png | Bin .../{ => static}/brightmaps/doom/BOSSH7.png | Bin .../{ => static}/brightmaps/doom/BOSSH8.png | Bin .../{ => static}/brightmaps/doom/BOSSI0.png | Bin .../{ => static}/brightmaps/doom/BOSSJ0.png | Bin .../{ => static}/brightmaps/doom/BOSSK0.png | Bin .../{ => static}/brightmaps/doom/BOSSL0.png | Bin .../{ => static}/brightmaps/doom/BOSSM0.png | Bin .../{ => static}/brightmaps/doom/BSPIG1.png | Bin .../{ => static}/brightmaps/doom/BSPIG2G8.png | Bin .../{ => static}/brightmaps/doom/BSPIH1.png | Bin .../{ => static}/brightmaps/doom/BSPIH2H8.png | Bin .../{ => static}/brightmaps/doom/BSPIH3H7.png | Bin .../{ => static}/brightmaps/doom/BSPIH4H6.png | Bin .../{ => static}/brightmaps/doom/BSPIH5.png | Bin .../{ => static}/brightmaps/doom/CELLA0.png | Bin .../{ => static}/brightmaps/doom/CELPA0.png | Bin .../{ => static}/brightmaps/doom/CPOSE1.png | Bin .../{ => static}/brightmaps/doom/CPOSE2.png | Bin .../{ => static}/brightmaps/doom/CPOSE3.png | Bin .../{ => static}/brightmaps/doom/CPOSE5.png | Bin .../{ => static}/brightmaps/doom/CPOSE6.png | Bin .../{ => static}/brightmaps/doom/CPOSE7.png | Bin .../{ => static}/brightmaps/doom/CPOSE8.png | Bin .../{ => static}/brightmaps/doom/CPOSF1.png | Bin .../{ => static}/brightmaps/doom/CPOSF2.png | Bin .../{ => static}/brightmaps/doom/CPOSF3.png | Bin .../{ => static}/brightmaps/doom/CPOSF4.png | Bin .../{ => static}/brightmaps/doom/CPOSF5.png | Bin .../{ => static}/brightmaps/doom/CPOSF6.png | Bin .../{ => static}/brightmaps/doom/CPOSF7.png | Bin .../{ => static}/brightmaps/doom/CPOSF8.png | Bin .../{ => static}/brightmaps/doom/CYBRF1.png | Bin .../{ => static}/brightmaps/doom/CYBRF2.png | Bin .../{ => static}/brightmaps/doom/CYBRF3.png | Bin .../{ => static}/brightmaps/doom/CYBRF4.png | Bin .../{ => static}/brightmaps/doom/CYBRF5.png | Bin .../{ => static}/brightmaps/doom/CYBRF6.png | Bin .../{ => static}/brightmaps/doom/CYBRF7.png | Bin .../{ => static}/brightmaps/doom/CYBRF8.png | Bin .../{ => static}/brightmaps/doom/CYBRJ0.png | Bin .../{ => static}/brightmaps/doom/CYBRK0.png | Bin .../{ => static}/brightmaps/doom/CYBRL0.png | Bin .../{ => static}/brightmaps/doom/CYBRM0.png | Bin .../{ => static}/brightmaps/doom/CYBRN0.png | Bin .../{ => static}/brightmaps/doom/CYBRO0.png | Bin .../{ => static}/brightmaps/doom/FATTG1.png | Bin .../{ => static}/brightmaps/doom/FATTG2G8.png | Bin .../{ => static}/brightmaps/doom/FATTH1.png | Bin .../{ => static}/brightmaps/doom/FATTH2H8.png | Bin .../{ => static}/brightmaps/doom/FATTH3H7.png | Bin .../{ => static}/brightmaps/doom/FATTH4H6.png | Bin .../{ => static}/brightmaps/doom/FATTH5.png | Bin .../{ => static}/brightmaps/doom/FCANA0.png | Bin .../{ => static}/brightmaps/doom/FCANB0.png | Bin .../{ => static}/brightmaps/doom/FCANC0.png | Bin .../{ => static}/brightmaps/doom/HEADC1.png | Bin .../{ => static}/brightmaps/doom/HEADC2C8.png | Bin .../{ => static}/brightmaps/doom/HEADC3C7.png | Bin .../{ => static}/brightmaps/doom/HEADD1.png | Bin .../{ => static}/brightmaps/doom/HEADD2D8.png | Bin .../{ => static}/brightmaps/doom/HEADD3D7.png | Bin .../{ => static}/brightmaps/doom/PAINF1.png | Bin .../{ => static}/brightmaps/doom/PAINF2F8.png | Bin .../{ => static}/brightmaps/doom/PAINF3F7.png | Bin .../{ => static}/brightmaps/doom/PLAYF1.png | Bin .../{ => static}/brightmaps/doom/PLAYF2F8.png | Bin .../{ => static}/brightmaps/doom/PLAYF3F7.png | Bin .../{ => static}/brightmaps/doom/PLAYF4F6.png | Bin .../{ => static}/brightmaps/doom/PLAYF5.png | Bin .../{ => static}/brightmaps/doom/POSSE1.png | Bin .../{ => static}/brightmaps/doom/POSSE2E8.png | Bin .../{ => static}/brightmaps/doom/POSSE3E7.png | Bin .../{ => static}/brightmaps/doom/POSSF1.png | Bin .../{ => static}/brightmaps/doom/POSSF2F8.png | Bin .../{ => static}/brightmaps/doom/POSSF3F7.png | Bin .../{ => static}/brightmaps/doom/POSSF4F6.png | Bin .../{ => static}/brightmaps/doom/POSSF5.png | Bin .../{ => static}/brightmaps/doom/SKELJ1.png | Bin .../{ => static}/brightmaps/doom/SKELJ2.png | Bin .../{ => static}/brightmaps/doom/SKELJ3.png | Bin .../{ => static}/brightmaps/doom/SKELJ4.png | Bin .../{ => static}/brightmaps/doom/SKELJ5.png | Bin .../{ => static}/brightmaps/doom/SKELJ6.png | Bin .../{ => static}/brightmaps/doom/SKELJ7.png | Bin .../{ => static}/brightmaps/doom/SKELJ8.png | Bin .../{ => static}/brightmaps/doom/SMRTA0.png | Bin .../{ => static}/brightmaps/doom/SMRTB0.png | Bin .../{ => static}/brightmaps/doom/SMRTC0.png | Bin .../{ => static}/brightmaps/doom/SMRTD0.png | Bin .../{ => static}/brightmaps/doom/SPIDG1.png | Bin .../{ => static}/brightmaps/doom/SPIDG2G8.png | Bin .../{ => static}/brightmaps/doom/SPIDH1.png | Bin .../{ => static}/brightmaps/doom/SPIDH2H8.png | Bin .../{ => static}/brightmaps/doom/SPIDH3H7.png | Bin .../{ => static}/brightmaps/doom/SPIDL0.png | Bin .../{ => static}/brightmaps/doom/SPIDM0.png | Bin .../{ => static}/brightmaps/doom/SPIDN0.png | Bin .../{ => static}/brightmaps/doom/SPIDO0.png | Bin .../{ => static}/brightmaps/doom/SPIDP0.png | Bin .../{ => static}/brightmaps/doom/SPIDQ0.png | Bin .../{ => static}/brightmaps/doom/SPIDR0.png | Bin .../{ => static}/brightmaps/doom/SPOSE1.png | Bin .../{ => static}/brightmaps/doom/SPOSE2E8.png | Bin .../{ => static}/brightmaps/doom/SPOSE3E7.png | Bin .../{ => static}/brightmaps/doom/SPOSF1.png | Bin .../{ => static}/brightmaps/doom/SPOSF2F8.png | Bin .../{ => static}/brightmaps/doom/SPOSF3F7.png | Bin .../{ => static}/brightmaps/doom/SPOSF4F6.png | Bin .../{ => static}/brightmaps/doom/SPOSF5.png | Bin .../{ => static}/brightmaps/doom/TREDA0.png | Bin .../{ => static}/brightmaps/doom/TREDB0.png | Bin .../{ => static}/brightmaps/doom/TREDC0.png | Bin .../{ => static}/brightmaps/doom/TREDD0.png | Bin .../{ => static}/brightmaps/doom/TbluB0.png | Bin .../{ => static}/brightmaps/doom/TbluC0.png | Bin .../{ => static}/brightmaps/doom/sswvg0.png | Bin .../brightmaps/heretic/BEASI1.png | Bin .../brightmaps/heretic/BEASI2I8.png | Bin .../brightmaps/heretic/BEASI3I7.png | Bin .../brightmaps/heretic/CHDLA0.png | Bin .../brightmaps/heretic/CHDLB0.png | Bin .../brightmaps/heretic/CHDLC0.png | Bin .../brightmaps/heretic/CLNKI0.png | Bin .../brightmaps/heretic/CLNKJ0.png | Bin .../brightmaps/heretic/CLNKK0.png | Bin .../brightmaps/heretic/CLNKL0.png | Bin .../brightmaps/heretic/CLNKM0.png | Bin .../brightmaps/heretic/CLNKN0.png | Bin .../brightmaps/heretic/IMPXD1.png | Bin .../brightmaps/heretic/IMPXD2.png | Bin .../brightmaps/heretic/IMPXD3.png | Bin .../brightmaps/heretic/IMPXD4.png | Bin .../brightmaps/heretic/IMPXD5.png | Bin .../brightmaps/heretic/IMPXD6.png | Bin .../brightmaps/heretic/IMPXD7.png | Bin .../brightmaps/heretic/IMPXD8.png | Bin .../brightmaps/heretic/IMPXE1.png | Bin .../brightmaps/heretic/IMPXE2.png | Bin .../brightmaps/heretic/IMPXE3.png | Bin .../brightmaps/heretic/IMPXE4.png | Bin .../brightmaps/heretic/IMPXE5.png | Bin .../brightmaps/heretic/IMPXE6.png | Bin .../brightmaps/heretic/IMPXE7.png | Bin .../brightmaps/heretic/IMPXE8.png | Bin .../brightmaps/heretic/IMPXF1.png | Bin .../brightmaps/heretic/IMPXF2.png | Bin .../brightmaps/heretic/IMPXF3.png | Bin .../brightmaps/heretic/IMPXF4.png | Bin .../brightmaps/heretic/IMPXF5.png | Bin .../brightmaps/heretic/IMPXF6.png | Bin .../brightmaps/heretic/IMPXF7.png | Bin .../brightmaps/heretic/IMPXF8.png | Bin .../brightmaps/heretic/LICHB1.png | Bin .../brightmaps/heretic/LICHB2B8.png | Bin .../brightmaps/heretic/LICHB3B7.png | Bin .../brightmaps/heretic/LICHC0.png | Bin .../brightmaps/heretic/LICHD0.png | Bin .../brightmaps/heretic/LICHE0.png | Bin .../brightmaps/heretic/LICHF0.png | Bin .../brightmaps/heretic/LICHG0.png | Bin .../brightmaps/heretic/LICHH0.png | Bin .../brightmaps/heretic/PLAYF1.png | Bin .../brightmaps/heretic/PLAYF2F8.png | Bin .../brightmaps/heretic/PLAYF3F7.png | Bin .../brightmaps/heretic/PLAYF4F6.png | Bin .../brightmaps/heretic/SDTHA0.png | Bin .../brightmaps/heretic/SDTHB0.png | Bin .../brightmaps/heretic/SDTHC0.png | Bin .../brightmaps/heretic/SDTHD0.png | Bin .../brightmaps/heretic/SDTHE0.png | Bin .../brightmaps/heretic/SDTHF0.png | Bin .../brightmaps/heretic/SDTHG0.png | Bin .../brightmaps/heretic/SDTHH0.png | Bin .../brightmaps/heretic/SOR2R1.png | Bin .../brightmaps/heretic/SOR2R2.png | Bin .../brightmaps/heretic/SOR2R3.png | Bin .../brightmaps/heretic/SOR2R4.png | Bin .../brightmaps/heretic/SOR2R5.png | Bin .../brightmaps/heretic/SOR2R6.png | Bin .../brightmaps/heretic/SOR2R7.png | Bin .../brightmaps/heretic/SOR2R8.png | Bin .../brightmaps/heretic/SOR2S1.png | Bin .../brightmaps/heretic/SOR2S2.png | Bin .../brightmaps/heretic/SOR2S3.png | Bin .../brightmaps/heretic/SOR2S4.png | Bin .../brightmaps/heretic/SOR2S5.png | Bin .../brightmaps/heretic/SOR2S6.png | Bin .../brightmaps/heretic/SOR2S7.png | Bin .../brightmaps/heretic/SOR2S8.png | Bin .../brightmaps/heretic/SOR2T1.png | Bin .../brightmaps/heretic/SOR2T2.png | Bin .../brightmaps/heretic/SOR2T3.png | Bin .../brightmaps/heretic/SOR2T4.png | Bin .../brightmaps/heretic/SOR2T5.png | Bin .../brightmaps/heretic/SOR2T6.png | Bin .../brightmaps/heretic/SOR2T7.png | Bin .../brightmaps/heretic/SOR2T8.png | Bin .../brightmaps/heretic/VLCOE0.png | Bin .../brightmaps/heretic/WZRDC1.png | Bin .../brightmaps/heretic/WZRDC2C8.png | Bin .../brightmaps/heretic/WZRDC3C7.png | Bin .../brightmaps/heretic/WZRDC4C6.png | Bin .../brightmaps/heretic/WZRDC5.png | Bin .../brightmaps/heretic/WZRDD1.png | Bin .../brightmaps/heretic/WZRDD2D8.png | Bin .../brightmaps/heretic/WZRDD3D7.png | Bin .../brightmaps/heretic/WZRDD4D6.png | Bin .../brightmaps/heretic/WZRDD5.png | Bin .../brightmaps/heretic/WZRDF0.png | Bin .../brightmaps/heretic/WZRDG0.png | Bin .../brightmaps/heretic/WZRDH0.png | Bin .../brightmaps/heretic/WZRDI0.png | Bin .../brightmaps/heretic/WZRDJ0.png | Bin .../brightmaps/heretic/WZRDK0.png | Bin .../{ => static}/brightmaps/hexen/CDLRA0.png | Bin .../{ => static}/brightmaps/hexen/CDLRB0.png | Bin .../{ => static}/brightmaps/hexen/CDLRC0.png | Bin .../{ => static}/brightmaps/hexen/CENTF1.png | Bin .../{ => static}/brightmaps/hexen/CENTF2.png | Bin .../{ => static}/brightmaps/hexen/CENTF8.png | Bin .../{ => static}/brightmaps/hexen/ICEYG1.png | Bin .../brightmaps/hexen/ICEYG2G8.png | Bin .../brightmaps/hexen/ICEYG3G7.png | Bin .../brightmaps/hexen/ICEYG4G6.png | Bin .../{ => static}/brightmaps/hexen/ICEYG5.png | Bin .../{ => static}/brightmaps/hexen/MAGEF1.png | Bin .../{ => static}/brightmaps/hexen/MAGEF2.png | Bin .../{ => static}/brightmaps/hexen/MAGEF3.png | Bin .../{ => static}/brightmaps/hexen/MAGEF4.png | Bin .../{ => static}/brightmaps/hexen/MAGEF5.png | Bin .../{ => static}/brightmaps/hexen/MAGEF6.png | Bin .../{ => static}/brightmaps/hexen/MAGEF7.png | Bin .../{ => static}/brightmaps/hexen/MAGEF8.png | Bin .../{ => static}/brightmaps/hexen/WRTHE1.png | Bin .../brightmaps/hexen/WRTHE2E8.png | Bin .../brightmaps/hexen/WRTHE3E7.png | Bin .../brightmaps/hexen/WRTHE4E6.png | Bin .../{ => static}/brightmaps/hexen/WRTHE5.png | Bin .../{ => static}/brightmaps/hexen/WRTHF1.png | Bin .../brightmaps/hexen/WRTHF2F8.png | Bin .../brightmaps/hexen/WRTHF3F7.png | Bin .../brightmaps/hexen/WRTHF4F6.png | Bin .../{ => static}/brightmaps/hexen/WRTHF5.png | Bin .../{ => static}/brightmaps/hexen/WRTHG1.png | Bin .../brightmaps/hexen/WRTHG2G8.png | Bin .../brightmaps/hexen/WRTHG3G7.png | Bin .../brightmaps/hexen/WRTHG4G6.png | Bin .../{ => static}/brightmaps/hexen/WRTHG5.png | Bin .../{ => static}/brightmaps/strife/MLDRE1.png | Bin .../{ => static}/brightmaps/strife/MLDRE2.png | Bin .../{ => static}/brightmaps/strife/MLDRE3.png | Bin .../{ => static}/brightmaps/strife/MLDRE4.png | Bin .../{ => static}/brightmaps/strife/MLDRE5.png | Bin .../{ => static}/brightmaps/strife/MLDRE6.png | Bin .../{ => static}/brightmaps/strife/MLDRE7.png | Bin .../{ => static}/brightmaps/strife/MLDRE8.png | Bin .../{ => static}/brightmaps/strife/PGRDG1.png | Bin .../{ => static}/brightmaps/strife/PGRDG2.png | Bin .../{ => static}/brightmaps/strife/PGRDG3.png | Bin .../{ => static}/brightmaps/strife/PGRDG4.png | Bin .../{ => static}/brightmaps/strife/PGRDG5.png | Bin .../{ => static}/brightmaps/strife/PGRDG6.png | Bin .../{ => static}/brightmaps/strife/PGRDG7.png | Bin .../{ => static}/brightmaps/strife/PGRDG8.png | Bin .../{ => static}/brightmaps/strife/PGRDI0.png | Bin .../{ => static}/brightmaps/strife/PGRDJ0.png | Bin .../{ => static}/brightmaps/strife/PGRDK0.png | Bin .../{ => static}/brightmaps/strife/PGRDL0.png | Bin .../{ => static}/brightmaps/strife/PGRDM0.png | Bin .../{ => static}/brightmaps/strife/PGRDN0.png | Bin .../{ => static}/brightmaps/strife/PRGRO0.png | Bin .../{ => static}/brightmaps/strife/RBB3A0.png | Bin .../{ => static}/brightmaps/strife/RBB3B0.png | Bin .../{ => static}/brightmaps/strife/ROB1J0.png | Bin .../{ => static}/brightmaps/strife/ROB1K0.png | Bin .../{ => static}/brightmaps/strife/ROB1L0.png | Bin .../{ => static}/brightmaps/strife/ROB1M0.png | Bin .../{ => static}/brightmaps/strife/ROB1N0.png | Bin .../{ => static}/brightmaps/strife/ROB1O0.png | Bin .../{ => static}/brightmaps/strife/ROB1P0.png | Bin .../{ => static}/brightmaps/strife/ROB2F1.png | Bin .../{ => static}/brightmaps/strife/ROB2F2.png | Bin .../{ => static}/brightmaps/strife/ROB2F3.png | Bin .../{ => static}/brightmaps/strife/ROB2F4.png | Bin .../{ => static}/brightmaps/strife/ROB2F5.png | Bin .../{ => static}/brightmaps/strife/ROB2F6.png | Bin .../{ => static}/brightmaps/strife/ROB2F7.png | Bin .../{ => static}/brightmaps/strife/ROB2F8.png | Bin .../{ => static}/brightmaps/strife/ROB2G0.png | Bin .../{ => static}/brightmaps/strife/ROB2H0.png | Bin .../{ => static}/brightmaps/strife/ROB2I0.png | Bin .../{ => static}/brightmaps/strife/ROB2J0.png | Bin .../{ => static}/brightmaps/strife/ROB2K0.png | Bin .../{ => static}/brightmaps/strife/ROB2L0.png | Bin .../{ => static}/brightmaps/strife/ROB2M0.png | Bin .../{ => static}/brightmaps/strife/ROB2N0.png | Bin .../{ => static}/brightmaps/strife/ROB2O0.png | Bin .../{ => static}/brightmaps/strife/ROB3F1.png | Bin .../{ => static}/brightmaps/strife/ROB3F2.png | Bin .../{ => static}/brightmaps/strife/ROB3F3.png | Bin .../{ => static}/brightmaps/strife/ROB3F4.png | Bin .../{ => static}/brightmaps/strife/ROB3F5.png | Bin .../{ => static}/brightmaps/strife/ROB3F6.png | Bin .../{ => static}/brightmaps/strife/ROB3F7.png | Bin .../{ => static}/brightmaps/strife/ROB3F8.png | Bin .../{ => static}/brightmaps/strife/ROB3H1.png | Bin .../{ => static}/brightmaps/strife/ROB3H2.png | Bin .../{ => static}/brightmaps/strife/ROB3H3.png | Bin .../{ => static}/brightmaps/strife/ROB3H4.png | Bin .../{ => static}/brightmaps/strife/ROB3H5.png | Bin .../{ => static}/brightmaps/strife/ROB3H6.png | Bin .../{ => static}/brightmaps/strife/ROB3H7.png | Bin .../{ => static}/brightmaps/strife/ROB3H8.png | Bin .../{ => static}/brightmaps/strife/ROB3I1.png | Bin .../{ => static}/brightmaps/strife/ROB3I2.png | Bin .../{ => static}/brightmaps/strife/ROB3I3.png | Bin .../{ => static}/brightmaps/strife/ROB3I4.png | Bin .../{ => static}/brightmaps/strife/ROB3I5.png | Bin .../{ => static}/brightmaps/strife/ROB3I6.png | Bin .../{ => static}/brightmaps/strife/ROB3I7.png | Bin .../{ => static}/brightmaps/strife/ROB3I8.png | Bin .../{ => static}/brightmaps/strife/ROB3J1.png | Bin .../{ => static}/brightmaps/strife/ROB3J2.png | Bin .../{ => static}/brightmaps/strife/ROB3J3.png | Bin .../{ => static}/brightmaps/strife/ROB3J4.png | Bin .../{ => static}/brightmaps/strife/ROB3J6.png | Bin .../{ => static}/brightmaps/strife/ROB3J7.png | Bin .../{ => static}/brightmaps/strife/ROB3J8.png | Bin .../{ => static}/brightmaps/strife/ROB3M0.png | Bin .../{ => static}/brightmaps/strife/ROB3N0.png | Bin .../{ => static}/brightmaps/strife/ROB3O0.png | Bin .../{ => static}/brightmaps/strife/ROB3P0.png | Bin .../{ => static}/brightmaps/strife/ROB3Q0.png | Bin .../{ => static}/brightmaps/strife/ROB3T0.png | Bin .../{ => static}/brightmaps/strife/ROB3U0.png | Bin .../{ => static}/brightmaps/strife/ROB3V0.png | Bin .../{ => static}/brightmaps/strife/ROB3W0.png | Bin .../{ => static}/brightmaps/strife/ROB3X0.png | Bin .../{ => static}/brightmaps/strife/ROB3Y0.png | Bin .../{ => static}/brightmaps/strife/ROB3Z0.png | Bin .../{ => static}/brightmaps/strife/ROB3[0.png | Bin .../{ => static}/brightmaps/strife/ROB3]0.png | Bin .../{ => static}/brightmaps/strife/ROB3^0.png | Bin .../{ => static}/brightmaps/strife/SEWRH0.png | Bin .../{ => static}/brightmaps/strife/STLKP0.png | Bin .../{ => static}/brightmaps/strife/STLKQ0.png | Bin .../{ => static}/brightmaps/strife/STLKR0.png | Bin .../{ => static}/brightmaps/strife/STLKS0.png | Bin .../{ => static}/brightmaps/strife/STLKT0.png | Bin .../{ => static}/brightmaps/strife/STLKU0.png | Bin .../{ => static}/brightmaps/strife/STLKV0.png | Bin .../{ => static}/brightmaps/strife/STLKW0.png | Bin .../{ => static}/brightmaps/strife/STLKX0.png | Bin .../{ => static}/brightmaps/strife/STLKY0.png | Bin .../{ => static}/brightmaps/strife/STLKZ0.png | Bin .../{ => static}/brightmaps/strife/STLK[0.png | Bin wadsrc_bm/{ => static}/doomdefs.bm | 0 wadsrc_bm/{ => static}/hexndefs.bm | 0 wadsrc_bm/{ => static}/hticdefs.bm | 0 wadsrc_bm/{ => static}/strfdefs.bm | 0 wadsrc_bm/zdoom.lst | 442 ---- wadsrc_lights/Makefile | 30 - wadsrc_lights/Makefile.mgw | 18 - wadsrc_lights/Makefile2 | 2 - wadsrc_lights/lights.vcproj | 130 +- .../{DOOMDEFS.txt => static/doomdefs.txt} | 0 .../{HEXNDEFS.txt => static/hexndefs.txt} | 0 .../{HTICDEFS.txt => static/hticdefs.txt} | 0 .../{STRFDEFS.txt => static/strfdefs.txt} | 0 wadsrc_lights/zdoom.lst | 6 - zlib/zlib.vcproj | 171 +- 841 files changed, 2180 insertions(+), 34802 deletions(-) delete mode 100644 wadsrc/Makefile delete mode 100644 wadsrc/Makefile.mgw delete mode 100644 wadsrc/Makefile2 delete mode 100644 wadsrc/althudcf.txt delete mode 100644 wadsrc/amrka0.png delete mode 100644 wadsrc/animated.lmp delete mode 100644 wadsrc/animdefs.txt delete mode 100644 wadsrc/artibox.png delete mode 100644 wadsrc/badpatch.lmp delete mode 100644 wadsrc/clerface.lmp delete mode 100644 wadsrc/confont.lmp delete mode 100644 wadsrc/crouch/plyca1.lmp delete mode 100644 wadsrc/crouch/plyca2a8.lmp delete mode 100644 wadsrc/crouch/plyca3a7.lmp delete mode 100644 wadsrc/crouch/plyca4a6.lmp delete mode 100644 wadsrc/crouch/plyca5.lmp delete mode 100644 wadsrc/crouch/plycb1.lmp delete mode 100644 wadsrc/crouch/plycb2b8.lmp delete mode 100644 wadsrc/crouch/plycb3b7.lmp delete mode 100644 wadsrc/crouch/plycb4b6.lmp delete mode 100644 wadsrc/crouch/plycb5.lmp delete mode 100644 wadsrc/crouch/plycc1.lmp delete mode 100644 wadsrc/crouch/plycc2c8.lmp delete mode 100644 wadsrc/crouch/plycc3c7.lmp delete mode 100644 wadsrc/crouch/plycc4c6.lmp delete mode 100644 wadsrc/crouch/plycc5.lmp delete mode 100644 wadsrc/crouch/plycd1.lmp delete mode 100644 wadsrc/crouch/plycd2d8.lmp delete mode 100644 wadsrc/crouch/plycd3d7.lmp delete mode 100644 wadsrc/crouch/plycd4d6.lmp delete mode 100644 wadsrc/crouch/plycd5.lmp delete mode 100644 wadsrc/crouch/plyce1.lmp delete mode 100644 wadsrc/crouch/plyce2e8.lmp delete mode 100644 wadsrc/crouch/plyce3e7.lmp delete mode 100644 wadsrc/crouch/plyce4e6.lmp delete mode 100644 wadsrc/crouch/plyce5.lmp delete mode 100644 wadsrc/crouch/plycf1.lmp delete mode 100644 wadsrc/crouch/plycf2f8.lmp delete mode 100644 wadsrc/crouch/plycf3f7.lmp delete mode 100644 wadsrc/crouch/plycf4f6.lmp delete mode 100644 wadsrc/crouch/plycf5.lmp delete mode 100644 wadsrc/crouch/plycg1.lmp delete mode 100644 wadsrc/crouch/plycg2g8.lmp delete mode 100644 wadsrc/crouch/plycg3g7.lmp delete mode 100644 wadsrc/crouch/plycg4g6.lmp delete mode 100644 wadsrc/crouch/plycg5.lmp delete mode 100644 wadsrc/crouch/plych0.lmp delete mode 100644 wadsrc/crouch/plyci0.lmp delete mode 100644 wadsrc/crouch/plycj0.lmp delete mode 100644 wadsrc/crouch/plyck0.lmp delete mode 100644 wadsrc/crouch/plycl0.lmp delete mode 100644 wadsrc/crouch/plycm0.lmp delete mode 100644 wadsrc/crouch/plycn0.lmp delete mode 100644 wadsrc/crouch/plyco0.lmp delete mode 100644 wadsrc/crouch/plycp0.lmp delete mode 100644 wadsrc/crouch/plycq0.lmp delete mode 100644 wadsrc/crouch/plycr0.lmp delete mode 100644 wadsrc/crouch/plycs0.lmp delete mode 100644 wadsrc/crouch/plyct0.lmp delete mode 100644 wadsrc/crouch/plycu0.lmp delete mode 100644 wadsrc/crouch/plycv0.lmp delete mode 100644 wadsrc/crouch/plycw0.lmp delete mode 100644 wadsrc/dbigfont.lmp delete mode 100644 wadsrc/decals/bal7scr1.png delete mode 100644 wadsrc/decals/bal7scr2.png delete mode 100644 wadsrc/decals/bfglite1.png delete mode 100644 wadsrc/decals/bfglite2.png delete mode 100644 wadsrc/decals/bfgscrc1.png delete mode 100644 wadsrc/decals/bfgscrc2.png delete mode 100644 wadsrc/decals/blast1.png delete mode 100644 wadsrc/decals/bsmear1.png delete mode 100644 wadsrc/decals/bsmear2.png delete mode 100644 wadsrc/decals/bsplat1.png delete mode 100644 wadsrc/decals/bsplat2.png delete mode 100644 wadsrc/decals/bsplat3.png delete mode 100644 wadsrc/decals/bsplat4.png delete mode 100644 wadsrc/decals/bsplat5.png delete mode 100644 wadsrc/decals/bsplat6.png delete mode 100644 wadsrc/decals/bsplat7.png delete mode 100644 wadsrc/decals/cbalscr1.png delete mode 100644 wadsrc/decals/cbalscr2.png delete mode 100644 wadsrc/decals/cbowmark.png delete mode 100644 wadsrc/decals/chip1.png delete mode 100644 wadsrc/decals/chip2.png delete mode 100644 wadsrc/decals/chip3.png delete mode 100644 wadsrc/decals/chip4.png delete mode 100644 wadsrc/decals/chip5.png delete mode 100644 wadsrc/decals/decaldef.txt delete mode 100644 wadsrc/decals/plasma1.png delete mode 100644 wadsrc/decals/plasma2.png delete mode 100644 wadsrc/decals/scorch1.png delete mode 100644 wadsrc/decorate/constants.txt delete mode 100644 wadsrc/decorate/decorate.txt delete mode 100644 wadsrc/decorate/doom/arachnotron.txt delete mode 100644 wadsrc/decorate/doom/archvile.txt delete mode 100644 wadsrc/decorate/doom/bossbrain.txt delete mode 100644 wadsrc/decorate/doom/bruiser.txt delete mode 100644 wadsrc/decorate/doom/cacodemon.txt delete mode 100644 wadsrc/decorate/doom/cyberdemon.txt delete mode 100644 wadsrc/decorate/doom/deadthings.txt delete mode 100644 wadsrc/decorate/doom/demon.txt delete mode 100644 wadsrc/decorate/doom/doomammo.txt delete mode 100644 wadsrc/decorate/doom/doomarmor.txt delete mode 100644 wadsrc/decorate/doom/doomartifacts.txt delete mode 100644 wadsrc/decorate/doom/doomdecorations.txt delete mode 100644 wadsrc/decorate/doom/doomhealth.txt delete mode 100644 wadsrc/decorate/doom/doomimp.txt delete mode 100644 wadsrc/decorate/doom/doomkeys.txt delete mode 100644 wadsrc/decorate/doom/doommisc.txt delete mode 100644 wadsrc/decorate/doom/doomplayer.txt delete mode 100644 wadsrc/decorate/doom/doomweapons.txt delete mode 100644 wadsrc/decorate/doom/fatso.txt delete mode 100644 wadsrc/decorate/doom/keen.txt delete mode 100644 wadsrc/decorate/doom/lostsoul.txt delete mode 100644 wadsrc/decorate/doom/painelemental.txt delete mode 100644 wadsrc/decorate/doom/possessed.txt delete mode 100644 wadsrc/decorate/doom/revenant.txt delete mode 100644 wadsrc/decorate/doom/spidermaster.txt delete mode 100644 wadsrc/decorate/doom/stealthmonsters.txt delete mode 100644 wadsrc/decorate/heretic/beast.txt delete mode 100644 wadsrc/decorate/heretic/clink.txt delete mode 100644 wadsrc/decorate/heretic/hereticammo.txt delete mode 100644 wadsrc/decorate/heretic/hereticarmor.txt delete mode 100644 wadsrc/decorate/heretic/hereticartifacts.txt delete mode 100644 wadsrc/decorate/heretic/hereticdecorations.txt delete mode 100644 wadsrc/decorate/heretic/hereticimp.txt delete mode 100644 wadsrc/decorate/heretic/heretickeys.txt delete mode 100644 wadsrc/decorate/heretic/hereticplayer.txt delete mode 100644 wadsrc/decorate/heretic/mummy.txt delete mode 100644 wadsrc/decorate/heretic/snake.txt delete mode 100644 wadsrc/decorate/hexen/centaur.txt delete mode 100644 wadsrc/decorate/hexen/clericplayer.txt delete mode 100644 wadsrc/decorate/hexen/demons.txt delete mode 100644 wadsrc/decorate/hexen/ettin.txt delete mode 100644 wadsrc/decorate/hexen/fighterplayer.txt delete mode 100644 wadsrc/decorate/hexen/flame.txt delete mode 100644 wadsrc/decorate/hexen/hexenarmor.txt delete mode 100644 wadsrc/decorate/hexen/hexendecorations.txt delete mode 100644 wadsrc/decorate/hexen/hexenkeys.txt delete mode 100644 wadsrc/decorate/hexen/hexenspecialdecs.txt delete mode 100644 wadsrc/decorate/hexen/mageplayer.txt delete mode 100644 wadsrc/decorate/hexen/mana.txt delete mode 100644 wadsrc/decorate/hexen/puzzleitems.txt delete mode 100644 wadsrc/decorate/hexen/scriptprojectiles.txt delete mode 100644 wadsrc/decorate/hexen/speedboots.txt delete mode 100644 wadsrc/decorate/nativeclasses.txt delete mode 100644 wadsrc/decorate/raven/artiegg.txt delete mode 100644 wadsrc/decorate/raven/ravenambient.txt delete mode 100644 wadsrc/decorate/raven/ravenartifacts.txt delete mode 100644 wadsrc/decorate/raven/ravenhealth.txt delete mode 100644 wadsrc/decorate/shared/blood.txt delete mode 100644 wadsrc/decorate/shared/botstuff.txt delete mode 100644 wadsrc/decorate/shared/debris.txt delete mode 100644 wadsrc/decorate/shared/fountain.txt delete mode 100644 wadsrc/decorate/shared/pickups.txt delete mode 100644 wadsrc/decorate/shared/sharedmisc.txt delete mode 100644 wadsrc/decorate/shared/soundsequence.txt delete mode 100644 wadsrc/decorate/shared/splashes.txt delete mode 100644 wadsrc/decorate/strife/beggars.txt delete mode 100644 wadsrc/decorate/strife/merchants.txt delete mode 100644 wadsrc/decorate/strife/peasants.txt delete mode 100644 wadsrc/decorate/strife/questitems.txt delete mode 100644 wadsrc/decorate/strife/ratbuddy.txt delete mode 100644 wadsrc/decorate/strife/strifeammo.txt delete mode 100644 wadsrc/decorate/strife/strifearmor.txt delete mode 100644 wadsrc/decorate/strife/strifebishop.txt delete mode 100644 wadsrc/decorate/strife/strifeitems.txt delete mode 100644 wadsrc/decorate/strife/strifekeys.txt delete mode 100644 wadsrc/decorate/strife/strifeplayer.txt delete mode 100644 wadsrc/decorate/strife/strifestuff.txt delete mode 100644 wadsrc/decorate/strife/zombie.txt delete mode 100644 wadsrc/dehsupp.lmp delete mode 100644 wadsrc/dsempty.lmp delete mode 100644 wadsrc/fiteface.lmp delete mode 100644 wadsrc/fonta164.lmp delete mode 100644 wadsrc/fonta165.lmp delete mode 100644 wadsrc/fonta182.lmp delete mode 100644 wadsrc/fonta188.lmp delete mode 100644 wadsrc/fonta191.lmp delete mode 100644 wadsrc/fonta60.lmp delete mode 100644 wadsrc/fonta61.lmp delete mode 100644 wadsrc/fonta62.lmp delete mode 100644 wadsrc/fonta63.lmp delete mode 100644 wadsrc/fontdefs.txt delete mode 100644 wadsrc/gzd/decorate.gzd delete mode 100644 wadsrc/gzd/etc.h.txt delete mode 100644 wadsrc/gzd/lspec.h.txt delete mode 100644 wadsrc/gzd/shaders/light/light_brightmap.fp delete mode 100644 wadsrc/gzd/shaders/light/light_doom.fp delete mode 100644 wadsrc/gzd/shaders/light/light_eyefog.fp delete mode 100644 wadsrc/gzd/shaders/light/light_gold.fp delete mode 100644 wadsrc/gzd/shaders/light/light_green.fp delete mode 100644 wadsrc/gzd/shaders/light/light_inverse.fp delete mode 100644 wadsrc/gzd/shaders/light/light_norm.fp delete mode 100644 wadsrc/gzd/shaders/light/light_red.fp delete mode 100644 wadsrc/gzd/shaders/main.fp delete mode 100644 wadsrc/gzd/shaders/main.vp delete mode 100644 wadsrc/gzd/shaders/main_desat.fp delete mode 100644 wadsrc/gzd/shaders/main_nofog.vp delete mode 100644 wadsrc/gzd/shaders/tex/tex_norm.fp delete mode 100644 wadsrc/gzd/shaders/tex/tex_warp1.fp delete mode 100644 wadsrc/gzd/shaders/tex/tex_warp2.fp delete mode 100644 wadsrc/gzd/textures/gllight.png delete mode 100644 wadsrc/gzd/textures/glpart.png delete mode 100644 wadsrc/gzd/textures/glpart2.png delete mode 100644 wadsrc/gzd/textures/mirror.png delete mode 100644 wadsrc/gzd/things.h.txt delete mode 100644 wadsrc/hamoback.png delete mode 100644 wadsrc/icebreak.flac delete mode 100644 wadsrc/iceca0.png delete mode 100644 wadsrc/icecb0.png delete mode 100644 wadsrc/icecc0.png delete mode 100644 wadsrc/icecd0.png delete mode 100644 wadsrc/icedeath.flac delete mode 100644 wadsrc/in_epi1.txt delete mode 100644 wadsrc/in_epi2.txt delete mode 100644 wadsrc/in_epi3.txt delete mode 100644 wadsrc/in_htc1.txt delete mode 100644 wadsrc/in_htc2.txt delete mode 100644 wadsrc/in_htc3.txt delete mode 100644 wadsrc/indexfont.fon delete mode 100644 wadsrc/invgeml1.png delete mode 100644 wadsrc/invgeml2.png delete mode 100644 wadsrc/invgemr1.png delete mode 100644 wadsrc/invgemr2.png delete mode 100644 wadsrc/languages/english-us.txt delete mode 100644 wadsrc/languages/french.txt delete mode 100644 wadsrc/languages/italian.txt delete mode 100644 wadsrc/lockdefs.txt delete mode 100644 wadsrc/mageface.lmp delete mode 100644 wadsrc/mapinfo/doom1.txt delete mode 100644 wadsrc/mapinfo/doom2.txt delete mode 100644 wadsrc/mapinfo/doomcommon.txt delete mode 100644 wadsrc/mapinfo/heretic.txt delete mode 100644 wadsrc/mapinfo/hexen.txt delete mode 100644 wadsrc/mapinfo/plutonia.txt delete mode 100644 wadsrc/mapinfo/strife.txt delete mode 100644 wadsrc/mapinfo/tnt.txt delete mode 100644 wadsrc/noflat.png delete mode 100644 wadsrc/pista0.png delete mode 100644 wadsrc/quake.flac delete mode 100644 wadsrc/railgunfire.flac delete mode 100644 wadsrc/reverbs.txt delete mode 100644 wadsrc/rsmka0.png delete mode 100644 wadsrc/rsmkb0.png delete mode 100644 wadsrc/rsmkc0.png delete mode 100644 wadsrc/rsmkd0.png delete mode 100644 wadsrc/rsmke0.png delete mode 100644 wadsrc/sbarinfo.txt delete mode 100644 wadsrc/sbigfont.lmp delete mode 100644 wadsrc/secret.flac delete mode 100644 wadsrc/selectbo.png delete mode 100644 wadsrc/sndinfo.txt delete mode 100644 wadsrc/sndseq.txt delete mode 100644 wadsrc/spaldoom.lmp delete mode 100644 wadsrc/spalhtic.lmp delete mode 100644 wadsrc/spark1.flac delete mode 100644 wadsrc/spark2.flac delete mode 100644 wadsrc/spark3.flac delete mode 100644 wadsrc/stcfn196.lmp delete mode 100644 wadsrc/stcfn197.lmp delete mode 100644 wadsrc/stcfn214.lmp delete mode 100644 wadsrc/stcfn220.lmp delete mode 100644 wadsrc/stcfn223.lmp delete mode 100644 wadsrc/stfbany.lmp delete mode 100644 wadsrc/stkeys6.lmp delete mode 100644 wadsrc/stkeys7.lmp delete mode 100644 wadsrc/stkeys8.lmp delete mode 100644 wadsrc/stpbany.lmp delete mode 100644 wadsrc/strfhelp.o delete mode 100644 wadsrc/teaminfo.txt delete mode 100644 wadsrc/terrain.txt delete mode 100644 wadsrc/textcolors.txt delete mode 100644 wadsrc/tlgl.png delete mode 100644 wadsrc/tnt1a0.png delete mode 100644 wadsrc/unkna0.png delete mode 100644 wadsrc/vga-rom.f16 delete mode 100644 wadsrc/x11r6rgb.txt delete mode 100644 wadsrc/xhairb1.imgz delete mode 100644 wadsrc/xhairb2.png delete mode 100644 wadsrc/xhairb3.imgz delete mode 100644 wadsrc/xhairb4.imgz delete mode 100644 wadsrc/xhairb5.imgz delete mode 100644 wadsrc/xhairb6.imgz delete mode 100644 wadsrc/xhairb7.imgz delete mode 100644 wadsrc/xhairs.txt delete mode 100644 wadsrc/xhairs1.imgz delete mode 100644 wadsrc/xhairs2.imgz delete mode 100644 wadsrc/xhairs3.imgz delete mode 100644 wadsrc/xhairs4.imgz delete mode 100644 wadsrc/xhairs5.imgz delete mode 100644 wadsrc/xhairs6.imgz delete mode 100644 wadsrc/xhairs7.imgz delete mode 100644 wadsrc/xlat/base.txt delete mode 100644 wadsrc/xlat/defines.i delete mode 100644 wadsrc/xlat/doom.txt delete mode 100644 wadsrc/xlat/doom_base.txt delete mode 100644 wadsrc/xlat/heretic.txt delete mode 100644 wadsrc/xlat/heretic_base.txt delete mode 100644 wadsrc/xlat/strife.txt delete mode 100644 wadsrc/xlat/strife_base.txt delete mode 100644 wadsrc/zdoom.lst delete mode 100644 wadsrc_bm/Makefile delete mode 100644 wadsrc_bm/Makefile.mgw delete mode 100644 wadsrc_bm/Makefile2 rename wadsrc_bm/{ => static}/brightmaps/doom/BON2B0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BON2C0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BON2D0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOS2A6C4.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOS2A7C3.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOS2A8C2.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOS2B6D4.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOS2B7D3.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOS2B8D2.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOSSA1.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOSSA2A8.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOSSA3A7.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOSSA4A6.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOSSA5.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOSSB1.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOSSB2B8.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOSSB3B7.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOSSB4B6.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOSSB5.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOSSC1.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOSSC2C8.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOSSC3C7.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOSSC4C6.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOSSC5.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOSSD1.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOSSD2D8.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOSSD3D7.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOSSD4D6.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOSSD5.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOSSE1.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOSSE2.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOSSE3.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOSSE4.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOSSE5.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOSSE6.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOSSE7.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOSSE8.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOSSF1.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOSSF2.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOSSF3.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOSSF4.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOSSF5.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOSSF6.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOSSF7.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOSSF8.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOSSG1.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOSSG2.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOSSG3.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOSSG4.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOSSG5.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOSSG6.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOSSG7.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOSSG8.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOSSH1.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOSSH2.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOSSH3.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOSSH4.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOSSH5.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOSSH6.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOSSH7.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOSSH8.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOSSI0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOSSJ0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOSSK0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOSSL0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BOSSM0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BSPIG1.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BSPIG2G8.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BSPIH1.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BSPIH2H8.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BSPIH3H7.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BSPIH4H6.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/BSPIH5.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/CELLA0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/CELPA0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/CPOSE1.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/CPOSE2.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/CPOSE3.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/CPOSE5.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/CPOSE6.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/CPOSE7.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/CPOSE8.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/CPOSF1.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/CPOSF2.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/CPOSF3.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/CPOSF4.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/CPOSF5.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/CPOSF6.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/CPOSF7.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/CPOSF8.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/CYBRF1.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/CYBRF2.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/CYBRF3.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/CYBRF4.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/CYBRF5.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/CYBRF6.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/CYBRF7.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/CYBRF8.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/CYBRJ0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/CYBRK0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/CYBRL0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/CYBRM0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/CYBRN0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/CYBRO0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/FATTG1.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/FATTG2G8.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/FATTH1.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/FATTH2H8.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/FATTH3H7.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/FATTH4H6.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/FATTH5.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/FCANA0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/FCANB0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/FCANC0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/HEADC1.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/HEADC2C8.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/HEADC3C7.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/HEADD1.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/HEADD2D8.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/HEADD3D7.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/PAINF1.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/PAINF2F8.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/PAINF3F7.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/PLAYF1.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/PLAYF2F8.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/PLAYF3F7.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/PLAYF4F6.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/PLAYF5.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/POSSE1.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/POSSE2E8.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/POSSE3E7.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/POSSF1.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/POSSF2F8.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/POSSF3F7.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/POSSF4F6.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/POSSF5.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/SKELJ1.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/SKELJ2.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/SKELJ3.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/SKELJ4.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/SKELJ5.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/SKELJ6.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/SKELJ7.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/SKELJ8.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/SMRTA0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/SMRTB0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/SMRTC0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/SMRTD0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/SPIDG1.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/SPIDG2G8.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/SPIDH1.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/SPIDH2H8.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/SPIDH3H7.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/SPIDL0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/SPIDM0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/SPIDN0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/SPIDO0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/SPIDP0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/SPIDQ0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/SPIDR0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/SPOSE1.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/SPOSE2E8.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/SPOSE3E7.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/SPOSF1.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/SPOSF2F8.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/SPOSF3F7.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/SPOSF4F6.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/SPOSF5.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/TREDA0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/TREDB0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/TREDC0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/TREDD0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/TbluB0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/TbluC0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/doom/sswvg0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/BEASI1.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/BEASI2I8.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/BEASI3I7.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/CHDLA0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/CHDLB0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/CHDLC0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/CLNKI0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/CLNKJ0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/CLNKK0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/CLNKL0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/CLNKM0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/CLNKN0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/IMPXD1.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/IMPXD2.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/IMPXD3.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/IMPXD4.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/IMPXD5.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/IMPXD6.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/IMPXD7.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/IMPXD8.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/IMPXE1.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/IMPXE2.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/IMPXE3.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/IMPXE4.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/IMPXE5.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/IMPXE6.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/IMPXE7.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/IMPXE8.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/IMPXF1.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/IMPXF2.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/IMPXF3.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/IMPXF4.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/IMPXF5.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/IMPXF6.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/IMPXF7.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/IMPXF8.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/LICHB1.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/LICHB2B8.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/LICHB3B7.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/LICHC0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/LICHD0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/LICHE0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/LICHF0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/LICHG0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/LICHH0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/PLAYF1.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/PLAYF2F8.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/PLAYF3F7.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/PLAYF4F6.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/SDTHA0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/SDTHB0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/SDTHC0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/SDTHD0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/SDTHE0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/SDTHF0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/SDTHG0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/SDTHH0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/SOR2R1.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/SOR2R2.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/SOR2R3.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/SOR2R4.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/SOR2R5.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/SOR2R6.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/SOR2R7.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/SOR2R8.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/SOR2S1.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/SOR2S2.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/SOR2S3.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/SOR2S4.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/SOR2S5.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/SOR2S6.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/SOR2S7.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/SOR2S8.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/SOR2T1.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/SOR2T2.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/SOR2T3.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/SOR2T4.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/SOR2T5.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/SOR2T6.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/SOR2T7.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/SOR2T8.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/VLCOE0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/WZRDC1.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/WZRDC2C8.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/WZRDC3C7.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/WZRDC4C6.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/WZRDC5.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/WZRDD1.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/WZRDD2D8.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/WZRDD3D7.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/WZRDD4D6.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/WZRDD5.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/WZRDF0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/WZRDG0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/WZRDH0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/WZRDI0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/WZRDJ0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/heretic/WZRDK0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/hexen/CDLRA0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/hexen/CDLRB0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/hexen/CDLRC0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/hexen/CENTF1.png (100%) rename wadsrc_bm/{ => static}/brightmaps/hexen/CENTF2.png (100%) rename wadsrc_bm/{ => static}/brightmaps/hexen/CENTF8.png (100%) rename wadsrc_bm/{ => static}/brightmaps/hexen/ICEYG1.png (100%) rename wadsrc_bm/{ => static}/brightmaps/hexen/ICEYG2G8.png (100%) rename wadsrc_bm/{ => static}/brightmaps/hexen/ICEYG3G7.png (100%) rename wadsrc_bm/{ => static}/brightmaps/hexen/ICEYG4G6.png (100%) rename wadsrc_bm/{ => static}/brightmaps/hexen/ICEYG5.png (100%) rename wadsrc_bm/{ => static}/brightmaps/hexen/MAGEF1.png (100%) rename wadsrc_bm/{ => static}/brightmaps/hexen/MAGEF2.png (100%) rename wadsrc_bm/{ => static}/brightmaps/hexen/MAGEF3.png (100%) rename wadsrc_bm/{ => static}/brightmaps/hexen/MAGEF4.png (100%) rename wadsrc_bm/{ => static}/brightmaps/hexen/MAGEF5.png (100%) rename wadsrc_bm/{ => static}/brightmaps/hexen/MAGEF6.png (100%) rename wadsrc_bm/{ => static}/brightmaps/hexen/MAGEF7.png (100%) rename wadsrc_bm/{ => static}/brightmaps/hexen/MAGEF8.png (100%) rename wadsrc_bm/{ => static}/brightmaps/hexen/WRTHE1.png (100%) rename wadsrc_bm/{ => static}/brightmaps/hexen/WRTHE2E8.png (100%) rename wadsrc_bm/{ => static}/brightmaps/hexen/WRTHE3E7.png (100%) rename wadsrc_bm/{ => static}/brightmaps/hexen/WRTHE4E6.png (100%) rename wadsrc_bm/{ => static}/brightmaps/hexen/WRTHE5.png (100%) rename wadsrc_bm/{ => static}/brightmaps/hexen/WRTHF1.png (100%) rename wadsrc_bm/{ => static}/brightmaps/hexen/WRTHF2F8.png (100%) rename wadsrc_bm/{ => static}/brightmaps/hexen/WRTHF3F7.png (100%) rename wadsrc_bm/{ => static}/brightmaps/hexen/WRTHF4F6.png (100%) rename wadsrc_bm/{ => static}/brightmaps/hexen/WRTHF5.png (100%) rename wadsrc_bm/{ => static}/brightmaps/hexen/WRTHG1.png (100%) rename wadsrc_bm/{ => static}/brightmaps/hexen/WRTHG2G8.png (100%) rename wadsrc_bm/{ => static}/brightmaps/hexen/WRTHG3G7.png (100%) rename wadsrc_bm/{ => static}/brightmaps/hexen/WRTHG4G6.png (100%) rename wadsrc_bm/{ => static}/brightmaps/hexen/WRTHG5.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/MLDRE1.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/MLDRE2.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/MLDRE3.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/MLDRE4.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/MLDRE5.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/MLDRE6.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/MLDRE7.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/MLDRE8.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/PGRDG1.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/PGRDG2.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/PGRDG3.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/PGRDG4.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/PGRDG5.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/PGRDG6.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/PGRDG7.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/PGRDG8.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/PGRDI0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/PGRDJ0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/PGRDK0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/PGRDL0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/PGRDM0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/PGRDN0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/PRGRO0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/RBB3A0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/RBB3B0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB1J0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB1K0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB1L0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB1M0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB1N0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB1O0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB1P0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB2F1.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB2F2.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB2F3.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB2F4.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB2F5.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB2F6.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB2F7.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB2F8.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB2G0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB2H0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB2I0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB2J0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB2K0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB2L0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB2M0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB2N0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB2O0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB3F1.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB3F2.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB3F3.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB3F4.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB3F5.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB3F6.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB3F7.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB3F8.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB3H1.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB3H2.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB3H3.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB3H4.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB3H5.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB3H6.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB3H7.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB3H8.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB3I1.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB3I2.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB3I3.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB3I4.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB3I5.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB3I6.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB3I7.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB3I8.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB3J1.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB3J2.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB3J3.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB3J4.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB3J6.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB3J7.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB3J8.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB3M0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB3N0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB3O0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB3P0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB3Q0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB3T0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB3U0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB3V0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB3W0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB3X0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB3Y0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB3Z0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB3[0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB3]0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/ROB3^0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/SEWRH0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/STLKP0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/STLKQ0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/STLKR0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/STLKS0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/STLKT0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/STLKU0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/STLKV0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/STLKW0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/STLKX0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/STLKY0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/STLKZ0.png (100%) rename wadsrc_bm/{ => static}/brightmaps/strife/STLK[0.png (100%) rename wadsrc_bm/{ => static}/doomdefs.bm (100%) rename wadsrc_bm/{ => static}/hexndefs.bm (100%) rename wadsrc_bm/{ => static}/hticdefs.bm (100%) rename wadsrc_bm/{ => static}/strfdefs.bm (100%) delete mode 100644 wadsrc_bm/zdoom.lst delete mode 100644 wadsrc_lights/Makefile delete mode 100644 wadsrc_lights/Makefile.mgw delete mode 100644 wadsrc_lights/Makefile2 rename wadsrc_lights/{DOOMDEFS.txt => static/doomdefs.txt} (100%) rename wadsrc_lights/{HEXNDEFS.txt => static/hexndefs.txt} (100%) rename wadsrc_lights/{HTICDEFS.txt => static/hticdefs.txt} (100%) rename wadsrc_lights/{STRFDEFS.txt => static/strfdefs.txt} (100%) delete mode 100644 wadsrc_lights/zdoom.lst diff --git a/docs/classes.txt b/docs/classes.txt index 682d3229..543d7490 100644 --- a/docs/classes.txt +++ b/docs/classes.txt @@ -173,7 +173,7 @@ IMPLEMENT_SERIAL. For a class that won't be saved to disk, do this: should be sure to change if you change the structs. The code for serializing sector_t and line_t can be found in P_SerializeWorld() in p_saveg.cpp. The code for serializing player_t is in p_user.cpp as - player_s::Serialize(). + player_t::Serialize(). To determine the type of an object, you can use the IsA() and IsKindOf() methods of DObject. IsA() tests if the object is an instance of a @@ -210,8 +210,8 @@ END_POINTERS If you add pointers to any class, you need to update this list accordingly. The player class uses a hack, because it is not derived from DObject, to -clear pointers. See player_s::FixPointers() in p_user.cpp if you add any -pointers to player_s. +clear pointers. See player_t::FixPointers() in p_user.cpp if you add any +pointers to player_t. When you want to destroy any object derived from DThinker (this includes all actors), call that object's Destroy() method. Do not use delete, because it diff --git a/docs/rh-log.txt b/docs/rh-log.txt index 1d607e93..34b459e5 100644 --- a/docs/rh-log.txt +++ b/docs/rh-log.txt @@ -1,4 +1,36 @@ +July 21, 2008 +- Converted most sprintf (and all wsprintf) calls to either mysnprintf or + FStrings, depending on the situation. +- Changed the strings in the wbstartstruct to be FStrings. +- Changed myvsnprintf() to output nothing if count is greater than INT_MAX. + This is so that I can use a series of mysnprintf() calls and advance the + pointer for each one. Once the pointer goes beyond the end of the buffer, + the count will go negative, but since it's an unsigned type it will be + seen as excessively huge instead. This should not be a problem, as there's + no reason for ZDoom to be using text buffers larger than 2 GB anywhere. +- Ripped out the disabled bit from FGameConfigFile::MigrateOldConfig(). +- Changed CalcMapName() to return an FString instead of a pointer to a static + buffer. +- Changed startmap in d_main.cpp into an FString. +- Changed CheckWarpTransMap() to take an FString& as the first argument. +- Changed d_mapname in g_level.cpp into an FString. +- Changed DoSubstitution() in ct_chat.cpp to place the substitutions in an + FString. +- Fixed: The MAPINFO parser wrote into the string buffer to construct a map + name when given a Hexen map number. This was fine with the old scanner + code, but only a happy coincidence prevents it from crashing with the new + code. + +July 21, 2008 (Changes by Graf Zahl) +- Added MF4_BOSSDEATH to the Minotaur. +- Fixed: The boss brain looped to the wrong state. +- Converted Heretic's Staff, GoldWand, Crossbow and Gauntlets to DECORATE. +- fixed: Morphing to a class without a face definition crashed. +- Converted all of Heretic's actors except the weapons to DECORATE. +- Added the option to define the ActorInfos for native classes in DECORATE. + July 20, 2008 (Changes by Graf Zahl) +- Fixed: When copying visplanes the sky texture was forgotten. - converted the boss brain to DECORATE. - added an abstract base class for special map spots that are maintained in lists and rewrote the boss brain, the mace and DSparil to use it. @@ -22,6 +54,31 @@ July 18, 2008 (Changes by Graf Zahl) - Added const char &operator[] (unsigned int index) to FString class. - Added Skulltag's Teleport_NoStop action special. +July 17, 2008 +- Added the 'B' conversion specifier to StringFormat::VWorker() for printing + binary numbers. + +July 16, 2008 +- Added CMake support for building with MinGW, MSYS, and NMake. Linux support + is probably broken until I get around to booting into Linux again. Niceties + provided over the existing Makefiles they're replacing: + * All command-line builds can use the same build system, rather than having + a separate one for MinGW and another for Linux. + * Microsoft's NMake tool is supported as a target. + * Progress meters. + * Parallel makes work from a fresh checkout without needing to be primed + first with a single-threaded make. + * Porting to other architectures should be simplified, whenever that day + comes. + +July 15, 2008 +- Replaced the makewad tool with zipdir. This handles the dependency tracking + itself instead of generating an external makefile to do it, since I couldn't + figure out how to generate a makefile with an external tool and include it + with a CMake-generated makefile. Where makewad used a master list of files + to generate the package file, zipdir just zips the entire contents of one or + more directories. + July 15, 2008 (Changes by Graf Zahl) - Fixed: Strife's EntityBoss didn't copy friendliness information to the sub-entities. @@ -47,6 +104,10 @@ July 12, 2008 (Changes by Graf Zahl) - Fixed: ACS's ActivatorSound must check if the activator is valid. - Changed stats drawing so that multi-line strings can be used. +July 9, 2008 +- Added the gdtoa package from netlib's fp library so that ZDoom's printf-style + formatting can be entirely independant of the CRT. + July 5, 2008 - Added a check to G_DoSaveGame() to prevent saving when you're not actually in a level. diff --git a/gzdoom.sln b/gzdoom.sln index 28d90faf..7752c573 100644 --- a/gzdoom.sln +++ b/gzdoom.sln @@ -26,10 +26,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wadsrc", "wadsrc\wadsrc.vcp {24A19C02-F041-4AB0-A1A1-02E1E88EDBD3} = {24A19C02-F041-4AB0-A1A1-02E1E88EDBD3} EndProjectSection EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "makewad", "tools\makewad\makewad.vcproj", "{24A19C02-F041-4AB0-A1A1-02E1E88EDBD3}" - ProjectSection(ProjectDependencies) = postProject - {F9D9E7D4-E1A2-4866-9E85-B1B14137EE63} = {F9D9E7D4-E1A2-4866-9E85-B1B14137EE63} - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "updaterevision", "tools\updaterevision\updaterevision.vcproj", "{6077B7D6-349F-4077-B552-3BC302EF5859}" EndProject @@ -47,6 +43,12 @@ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lights", "wadsrc_lights\lights.vcproj", "{31090871-A623-4BBC-A167-DE821CD1240C}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dumb_static", "dumb\vc6\dumb_static\dumb_static.vcproj", "{8997289F-10BF-4678-8BAA-3BB509C84953}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zipdir", "tools\zipdir\zipdir.vcproj", "{24A19C02-F041-4AB0-A1A1-02E1E88EDBD3}" + ProjectSection(ProjectDependencies) = postProject + {F9D9E7D4-E1A2-4866-9E85-B1B14137EE63} = {F9D9E7D4-E1A2-4866-9E85-B1B14137EE63} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gdtoa", "gdtoa\gdtoa.vcproj", "{B68E0ABF-B627-48A3-A92F-D8F827A75054}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/gzdoom.vcproj b/gzdoom.vcproj index 191bc70e..1d59d999 100644 --- a/gzdoom.vcproj +++ b/gzdoom.vcproj @@ -55,8 +55,8 @@ EnableIntrinsicFunctions="true" FavorSizeOrSpeed="1" OmitFramePointers="true" - AdditionalIncludeDirectories="src\win32,src\sound,src,zlib,src\g_shared,src\g_doom,src\g_raven,src\g_heretic,src\g_hexen,src\g_strife;flac;jpeg-6b;snes_spc\snes_spc" - PreprocessorDefinitions="NDEBUG,WIN32,_WIN32,_WINDOWS,USEASM,HAVE_STRUPR,HAVE_FILELENGTH,SILENT_INSTANT_FLOORS" + AdditionalIncludeDirectories="src\win32,src\sound,src,zlib,src\g_shared,src\g_doom,src\g_raven,src\g_heretic,src\g_hexen,src\g_strife;flac;jpeg-6b;snes_spc\snes_spc;gdtoa" + PreprocessorDefinitions="NDEBUG,WIN32,_WIN32,_WINDOWS,USEASM,NO_MANIFEST" StringPooling="true" RuntimeLibrary="0" EnableFunctionLevelLinking="true" @@ -172,8 +172,8 @@ Name="VCCLCompilerTool" Optimization="0" InlineFunctionExpansion="0" - AdditionalIncludeDirectories="src\win32;src\sound;src;zlib;src\g_shared;src\g_doom;src\g_raven;src\g_heretic;src\g_hexen;src\g_strife;flac;jpeg-6b;snes_spc\snes_spc" - PreprocessorDefinitions="WIN32,_DEBUG,_WIN32,_WINDOWS,USEASM,_CRTDBG_MAP_ALLOC,HAVE_STRUPR,HAVE_FILELENGTH" + AdditionalIncludeDirectories="src\win32;src\sound;src;zlib;src\g_shared;src\g_doom;src\g_raven;src\g_heretic;src\g_hexen;src\g_strife;flac;jpeg-6b;snes_spc\snes_spc;gdtoa" + PreprocessorDefinitions="WIN32,_DEBUG,_WIN32,_WINDOWS,USEASM,_CRTDBG_MAP_ALLOC,NO_MANIFEST" MinimalRebuild="true" RuntimeLibrary="1" EnableFunctionLevelLinking="true" @@ -1552,37 +1552,39 @@ + + + - - - @@ -1596,37 +1598,39 @@ + + + - - - @@ -1640,38 +1644,40 @@ + + + - - - @@ -1684,38 +1690,40 @@ + + + - - - @@ -1728,38 +1736,40 @@ + + + - - - @@ -2768,6 +2778,10 @@ RelativePath="docs\classes.txt" > + + diff --git a/jpeg-6b/jpeg-6b.vcproj b/jpeg-6b/jpeg-6b.vcproj index 0c171937..c6d6ce0d 100644 --- a/jpeg-6b/jpeg-6b.vcproj +++ b/jpeg-6b/jpeg-6b.vcproj @@ -11,6 +11,9 @@ + @@ -77,6 +80,69 @@ Name="VCPostBuildEventTool" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -274,6 +405,10 @@ > + + diff --git a/snes_spc/snes_spc.vcproj b/snes_spc/snes_spc.vcproj index 42560a6d..ea0e62bf 100644 --- a/snes_spc/snes_spc.vcproj +++ b/snes_spc/snes_spc.vcproj @@ -11,6 +11,9 @@ + @@ -77,6 +80,69 @@ Name="VCPostBuildEventTool" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -377,12 +662,10 @@ > - - + diff --git a/src/a.nas b/src/a.nas index cdcbd7f0..196e8317 100644 --- a/src/a.nas +++ b/src/a.nas @@ -3,7 +3,7 @@ ; See the included license file "BUILDLIC.TXT" for license info. ; This file has been modified from Ken Silverman's original release -%include "src/valgrind.inc" +%include "valgrind.inc" SECTION .data diff --git a/src/am_map.cpp b/src/am_map.cpp index 8530e8fb..50ae598d 100644 --- a/src/am_map.cpp +++ b/src/am_map.cpp @@ -733,7 +733,7 @@ void AM_loadPics () for (i = 0; i < 10; i++) { - sprintf (namebuf, "AMMNUM%d", i); + mysnprintf (namebuf, countof(namebuf), "AMMNUM%d", i); marknums[i] = TexMan.CheckForTexture (namebuf, FTexture::TEX_MiscPatch); } diff --git a/src/b_game.cpp b/src/b_game.cpp index b3f8d010..c6b6a0fe 100644 --- a/src/b_game.cpp +++ b/src/b_game.cpp @@ -327,7 +327,8 @@ bool FCajunMaster::SpawnBot (const char *name, int color) } if (TEAMINFO_IsValidTeam (thebot->lastteam)) { // Keep the bot on the same team when switching levels - sprintf (concat+strlen(concat), "\\team\\%d\n", thebot->lastteam); + mysnprintf (concat + strlen(concat), countof(concat) - strlen(concat), + "\\team\\%d\n", thebot->lastteam); } Net_WriteString (concat); } @@ -602,7 +603,7 @@ bool FCajunMaster::LoadBots () } } appendinfo (newinfo->info, "team"); - sprintf (teamstr, "%d", teamnum); + mysnprintf (teamstr, countof(teamstr), "%d", teamnum); appendinfo (newinfo->info, teamstr); gotteam = true; break; diff --git a/src/c_bind.cpp b/src/c_bind.cpp index e7fb2838..f713257b 100644 --- a/src/c_bind.cpp +++ b/src/c_bind.cpp @@ -275,7 +275,7 @@ static const char *KeyName (int key) if (KeyNames[key]) return KeyNames[key]; - sprintf (name, "#%d", key); + mysnprintf (name, countof(name), "#%d", key); return name; } diff --git a/src/c_cmds.cpp b/src/c_cmds.cpp index 1a739b38..33d10d4a 100644 --- a/src/c_cmds.cpp +++ b/src/c_cmds.cpp @@ -247,7 +247,7 @@ CCMD (idclev) { int epsd, map; char buf[2]; - char *mapname; + FString mapname; buf[0] = argv[1][0] - '0'; buf[1] = argv[1][1] - '0'; @@ -283,9 +283,9 @@ CCMD (hxvisit) if ((argv.argc() > 1) && (*(argv[1] + 2) == 0) && *(argv[1] + 1) && *argv[1]) { - char mapname[9]; + FString mapname("&wt@"); - sprintf (mapname, "&wt@%c%c", argv[1][0], argv[1][1]); + mapname << argv[1][0] << argv[1][1]; if (CheckWarpTransMap (mapname, false)) { diff --git a/src/c_console.cpp b/src/c_console.cpp index c0fe66a5..7a92f7ee 100644 --- a/src/c_console.cpp +++ b/src/c_console.cpp @@ -1174,7 +1174,7 @@ void C_DrawConsole (bool hw2d) if (TickerLabel) { tickbegin = (int)strlen (TickerLabel) + 2; - sprintf (tickstr, "%s: ", TickerLabel); + mysnprintf (tickstr, countof(tickstr), "%s: ", TickerLabel); } if (tickend > 256 - ConFont->GetCharWidth(0x12)) tickend = 256 - ConFont->GetCharWidth(0x12); @@ -1184,7 +1184,8 @@ void C_DrawConsole (bool hw2d) tickstr[tickend + 2] = ' '; if (TickerPercent) { - sprintf (tickstr + tickend + 3, "%d%%", Scale (TickerAt, 100, TickerMax)); + mysnprintf (tickstr + tickend + 3, countof(tickstr) - tickend - 3, + "%d%%", Scale (TickerAt, 100, TickerMax)); } else { diff --git a/src/c_cvars.cpp b/src/c_cvars.cpp index 91bbcbc2..04f8e2aa 100644 --- a/src/c_cvars.cpp +++ b/src/c_cvars.cpp @@ -268,15 +268,15 @@ char *FBaseCVar::ToString (UCVarValue value, ECVarType type) return value.String; case CVAR_Int: - sprintf (cstrbuf, "%i", value.Int); + mysnprintf (cstrbuf, countof(cstrbuf), "%i", value.Int); break; case CVAR_Float: - sprintf (cstrbuf, "%g", value.Float); + mysnprintf (cstrbuf, countof(cstrbuf), "%g", value.Float); break; case CVAR_GUID: - FormatGUID (cstrbuf, *value.pGUID); + FormatGUID (cstrbuf, countof(cstrbuf), *value.pGUID); break; default: @@ -356,7 +356,7 @@ UCVarValue FBaseCVar::FromInt (int value, ECVarType type) break; case CVAR_String: - sprintf (cstrbuf, "%i", value); + mysnprintf (cstrbuf, countof(cstrbuf), "%i", value); ret.String = cstrbuf; break; @@ -390,7 +390,7 @@ UCVarValue FBaseCVar::FromFloat (float value, ECVarType type) break; case CVAR_String: - sprintf (cstrbuf, "%g", value); + mysnprintf (cstrbuf, countof(cstrbuf), "%g", value); ret.String = cstrbuf; break; @@ -891,7 +891,7 @@ UCVarValue FColorCVar::FromInt2 (int value, ECVarType type) if (type == CVAR_String) { UCVarValue ret; - sprintf (cstrbuf, "%02x %02x %02x", + mysnprintf (cstrbuf, countof(cstrbuf), "%02x %02x %02x", RPART(value), GPART(value), BPART(value)); ret.String = cstrbuf; return ret; diff --git a/src/c_dispatch.cpp b/src/c_dispatch.cpp index 06770547..66878b4a 100644 --- a/src/c_dispatch.cpp +++ b/src/c_dispatch.cpp @@ -246,13 +246,13 @@ static int ListActionCommands (const char *pattern) for (i = 0; i < NUM_ACTIONS; ++i) { if (pattern == NULL || CheckWildcards (pattern, - (sprintf (matcher, "+%s", ActionMaps[i].Name), matcher))) + (mysnprintf (matcher, countof(matcher), "+%s", ActionMaps[i].Name), matcher))) { Printf ("+%s\n", ActionMaps[i].Name); count++; } if (pattern == NULL || CheckWildcards (pattern, - (sprintf (matcher, "-%s", ActionMaps[i].Name), matcher))) + (mysnprintf (matcher, countof(matcher), "-%s", ActionMaps[i].Name), matcher))) { Printf ("-%s\n", ActionMaps[i].Name); count++; diff --git a/src/c_expr.cpp b/src/c_expr.cpp index 82d972bd..6fcd19c4 100644 --- a/src/c_expr.cpp +++ b/src/c_expr.cpp @@ -351,7 +351,7 @@ static FStringProd *DoubleToString (FProduction *prod) char buf[128]; FStringProd *newprod; - sprintf (buf, "%g", static_cast(prod)->Value); + mysnprintf (buf, countof(buf), "%g", static_cast(prod)->Value); newprod = NewStringProd (buf); M_Free (prod); return newprod; diff --git a/src/cmdlib.cpp b/src/cmdlib.cpp index e4df119a..9731874e 100644 --- a/src/cmdlib.cpp +++ b/src/cmdlib.cpp @@ -315,9 +315,9 @@ bool CheckWildcards (const char *pattern, const char *text) // [RH] Print a GUID to a text buffer using the standard format. -void FormatGUID (char *text, const GUID &guid) +void FormatGUID (char *buffer, size_t buffsize, const GUID &guid) { - sprintf (text, "{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}", + mysnprintf (buffer, buffsize, "{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}", (uint32)guid.Data1, guid.Data2, guid.Data3, guid.Data4[0], guid.Data4[1], guid.Data4[2], guid.Data4[3], @@ -375,7 +375,7 @@ void CreatePath(const char * fn) if (c!='\\' && c!='/') { - sprintf(name, "%s/", fn); + mysnprintf(name, countof(name), "%s/", fn); DoCreatePath(name); } else DoCreatePath(fn); diff --git a/src/cmdlib.h b/src/cmdlib.h index 12808a49..4916eee1 100644 --- a/src/cmdlib.h +++ b/src/cmdlib.h @@ -48,7 +48,7 @@ void ReplaceString (char **ptr, const char *str); bool CheckWildcards (const char *pattern, const char *text); -void FormatGUID (char *text, const GUID &guid); +void FormatGUID (char *buffer, size_t buffsize, const GUID &guid); const char *myasctime (); diff --git a/src/codepointers.h b/src/codepointers.h index edaf077c..08da4328 100644 --- a/src/codepointers.h +++ b/src/codepointers.h @@ -99,12 +99,6 @@ ACTOR(PlayerSkinCheck) ACTOR(QueueCorpse) ACTOR(DeQueueCorpse) ACTOR(SetGravity) - -// Special code pointers for Strife's player - not to be used elsewhere! -ACTOR(ItBurnsItBurns) -ACTOR(CrispyPlayer) -ACTOR(DropFire) - ACTOR(ClearTarget) ACTOR(LookEx) ACTOR(JumpIfTargetInLOS) @@ -113,3 +107,54 @@ ACTOR(DamageChildren) ACTOR(CheckForReload) ACTOR(ResetReloadCounter) ACTOR(ClearReFire) + +// Heretic stuff +ACTOR(Feathers) +ACTOR(BeakRaise) +ACTOR(BeakAttackPL1) +ACTOR(BeakAttackPL2) +ACTOR(Sor1Pain) +ACTOR(Sor1Chase) +ACTOR(Srcr1Attack) +ACTOR(SorcererRise) +ACTOR(Srcr2Decide) +ACTOR(Srcr2Attack) +ACTOR(Sor2DthInit) +ACTOR(Sor2DthLoop) +ACTOR(BlueSpark) +ACTOR(GenWizard) +ACTOR(TimeBomb) +ACTOR(ImpDeath) +ACTOR(ImpXDeath1) +ACTOR(ImpExplode) +ACTOR(PodPain) +ACTOR(RemovePod) +ACTOR(MakePod) +ACTOR(AccTeleGlitter) +ACTOR(VolcanoSet) +ACTOR(VolcanoBlast) +ACTOR(VolcBallImpact) +ACTOR(LichAttack) +ACTOR(LichIceImpact) +ACTOR(LichFireGrow) +ACTOR(WhirlwindSeek) +ACTOR(KnightAttack) +ACTOR(DripBlood) +ACTOR(GhostOff) +ACTOR(WizAtk1) +ACTOR(WizAtk2) +ACTOR(WizAtk3) + +ACTOR(StaffAttack) +ACTOR(FireGoldWandPL1) +ACTOR(FireGoldWandPL2) +ACTOR(FireCrossbowPL1) +ACTOR(FireCrossbowPL2) +ACTOR(GauntletAttack) + + +// Special code pointers for Strife's player - not to be used elsewhere! +ACTOR(ItBurnsItBurns) +ACTOR(CrispyPlayer) +ACTOR(DropFire) + diff --git a/src/ct_chat.cpp b/src/ct_chat.cpp index 2953483d..b223b08f 100644 --- a/src/ct_chat.cpp +++ b/src/ct_chat.cpp @@ -55,7 +55,7 @@ static void CT_ClearChatMessage (); static void CT_AddChar (char c); static void CT_BackSpace (); static void ShoveChatStr (const char *str, BYTE who); -static bool DoSubstitution (char *out, const char *in); +static bool DoSubstitution (FString &out, const char *in); static int len; static BYTE ChatQueue[QUEUESIZE]; @@ -309,7 +309,7 @@ static void CT_ClearChatMessage () static void ShoveChatStr (const char *str, BYTE who) { - char substBuff[256]; + FString substBuff; if (str[0] == '/' && (str[1] == 'm' || str[1] == 'M') && @@ -341,20 +341,20 @@ static void ShoveChatStr (const char *str, BYTE who) // //=========================================================================== -static bool DoSubstitution (char *out, const char *in) +static bool DoSubstitution (FString &out, const char *in) { player_t *player = &players[consoleplayer]; AWeapon *weapon = player->ReadyWeapon; const char *a, *b; a = in; - while ((b = strchr (a, '$'))) + out = ""; + while ( (b = strchr(a, '$')) ) { - strncpy (out, a, b - a); - out += b - a; + out.AppendCStrPart(a, b - a); a = ++b; - while (*b && isalpha (*b)) + while (*b && isalpha(*b)) { ++b; } @@ -363,71 +363,69 @@ static bool DoSubstitution (char *out, const char *in) if (len == 6) { - if (strnicmp (a, "health", 6) == 0) + if (strnicmp(a, "health", 6) == 0) { - out += sprintf (out, "%d", player->health); + out.AppendFormat("%d", player->health); } - else if (strnicmp (a, "weapon", 6) == 0) + else if (strnicmp(a, "weapon", 6) == 0) { if (weapon == NULL) { - out += sprintf (out, "no weapon"); + out += "no weapon"; } else { - out += sprintf (out, "%s", weapon->GetClass()->TypeName.GetChars()); + out += weapon->GetClass()->TypeName; } } } else if (len == 5) { - if (strnicmp (a, "armor", 5) == 0) + if (strnicmp(a, "armor", 5) == 0) { AInventory *armor = player->mo->FindInventory(); - int armorpoints = armor != NULL ? armor->Amount : 0; - out += sprintf (out, "%d", armorpoints); + out.AppendFormat("%d", armor != NULL ? armor->Amount : 0); } } else if (len == 9) { - if (strnicmp (a, "ammocount", 9) == 0) + if (strnicmp(a, "ammocount", 9) == 0) { if (weapon == NULL) { - out += sprintf (out, "0"); + out += '0'; } else { - out += sprintf (out, "%d", weapon->Ammo1 != NULL ? weapon->Ammo1->Amount : 0); + out.AppendFormat("%d", weapon->Ammo1 != NULL ? weapon->Ammo1->Amount : 0); if (weapon->Ammo2 != NULL) { - out += sprintf (out, "/%d", weapon->Ammo2->Amount); + out.AppendFormat("/%d", weapon->Ammo2->Amount); } } } } else if (len == 4) { - if (strnicmp (a, "ammo", 4) == 0) + if (strnicmp(a, "ammo", 4) == 0) { if (weapon == NULL || weapon->Ammo1 == NULL) { - out += sprintf (out, "no ammo"); + out += "no ammo"; } else { - out += sprintf (out, "%s", weapon->Ammo1->GetClass()->TypeName.GetChars()); + out.AppendFormat("%s", weapon->Ammo1->GetClass()->TypeName.GetChars()); if (weapon->Ammo2 != NULL) { - out += sprintf (out, "/%s", weapon->Ammo2->GetClass()->TypeName.GetChars()); + out.AppendFormat("/%s", weapon->Ammo2->GetClass()->TypeName.GetChars()); } } } } else if (len == 0) { - *out++ = '$'; - *out = 0; + out += '$'; if (*b == '$') { b++; @@ -435,9 +433,8 @@ static bool DoSubstitution (char *out, const char *in) } else { - *out++ = '$'; - strncpy (out, a, len); - out += len; + out += '$'; + out.AppendCStrPart(a, len); } a = b; } @@ -448,7 +445,7 @@ static bool DoSubstitution (char *out, const char *in) return false; } - strcpy (out, a); + out += a; return true; } diff --git a/src/d_dehacked.cpp b/src/d_dehacked.cpp index 646d7ed7..7b3c0c06 100644 --- a/src/d_dehacked.cpp +++ b/src/d_dehacked.cpp @@ -1755,11 +1755,11 @@ static int PatchPars (int dummy) if (moredata) { // At least 3 items on this line, must be E?M? format - sprintf (mapname, "E%cM%c", *Line2, *space); + mysnprintf (mapname, countof(mapname), "E%cM%c", *Line2, *space); par = atoi (moredata + 1); } else { // Only 2 items, must be MAP?? format - sprintf (mapname, "MAP%02d", atoi(Line2) % 100); + mysnprintf (mapname, countof(mapname), "MAP%02d", atoi(Line2) % 100); par = atoi (space); } @@ -1939,7 +1939,7 @@ static int PatchText (int oldSize) { // Music names are never >6 chars char musname[9]; level_info_t *info = LevelInfos; - sprintf (musname, "d_%s", oldStr); + mysnprintf (musname, countof(musname), "d_%s", oldStr); while (info->level_name) { @@ -2577,7 +2577,7 @@ void FinishDehPatch () // Create a new class that will serve as the actual pickup char typeNameBuilder[32]; - sprintf (typeNameBuilder, "DehackedPickup%d", touchedIndex); + mysnprintf (typeNameBuilder, countof(typeNameBuilder), "DehackedPickup%d", touchedIndex); PClass *subclass = RUNTIME_CLASS(ADehackedPickup)->CreateDerivedClass (typeNameBuilder, sizeof(ADehackedPickup)); AActor *defaults2 = GetDefaultByType (subclass); diff --git a/src/d_main.cpp b/src/d_main.cpp index f275b4e8..e8cf00d0 100644 --- a/src/d_main.cpp +++ b/src/d_main.cpp @@ -187,7 +187,7 @@ bool devparm; // started game with -devparm const char *D_DrawIcon; // [RH] Patch name of icon to draw on next refresh int NoWipe; // [RH] Allow wipe? (Needs to be set each time) bool singletics = false; // debug flag to cancel adaptiveness -char startmap[8]; +FString startmap; bool autostart; bool advancedemo; FILE *debugfile; @@ -1053,7 +1053,7 @@ void D_DoAdvanceDemo (void) { BorderNeedRefresh = screen->GetPageCount (); democount++; - sprintf (demoname + 4, "%d", democount); + mysnprintf (demoname + 4, countof(demoname) - 4, "%d", democount); if (Wads.CheckNumForName (demoname) < 0) { demosequence = 0; @@ -1865,7 +1865,7 @@ static const char *BaseFileSearch (const char *file, const char *ext, bool lookf if (lookfirstinprogdir) { - sprintf (wad, "%s%s%s", progdir.GetChars(), progdir[progdir.Len() - 1] != '/' ? "/" : "", file); + mysnprintf (wad, countof(wad), "%s%s%s", progdir.GetChars(), progdir[progdir.Len() - 1] != '/' ? "/" : "", file); if (FileExists (wad)) { return wad; @@ -1874,7 +1874,7 @@ static const char *BaseFileSearch (const char *file, const char *ext, bool lookf if (FileExists (file)) { - sprintf (wad, "%s", file); + mysnprintf (wad, countof(wad), "%s", file); return wad; } @@ -1914,7 +1914,7 @@ static const char *BaseFileSearch (const char *file, const char *ext, bool lookf } if (dir != NULL) { - sprintf (wad, "%s%s%s", dir, dir[strlen (dir) - 1] != '/' ? "/" : "", file); + mysnprintf (wad, countof(wad), "%s%s%s", dir, dir[strlen (dir) - 1] != '/' ? "/" : "", file); if (FileExists (wad)) { return wad; @@ -2246,11 +2246,11 @@ void D_DoomMain (void) // get skill / episode / map from parms if (gameinfo.gametype != GAME_Hexen) { - strcpy (startmap, (gameinfo.flags & GI_MAPxx) ? "MAP01" : "E1M1"); + startmap = (gameinfo.flags & GI_MAPxx) ? "MAP01" : "E1M1"; } else { - strcpy (startmap, "&wt@01"); + startmap = "&wt@01"; } autostart = false; @@ -2282,7 +2282,7 @@ void D_DoomMain (void) } } - strncpy (startmap, CalcMapName (ep, map), 8); + startmap = CalcMapName (ep, map); autostart = true; } @@ -2296,7 +2296,7 @@ void D_DoomMain (void) } else { - strncpy (startmap, Args->GetArg (p+1), 8); + startmap = Args->GetArg (p + 1); Args->GetArg (p)[0] = '-'; autostart = true; } @@ -2358,7 +2358,7 @@ void D_DoomMain (void) if (autostart) { FString temp; - temp.Format ("Warp to map %s, Skill %d ", startmap, gameskill + 1); + temp.Format ("Warp to map %s, Skill %d ", startmap.GetChars(), gameskill + 1); StartScreen->AppendStatusLine(temp); } diff --git a/src/d_net.cpp b/src/d_net.cpp index 83db8f21..a7cc718f 100644 --- a/src/d_net.cpp +++ b/src/d_net.cpp @@ -1379,7 +1379,7 @@ bool DoArbitrate (void *userdata) stream = &netbuffer[4]; s = ReadString (&stream); - strncpy (startmap, s, 8); + startmap = FString(s, 8); delete[] s; rngseed = ReadLong (&stream); C_ReadCVars (&stream); @@ -1600,10 +1600,10 @@ void D_CheckNetGame (void) if (Args->CheckParm ("-debugfile")) { - char filename[20]; - sprintf (filename,"debug%i.txt",consoleplayer); - Printf ("debug output to: %s\n",filename); - debugfile = fopen (filename,"w"); + char filename[20]; + mysnprintf (filename, countof(filename), "debug%i.txt", consoleplayer); + Printf ("debug output to: %s\n", filename); + debugfile = fopen (filename, "w"); } if (netgame) diff --git a/src/d_netinfo.cpp b/src/d_netinfo.cpp index 1f946814..af5745c5 100644 --- a/src/d_netinfo.cpp +++ b/src/d_netinfo.cpp @@ -411,7 +411,7 @@ void D_UserInfoChanged (FBaseCVar *cvar) if (4 + strlen(cvar->GetName()) + escaped_val.Len() > 256) I_Error ("User info descriptor too big"); - sprintf (foo, "\\%s\\%s", cvar->GetName(), escaped_val.GetChars()); + mysnprintf (foo, countof(foo), "\\%s\\%s", cvar->GetName(), escaped_val.GetChars()); Net_WriteByte (DEM_UINFCHANGED); Net_WriteString (foo); diff --git a/src/dobjtype.cpp b/src/dobjtype.cpp index 537bf84d..5866e89f 100644 --- a/src/dobjtype.cpp +++ b/src/dobjtype.cpp @@ -145,7 +145,14 @@ void PClass::StaticFreeData (PClass *type) delete type->ActorInfo; type->ActorInfo = NULL; } - delete type; + if (type->bRuntimeClass != 2) + { + delete type; + } + else + { + type->Symbols.ReleaseSymbols(); + } } else { @@ -290,6 +297,42 @@ PClass *PClass::CreateDerivedClass (FName name, unsigned int size) return type; } +// This is used by DECORATE to assign ActorInfos to internal classes +void PClass::InitializeActorInfo () +{ + Symbols.SetParentTable (&ParentClass->Symbols); + Defaults = new BYTE[Size]; + if (ParentClass->Defaults != NULL) + { + memcpy (Defaults, ParentClass->Defaults, Size); + if (Size > ParentClass->Size) + { + memset (Defaults + ParentClass->Size, 0, Size - ParentClass->Size); + } + } + else + { + memset (Defaults, 0, Size); + } + + bRuntimeClass = 2; // Class is internal but actor data external + + FActorInfo *info = ActorInfo = new FActorInfo; + info->Class = this; + info->GameFilter = GAME_Any; + info->SpawnID = 0; + info->DoomEdNum = -1; + info->OwnedStates = NULL; + info->NumOwnedStates = 0; + info->Replacement = NULL; + info->Replacee = NULL; + info->StateList = NULL; + info->DamageFactors = NULL; + info->PainChances = NULL; + m_RuntimeActors.Push (this); +} + + // Create the FlatPointers array, if it doesn't exist already. // It comprises all the Pointers from superclasses plus this class's own Pointers. // If this class does not define any new Pointers, then FlatPointers will be set diff --git a/src/dobjtype.h b/src/dobjtype.h index 626c7c10..bb86753c 100644 --- a/src/dobjtype.h +++ b/src/dobjtype.h @@ -103,7 +103,7 @@ struct PClass PClass *HashNext; FMetaTable Meta; BYTE *Defaults; - bool bRuntimeClass; // class was defined at run-time, not compile-time + BYTE bRuntimeClass; // class was defined at run-time, not compile-time unsigned short ClassIndex; PSymbolTable Symbols; @@ -113,6 +113,7 @@ struct PClass void InsertIntoHash (); DObject *CreateNew () const; PClass *CreateDerivedClass (FName name, unsigned int size); + void InitializeActorInfo (); void BuildFlatPointers (); void FreeStateList(); diff --git a/src/doomstat.h b/src/doomstat.h index 182bed8d..a58aca80 100644 --- a/src/doomstat.h +++ b/src/doomstat.h @@ -68,7 +68,7 @@ extern GameMission_t gamemission; // Selected skill type, map etc. // -extern char startmap[8]; // [RH] Actual map name now +extern FString startmap; // [RH] Actual map name now extern bool autostart; diff --git a/src/doomtype.h b/src/doomtype.h index dac73fe1..95287d6e 100644 --- a/src/doomtype.h +++ b/src/doomtype.h @@ -153,23 +153,23 @@ enum // // Fixed point, 32bit as 16.16. // -#define FRACBITS 16 -#define FRACUNIT (1<DrawTexture (TexMan(name), (320-13*8)/2, (200-8*8)/2, DTA_320x200, true, TAG_DONE); } } diff --git a/src/g_game.cpp b/src/g_game.cpp index dab6b5f4..0de51d25 100644 --- a/src/g_game.cpp +++ b/src/g_game.cpp @@ -1960,13 +1960,13 @@ static void PutSaveComment (FILE *file) // Get level name //strcpy (comment, level.level_name); - sprintf(comment, "%s - %s", level.mapname, level.level_name); + mysnprintf(comment, countof(comment), "%s - %s", level.mapname, level.level_name); len = (WORD)strlen (comment); comment[len] = '\n'; // Append elapsed time levelTime = level.time / TICRATE; - sprintf (comment+len+1, "time: %02d:%02d:%02d", + mysnprintf (comment + len + 1, countof(comment) - len - 1, "time: %02d:%02d:%02d", levelTime/3600, (levelTime%3600)/60, levelTime%60); comment[len+16] = 0; diff --git a/src/g_heretic/a_chicken.cpp b/src/g_heretic/a_chicken.cpp index db2fe529..73ee1f84 100644 --- a/src/g_heretic/a_chicken.cpp +++ b/src/g_heretic/a_chicken.cpp @@ -12,166 +12,22 @@ #include "d_event.h" #include "gstrings.h" +void P_UpdateBeak (AActor *actor); + static FRandom pr_chickenplayerthink ("ChickenPlayerThink"); static FRandom pr_chicattack ("ChicAttack"); static FRandom pr_feathers ("Feathers"); static FRandom pr_beakatkpl1 ("BeakAtkPL1"); static FRandom pr_beakatkpl2 ("BeakAtkPL2"); -void A_BeakRaise (AActor *); -void A_BeakAttackPL1 (AActor *); -void A_BeakAttackPL2 (AActor *); - -void A_Feathers (AActor *); -void A_ChicAttack (AActor *); - -void P_UpdateBeak (AActor *); - -// Beak puff ---------------------------------------------------------------- - -class ABeakPuff : public AStaffPuff -{ - DECLARE_STATELESS_ACTOR (ABeakPuff, AStaffPuff) -public: - void BeginPlay (); -}; - -IMPLEMENT_STATELESS_ACTOR (ABeakPuff, Heretic, -1, 0) - PROP_Mass (5) - PROP_RenderStyle (STYLE_Translucent) - PROP_Alpha (HR_SHADOW) - PROP_AttackSound ("chicken/attack") -END_DEFAULTS - -void ABeakPuff::BeginPlay () -{ - Super::BeginPlay (); - momz = FRACUNIT; -} - -// Beak --------------------------------------------------------------------- - -class ABeak : public AWeapon -{ - DECLARE_ACTOR (ABeak, AWeapon) -}; - -class ABeakPowered : public ABeak -{ - DECLARE_STATELESS_ACTOR (ABeakPowered, ABeak) -}; - -FState ABeak::States[] = -{ -#define S_BEAKREADY 0 - S_NORMAL (BEAK, 'A', 1, A_WeaponReady , &States[S_BEAKREADY]), - -#define S_BEAKDOWN (S_BEAKREADY+1) - S_NORMAL (BEAK, 'A', 1, A_Lower , &States[S_BEAKDOWN]), - -#define S_BEAKUP (S_BEAKDOWN+1) - S_NORMAL (BEAK, 'A', 1, A_BeakRaise , &States[S_BEAKUP]), - -#define S_BEAKATK1 (S_BEAKUP+1) - S_NORMAL (BEAK, 'A', 18, A_BeakAttackPL1 , &States[S_BEAKREADY]), - -#define S_BEAKATK2 (S_BEAKATK1+1) - S_NORMAL (BEAK, 'A', 12, A_BeakAttackPL2 , &States[S_BEAKREADY]) -}; - -IMPLEMENT_ACTOR (ABeak, Heretic, -1, 0) - PROP_Weapon_SelectionOrder (10000) - PROP_Weapon_Flags (WIF_DONTBOB|WIF_BOT_MELEE) - PROP_Weapon_UpState (S_BEAKUP) - PROP_Weapon_DownState (S_BEAKDOWN) - PROP_Weapon_ReadyState (S_BEAKREADY) - PROP_Weapon_AtkState (S_BEAKATK1) - PROP_Weapon_HoldAtkState (S_BEAKATK1) - PROP_Weapon_YAdjust (15) - PROP_Weapon_SisterType ("BeakPowered") -END_DEFAULTS - -IMPLEMENT_STATELESS_ACTOR (ABeakPowered, Heretic, -1, 0) - PROP_Weapon_Flags (WIF_DONTBOB|WIF_BOT_MELEE|WIF_POWERED_UP) - PROP_Weapon_AtkState (S_BEAKATK2) - PROP_Weapon_HoldAtkState (S_BEAKATK2) - PROP_Weapon_SisterType ("Beak") -END_DEFAULTS - -// Chicken player ----------------------------------------------------------- - class AChickenPlayer : public APlayerPawn { - DECLARE_ACTOR (AChickenPlayer, APlayerPawn) + DECLARE_CLASS (AChickenPlayer, APlayerPawn) public: void MorphPlayerThink (); }; -FState AChickenPlayer::States[] = -{ -#define S_CHICPLAY 0 - S_NORMAL (CHKN, 'A', -1, NULL , NULL), - -#define S_CHICPLAY_RUN (S_CHICPLAY+1) - S_NORMAL (CHKN, 'A', 3, NULL , &States[S_CHICPLAY_RUN+1]), - S_NORMAL (CHKN, 'B', 3, NULL , &States[S_CHICPLAY_RUN+2]), - S_NORMAL (CHKN, 'A', 3, NULL , &States[S_CHICPLAY_RUN+3]), - S_NORMAL (CHKN, 'B', 3, NULL , &States[S_CHICPLAY_RUN+0]), - -#define S_CHICPLAY_ATK (S_CHICPLAY_RUN+4) - S_NORMAL (CHKN, 'C', 12, NULL , &States[S_CHICPLAY]), - -#define S_CHICPLAY_PAIN (S_CHICPLAY_ATK+1) - S_NORMAL (CHKN, 'D', 4, A_Feathers , &States[S_CHICPLAY_PAIN+1]), - S_NORMAL (CHKN, 'C', 4, A_Pain , &States[S_CHICPLAY]), - -#define S_CHICPLAY_DIE (S_CHICPLAY_PAIN+2) - S_NORMAL (CHKN, 'E', 6, A_Scream , &States[S_CHICPLAY_DIE+1]), - S_NORMAL (CHKN, 'F', 6, A_Feathers , &States[S_CHICPLAY_DIE+2]), - S_NORMAL (CHKN, 'G', 6, NULL , &States[S_CHICPLAY_DIE+3]), - S_NORMAL (CHKN, 'H', 6, A_NoBlocking , &States[S_CHICPLAY_DIE+4]), - S_NORMAL (CHKN, 'I', 6, NULL , &States[S_CHICPLAY_DIE+5]), - S_NORMAL (CHKN, 'J', 6, NULL , &States[S_CHICPLAY_DIE+6]), - S_NORMAL (CHKN, 'K', 6, NULL , &States[S_CHICPLAY_DIE+7]), - S_NORMAL (CHKN, 'L', -1, NULL , NULL) -}; - -IMPLEMENT_ACTOR (AChickenPlayer, Heretic, -1, 0) - PROP_SpawnHealth (30) - PROP_RadiusFixed (16) - PROP_HeightFixed (24) - PROP_PainChance (255) - PROP_SpeedFixed (1) - PROP_Gravity (FRACUNIT/8) - PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_DROPOFF|MF_NOTDMATCH|MF_FRIENDLY) - PROP_Flags2 (MF2_WINDTHRUST|MF2_SLIDE|MF2_PASSMOBJ|MF2_PUSHWALL|MF2_FLOORCLIP|MF2_TELESTOMP) - PROP_Flags3 (MF3_NOBLOCKMONST) - PROP_Flags4 (MF4_NOSKIN) - - PROP_SpawnState (S_CHICPLAY) - PROP_SeeState (S_CHICPLAY_RUN) - PROP_PainState (S_CHICPLAY_PAIN) - PROP_MissileState (S_CHICPLAY_ATK) - PROP_MeleeState (S_CHICPLAY_ATK) - PROP_DeathState (S_CHICPLAY_DIE) - - // [GRB] - PROP_PlayerPawn_JumpZ (FRACUNIT) - PROP_PlayerPawn_ViewHeight (21*FRACUNIT) - PROP_PlayerPawn_ForwardMove1 (FRACUNIT * 2500 / 2048) - PROP_PlayerPawn_ForwardMove2 (FRACUNIT * 2500 / 2048) - PROP_PlayerPawn_SideMove1 (FRACUNIT * 2500 / 2048) - PROP_PlayerPawn_SideMove2 (FRACUNIT * 2500 / 2048) - PROP_PlayerPawn_MorphWeapon ("Beak") - - PROP_PainSound ("chicken/pain") - PROP_DeathSound ("chicken/death") -END_DEFAULTS - -AT_GAME_SET(ChickenPlayer) -{ - RUNTIME_CLASS(AChickenPlayer)->Meta.SetMetaString(APMETA_SoundClass, "chicken"); -} +IMPLEMENT_CLASS(AChickenPlayer) void AChickenPlayer::MorphPlayerThink () { @@ -200,102 +56,6 @@ void AChickenPlayer::MorphPlayerThink () } } -// Chicken (non-player) ----------------------------------------------------- - -class AChicken : public AMorphedMonster -{ - DECLARE_ACTOR (AChicken, AMorphedMonster) -}; - -FState AChicken::States[] = -{ -#define S_CHICKEN_LOOK 0 - S_NORMAL (CHKN, 'A', 10, A_Look , &States[S_CHICKEN_LOOK+1]), - S_NORMAL (CHKN, 'B', 10, A_Look , &States[S_CHICKEN_LOOK+0]), - -#define S_CHICKEN_WALK (S_CHICKEN_LOOK+2) - S_NORMAL (CHKN, 'A', 3, A_Chase , &States[S_CHICKEN_WALK+1]), - S_NORMAL (CHKN, 'B', 3, A_Chase , &States[S_CHICKEN_WALK+0]), - -#define S_CHICKEN_PAIN (S_CHICKEN_WALK+2) - S_NORMAL (CHKN, 'D', 5, A_Feathers , &States[S_CHICKEN_PAIN+1]), - S_NORMAL (CHKN, 'C', 5, A_Pain , &States[S_CHICKEN_WALK+0]), - -#define S_CHICKEN_ATK (S_CHICKEN_PAIN+2) - S_NORMAL (CHKN, 'A', 8, A_FaceTarget , &States[S_CHICKEN_ATK+1]), - S_NORMAL (CHKN, 'C', 10, A_ChicAttack , &States[S_CHICKEN_WALK+0]), - -#define S_CHICKEN_DIE (S_CHICKEN_ATK+2) - S_NORMAL (CHKN, 'E', 6, A_Scream , &States[S_CHICKEN_DIE+1]), - S_NORMAL (CHKN, 'F', 6, A_Feathers , &States[S_CHICKEN_DIE+2]), - S_NORMAL (CHKN, 'G', 6, NULL , &States[S_CHICKEN_DIE+3]), - S_NORMAL (CHKN, 'H', 6, A_NoBlocking , &States[S_CHICKEN_DIE+4]), - S_NORMAL (CHKN, 'I', 6, NULL , &States[S_CHICKEN_DIE+5]), - S_NORMAL (CHKN, 'J', 6, NULL , &States[S_CHICKEN_DIE+6]), - S_NORMAL (CHKN, 'K', 6, NULL , &States[S_CHICKEN_DIE+7]), - S_NORMAL (CHKN, 'L', -1, NULL , NULL) -}; - -IMPLEMENT_ACTOR (AChicken, Heretic, -1, 122) - PROP_SpawnHealth (10) - PROP_RadiusFixed (9) - PROP_HeightFixed (22) - PROP_Mass (40) - PROP_SpeedFixed (4) - PROP_PainChance (200) - PROP_Flags (MF_SOLID|MF_SHOOTABLE) - PROP_Flags2 (MF2_MCROSS|MF2_WINDTHRUST|MF2_FLOORCLIP|MF2_PASSMOBJ|MF2_PUSHWALL) - PROP_Flags3 (MF3_DONTMORPH|MF3_ISMONSTER) - - PROP_SpawnState (S_CHICKEN_LOOK) - PROP_SeeState (S_CHICKEN_WALK) - PROP_PainState (S_CHICKEN_PAIN) - PROP_MeleeState (S_CHICKEN_ATK) - PROP_DeathState (S_CHICKEN_DIE) - - PROP_SeeSound ("chicken/pain") - PROP_AttackSound ("chicken/attack") - PROP_PainSound ("chicken/pain") - PROP_DeathSound ("chicken/death") - PROP_ActiveSound ("chicken/active") - PROP_Obituary("$OB_CHICKEN") -END_DEFAULTS - -// Feather ------------------------------------------------------------------ - -class AFeather : public AActor -{ - DECLARE_ACTOR (AFeather, AActor) -}; - -FState AFeather::States[] = -{ -#define S_FEATHER 0 - S_NORMAL (CHKN, 'M', 3, NULL , &States[S_FEATHER+1]), - S_NORMAL (CHKN, 'N', 3, NULL , &States[S_FEATHER+2]), - S_NORMAL (CHKN, 'O', 3, NULL , &States[S_FEATHER+3]), - S_NORMAL (CHKN, 'P', 3, NULL , &States[S_FEATHER+4]), - S_NORMAL (CHKN, 'Q', 3, NULL , &States[S_FEATHER+5]), - S_NORMAL (CHKN, 'P', 3, NULL , &States[S_FEATHER+6]), - S_NORMAL (CHKN, 'O', 3, NULL , &States[S_FEATHER+7]), - S_NORMAL (CHKN, 'N', 3, NULL , &States[S_FEATHER+0]), - -#define S_FEATHERX (S_FEATHER+8) - S_NORMAL (CHKN, 'N', 6, NULL , NULL) -}; - -IMPLEMENT_ACTOR (AFeather, Heretic, -1, 121) - PROP_RadiusFixed (2) - PROP_HeightFixed (4) - PROP_Gravity (FRACUNIT/8) - PROP_Flags (MF_MISSILE|MF_DROPOFF) - PROP_Flags2 (MF2_NOTELEPORT|MF2_CANNOTPUSH|MF2_WINDTHRUST) - PROP_Flags3 (MF3_DONTSPLASH) - - PROP_SpawnState (S_FEATHER) - PROP_DeathState (S_FEATHERX) -END_DEFAULTS - //---------------------------------------------------------------------------- // // PROC A_ChicAttack @@ -338,12 +98,12 @@ void A_Feathers (AActor *actor) } for (i = 0; i < count; i++) { - mo = Spawn (actor->x, actor->y, actor->z+20*FRACUNIT, NO_REPLACE); + mo = Spawn("Feather", actor->x, actor->y, actor->z+20*FRACUNIT, NO_REPLACE); mo->target = actor; mo->momx = pr_feathers.Random2() << 8; mo->momy = pr_feathers.Random2() << 8; mo->momz = FRACUNIT + (pr_feathers() << 9); - mo->SetState (&AFeather::States[S_FEATHER+(pr_feathers()&7)]); + mo->SetState (mo->SpawnState + (pr_feathers()&7)); } } @@ -413,7 +173,7 @@ void A_BeakAttackPL1 (AActor *actor) damage = 1 + (pr_beakatkpl1()&3); angle = player->mo->angle; slope = P_AimLineAttack (player->mo, angle, MELEERANGE, &linetarget); - P_LineAttack (player->mo, angle, MELEERANGE, slope, damage, NAME_Melee, RUNTIME_CLASS(ABeakPuff), true); + P_LineAttack (player->mo, angle, MELEERANGE, slope, damage, NAME_Melee, "BeakPuff", true); if (linetarget) { player->mo->angle = R_PointToAngle2 (player->mo->x, @@ -446,7 +206,7 @@ void A_BeakAttackPL2 (AActor *actor) damage = pr_beakatkpl2.HitDice (4); angle = player->mo->angle; slope = P_AimLineAttack (player->mo, angle, MELEERANGE, &linetarget); - P_LineAttack (player->mo, angle, MELEERANGE, slope, damage, NAME_Melee, RUNTIME_CLASS(ABeakPuff), true); + P_LineAttack (player->mo, angle, MELEERANGE, slope, damage, NAME_Melee, "BeakPuff", true); if (linetarget) { player->mo->angle = R_PointToAngle2 (player->mo->x, diff --git a/src/g_heretic/a_dsparil.cpp b/src/g_heretic/a_dsparil.cpp index 203f360f..6f0aff39 100644 --- a/src/g_heretic/a_dsparil.cpp +++ b/src/g_heretic/a_dsparil.cpp @@ -17,368 +17,6 @@ static FRandom pr_s2d ("Srcr2Decide"); static FRandom pr_s2a ("Srcr2Attack"); static FRandom pr_bluespark ("BlueSpark"); -void A_Sor1Chase (AActor *); -void A_Sor1Pain (AActor *); -void A_Srcr1Attack (AActor *); -void A_SorZap (AActor *); -void A_SorcererRise (AActor *); -void A_SorRise (AActor *); -void A_SorSightSnd (AActor *); -void A_Srcr2Decide (AActor *); -void A_Srcr2Attack (AActor *); -void A_Sor2DthInit (AActor *); -void A_SorDSph (AActor *); -void A_Sor2DthLoop (AActor *); -void A_SorDExp (AActor *); -void A_SorDBon (AActor *); -void A_BlueSpark (AActor *); -void A_GenWizard (AActor *); - -// Boss spot ---------------------------------------------------------------- - -class ABossSpot : public ASpecialSpot -{ - DECLARE_STATELESS_ACTOR (ABossSpot, ASpecialSpot) -}; - -IMPLEMENT_STATELESS_ACTOR (ABossSpot, Heretic, 56, 141) - PROP_RenderFlags (RF_INVISIBLE) -END_DEFAULTS - -// Sorcerer (D'Sparil on his serpent) --------------------------------------- - -class ASorcerer1 : public AActor -{ - DECLARE_ACTOR (ASorcerer1, AActor) -}; - -FState ASorcerer1::States[] = -{ -#define S_SRCR1_LOOK 0 - S_NORMAL (SRCR, 'A', 10, A_Look , &States[S_SRCR1_LOOK+1]), - S_NORMAL (SRCR, 'B', 10, A_Look , &States[S_SRCR1_LOOK+0]), - -#define S_SRCR1_WALK (S_SRCR1_LOOK+2) - S_NORMAL (SRCR, 'A', 5, A_Sor1Chase , &States[S_SRCR1_WALK+1]), - S_NORMAL (SRCR, 'B', 5, A_Sor1Chase , &States[S_SRCR1_WALK+2]), - S_NORMAL (SRCR, 'C', 5, A_Sor1Chase , &States[S_SRCR1_WALK+3]), - S_NORMAL (SRCR, 'D', 5, A_Sor1Chase , &States[S_SRCR1_WALK+0]), - -#define S_SRCR1_PAIN (S_SRCR1_WALK+4) - S_NORMAL (SRCR, 'Q', 6, A_Sor1Pain , &States[S_SRCR1_WALK+0]), - -#define S_SRCR1_ATK (S_SRCR1_PAIN+1) - S_NORMAL (SRCR, 'Q', 7, A_FaceTarget , &States[S_SRCR1_ATK+1]), - S_NORMAL (SRCR, 'R', 6, A_FaceTarget , &States[S_SRCR1_ATK+2]), - S_NORMAL (SRCR, 'S', 10, A_Srcr1Attack , &States[S_SRCR1_WALK+0]), - S_NORMAL (SRCR, 'S', 10, A_FaceTarget , &States[S_SRCR1_ATK+4]), - S_NORMAL (SRCR, 'Q', 7, A_FaceTarget , &States[S_SRCR1_ATK+5]), - S_NORMAL (SRCR, 'R', 6, A_FaceTarget , &States[S_SRCR1_ATK+6]), - S_NORMAL (SRCR, 'S', 10, A_Srcr1Attack , &States[S_SRCR1_WALK+0]), - -#define S_SRCR1_DIE (S_SRCR1_ATK+7) - S_NORMAL (SRCR, 'E', 7, NULL , &States[S_SRCR1_DIE+1]), - S_NORMAL (SRCR, 'F', 7, A_Scream , &States[S_SRCR1_DIE+2]), - S_NORMAL (SRCR, 'G', 7, NULL , &States[S_SRCR1_DIE+3]), - S_NORMAL (SRCR, 'H', 6, NULL , &States[S_SRCR1_DIE+4]), - S_NORMAL (SRCR, 'I', 6, NULL , &States[S_SRCR1_DIE+5]), - S_NORMAL (SRCR, 'J', 6, NULL , &States[S_SRCR1_DIE+6]), - S_NORMAL (SRCR, 'K', 6, NULL , &States[S_SRCR1_DIE+7]), - S_NORMAL (SRCR, 'L', 25, A_SorZap , &States[S_SRCR1_DIE+8]), - S_NORMAL (SRCR, 'M', 5, NULL , &States[S_SRCR1_DIE+9]), - S_NORMAL (SRCR, 'N', 5, NULL , &States[S_SRCR1_DIE+10]), - S_NORMAL (SRCR, 'O', 4, NULL , &States[S_SRCR1_DIE+11]), - S_NORMAL (SRCR, 'L', 20, A_SorZap , &States[S_SRCR1_DIE+12]), - S_NORMAL (SRCR, 'M', 5, NULL , &States[S_SRCR1_DIE+13]), - S_NORMAL (SRCR, 'N', 5, NULL , &States[S_SRCR1_DIE+14]), - S_NORMAL (SRCR, 'O', 4, NULL , &States[S_SRCR1_DIE+15]), - S_NORMAL (SRCR, 'L', 12, NULL , &States[S_SRCR1_DIE+16]), - S_NORMAL (SRCR, 'P', -1, A_SorcererRise , NULL) -}; - -IMPLEMENT_ACTOR (ASorcerer1, Heretic, 7, 142) - PROP_SpawnHealth (2000) - PROP_RadiusFixed (28) - PROP_HeightFixed (100) - PROP_Mass (800) - PROP_SpeedFixed (16) - PROP_PainChance (56) - PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL) - PROP_Flags2 (MF2_MCROSS|MF2_FLOORCLIP|MF2_PASSMOBJ|MF2_PUSHWALL|MF2_BOSS) - PROP_Flags3 (MF3_DONTMORPH|MF3_NORADIUSDMG|MF3_NOTARGET) - PROP_Flags4 (MF4_NOICEDEATH) - - PROP_SpawnState (S_SRCR1_LOOK) - PROP_SeeState (S_SRCR1_WALK) - PROP_PainState (S_SRCR1_PAIN) - PROP_MissileState (S_SRCR1_ATK) - PROP_DeathState (S_SRCR1_DIE) - - PROP_SeeSound ("dsparilserpent/sight") - PROP_AttackSound ("dsparilserpent/attack") - PROP_PainSound ("dsparilserpent/pain") - PROP_DeathSound ("dsparilserpent/death") - PROP_ActiveSound ("dsparilserpent/active") - PROP_Obituary("$OB_DSPARIL1") - PROP_HitObituary("$OB_DSPARIL1HIT") -END_DEFAULTS - -// Sorcerer FX 1 ------------------------------------------------------------ - -class ASorcererFX1 : public AActor -{ - DECLARE_ACTOR (ASorcererFX1, AActor) -}; - -FState ASorcererFX1::States[] = -{ -#define S_SRCRFX1 0 - S_BRIGHT (FX14, 'A', 6, NULL , &States[S_SRCRFX1+1]), - S_BRIGHT (FX14, 'B', 6, NULL , &States[S_SRCRFX1+2]), - S_BRIGHT (FX14, 'C', 6, NULL , &States[S_SRCRFX1+0]), - -#define S_SRCRFXI1 (S_SRCRFX1+3) - S_BRIGHT (FX14, 'D', 5, NULL , &States[S_SRCRFXI1+1]), - S_BRIGHT (FX14, 'E', 5, NULL , &States[S_SRCRFXI1+2]), - S_BRIGHT (FX14, 'F', 5, NULL , &States[S_SRCRFXI1+3]), - S_BRIGHT (FX14, 'G', 5, NULL , &States[S_SRCRFXI1+4]), - S_BRIGHT (FX14, 'H', 5, NULL , NULL) -}; - -IMPLEMENT_ACTOR (ASorcererFX1, Heretic, -1, 144) - PROP_RadiusFixed (10) - PROP_HeightFixed (10) - PROP_SpeedFixed (20) - PROP_Damage (10) - PROP_DamageType (NAME_Fire) - PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY) - PROP_Flags2 (MF2_NOTELEPORT) - PROP_RenderStyle (STYLE_Add) - - PROP_SpawnState (S_SRCRFX1) - PROP_DeathState (S_SRCRFXI1) -END_DEFAULTS - -AT_SPEED_SET (SorcererFX1, speed) -{ - SimpleSpeedSetter (ASorcererFX1, 20*FRACUNIT, 28*FRACUNIT, speed); -} - -// Sorcerer 2 (D'Sparil without his serpent) -------------------------------- - -FState ASorcerer2::States[] = -{ -#define S_SOR2_LOOK 0 - S_NORMAL (SOR2, 'M', 10, A_Look , &States[S_SOR2_LOOK+1]), - S_NORMAL (SOR2, 'N', 10, A_Look , &States[S_SOR2_LOOK+0]), - -#define S_SOR2_WALK (S_SOR2_LOOK+2) - S_NORMAL (SOR2, 'M', 4, A_Chase , &States[S_SOR2_WALK+1]), - S_NORMAL (SOR2, 'N', 4, A_Chase , &States[S_SOR2_WALK+2]), - S_NORMAL (SOR2, 'O', 4, A_Chase , &States[S_SOR2_WALK+3]), - S_NORMAL (SOR2, 'P', 4, A_Chase , &States[S_SOR2_WALK+0]), - -#define S_SOR2_RISE (S_SOR2_WALK+4) - S_NORMAL (SOR2, 'A', 4, NULL , &States[S_SOR2_RISE+1]), - S_NORMAL (SOR2, 'B', 4, NULL , &States[S_SOR2_RISE+2]), - S_NORMAL (SOR2, 'C', 4, A_SorRise , &States[S_SOR2_RISE+3]), - S_NORMAL (SOR2, 'D', 4, NULL , &States[S_SOR2_RISE+4]), - S_NORMAL (SOR2, 'E', 4, NULL , &States[S_SOR2_RISE+5]), - S_NORMAL (SOR2, 'F', 4, NULL , &States[S_SOR2_RISE+6]), - S_NORMAL (SOR2, 'G', 12, A_SorSightSnd , &States[S_SOR2_WALK+0]), - -#define S_SOR2_PAIN (S_SOR2_RISE+7) - S_NORMAL (SOR2, 'Q', 3, NULL , &States[S_SOR2_PAIN+1]), - S_NORMAL (SOR2, 'Q', 6, A_Pain , &States[S_SOR2_WALK+0]), - -#define S_SOR2_ATK (S_SOR2_PAIN+2) - S_NORMAL (SOR2, 'R', 9, A_Srcr2Decide , &States[S_SOR2_ATK+1]), - S_NORMAL (SOR2, 'S', 9, A_FaceTarget , &States[S_SOR2_ATK+2]), - S_NORMAL (SOR2, 'T', 20, A_Srcr2Attack , &States[S_SOR2_WALK+0]), - -#define S_SOR2_TELE (S_SOR2_ATK+3) - S_NORMAL (SOR2, 'L', 6, NULL , &States[S_SOR2_TELE+1]), - S_NORMAL (SOR2, 'K', 6, NULL , &States[S_SOR2_TELE+2]), - S_NORMAL (SOR2, 'J', 6, NULL , &States[S_SOR2_TELE+3]), - S_NORMAL (SOR2, 'I', 6, NULL , &States[S_SOR2_TELE+4]), - S_NORMAL (SOR2, 'H', 6, NULL , &States[S_SOR2_TELE+5]), - S_NORMAL (SOR2, 'G', 6, NULL , &States[S_SOR2_WALK+0]), - -#define S_SOR2_DIE (S_SOR2_TELE+6) - S_NORMAL (SDTH, 'A', 8, A_Sor2DthInit , &States[S_SOR2_DIE+1]), - S_NORMAL (SDTH, 'B', 8, NULL , &States[S_SOR2_DIE+2]), - S_NORMAL (SDTH, 'C', 8, A_SorDSph , &States[S_SOR2_DIE+3]), - S_NORMAL (SDTH, 'D', 7, NULL , &States[S_SOR2_DIE+4]), - S_NORMAL (SDTH, 'E', 7, NULL , &States[S_SOR2_DIE+5]), - S_NORMAL (SDTH, 'F', 7, A_Sor2DthLoop , &States[S_SOR2_DIE+6]), - S_NORMAL (SDTH, 'G', 6, A_SorDExp , &States[S_SOR2_DIE+7]), - S_NORMAL (SDTH, 'H', 6, NULL , &States[S_SOR2_DIE+8]), - S_NORMAL (SDTH, 'I', 18, NULL , &States[S_SOR2_DIE+9]), - S_NORMAL (SDTH, 'J', 6, A_NoBlocking , &States[S_SOR2_DIE+10]), - S_NORMAL (SDTH, 'K', 6, A_SorDBon , &States[S_SOR2_DIE+11]), - S_NORMAL (SDTH, 'L', 6, NULL , &States[S_SOR2_DIE+12]), - S_NORMAL (SDTH, 'M', 6, NULL , &States[S_SOR2_DIE+13]), - S_NORMAL (SDTH, 'N', 6, NULL , &States[S_SOR2_DIE+14]), - S_NORMAL (SDTH, 'O', -1, A_BossDeath , NULL) -}; - -IMPLEMENT_ACTOR (ASorcerer2, Heretic, -1, 143) - PROP_SpawnHealth (3500) - PROP_RadiusFixed (16) - PROP_HeightFixed (70) - PROP_Mass (300) - PROP_SpeedFixed (14) - PROP_PainChance (32) - PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL|MF_DROPOFF) - PROP_Flags2 (MF2_MCROSS|MF2_FLOORCLIP|MF2_PASSMOBJ|MF2_PUSHWALL|MF2_BOSS) - PROP_Flags3 (MF3_DONTMORPH|MF3_FULLVOLACTIVE|MF3_NORADIUSDMG|MF3_NOTARGET) - PROP_Flags4 (MF4_NOICEDEATH) - - PROP_SpawnState (S_SOR2_LOOK) - PROP_SeeState (S_SOR2_WALK) - PROP_PainState (S_SOR2_PAIN) - PROP_MissileState (S_SOR2_ATK) - PROP_DeathState (S_SOR2_DIE) - - PROP_SeeSound ("dsparil/sight") - PROP_AttackSound ("dsparil/attack") - PROP_PainSound ("dsparil/pain") - PROP_ActiveSound ("dsparil/active") - PROP_Obituary("$OB_DSPARIL2") - PROP_HitObituary("$OB_DSPARIL2HIT") -END_DEFAULTS - -// Sorcerer 2 FX 1 ---------------------------------------------------------- - -class ASorcerer2FX1 : public AActor -{ - DECLARE_ACTOR (ASorcerer2FX1, AActor) -public: - void GetExplodeParms (int &damage, int &distance, bool &hurtSource); -}; - -FState ASorcerer2FX1::States[] = -{ -#define S_SOR2FX1 0 - S_BRIGHT (FX16, 'A', 3, A_BlueSpark , &States[S_SOR2FX1+1]), - S_BRIGHT (FX16, 'B', 3, A_BlueSpark , &States[S_SOR2FX1+2]), - S_BRIGHT (FX16, 'C', 3, A_BlueSpark , &States[S_SOR2FX1+0]), - -#define S_SOR2FXI1 (S_SOR2FX1+3) - S_BRIGHT (FX16, 'G', 5, A_Explode , &States[S_SOR2FXI1+1]), - S_BRIGHT (FX16, 'H', 5, NULL , &States[S_SOR2FXI1+2]), - S_BRIGHT (FX16, 'I', 5, NULL , &States[S_SOR2FXI1+3]), - S_BRIGHT (FX16, 'J', 5, NULL , &States[S_SOR2FXI1+4]), - S_BRIGHT (FX16, 'K', 5, NULL , &States[S_SOR2FXI1+5]), - S_BRIGHT (FX16, 'L', 5, NULL , NULL) -}; - -IMPLEMENT_ACTOR (ASorcerer2FX1, Heretic, -1, 145) - PROP_RadiusFixed (10) - PROP_HeightFixed (6) - PROP_SpeedFixed (20) - PROP_Damage (1) - PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY) - PROP_Flags2 (MF2_NOTELEPORT) - PROP_RenderStyle (STYLE_Add) - - PROP_SpawnState (S_SOR2FX1) - PROP_DeathState (S_SOR2FXI1) -END_DEFAULTS - -AT_SPEED_SET (Sorcerer2FX1, speed) -{ - SimpleSpeedSetter (ASorcerer2FX1, 20*FRACUNIT, 28*FRACUNIT, speed); -} - -void ASorcerer2FX1::GetExplodeParms (int &damage, int &distance, bool &hurtSource) -{ - damage = 80 + (pr_s2fx1() & 31); -} - -// Sorcerer 2 FX Spark ------------------------------------------------------ - -class ASorcerer2FXSpark : public AActor -{ - DECLARE_ACTOR (ASorcerer2FXSpark, AActor) -}; - -FState ASorcerer2FXSpark::States[] = -{ -#define S_SOR2FXSPARK 0 - S_BRIGHT (FX16, 'D', 12, NULL , &States[S_SOR2FXSPARK+1]), - S_BRIGHT (FX16, 'E', 12, NULL , &States[S_SOR2FXSPARK+2]), - S_BRIGHT (FX16, 'F', 12, NULL , NULL) -}; - -IMPLEMENT_ACTOR (ASorcerer2FXSpark, Heretic, -1, 0) - PROP_RadiusFixed (20) - PROP_HeightFixed (16) - PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY) - PROP_Flags2 (MF2_NOTELEPORT|MF2_CANNOTPUSH) - PROP_RenderStyle (STYLE_Add) - - PROP_SpawnState (S_SOR2FXSPARK) -END_DEFAULTS - -// Sorcerer 2 FX 2 ---------------------------------------------------------- - -class ASorcerer2FX2 : public AActor -{ - DECLARE_ACTOR (ASorcerer2FX2, AActor) -}; - -FState ASorcerer2FX2::States[] = -{ -#define S_SOR2FX2 0 - S_BRIGHT (FX11, 'A', 35, NULL , &States[S_SOR2FX2+1]), - S_BRIGHT (FX11, 'A', 5, A_GenWizard , &States[S_SOR2FX2+2]), - S_BRIGHT (FX11, 'B', 5, NULL , &States[S_SOR2FX2+1]), - -#define S_SOR2FXI2 (S_SOR2FX2+3) - S_BRIGHT (FX11, 'C', 5, NULL , &States[S_SOR2FXI2+1]), - S_BRIGHT (FX11, 'D', 5, NULL , &States[S_SOR2FXI2+2]), - S_BRIGHT (FX11, 'E', 5, NULL , &States[S_SOR2FXI2+3]), - S_BRIGHT (FX11, 'F', 5, NULL , &States[S_SOR2FXI2+4]), - S_BRIGHT (FX11, 'G', 5, NULL , NULL) -}; - -IMPLEMENT_ACTOR (ASorcerer2FX2, Heretic, -1, 146) - PROP_RadiusFixed (10) - PROP_HeightFixed (6) - PROP_SpeedFixed (6) - PROP_Damage (10) - PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY) - PROP_Flags2 (MF2_NOTELEPORT) - PROP_RenderStyle (STYLE_Add) - - PROP_SpawnState (S_SOR2FX2) - PROP_DeathState (S_SOR2FXI2) -END_DEFAULTS - -// Sorcerer 2 Telefade ------------------------------------------------------ - -class ASorcerer2Telefade : public AActor -{ - DECLARE_ACTOR (ASorcerer2Telefade, AActor) -}; - -FState ASorcerer2Telefade::States[] = -{ -#define S_SOR2TELEFADE 0 - S_NORMAL (SOR2, 'G', 8, NULL , &States[S_SOR2TELEFADE+1]), - S_NORMAL (SOR2, 'H', 6, NULL , &States[S_SOR2TELEFADE+2]), - S_NORMAL (SOR2, 'I', 6, NULL , &States[S_SOR2TELEFADE+3]), - S_NORMAL (SOR2, 'J', 6, NULL , &States[S_SOR2TELEFADE+4]), - S_NORMAL (SOR2, 'K', 6, NULL , &States[S_SOR2TELEFADE+5]), - S_NORMAL (SOR2, 'L', 6, NULL , NULL) -}; - -IMPLEMENT_ACTOR (ASorcerer2Telefade, Heretic, -1, 0) - PROP_Flags (MF_NOBLOCKMAP) - PROP_SpawnState (S_SOR2TELEFADE) -END_DEFAULTS - //---------------------------------------------------------------------------- // // PROC A_Sor1Pain @@ -433,19 +71,21 @@ void A_Srcr1Attack (AActor *actor) P_TraceBleed (damage, actor->target, actor); return; } + + const PClass *fx = PClass::FindClass("SorcererFX1"); if (actor->health > (actor->GetDefault()->health/3)*2) { // Spit one fireball - P_SpawnMissileZ (actor, actor->z + 48*FRACUNIT, actor->target, RUNTIME_CLASS(ASorcererFX1)); + P_SpawnMissileZ (actor, actor->z + 48*FRACUNIT, actor->target, fx ); } else { // Spit three fireballs - mo = P_SpawnMissileZ (actor, actor->z + 48*FRACUNIT, actor->target, RUNTIME_CLASS(ASorcererFX1)); + mo = P_SpawnMissileZ (actor, actor->z + 48*FRACUNIT, actor->target, fx); if (mo != NULL) { momz = mo->momz; angle = mo->angle; - P_SpawnMissileAngleZ (actor, actor->z + 48*FRACUNIT, RUNTIME_CLASS(ASorcererFX1), angle-ANGLE_1*3, momz); - P_SpawnMissileAngleZ (actor, actor->z + 48*FRACUNIT, RUNTIME_CLASS(ASorcererFX1), angle+ANGLE_1*3, momz); + P_SpawnMissileAngleZ (actor, actor->z + 48*FRACUNIT, fx, angle-ANGLE_1*3, momz); + P_SpawnMissileAngleZ (actor, actor->z + 48*FRACUNIT, fx, angle+ANGLE_1*3, momz); } if (actor->health < actor->GetDefault()->health/3) { // Maybe attack again @@ -456,7 +96,7 @@ void A_Srcr1Attack (AActor *actor) else { // Set state to attack again actor->special1 = 1; - actor->SetState (&ASorcerer1::States[S_SRCR1_ATK+3]); + actor->SetState (actor->FindState("Missile2")); } } } @@ -473,8 +113,8 @@ void A_SorcererRise (AActor *actor) AActor *mo; actor->flags &= ~MF_SOLID; - mo = Spawn (actor->x, actor->y, actor->z, ALLOW_REPLACE); - mo->SetState (&ASorcerer2::States[S_SOR2_RISE]); + mo = Spawn("Sorcerer2", actor->x, actor->y, actor->z, ALLOW_REPLACE); + mo->SetState (mo->FindState("Rise")); mo->angle = actor->angle; mo->CopyFriendliness (actor, true); } @@ -496,7 +136,7 @@ void P_DSparilTeleport (AActor *actor) DSpotState *state = DSpotState::GetSpotState(); if (state == NULL) return; - spot = state->GetSpotWithMinDistance(RUNTIME_CLASS(ABossSpot), actor->x, actor->y, 128*FRACUNIT); + spot = state->GetSpotWithMinDistance(PClass::FindClass("BossSpot"), actor->x, actor->y, 128*FRACUNIT); if (spot == NULL) return; prevX = actor->x; @@ -504,9 +144,9 @@ void P_DSparilTeleport (AActor *actor) prevZ = actor->z; if (P_TeleportMove (actor, spot->x, spot->y, spot->z, false)) { - mo = Spawn (prevX, prevY, prevZ, ALLOW_REPLACE); + mo = Spawn("Sorcerer2Telefade", prevX, prevY, prevZ, ALLOW_REPLACE); S_Sound (mo, CHAN_BODY, "misc/teleport", 1, ATTN_NORM); - actor->SetState (&ASorcerer2::States[S_SOR2_TELE]); + actor->SetState (actor->FindState("Teleport")); S_Sound (actor, CHAN_BODY, "misc/teleport", 1, ATTN_NORM); actor->z = actor->floorz; actor->angle = spot->angle; @@ -565,14 +205,17 @@ void A_Srcr2Attack (AActor *actor) chance = actor->health < actor->GetDefault()->health/2 ? 96 : 48; if (pr_s2a() < chance) { // Wizard spawners - P_SpawnMissileAngle (actor, RUNTIME_CLASS(ASorcerer2FX2), - actor->angle-ANG45, FRACUNIT/2); - P_SpawnMissileAngle (actor, RUNTIME_CLASS(ASorcerer2FX2), - actor->angle+ANG45, FRACUNIT/2); + + const PClass *fx = PClass::FindClass("Sorcerer2FX2"); + if (fx) + { + P_SpawnMissileAngle (actor, fx, actor->angle-ANG45, FRACUNIT/2); + P_SpawnMissileAngle (actor, fx, actor->angle+ANG45, FRACUNIT/2); + } } else { // Blue bolt - P_SpawnMissile (actor, actor->target, RUNTIME_CLASS(ASorcerer2FX1)); + P_SpawnMissile (actor, actor->target, PClass::FindClass("Sorcerer2FX1")); } } @@ -589,7 +232,7 @@ void A_BlueSpark (AActor *actor) for (i = 0; i < 2; i++) { - mo = Spawn (actor->x, actor->y, actor->z, ALLOW_REPLACE); + mo = Spawn("Sorcerer2FXSpark", actor->x, actor->y, actor->z, ALLOW_REPLACE); mo->momx = pr_bluespark.Random2() << 9; mo->momy = pr_bluespark.Random2() << 9; mo->momz = FRACUNIT + (pr_bluespark()<<8); @@ -606,9 +249,10 @@ void A_GenWizard (AActor *actor) { AActor *mo; - mo = Spawn (actor->x, actor->y, actor->z - GetDefault()->height/2, ALLOW_REPLACE); + mo = Spawn("Wizard", actor->x, actor->y, actor->z, ALLOW_REPLACE); if (mo != NULL) { + mo->z -= mo->GetDefault()->height/2; if (!P_TestMobjLocation (mo)) { // Didn't fit mo->Destroy (); @@ -650,19 +294,7 @@ void A_Sor2DthLoop (AActor *actor) { if (--actor->special1) { // Need to loop - actor->SetState (&ASorcerer2::States[S_SOR2_DIE+3]); + actor->SetState (actor->FindState("DeathLoop")); } } -//---------------------------------------------------------------------------- -// -// D'Sparil Sound Routines -// -//---------------------------------------------------------------------------- - -void A_SorZap (AActor *actor) {S_Sound (actor, CHAN_BODY, "dsparil/zap", 1, ATTN_NONE);} -void A_SorRise (AActor *actor) {S_Sound (actor, CHAN_BODY, "dsparil/rise", 1, ATTN_NONE);} -void A_SorDSph (AActor *actor) {S_Sound (actor, CHAN_BODY, "dsparil/scream", 1, ATTN_NONE);} -void A_SorDExp (AActor *actor) {S_Sound (actor, CHAN_BODY, "dsparil/explode", 1, ATTN_NONE);} -void A_SorDBon (AActor *actor) {S_Sound (actor, CHAN_BODY, "dsparil/bones", 1, ATTN_NONE);} -void A_SorSightSnd (AActor *actor) {S_Sound (actor, CHAN_BODY, "dsparil/sight", 1, ATTN_NONE);} diff --git a/src/g_heretic/a_hereticartifacts.cpp b/src/g_heretic/a_hereticartifacts.cpp index 8326157b..f52b5516 100644 --- a/src/g_heretic/a_hereticartifacts.cpp +++ b/src/g_heretic/a_hereticartifacts.cpp @@ -10,25 +10,13 @@ class AArtiTomeOfPower : public APowerupGiver { - DECLARE_ACTOR (AArtiTomeOfPower, APowerupGiver) + DECLARE_CLASS (AArtiTomeOfPower, APowerupGiver) public: bool Use (bool pickup); }; -FState AArtiTomeOfPower::States[] = -{ - S_NORMAL (PWBK, 'A', 350, NULL, &States[0]) -}; -IMPLEMENT_ACTOR (AArtiTomeOfPower, Heretic, 86, 134) - PROP_Flags (MF_SPECIAL|MF_COUNTITEM) - PROP_Flags2 (MF2_FLOATBOB) - PROP_SpawnState (0) - PROP_Inventory_PickupFlash (1) - PROP_Inventory_Icon ("ARTIPWBK") - PROP_PowerupGiver_Powerup ("PowerWeaponLevel2") - PROP_Inventory_PickupMessage("$TXT_ARTITOMEOFPOWER") -END_DEFAULTS +IMPLEMENT_CLASS (AArtiTomeOfPower) bool AArtiTomeOfPower::Use (bool pickup) { @@ -55,70 +43,28 @@ bool AArtiTomeOfPower::Use (bool pickup) // Time bomb ---------------------------------------------------------------- -class AActivatedTimeBomb : public AActor +void A_TimeBomb(AActor *self) { - DECLARE_ACTOR (AActivatedTimeBomb, AActor) -public: - void PreExplode () - { - z += 32*FRACUNIT; - alpha = OPAQUE; - } -}; - -FState AActivatedTimeBomb::States[] = -{ - S_NORMAL (FBMB, 'A', 10, NULL , &States[1]), - S_NORMAL (FBMB, 'B', 10, NULL , &States[2]), - S_NORMAL (FBMB, 'C', 10, NULL , &States[3]), - S_NORMAL (FBMB, 'D', 10, NULL , &States[4]), - S_NORMAL (FBMB, 'E', 6, A_Scream , &States[5]), - S_BRIGHT (XPL1, 'A', 4, A_Explode, &States[6]), - S_BRIGHT (XPL1, 'B', 4, NULL , &States[7]), - S_BRIGHT (XPL1, 'C', 4, NULL , &States[8]), - S_BRIGHT (XPL1, 'D', 4, NULL , &States[9]), - S_BRIGHT (XPL1, 'E', 4, NULL , &States[10]), - S_BRIGHT (XPL1, 'F', 4, NULL , NULL) -}; - -IMPLEMENT_ACTOR (AActivatedTimeBomb, Heretic, -1, 0) - PROP_Flags (MF_NOGRAVITY) - PROP_RenderStyle (STYLE_Translucent) - PROP_Alpha (HR_SHADOW) - - PROP_SpawnState (0) - - PROP_DeathSound ("misc/timebomb") -END_DEFAULTS + self->z += 32*FRACUNIT; + self->RenderStyle = STYLE_Add; + self->alpha = FRACUNIT; + A_Explode(self); +} class AArtiTimeBomb : public AInventory { - DECLARE_ACTOR (AArtiTimeBomb, AInventory) + DECLARE_CLASS (AArtiTimeBomb, AInventory) public: bool Use (bool pickup); }; -FState AArtiTimeBomb::States[] = -{ - S_NORMAL (FBMB, 'E', 350, NULL, &States[0]), -}; -IMPLEMENT_ACTOR (AArtiTimeBomb, Heretic, 34, 72) - PROP_Flags (MF_SPECIAL|MF_COUNTITEM) - PROP_Flags2 (MF2_FLOATBOB) - PROP_SpawnState (0) - PROP_Inventory_DefMaxAmount - PROP_Inventory_PickupFlash (1) - PROP_Inventory_FlagsSet (IF_INVBAR|IF_FANCYPICKUPSOUND) - PROP_Inventory_Icon ("ARTIFBMB") - PROP_Inventory_PickupSound ("misc/p_pkup") - PROP_Inventory_PickupMessage("$TXT_ARTIFIREBOMB") -END_DEFAULTS +IMPLEMENT_CLASS (AArtiTimeBomb) bool AArtiTimeBomb::Use (bool pickup) { angle_t angle = Owner->angle >> ANGLETOFINESHIFT; - AActor *mo = Spawn ( + AActor *mo = Spawn("ActivatedTimeBomb", Owner->x + 24*finecosine[angle], Owner->y + 24*finesine[angle], Owner->z - Owner->floorclip, ALLOW_REPLACE); diff --git a/src/g_heretic/a_hereticglobal.h b/src/g_heretic/a_hereticglobal.h index cde20aff..3d1ff192 100644 --- a/src/g_heretic/a_hereticglobal.h +++ b/src/g_heretic/a_hereticglobal.h @@ -21,25 +21,6 @@ class APhoenixPuff : public AActor DECLARE_ACTOR (APhoenixPuff, AActor) }; -class ASorcerer2 : public AActor -{ - DECLARE_ACTOR (ASorcerer2, AActor) -}; - -class AWizard : public AActor -{ - DECLARE_ACTOR (AWizard, AActor) -public: - void NoBlockingSet (); -}; - void P_DSparilTeleport (AActor *actor); -class AStaffPuff : public AActor -{ - DECLARE_ACTOR (AStaffPuff, AActor) -public: - void BeginPlay (); -}; - #endif //__A_HERETICGLOBAL_H__ diff --git a/src/g_heretic/a_hereticimp.cpp b/src/g_heretic/a_hereticimp.cpp index dad20dff..3640d9ad 100644 --- a/src/g_heretic/a_hereticimp.cpp +++ b/src/g_heretic/a_hereticimp.cpp @@ -8,218 +8,6 @@ #include "gstrings.h" static FRandom pr_imp ("ImpExplode"); -static FRandom pr_impmeatk ("ImpMeAttack"); -static FRandom pr_impmsatk ("ImpMsAttack"); -static FRandom pr_impmsatk2 ("ImpMsAttack2"); - -void A_ImpExplode (AActor *); -void A_ImpMeAttack (AActor *); -void A_ImpMsAttack (AActor *); -void A_ImpMsAttack2 (AActor *); -void A_ImpDeath (AActor *); -void A_ImpXDeath1 (AActor *); -void A_ImpXDeath2 (AActor *); - -// Heretic imp (as opposed to the Doom variety) ----------------------------- - -class AHereticImp : public AActor -{ - DECLARE_ACTOR (AHereticImp, AActor) -}; - -FState AHereticImp::States[] = -{ -#define S_IMP_LOOK 0 - S_NORMAL (IMPX, 'A', 10, A_Look , &States[S_IMP_LOOK+1]), - S_NORMAL (IMPX, 'B', 10, A_Look , &States[S_IMP_LOOK+2]), - S_NORMAL (IMPX, 'C', 10, A_Look , &States[S_IMP_LOOK+3]), - S_NORMAL (IMPX, 'B', 10, A_Look , &States[S_IMP_LOOK+0]), - -#define S_IMP_FLY (S_IMP_LOOK+4) - S_NORMAL (IMPX, 'A', 3, A_Chase , &States[S_IMP_FLY+1]), - S_NORMAL (IMPX, 'A', 3, A_Chase , &States[S_IMP_FLY+2]), - S_NORMAL (IMPX, 'B', 3, A_Chase , &States[S_IMP_FLY+3]), - S_NORMAL (IMPX, 'B', 3, A_Chase , &States[S_IMP_FLY+4]), - S_NORMAL (IMPX, 'C', 3, A_Chase , &States[S_IMP_FLY+5]), - S_NORMAL (IMPX, 'C', 3, A_Chase , &States[S_IMP_FLY+6]), - S_NORMAL (IMPX, 'B', 3, A_Chase , &States[S_IMP_FLY+7]), - S_NORMAL (IMPX, 'B', 3, A_Chase , &States[S_IMP_FLY+0]), - -#define S_IMP_MEATK (S_IMP_FLY+8) - S_NORMAL (IMPX, 'D', 6, A_FaceTarget , &States[S_IMP_MEATK+1]), - S_NORMAL (IMPX, 'E', 6, A_FaceTarget , &States[S_IMP_MEATK+2]), - S_NORMAL (IMPX, 'F', 6, A_ImpMeAttack , &States[S_IMP_FLY+0]), - -#define S_IMP_MSATK1 (S_IMP_MEATK+3) - S_NORMAL (IMPX, 'A', 10, A_FaceTarget , &States[S_IMP_MSATK1+1]), - S_NORMAL (IMPX, 'B', 6, A_ImpMsAttack , &States[S_IMP_MSATK1+2]), - S_NORMAL (IMPX, 'C', 6, NULL , &States[S_IMP_MSATK1+3]), - S_NORMAL (IMPX, 'B', 6, NULL , &States[S_IMP_MSATK1+4]), - S_NORMAL (IMPX, 'A', 6, NULL , &States[S_IMP_MSATK1+5]), - S_NORMAL (IMPX, 'B', 6, NULL , &States[S_IMP_MSATK1+2]), - -#define S_IMP_PAIN (S_IMP_MSATK1+6) - S_NORMAL (IMPX, 'G', 3, NULL , &States[S_IMP_PAIN+1]), - S_NORMAL (IMPX, 'G', 3, A_Pain , &States[S_IMP_FLY+0]), - -#define S_IMP_DIE (S_IMP_PAIN+2) - S_NORMAL (IMPX, 'G', 4, A_ImpDeath , &States[S_IMP_DIE+1]), - S_NORMAL (IMPX, 'H', 5, NULL , &States[S_IMP_DIE+1]), - -#define S_IMP_XDIE (S_IMP_DIE+2) - S_NORMAL (IMPX, 'S', 5, A_ImpXDeath1 , &States[S_IMP_XDIE+1]), - S_NORMAL (IMPX, 'T', 5, NULL , &States[S_IMP_XDIE+2]), - S_NORMAL (IMPX, 'U', 5, NULL , &States[S_IMP_XDIE+3]), - S_NORMAL (IMPX, 'V', 5, A_ImpXDeath2 , &States[S_IMP_XDIE+4]), - S_NORMAL (IMPX, 'W', 5, NULL , &States[S_IMP_XDIE+4]), - -#define S_IMP_CRASH (S_IMP_XDIE+5) - S_NORMAL (IMPX, 'I', 7, A_ImpExplode , &States[S_IMP_CRASH+1]), - S_NORMAL (IMPX, 'J', 7, A_Scream , &States[S_IMP_CRASH+2]), - S_NORMAL (IMPX, 'K', 7, NULL , &States[S_IMP_CRASH+3]), - S_NORMAL (IMPX, 'L', -1, NULL , NULL), - -#define S_IMP_XCRASH (S_IMP_CRASH+4) - S_NORMAL (IMPX, 'X', 7, NULL , &States[S_IMP_XCRASH+1]), - S_NORMAL (IMPX, 'Y', 7, NULL , &States[S_IMP_XCRASH+2]), - S_NORMAL (IMPX, 'Z', -1, NULL , NULL) -}; - -IMPLEMENT_ACTOR (AHereticImp, Heretic, 66, 5) - PROP_SpawnHealth (40) - PROP_RadiusFixed (16) - PROP_HeightFixed (36) - PROP_Mass (50) - PROP_SpeedFixed (10) - PROP_PainChance (200) - PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_FLOAT|MF_NOGRAVITY|MF_COUNTKILL) - PROP_Flags2 (MF2_MCROSS|MF2_SPAWNFLOAT|MF2_PASSMOBJ|MF2_PUSHWALL) - PROP_Flags3 (MF3_DONTOVERLAP) - PROP_Flags4 (MF4_MISSILEMORE) - - PROP_SpawnState (S_IMP_LOOK) - PROP_SeeState (S_IMP_FLY) - PROP_PainState (S_IMP_PAIN) - PROP_MeleeState (S_IMP_MEATK) - PROP_MissileState (S_IMP_MSATK1) - PROP_CrashState (S_IMP_CRASH) - PROP_DeathState (S_IMP_DIE) - PROP_XDeathState (S_IMP_XDIE) - - PROP_SeeSound ("himp/sight") - PROP_AttackSound ("himp/attack") - PROP_PainSound ("himp/pain") - PROP_DeathSound ("himp/death") - PROP_ActiveSound ("himp/active") - PROP_Obituary("$OB_HERETICIMP") - PROP_HitObituary("$OB_HERETICIMPHIT") -END_DEFAULTS - -// Heretic imp leader ------------------------------------------------------- - -class AHereticImpLeader : public AHereticImp -{ - DECLARE_ACTOR (AHereticImpLeader, AHereticImp) -}; - -FState AHereticImpLeader::States[] = -{ -#define S_IMP_MSATK2 0 - S_NORMAL (IMPX, 'D', 6, A_FaceTarget , &States[S_IMP_MSATK2+1]), - S_NORMAL (IMPX, 'E', 6, A_FaceTarget , &States[S_IMP_MSATK2+2]), - S_NORMAL (IMPX, 'F', 6, A_ImpMsAttack2 , &AHereticImp::States[S_IMP_FLY]), -}; - -IMPLEMENT_ACTOR (AHereticImpLeader, Heretic, 5, 7) - PROP_SpawnHealth (80) - - PROP_MeleeState (PROP_CLEAR_STATE) - PROP_MissileState (S_IMP_MSATK2) - PROP_Flags4Clear(MF4_MISSILEMORE) // The imp leader does have a 'normal' missile range! - - PROP_AttackSound ("himp/leaderattack") -END_DEFAULTS - -// Heretic imp chunk 1 ------------------------------------------------------ - -class AHereticImpChunk1 : public AActor -{ - DECLARE_ACTOR (AHereticImpChunk1, AActor) -}; - -FState AHereticImpChunk1::States[] = -{ - S_NORMAL (IMPX, 'M', 5, NULL , &States[1]), - S_NORMAL (IMPX, 'N', 700, NULL , &States[2]), - S_NORMAL (IMPX, 'O', 700, NULL , NULL) -}; - -IMPLEMENT_ACTOR (AHereticImpChunk1, Heretic, -1, 0) - PROP_Mass (5) - PROP_Radius (4) - - PROP_SpawnState (0) -END_DEFAULTS - -// Heretic imp chunk 2 ------------------------------------------------------ - -class AHereticImpChunk2 : public AActor -{ - DECLARE_ACTOR (AHereticImpChunk2, AActor) -}; - -FState AHereticImpChunk2::States[] = -{ - S_NORMAL (IMPX, 'P', 5, NULL , &States[1]), - S_NORMAL (IMPX, 'Q', 700, NULL , &States[2]), - S_NORMAL (IMPX, 'R', 700, NULL , NULL) -}; - -IMPLEMENT_ACTOR (AHereticImpChunk2, Heretic, -1, 0) - PROP_Mass (5) - PROP_Radius (4) - - PROP_SpawnState (0) -END_DEFAULTS - -// Heretic imp ball --------------------------------------------------------- - -class AHereticImpBall : public AActor -{ - DECLARE_ACTOR (AHereticImpBall, AActor) -}; - -FState AHereticImpBall::States[] = -{ -#define S_IMPFX 0 - S_BRIGHT (FX10, 'A', 6, NULL , &States[S_IMPFX+1]), - S_BRIGHT (FX10, 'B', 6, NULL , &States[S_IMPFX+2]), - S_BRIGHT (FX10, 'C', 6, NULL , &States[S_IMPFX+0]), - -#define S_IMPFXI (S_IMPFX+3) - S_BRIGHT (FX10, 'D', 5, NULL , &States[S_IMPFXI+1]), - S_BRIGHT (FX10, 'E', 5, NULL , &States[S_IMPFXI+2]), - S_BRIGHT (FX10, 'F', 5, NULL , &States[S_IMPFXI+3]), - S_BRIGHT (FX10, 'G', 5, NULL , NULL) -}; - -IMPLEMENT_ACTOR (AHereticImpBall, Heretic, -1, 10) - PROP_RadiusFixed (8) - PROP_HeightFixed (8) - PROP_SpeedFixed (10) - PROP_Damage (1) - PROP_Flags (MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY) - PROP_Flags2 (MF2_WINDTHRUST|MF2_NOTELEPORT) - PROP_RenderStyle (STYLE_Add) - - PROP_SpawnState (S_IMPFX) - PROP_DeathState (S_IMPFXI) -END_DEFAULTS - -AT_SPEED_SET (HereticImpBall, speed) -{ - SimpleSpeedSetter (AHereticImpBall, 10*FRACUNIT, 20*FRACUNIT, speed); -} //---------------------------------------------------------------------------- // @@ -233,100 +21,21 @@ void A_ImpExplode (AActor *self) self->flags &= ~MF_NOGRAVITY; - chunk = Spawn (self->x, self->y, self->z, ALLOW_REPLACE); + chunk = Spawn("HereticImpChunk1", self->x, self->y, self->z, ALLOW_REPLACE); chunk->momx = pr_imp.Random2 () << 10; chunk->momy = pr_imp.Random2 () << 10; chunk->momz = 9*FRACUNIT; - chunk = Spawn (self->x, self->y, self->z, ALLOW_REPLACE); + chunk = Spawn("HereticImpChunk2", self->x, self->y, self->z, ALLOW_REPLACE); chunk->momx = pr_imp.Random2 () << 10; chunk->momy = pr_imp.Random2 () << 10; chunk->momz = 9*FRACUNIT; if (self->special1 == 666) { // Extreme death crash - self->SetState (&AHereticImp::States[S_IMP_XCRASH]); + self->SetState (self->FindState("XCrash")); } } -//---------------------------------------------------------------------------- -// -// PROC A_ImpMeAttack -// -//---------------------------------------------------------------------------- - -void A_ImpMeAttack (AActor *self) -{ - if (!self->target) - { - return; - } - S_Sound (self, CHAN_WEAPON, self->AttackSound, 1, ATTN_NORM); - if (self->CheckMeleeRange ()) - { - int damage = 5+(pr_impmeatk()&7); - P_DamageMobj (self->target, self, self, damage, NAME_Melee); - P_TraceBleed (damage, self->target, self); - } -} - -//---------------------------------------------------------------------------- -// -// PROC A_ImpMsAttack -// -//---------------------------------------------------------------------------- - -void A_ImpMsAttack (AActor *self) -{ - AActor *dest; - angle_t an; - int dist; - - if (!self->target || pr_impmsatk() > 64) - { - self->SetState (self->SeeState); - return; - } - dest = self->target; - self->flags |= MF_SKULLFLY; - S_Sound (self, CHAN_WEAPON, self->AttackSound, 1, ATTN_NORM); - A_FaceTarget (self); - an = self->angle >> ANGLETOFINESHIFT; - self->momx = FixedMul (12*FRACUNIT, finecosine[an]); - self->momy = FixedMul (12*FRACUNIT, finesine[an]); - dist = P_AproxDistance (dest->x - self->x, dest->y - self->y); - dist = dist/(12*FRACUNIT); - if (dist < 1) - { - dist = 1; - } - self->momz = (dest->z + (dest->height>>1) - self->z)/dist; -} - -//---------------------------------------------------------------------------- -// -// PROC A_ImpMsAttack2 -// -// Fireball attack of the imp leader. -// -//---------------------------------------------------------------------------- - -void A_ImpMsAttack2 (AActor *self) -{ - if (!self->target) - { - return; - } - S_Sound (self, CHAN_WEAPON, self->AttackSound, 1, ATTN_NORM); - if (self->CheckMeleeRange ()) - { - int damage = 5+(pr_impmsatk2()&7); - P_DamageMobj (self->target, self, self, damage, NAME_Melee); - P_TraceBleed (damage, self->target, self); - return; - } - P_SpawnMissile (self, self->target, RUNTIME_CLASS(AHereticImpBall)); -} - //---------------------------------------------------------------------------- // // PROC A_ImpDeath @@ -337,10 +46,6 @@ void A_ImpDeath (AActor *self) { self->flags &= ~MF_SOLID; self->flags2 |= MF2_FLOORCLIP; - if (self->z <= self->floorz) - { - //self->SetState (&AHereticImp::States[S_IMP_CRASH]); - } } //---------------------------------------------------------------------------- @@ -357,18 +62,3 @@ void A_ImpXDeath1 (AActor *self) self->special1 = 666; // Flag the crash routine } -//---------------------------------------------------------------------------- -// -// PROC A_ImpXDeath2 -// -//---------------------------------------------------------------------------- - -void A_ImpXDeath2 (AActor *self) -{ - self->flags &= ~MF_NOGRAVITY; - if (self->z <= self->floorz) - { - self->SetState (&AHereticImp::States[S_IMP_CRASH]); - } -} - diff --git a/src/g_heretic/a_hereticmisc.cpp b/src/g_heretic/a_hereticmisc.cpp index cc1ea9e1..3e3a24b3 100644 --- a/src/g_heretic/a_hereticmisc.cpp +++ b/src/g_heretic/a_hereticmisc.cpp @@ -18,129 +18,6 @@ static FRandom pr_volcano ("VolcanoSet"); static FRandom pr_blast ("VolcanoBlast"); static FRandom pr_impact ("VolcBallImpact"); -// --- Pods ----------------------------------------------------------------- - -void A_PodPain (AActor *); -void A_RemovePod (AActor *); -void A_MakePod (AActor *); - -// Pod ---------------------------------------------------------------------- - -class APod : public AActor -{ - DECLARE_ACTOR (APod, AActor) - HAS_OBJECT_POINTERS -public: - void BeginPlay (); - TObjPtr Generator; - - void Serialize (FArchive &arc); -}; - -IMPLEMENT_POINTY_CLASS (APod) - DECLARE_POINTER (Generator) -END_POINTERS; - -void APod::Serialize (FArchive &arc) -{ - Super::Serialize (arc); - arc << Generator; -} - -FState APod::States[] = -{ -#define S_POD_WAIT 0 - S_NORMAL (PPOD, 'A', 10, NULL , &States[S_POD_WAIT+0]), - -#define S_POD_PAIN (S_POD_WAIT+1) - S_NORMAL (PPOD, 'B', 14, A_PodPain , &States[S_POD_WAIT+0]), - -#define S_POD_DIE (S_POD_PAIN+1) - S_BRIGHT (PPOD, 'C', 5, A_RemovePod , &States[S_POD_DIE+1]), - S_BRIGHT (PPOD, 'D', 5, A_Scream , &States[S_POD_DIE+2]), - S_BRIGHT (PPOD, 'E', 5, A_Explode , &States[S_POD_DIE+3]), - S_BRIGHT (PPOD, 'F', 10, NULL , &AActor::States[S_FREETARGMOBJ]), - -#define S_POD_GROW (S_POD_DIE+4) - S_NORMAL (PPOD, 'I', 3, NULL , &States[S_POD_GROW+1]), - S_NORMAL (PPOD, 'J', 3, NULL , &States[S_POD_GROW+2]), - S_NORMAL (PPOD, 'K', 3, NULL , &States[S_POD_GROW+3]), - S_NORMAL (PPOD, 'L', 3, NULL , &States[S_POD_GROW+4]), - S_NORMAL (PPOD, 'M', 3, NULL , &States[S_POD_GROW+5]), - S_NORMAL (PPOD, 'N', 3, NULL , &States[S_POD_GROW+6]), - S_NORMAL (PPOD, 'O', 3, NULL , &States[S_POD_GROW+7]), - S_NORMAL (PPOD, 'P', 3, NULL , &States[S_POD_WAIT+0]) -}; - -BEGIN_DEFAULTS (APod, Heretic, 2035, 125) - PROP_SpawnHealth (45) - PROP_RadiusFixed (16) - PROP_HeightFixed (54) - PROP_PainChance (255) - PROP_Flags (MF_SOLID|MF_NOBLOOD|MF_SHOOTABLE|MF_DROPOFF) - PROP_Flags2 (MF2_WINDTHRUST|MF2_PUSHABLE|MF2_SLIDE|MF2_PASSMOBJ|MF2_TELESTOMP) - PROP_Flags3 (MF3_DONTMORPH|MF3_NOBLOCKMONST|MF3_DONTGIB) - PROP_Flags5 (MF5_OLDRADIUSDMG) - - PROP_SpawnState (S_POD_WAIT) - PROP_PainState (S_POD_PAIN) - PROP_DeathState (S_POD_DIE) - - PROP_DeathSound ("world/podexplode") -END_DEFAULTS - -void APod::BeginPlay () -{ - Super::BeginPlay (); - Generator = NULL; -} - -// Pod goo (falls from pod when damaged) ------------------------------------ - -class APodGoo : public AActor -{ - DECLARE_ACTOR (APodGoo, AActor) -}; - -FState APodGoo::States[] = -{ -#define S_PODGOO 0 - S_NORMAL (PPOD, 'G', 8, NULL , &States[S_PODGOO+1]), - S_NORMAL (PPOD, 'H', 8, NULL , &States[S_PODGOO+0]), - -#define S_PODGOOX (S_PODGOO+2) - S_NORMAL (PPOD, 'G', 10, NULL , NULL) -}; - -IMPLEMENT_ACTOR (APodGoo, Heretic, -1, 0) - PROP_RadiusFixed (2) - PROP_HeightFixed (4) - PROP_Gravity (FRACUNIT/8) - PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF) - PROP_Flags2 (MF2_NOTELEPORT|MF2_CANNOTPUSH) - - PROP_SpawnState (S_PODGOO) -END_DEFAULTS - -// Pod generator ------------------------------------------------------------ - -class APodGenerator : public AActor -{ - DECLARE_ACTOR (APodGenerator, AActor) -}; - -FState APodGenerator::States[] = -{ - S_NORMAL (TNT1, 'A', 35, A_MakePod , &States[0]) -}; - -IMPLEMENT_ACTOR (APodGenerator, Heretic, 43, 126) - PROP_Flags (MF_NOBLOCKMAP|MF_NOSECTOR) - PROP_SpawnState (0) -END_DEFAULTS - -// --- Pod action functions ------------------------------------------------- - //---------------------------------------------------------------------------- // // PROC A_PodPain @@ -160,7 +37,7 @@ void A_PodPain (AActor *actor) } for (count = chance > 240 ? 2 : 1; count; count--) { - goo = Spawn (actor->x, actor->y, actor->z + 48*FRACUNIT, ALLOW_REPLACE); + goo = Spawn("PodGoo", actor->x, actor->y, actor->z + 48*FRACUNIT, ALLOW_REPLACE); goo->target = actor; goo->momx = pr_podpain.Random2() << 9; goo->momy = pr_podpain.Random2() << 9; @@ -178,7 +55,7 @@ void A_RemovePod (AActor *actor) { AActor *mo; - if ( (mo = static_cast(actor)->Generator) ) + if ( (mo = actor->master)) { if (mo->special1 > 0) { @@ -197,7 +74,7 @@ void A_RemovePod (AActor *actor) void A_MakePod (AActor *actor) { - APod *mo; + AActor *mo; fixed_t x; fixed_t y; fixed_t z; @@ -209,142 +86,20 @@ void A_MakePod (AActor *actor) x = actor->x; y = actor->y; z = actor->z; - mo = Spawn (x, y, ONFLOORZ, ALLOW_REPLACE); + mo = Spawn("Pod", x, y, ONFLOORZ, ALLOW_REPLACE); if (!P_CheckPosition (mo, x, y)) { // Didn't fit mo->Destroy (); return; } - mo->SetState (&APod::States[S_POD_GROW]); + mo->SetState (mo->FindState("Grow")); P_ThrustMobj (mo, pr_makepod()<<24, (fixed_t)(4.5*FRACUNIT)); S_Sound (mo, CHAN_BODY, "world/podgrow", 1, ATTN_IDLE); actor->special1++; // Increment generated pod count - mo->Generator = actor; // Link the generator to the pod + mo->master = actor; // Link the generator to the pod return; } -// --- Teleglitter ---------------------------------------------------------- - -void A_SpawnTeleGlitter (AActor *); -void A_SpawnTeleGlitter2 (AActor *); -void A_AccTeleGlitter (AActor *); - -// Teleglitter generator 1 -------------------------------------------------- - -class ATeleGlitterGenerator1 : public AActor -{ - DECLARE_ACTOR (ATeleGlitterGenerator1, AActor) -}; - -FState ATeleGlitterGenerator1::States[] = -{ - S_NORMAL (TGLT, 'A', 8, A_SpawnTeleGlitter , &States[0]) -}; - -IMPLEMENT_ACTOR (ATeleGlitterGenerator1, Heretic, 74, 166) - PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_NOSECTOR) - PROP_SpawnState (0) -END_DEFAULTS - -// Teleglitter generator 2 -------------------------------------------------- - -class ATeleGlitterGenerator2 : public AActor -{ - DECLARE_ACTOR (ATeleGlitterGenerator2, AActor) -}; - -FState ATeleGlitterGenerator2::States[] = -{ - S_NORMAL (TGLT, 'F', 8, A_SpawnTeleGlitter2 , &States[0]) -}; - -IMPLEMENT_ACTOR (ATeleGlitterGenerator2, Heretic, 52, 167) - PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_NOSECTOR) - PROP_SpawnState (0) -END_DEFAULTS - -// Teleglitter 1 ------------------------------------------------------------ - -class ATeleGlitter1 : public AActor -{ - DECLARE_ACTOR (ATeleGlitter1, AActor) -}; - -FState ATeleGlitter1::States[] = -{ - S_BRIGHT (TGLT, 'A', 2, NULL , &States[1]), - S_BRIGHT (TGLT, 'B', 2, A_AccTeleGlitter , &States[2]), - S_BRIGHT (TGLT, 'C', 2, NULL , &States[3]), - S_BRIGHT (TGLT, 'D', 2, A_AccTeleGlitter , &States[4]), - S_BRIGHT (TGLT, 'E', 2, NULL , &States[0]) -}; - -IMPLEMENT_ACTOR (ATeleGlitter1, Heretic, -1, 0) - PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_MISSILE) - PROP_RenderStyle (STYLE_Add) - PROP_SpawnState (0) - PROP_Damage (0) -END_DEFAULTS - -// Teleglitter 2 ------------------------------------------------------------ - -class ATeleGlitter2 : public AActor -{ - DECLARE_ACTOR (ATeleGlitter2, AActor) -}; - -FState ATeleGlitter2::States[] = -{ - S_BRIGHT (TGLT, 'F', 2, NULL , &States[1]), - S_BRIGHT (TGLT, 'G', 2, A_AccTeleGlitter , &States[2]), - S_BRIGHT (TGLT, 'H', 2, NULL , &States[3]), - S_BRIGHT (TGLT, 'I', 2, A_AccTeleGlitter , &States[4]), - S_BRIGHT (TGLT, 'J', 2, NULL , &States[0]) -}; - -IMPLEMENT_ACTOR (ATeleGlitter2, Heretic, -1, 0) - PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_MISSILE) - PROP_RenderStyle (STYLE_Add) - PROP_SpawnState (0) - PROP_Damage (0) -END_DEFAULTS - -// --- Teleglitter action functions ----------------------------------------- - -//---------------------------------------------------------------------------- -// -// PROC A_SpawnTeleGlitter -// -//---------------------------------------------------------------------------- - -void A_SpawnTeleGlitter (AActor *actor) -{ - AActor *mo; - fixed_t x = actor->x+((pr_teleg()&31)-16)*FRACUNIT; - fixed_t y = actor->y+((pr_teleg()&31)-16)*FRACUNIT; - - mo = Spawn (x, y, - actor->Sector->floorplane.ZatPoint (actor->x, actor->y), ALLOW_REPLACE); - mo->momz = FRACUNIT/4; -} - -//---------------------------------------------------------------------------- -// -// PROC A_SpawnTeleGlitter2 -// -//---------------------------------------------------------------------------- - -void A_SpawnTeleGlitter2 (AActor *actor) -{ - AActor *mo; - fixed_t x = actor->x+((pr_teleg2()&31)-16)*FRACUNIT; - fixed_t y = actor->y+((pr_teleg2()&31)-16)*FRACUNIT; - - mo = Spawn (x, y, - actor->Sector->floorplane.ZatPoint (actor->x, actor->y), ALLOW_REPLACE); - mo->momz = FRACUNIT/4; -} - //---------------------------------------------------------------------------- // // PROC A_AccTeleGlitter @@ -359,135 +114,9 @@ void A_AccTeleGlitter (AActor *actor) } } -// --- Volcano -------------------------------------------------------------- - -void A_VolcanoSet (AActor *); -void A_VolcanoBlast (AActor *); -void A_VolcBallImpact (AActor *); -extern void A_BeastPuff (AActor *); - -// Volcano ------------------------------------------------------------------ - -class AVolcano : public AActor -{ - DECLARE_ACTOR (AVolcano, AActor) -}; - -FState AVolcano::States[] = -{ - S_NORMAL (VLCO, 'A', 350, NULL , &States[1]), - S_NORMAL (VLCO, 'A', 35, A_VolcanoSet , &States[2]), - S_NORMAL (VLCO, 'B', 3, NULL , &States[3]), - S_NORMAL (VLCO, 'C', 3, NULL , &States[4]), - S_NORMAL (VLCO, 'D', 3, NULL , &States[5]), - S_NORMAL (VLCO, 'B', 3, NULL , &States[6]), - S_NORMAL (VLCO, 'C', 3, NULL , &States[7]), - S_NORMAL (VLCO, 'D', 3, NULL , &States[8]), - S_NORMAL (VLCO, 'E', 10, A_VolcanoBlast , &States[1]) -}; - -IMPLEMENT_ACTOR (AVolcano, Heretic, 87, 150) - PROP_RadiusFixed (12) - PROP_HeightFixed (20) - PROP_Flags (MF_SOLID) - - PROP_SpawnState (0) -END_DEFAULTS - -// Volcano blast ------------------------------------------------------------ - -class AVolcanoBlast : public AActor -{ - DECLARE_ACTOR (AVolcanoBlast, AActor) -}; - -FState AVolcanoBlast::States[] = -{ -#define S_VOLCANOBALL 0 - S_NORMAL (VFBL, 'A', 4, A_BeastPuff , &States[S_VOLCANOBALL+1]), - S_NORMAL (VFBL, 'B', 4, A_BeastPuff , &States[S_VOLCANOBALL+0]), - -#define S_VOLCANOBALLX (S_VOLCANOBALL+2) - S_NORMAL (XPL1, 'A', 4, A_VolcBallImpact , &States[S_VOLCANOBALLX+1]), - S_NORMAL (XPL1, 'B', 4, NULL , &States[S_VOLCANOBALLX+2]), - S_NORMAL (XPL1, 'C', 4, NULL , &States[S_VOLCANOBALLX+3]), - S_NORMAL (XPL1, 'D', 4, NULL , &States[S_VOLCANOBALLX+4]), - S_NORMAL (XPL1, 'E', 4, NULL , &States[S_VOLCANOBALLX+5]), - S_NORMAL (XPL1, 'F', 4, NULL , NULL) -}; - -IMPLEMENT_ACTOR (AVolcanoBlast, Heretic, -1, 123) - PROP_RadiusFixed (8) - PROP_HeightFixed (8) - PROP_SpeedFixed (2) - PROP_Damage (2) - PROP_DamageType (NAME_Fire) - PROP_Gravity (FRACUNIT/8) - PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF) - PROP_Flags2 (MF2_NOTELEPORT) - - PROP_SpawnState (S_VOLCANOBALL) - PROP_DeathState (S_VOLCANOBALLX) - - PROP_DeathSound ("world/volcano/blast") -END_DEFAULTS - -// Volcano T Blast ---------------------------------------------------------- - -class AVolcanoTBlast : public AActor -{ - DECLARE_ACTOR (AVolcanoTBlast, AActor) -}; - -FState AVolcanoTBlast::States[] = -{ -#define S_VOLCANOTBALL 0 - S_NORMAL (VTFB, 'A', 4, NULL , &States[S_VOLCANOTBALL+1]), - S_NORMAL (VTFB, 'B', 4, NULL , &States[S_VOLCANOTBALL+0]), - -#define S_VOLCANOTBALLX (S_VOLCANOTBALL+2) - S_NORMAL (SFFI, 'C', 4, NULL , &States[S_VOLCANOTBALLX+1]), - S_NORMAL (SFFI, 'B', 4, NULL , &States[S_VOLCANOTBALLX+2]), - S_NORMAL (SFFI, 'A', 4, NULL , &States[S_VOLCANOTBALLX+3]), - S_NORMAL (SFFI, 'B', 4, NULL , &States[S_VOLCANOTBALLX+4]), - S_NORMAL (SFFI, 'C', 4, NULL , &States[S_VOLCANOTBALLX+5]), - S_NORMAL (SFFI, 'D', 4, NULL , &States[S_VOLCANOTBALLX+6]), - S_NORMAL (SFFI, 'E', 4, NULL , NULL) -}; - -IMPLEMENT_ACTOR (AVolcanoTBlast, Heretic, -1, 124) - PROP_RadiusFixed (8) - PROP_HeightFixed (6) - PROP_SpeedFixed (2) - PROP_Damage (1) - PROP_DamageType (NAME_Fire) - PROP_Gravity (FRACUNIT/8) - PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF) - PROP_Flags2 (MF2_NOTELEPORT) - - PROP_SpawnState (S_VOLCANOTBALL) - PROP_DeathState (S_VOLCANOTBALLX) -END_DEFAULTS //---------------------------------------------------------------------------- // -// PROC A_BeastPuff -// -//---------------------------------------------------------------------------- - -void A_BeastPuff (AActor *actor) -{ - if (pr_volcano() > 64) - { - fixed_t x, y, z; - - x = actor->x + (pr_volcano.Random2 () << 10); - y = actor->y + (pr_volcano.Random2 () << 10); - z = actor->z + (pr_volcano.Random2 () << 10); - Spawn ("Puffy", x, y, z, ALLOW_REPLACE); - } -}//---------------------------------------------------------------------------- -// // PROC A_VolcanoSet // //---------------------------------------------------------------------------- @@ -513,7 +142,7 @@ void A_VolcanoBlast (AActor *volcano) count = 1 + (pr_blast() % 3); for (i = 0; i < count; i++) { - blast = Spawn (volcano->x, volcano->y, + blast = Spawn("VolcanoBlast", volcano->x, volcano->y, volcano->z + 44*FRACUNIT, ALLOW_REPLACE); blast->target = volcano; angle = pr_blast () << 24; @@ -549,7 +178,7 @@ void A_VolcBallImpact (AActor *ball) P_RadiusAttack (ball, ball->target, 25, 25, NAME_Fire, true); for (i = 0; i < 4; i++) { - tiny = Spawn (ball->x, ball->y, ball->z, ALLOW_REPLACE); + tiny = Spawn("VolcanoTBlast", ball->x, ball->y, ball->z, ALLOW_REPLACE); tiny->target = ball; angle = i*ANG90; tiny->angle = angle; diff --git a/src/g_heretic/a_hereticweaps.cpp b/src/g_heretic/a_hereticweaps.cpp index 10db6cc5..0de0ef28 100644 --- a/src/g_heretic/a_hereticweaps.cpp +++ b/src/g_heretic/a_hereticweaps.cpp @@ -15,6 +15,7 @@ #include "gi.h" #include "r_translate.h" #include "a_specialspot.h" +#include "thingdef/thingdef.h" static FRandom pr_sap ("StaffAtkPL1"); static FRandom pr_sap2 ("StaffAtkPL2"); @@ -41,10 +42,6 @@ static FRandom pr_fp2 ("FirePhoenixPL2"); #define FLAME_THROWER_TICS (10*TICRATE) -#define USE_GWND_AMMO_1 1 -#define USE_GWND_AMMO_2 1 -#define USE_CBOW_AMMO_1 1 -#define USE_CBOW_AMMO_2 1 #define USE_BLSR_AMMO_1 1 #define USE_BLSR_AMMO_2 5 #define USE_SKRD_AMMO_1 1 @@ -64,139 +61,13 @@ END_DEFAULTS // --- Staff ---------------------------------------------------------------- -void A_StaffAttackPL1 (AActor *); -void A_StaffAttackPL2 (AActor *); - -// Staff -------------------------------------------------------------------- - -class AStaff : public AHereticWeapon -{ - DECLARE_ACTOR (AStaff, AHereticWeapon) -}; - -class AStaffPowered : public AStaff -{ - DECLARE_STATELESS_ACTOR (AStaffPowered, AStaff) -}; - -FState AStaff::States[] = -{ -#define S_STAFFREADY 0 - S_NORMAL (STFF, 'A', 1, A_WeaponReady , &States[S_STAFFREADY]), - -#define S_STAFFDOWN (S_STAFFREADY+1) - S_NORMAL (STFF, 'A', 1, A_Lower , &States[S_STAFFDOWN]), - -#define S_STAFFUP (S_STAFFDOWN+1) - S_NORMAL (STFF, 'A', 1, A_Raise , &States[S_STAFFUP]), - -#define S_STAFFREADY2 (S_STAFFUP+1) - S_NORMAL (STFF, 'D', 4, A_WeaponReady , &States[S_STAFFREADY2+1]), - S_NORMAL (STFF, 'E', 4, A_WeaponReady , &States[S_STAFFREADY2+2]), - S_NORMAL (STFF, 'F', 4, A_WeaponReady , &States[S_STAFFREADY2+0]), - -#define S_STAFFDOWN2 (S_STAFFREADY2+3) - S_NORMAL (STFF, 'D', 1, A_Lower , &States[S_STAFFDOWN2]), - -#define S_STAFFUP2 (S_STAFFDOWN2+1) - S_NORMAL (STFF, 'D', 1, A_Raise , &States[S_STAFFUP2]), - -#define S_STAFFATK1 (S_STAFFUP2+1) - S_NORMAL (STFF, 'B', 6, NULL , &States[S_STAFFATK1+1]), - S_NORMAL (STFF, 'C', 8, A_StaffAttackPL1 , &States[S_STAFFATK1+2]), - S_NORMAL (STFF, 'B', 8, A_ReFire , &States[S_STAFFREADY]), - -#define S_STAFFATK2 (S_STAFFATK1+3) - S_NORMAL (STFF, 'G', 6, NULL , &States[S_STAFFATK2+1]), - S_NORMAL (STFF, 'H', 8, A_StaffAttackPL2 , &States[S_STAFFATK2+2]), - S_NORMAL (STFF, 'G', 8, A_ReFire , &States[S_STAFFREADY2+0]) -}; - -IMPLEMENT_ACTOR (AStaff, Heretic, -1, 0) - PROP_Weapon_SelectionOrder (3800) - PROP_Flags2Set(MF2_THRUGHOST) - PROP_Weapon_Flags (WIF_WIMPY_WEAPON|WIF_BOT_MELEE) - PROP_Weapon_UpState (S_STAFFUP) - PROP_Weapon_DownState (S_STAFFDOWN) - PROP_Weapon_ReadyState (S_STAFFREADY) - PROP_Weapon_AtkState (S_STAFFATK1) - PROP_Weapon_SisterType ("StaffPowered") -END_DEFAULTS - -IMPLEMENT_STATELESS_ACTOR (AStaffPowered, Heretic, -1, 0) - PROP_Weapon_Flags (WIF_WIMPY_WEAPON|WIF_READYSNDHALF|WIF_POWERED_UP|WIF_BOT_MELEE|WIF_STAFF2_KICKBACK) - PROP_Weapon_UpState (S_STAFFUP2) - PROP_Weapon_DownState (S_STAFFDOWN2) - PROP_Weapon_ReadyState (S_STAFFREADY2) - PROP_Weapon_AtkState (S_STAFFATK2) - PROP_Weapon_ReadySound ("weapons/staffcrackle") - PROP_Weapon_SisterType ("Staff") -END_DEFAULTS - -// Staff puff --------------------------------------------------------------- - -FState AStaffPuff::States[] = -{ - S_BRIGHT (PUF3, 'A', 4, NULL , &States[1]), - S_NORMAL (PUF3, 'B', 4, NULL , &States[2]), - S_NORMAL (PUF3, 'C', 4, NULL , &States[3]), - S_NORMAL (PUF3, 'D', 4, NULL , NULL) -}; - -IMPLEMENT_ACTOR (AStaffPuff, Heretic, -1, 0) - PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY) - PROP_Flags3 (MF3_PUFFONACTORS) - PROP_RenderStyle (STYLE_Translucent) - PROP_Alpha (HR_SHADOW) - PROP_SpawnState (0) - PROP_AttackSound ("weapons/staffhit") -END_DEFAULTS - -void AStaffPuff::BeginPlay () -{ - Super::BeginPlay (); - momz = FRACUNIT; -} - -// Staff puff 2 ------------------------------------------------------------- - -class AStaffPuff2 : public AStaffPuff -{ - DECLARE_ACTOR (AStaffPuff2, AStaffPuff) -public: - void BeginPlay (); -}; - -FState AStaffPuff2::States[] = -{ - S_BRIGHT (PUF4, 'A', 4, NULL , &States[1]), - S_BRIGHT (PUF4, 'B', 4, NULL , &States[2]), - S_BRIGHT (PUF4, 'C', 4, NULL , &States[3]), - S_BRIGHT (PUF4, 'D', 4, NULL , &States[4]), - S_BRIGHT (PUF4, 'E', 4, NULL , &States[5]), - S_BRIGHT (PUF4, 'F', 4, NULL , NULL) -}; - -IMPLEMENT_ACTOR (AStaffPuff2, Heretic, -1, 0) - PROP_SpawnState (0) - PROP_RenderStyle (STYLE_Add) - PROP_Alpha (OPAQUE) - PROP_AttackSound ("weapons/staffpowerhit") -END_DEFAULTS - -void AStaffPuff2::BeginPlay () -{ - Super::BeginPlay (); - momz = 0; -} - //---------------------------------------------------------------------------- // // PROC A_StaffAttackPL1 // //---------------------------------------------------------------------------- -void A_StaffAttackPL1 (AActor *actor) +void A_StaffAttack (AActor *actor) { angle_t angle; int damage; @@ -209,17 +80,23 @@ void A_StaffAttackPL1 (AActor *actor) return; } + int index = CheckIndex (2, NULL); + if (index < 0) return; + + damage = EvalExpressionI (StateParameters[index], actor); + const PClass *puff = PClass::FindClass ((ENamedName)StateParameters[index+1]); + + AWeapon *weapon = player->ReadyWeapon; if (weapon != NULL) { if (!weapon->DepleteAmmo (weapon->bAltFire)) return; } - damage = 5+(pr_sap()&15); angle = actor->angle; angle += pr_sap.Random2() << 18; slope = P_AimLineAttack (actor, angle, MELEERANGE, &linetarget); - P_LineAttack (actor, angle, MELEERANGE, slope, damage, NAME_Melee, RUNTIME_CLASS(AStaffPuff), true); + P_LineAttack (actor, angle, MELEERANGE, slope, damage, NAME_Melee, puff, true); if (linetarget) { //S_StartSound(player->mo, sfx_stfhit); @@ -229,201 +106,6 @@ void A_StaffAttackPL1 (AActor *actor) } } -//---------------------------------------------------------------------------- -// -// PROC A_StaffAttackPL2 -// -//---------------------------------------------------------------------------- - -void A_StaffAttackPL2 (AActor *actor) -{ - angle_t angle; - int damage; - int slope; - player_t *player; - AActor *linetarget; - - if (NULL == (player = actor->player)) - { - return; - } - - AWeapon *weapon = player->ReadyWeapon; - if (weapon != NULL) - { - if (!weapon->DepleteAmmo (weapon->bAltFire)) - return; - } - // P_inter.c:P_DamageMobj() handles target momentums - damage = 18+(pr_sap2()&63); - angle = actor->angle; - angle += pr_sap2.Random2() << 18; - slope = P_AimLineAttack (actor, angle, MELEERANGE, &linetarget); - P_LineAttack (actor, angle, MELEERANGE, slope, damage, NAME_Melee, RUNTIME_CLASS(AStaffPuff2), true); - if (linetarget) - { - //S_StartSound(player->mo, sfx_stfpow); - // turn to face target - actor->angle = R_PointToAngle2 (actor->x, - actor->y, linetarget->x, linetarget->y); - } -} - -// --- Gold wand ------------------------------------------------------------ - -void A_FireGoldWandPL1 (AActor *); -void A_FireGoldWandPL2 (AActor *); - -// Gold wand ---------------------------------------------------------------- - -class AGoldWand : public AHereticWeapon -{ - DECLARE_ACTOR (AGoldWand, AHereticWeapon) -}; - -class AGoldWandPowered : public AGoldWand -{ - DECLARE_STATELESS_ACTOR (AGoldWandPowered, AGoldWand) -}; - -FState AGoldWand::States[] = -{ -#define S_GOLDWANDREADY 0 - S_NORMAL (GWND, 'A', 1, A_WeaponReady , &States[S_GOLDWANDREADY]), - -#define S_GOLDWANDDOWN (S_GOLDWANDREADY+1) - S_NORMAL (GWND, 'A', 1, A_Lower , &States[S_GOLDWANDDOWN]), - -#define S_GOLDWANDUP (S_GOLDWANDDOWN+1) - S_NORMAL (GWND, 'A', 1, A_Raise , &States[S_GOLDWANDUP]), - -#define S_GOLDWANDATK1 (S_GOLDWANDUP+1) - S_NORMAL (GWND, 'B', 3, NULL , &States[S_GOLDWANDATK1+1]), - S_NORMAL (GWND, 'C', 5, A_FireGoldWandPL1 , &States[S_GOLDWANDATK1+2]), - S_NORMAL (GWND, 'D', 3, NULL , &States[S_GOLDWANDATK1+3]), - S_NORMAL (GWND, 'D', 0, A_ReFire , &States[S_GOLDWANDREADY]), - -#define S_GOLDWANDATK2 (S_GOLDWANDATK1+4) - S_NORMAL (GWND, 'B', 3, NULL , &States[S_GOLDWANDATK2+1]), - S_NORMAL (GWND, 'C', 4, A_FireGoldWandPL2 , &States[S_GOLDWANDATK2+2]), - S_NORMAL (GWND, 'D', 3, NULL , &States[S_GOLDWANDATK2+3]), - S_NORMAL (GWND, 'D', 0, A_ReFire , &States[S_GOLDWANDREADY]) -}; - -IMPLEMENT_ACTOR (AGoldWand, Heretic, -1, 0) - PROP_Flags5 (MF5_BLOODSPLATTER) - PROP_Weapon_SelectionOrder (2000) - PROP_Weapon_AmmoUse1 (USE_GWND_AMMO_1) - PROP_Weapon_AmmoGive1 (25) - PROP_Weapon_UpState (S_GOLDWANDUP) - PROP_Weapon_DownState (S_GOLDWANDDOWN) - PROP_Weapon_ReadyState (S_GOLDWANDREADY) - PROP_Weapon_AtkState (S_GOLDWANDATK1) - PROP_Weapon_YAdjust (5) - PROP_Weapon_MoveCombatDist (25000000) - PROP_Weapon_AmmoType1 ("GoldWandAmmo") - PROP_Weapon_SisterType ("GoldWandPowered") -END_DEFAULTS - -IMPLEMENT_STATELESS_ACTOR (AGoldWandPowered, Heretic, -1, 0) - PROP_Weapon_Flags (WIF_POWERED_UP) - PROP_Weapon_AmmoUse1 (USE_GWND_AMMO_2) - PROP_Weapon_AmmoGive1 (0) - PROP_Weapon_AtkState (S_GOLDWANDATK2) - PROP_Weapon_SisterType ("GoldWand") -END_DEFAULTS - -// Gold wand FX1 ------------------------------------------------------------ - -class AGoldWandFX1 : public AActor -{ - DECLARE_ACTOR (AGoldWandFX1, AActor) -}; - -FState AGoldWandFX1::States[] = -{ -#define S_GWANDFX1 0 - S_BRIGHT (FX01, 'A', 6, NULL , &States[S_GWANDFX1+1]), - S_BRIGHT (FX01, 'B', 6, NULL , &States[S_GWANDFX1+0]), - -#define S_GWANDFXI1 (S_GWANDFX1+2) - S_BRIGHT (FX01, 'E', 3, NULL , &States[S_GWANDFXI1+1]), - S_BRIGHT (FX01, 'F', 3, NULL , &States[S_GWANDFXI1+2]), - S_BRIGHT (FX01, 'G', 3, NULL , &States[S_GWANDFXI1+3]), - S_BRIGHT (FX01, 'H', 3, NULL , NULL) -}; - -IMPLEMENT_ACTOR (AGoldWandFX1, Heretic, -1, 151) - PROP_RadiusFixed (10) - PROP_HeightFixed (6) - PROP_SpeedFixed (22) - PROP_Damage (2) - PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY) - PROP_Flags2 (MF2_NOTELEPORT) - PROP_RenderStyle (STYLE_Add) - - PROP_SpawnState (S_GWANDFX1) - PROP_DeathState (S_GWANDFXI1) - - PROP_DeathSound ("weapons/wandhit") -END_DEFAULTS - -// Gold wand FX2 ------------------------------------------------------------ - -class AGoldWandFX2 : public AGoldWandFX1 -{ - DECLARE_ACTOR (AGoldWandFX2, AGoldWandFX1) -}; - -FState AGoldWandFX2::States[] = -{ - S_BRIGHT (FX01, 'C', 6, NULL , &States[1]), - S_BRIGHT (FX01, 'D', 6, NULL , &States[0]) -}; - -IMPLEMENT_ACTOR (AGoldWandFX2, Heretic, -1, 152) - PROP_SpeedFixed (18) - PROP_Damage (1) - - PROP_SpawnState (0) - - PROP_DeathSound ("") -END_DEFAULTS - -// Gold wand puff 1 --------------------------------------------------------- - -class AGoldWandPuff1 : public AActor -{ - DECLARE_ACTOR (AGoldWandPuff1, AActor) -}; - -FState AGoldWandPuff1::States[] = -{ - S_BRIGHT (PUF2, 'A', 3, NULL , &States[1]), - S_BRIGHT (PUF2, 'B', 3, NULL , &States[2]), - S_BRIGHT (PUF2, 'C', 3, NULL , &States[3]), - S_BRIGHT (PUF2, 'D', 3, NULL , &States[4]), - S_BRIGHT (PUF2, 'E', 3, NULL , NULL) -}; - -IMPLEMENT_ACTOR (AGoldWandPuff1, Heretic, -1, 0) - PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY) - PROP_Flags3 (MF3_PUFFONACTORS) - PROP_SpawnState (0) - PROP_RenderStyle (STYLE_Add) -END_DEFAULTS - -// Gold wand puff 2 --------------------------------------------------------- - -class AGoldWandPuff2 : public AGoldWandFX1 -{ - DECLARE_STATELESS_ACTOR (AGoldWandPuff2, AGoldWandFX1) -}; - -IMPLEMENT_STATELESS_ACTOR (AGoldWandPuff2, Heretic, -1, 0) - PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY) - PROP_SpawnState (S_GWANDFXI1) -END_DEFAULTS //---------------------------------------------------------------------------- // @@ -455,7 +137,7 @@ void A_FireGoldWandPL1 (AActor *actor) { angle += pr_fgw.Random2() << 18; } - P_LineAttack (actor, angle, PLAYERMISSILERANGE, pitch, damage, NAME_None, RUNTIME_CLASS(AGoldWandPuff1)); + P_LineAttack (actor, angle, PLAYERMISSILERANGE, pitch, damage, NAME_None, "GoldWandPuff1"); S_Sound (actor, CHAN_WEAPON, "weapons/wandhit", 1, ATTN_NORM); } @@ -485,224 +167,20 @@ void A_FireGoldWandPL2 (AActor *actor) return; } angle_t pitch = P_BulletSlope(actor); - momz = FixedMul (GetDefault()->Speed, + momz = FixedMul (GetDefaultByName("GoldWandFX2")->Speed, finetangent[FINEANGLES/4-((signed)pitch>>ANGLETOFINESHIFT)]); - P_SpawnMissileAngle (actor, RUNTIME_CLASS(AGoldWandFX2), actor->angle-(ANG45/8), momz); - P_SpawnMissileAngle (actor, RUNTIME_CLASS(AGoldWandFX2), actor->angle+(ANG45/8), momz); + P_SpawnMissileAngle (actor, PClass::FindClass("GoldWandFX2"), actor->angle-(ANG45/8), momz); + P_SpawnMissileAngle (actor, PClass::FindClass("GoldWandFX2"), actor->angle+(ANG45/8), momz); angle = actor->angle-(ANG45/8); for(i = 0; i < 5; i++) { damage = 1+(pr_fgw2()&7); - P_LineAttack (actor, angle, PLAYERMISSILERANGE, pitch, damage, NAME_None, RUNTIME_CLASS(AGoldWandPuff2)); + P_LineAttack (actor, angle, PLAYERMISSILERANGE, pitch, damage, NAME_None, "GoldWandPuff2"); angle += ((ANG45/8)*2)/4; } S_Sound (actor, CHAN_WEAPON, "weapons/wandhit", 1, ATTN_NORM); } -// --- Crossbow ------------------------------------------------------------- - -void A_FireCrossbowPL1 (AActor *); -void A_FireCrossbowPL2 (AActor *); -void A_BoltSpark (AActor *); - -// Crossbow ----------------------------------------------------------------- - -class ACrossbow : public AHereticWeapon -{ - DECLARE_ACTOR (ACrossbow, AHereticWeapon) -}; - -class ACrossbowPowered : public ACrossbow -{ - DECLARE_STATELESS_ACTOR (ACrossbowPowered, ACrossbow) -}; - -FState ACrossbow::States[] = -{ -#define S_WBOW 0 - S_NORMAL (WBOW, 'A', -1, NULL , NULL), - -#define S_CRBOW (S_WBOW+1) - S_NORMAL (CRBW, 'A', 1, A_WeaponReady , &States[S_CRBOW+1]), - S_NORMAL (CRBW, 'A', 1, A_WeaponReady , &States[S_CRBOW+2]), - S_NORMAL (CRBW, 'A', 1, A_WeaponReady , &States[S_CRBOW+3]), - S_NORMAL (CRBW, 'A', 1, A_WeaponReady , &States[S_CRBOW+4]), - S_NORMAL (CRBW, 'A', 1, A_WeaponReady , &States[S_CRBOW+5]), - S_NORMAL (CRBW, 'A', 1, A_WeaponReady , &States[S_CRBOW+6]), - S_NORMAL (CRBW, 'B', 1, A_WeaponReady , &States[S_CRBOW+7]), - S_NORMAL (CRBW, 'B', 1, A_WeaponReady , &States[S_CRBOW+8]), - S_NORMAL (CRBW, 'B', 1, A_WeaponReady , &States[S_CRBOW+9]), - S_NORMAL (CRBW, 'B', 1, A_WeaponReady , &States[S_CRBOW+10]), - S_NORMAL (CRBW, 'B', 1, A_WeaponReady , &States[S_CRBOW+11]), - S_NORMAL (CRBW, 'B', 1, A_WeaponReady , &States[S_CRBOW+12]), - S_NORMAL (CRBW, 'C', 1, A_WeaponReady , &States[S_CRBOW+13]), - S_NORMAL (CRBW, 'C', 1, A_WeaponReady , &States[S_CRBOW+14]), - S_NORMAL (CRBW, 'C', 1, A_WeaponReady , &States[S_CRBOW+15]), - S_NORMAL (CRBW, 'C', 1, A_WeaponReady , &States[S_CRBOW+16]), - S_NORMAL (CRBW, 'C', 1, A_WeaponReady , &States[S_CRBOW+17]), - S_NORMAL (CRBW, 'C', 1, A_WeaponReady , &States[S_CRBOW+0]), - -#define S_CRBOWDOWN (S_CRBOW+18) - S_NORMAL (CRBW, 'A', 1, A_Lower , &States[S_CRBOWDOWN]), - -#define S_CRBOWUP (S_CRBOWDOWN+1) - S_NORMAL (CRBW, 'A', 1, A_Raise , &States[S_CRBOWUP]), - -#define S_CRBOWATK1 (S_CRBOWUP+1) - S_NORMAL (CRBW, 'D', 6, A_FireCrossbowPL1 , &States[S_CRBOWATK1+1]), - S_NORMAL (CRBW, 'E', 3, NULL , &States[S_CRBOWATK1+2]), - S_NORMAL (CRBW, 'F', 3, NULL , &States[S_CRBOWATK1+3]), - S_NORMAL (CRBW, 'G', 3, NULL , &States[S_CRBOWATK1+4]), - S_NORMAL (CRBW, 'H', 3, NULL , &States[S_CRBOWATK1+5]), - S_NORMAL (CRBW, 'A', 4, NULL , &States[S_CRBOWATK1+6]), - S_NORMAL (CRBW, 'B', 4, NULL , &States[S_CRBOWATK1+7]), - S_NORMAL (CRBW, 'C', 5, A_ReFire , &States[S_CRBOW+0]), - -#define S_CRBOWATK2 (S_CRBOWATK1+8) - S_NORMAL (CRBW, 'D', 5, A_FireCrossbowPL2 , &States[S_CRBOWATK2+1]), - S_NORMAL (CRBW, 'E', 3, NULL , &States[S_CRBOWATK2+2]), - S_NORMAL (CRBW, 'F', 2, NULL , &States[S_CRBOWATK2+3]), - S_NORMAL (CRBW, 'G', 3, NULL , &States[S_CRBOWATK2+4]), - S_NORMAL (CRBW, 'H', 2, NULL , &States[S_CRBOWATK2+5]), - S_NORMAL (CRBW, 'A', 3, NULL , &States[S_CRBOWATK2+6]), - S_NORMAL (CRBW, 'B', 3, NULL , &States[S_CRBOWATK2+7]), - S_NORMAL (CRBW, 'C', 4, A_ReFire , &States[S_CRBOW+0]) -}; - -IMPLEMENT_ACTOR (ACrossbow, Heretic, 2001, 27) - PROP_Flags (MF_SPECIAL) - PROP_SpawnState (S_WBOW) - - PROP_Weapon_SelectionOrder (800) - PROP_Weapon_AmmoUse1 (USE_CBOW_AMMO_1) - PROP_Weapon_AmmoGive1 (10) - PROP_Weapon_UpState (S_CRBOWUP) - PROP_Weapon_DownState (S_CRBOWDOWN) - PROP_Weapon_ReadyState (S_CRBOW) - PROP_Weapon_AtkState (S_CRBOWATK1) - PROP_Weapon_YAdjust (15) - PROP_Weapon_MoveCombatDist (24000000) - PROP_Weapon_AmmoType1 ("CrossbowAmmo") - PROP_Weapon_SisterType ("CrossbowPowered") - PROP_Weapon_ProjectileType ("CrossbowFX1") - PROP_Inventory_PickupMessage("$TXT_WPNCROSSBOW") -END_DEFAULTS - -IMPLEMENT_STATELESS_ACTOR (ACrossbowPowered, Heretic, -1, 0) - PROP_Weapon_Flags (WIF_POWERED_UP) - PROP_Weapon_AmmoUse1 (USE_CBOW_AMMO_2) - PROP_Weapon_AmmoGive1 (0) - PROP_Weapon_AtkState (S_CRBOWATK2) - PROP_Weapon_SisterType ("Crossbow") - PROP_Weapon_ProjectileType ("CrossbowFX2") -END_DEFAULTS - -// Crossbow FX1 ------------------------------------------------------------- - -class ACrossbowFX1 : public AActor -{ - DECLARE_ACTOR (ACrossbowFX1, AActor) -}; - -FState ACrossbowFX1::States[] = -{ -#define S_CRBOWFX1 0 - S_BRIGHT (FX03, 'B', 1, NULL , &States[S_CRBOWFX1]), - -#define S_CRBOWFXI1 (S_CRBOWFX1+1) - S_BRIGHT (FX03, 'H', 8, NULL , &States[S_CRBOWFXI1+1]), - S_BRIGHT (FX03, 'I', 8, NULL , &States[S_CRBOWFXI1+2]), - S_BRIGHT (FX03, 'J', 8, NULL , NULL) -}; - -IMPLEMENT_ACTOR (ACrossbowFX1, Heretic, -1, 147) - PROP_RadiusFixed (11) - PROP_HeightFixed (8) - PROP_SpeedFixed (30) - PROP_Damage (10) - PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY) - PROP_Flags2 (MF2_NOTELEPORT|MF2_PCROSS|MF2_IMPACT) - PROP_RenderStyle (STYLE_Add) - - PROP_SpawnState (S_CRBOWFX1) - PROP_DeathState (S_CRBOWFXI1) - - PROP_SeeSound ("weapons/bowshoot") - PROP_DeathSound ("weapons/bowhit") -END_DEFAULTS - -// Crossbow FX2 ------------------------------------------------------------- - -class ACrossbowFX2 : public ACrossbowFX1 -{ - DECLARE_ACTOR (ACrossbowFX2, ACrossbowFX1) -}; - -FState ACrossbowFX2::States[] = -{ -#define S_CRBOWFX2 0 - S_BRIGHT (FX03, 'B', 1, A_BoltSpark , &States[S_CRBOWFX2]) -}; - -IMPLEMENT_ACTOR (ACrossbowFX2, Heretic, -1, 148) - PROP_SpeedFixed (32) - PROP_Damage (6) - PROP_RenderStyle (STYLE_Add) - PROP_SpawnState (S_CRBOWFX2) -END_DEFAULTS - -// Crossbow FX3 ------------------------------------------------------------- - -class ACrossbowFX3 : public ACrossbowFX1 -{ - DECLARE_ACTOR (ACrossbowFX3, ACrossbowFX1) -}; - -FState ACrossbowFX3::States[] = -{ -#define S_CRBOWFX3 0 - S_BRIGHT (FX03, 'A', 1, NULL , &States[S_CRBOWFX3]), - -#define S_CRBOWFXI3 (S_CRBOWFX3+1) - S_BRIGHT (FX03, 'C', 8, NULL , &States[S_CRBOWFXI3+1]), - S_BRIGHT (FX03, 'D', 8, NULL , &States[S_CRBOWFXI3+2]), - S_BRIGHT (FX03, 'E', 8, NULL , NULL) -}; - -IMPLEMENT_ACTOR (ACrossbowFX3, Heretic, -1, 149) - PROP_SpeedFixed (20) - PROP_Damage (2) - PROP_FlagsClear (MF_NOBLOCKMAP) - PROP_Flags2 (MF2_WINDTHRUST|MF2_THRUGHOST|MF2_NOTELEPORT|MF2_PCROSS|MF2_IMPACT) - PROP_RenderStyle (STYLE_Add) - - PROP_SpawnState (S_CRBOWFX3) - PROP_DeathState (S_CRBOWFXI3) - - PROP_SeeSound ("") -END_DEFAULTS - -// Crossbow FX4 ------------------------------------------------------------- - -class ACrossbowFX4 : public AActor -{ - DECLARE_ACTOR (ACrossbowFX4, AActor) -}; - -FState ACrossbowFX4::States[] = -{ -#define S_CRBOWFX4 0 - S_BRIGHT (FX03, 'F', 8, NULL , &States[S_CRBOWFX4+1]), - S_BRIGHT (FX03, 'G', 8, NULL , NULL) -}; - -IMPLEMENT_ACTOR (ACrossbowFX4, Heretic, -1, 0) - PROP_Flags (MF_NOBLOCKMAP) - PROP_Gravity (FRACUNIT/8) - PROP_RenderStyle (STYLE_Add) - PROP_SpawnState (S_CRBOWFX4) -END_DEFAULTS - //---------------------------------------------------------------------------- // // PROC A_FireCrossbowPL1 @@ -724,9 +202,9 @@ void A_FireCrossbowPL1 (AActor *actor) if (!weapon->DepleteAmmo (weapon->bAltFire)) return; } - P_SpawnPlayerMissile (actor, RUNTIME_CLASS(ACrossbowFX1)); - P_SpawnPlayerMissile (actor, RUNTIME_CLASS(ACrossbowFX3), actor->angle-(ANG45/10)); - P_SpawnPlayerMissile (actor, RUNTIME_CLASS(ACrossbowFX3), actor->angle+(ANG45/10)); + P_SpawnPlayerMissile (actor, PClass::FindClass("CrossbowFX1")); + P_SpawnPlayerMissile (actor, PClass::FindClass("CrossbowFX3"), actor->angle-(ANG45/10)); + P_SpawnPlayerMissile (actor, PClass::FindClass("CrossbowFX3"), actor->angle+(ANG45/10)); } //---------------------------------------------------------------------------- @@ -750,29 +228,115 @@ void A_FireCrossbowPL2(AActor *actor) if (!weapon->DepleteAmmo (weapon->bAltFire)) return; } - P_SpawnPlayerMissile (actor, RUNTIME_CLASS(ACrossbowFX2)); - P_SpawnPlayerMissile (actor, RUNTIME_CLASS(ACrossbowFX2), actor->angle-(ANG45/10)); - P_SpawnPlayerMissile (actor, RUNTIME_CLASS(ACrossbowFX2), actor->angle+(ANG45/10)); - P_SpawnPlayerMissile (actor, RUNTIME_CLASS(ACrossbowFX3), actor->angle-(ANG45/5)); - P_SpawnPlayerMissile (actor, RUNTIME_CLASS(ACrossbowFX3), actor->angle+(ANG45/5)); + P_SpawnPlayerMissile (actor, PClass::FindClass("CrossbowFX2")); + P_SpawnPlayerMissile (actor, PClass::FindClass("CrossbowFX2"), actor->angle-(ANG45/10)); + P_SpawnPlayerMissile (actor, PClass::FindClass("CrossbowFX2"), actor->angle+(ANG45/10)); + P_SpawnPlayerMissile (actor, PClass::FindClass("CrossbowFX3"), actor->angle-(ANG45/5)); + P_SpawnPlayerMissile (actor, PClass::FindClass("CrossbowFX3"), actor->angle+(ANG45/5)); } -//---------------------------------------------------------------------------- +//--------------------------------------------------------------------------- // -// PROC A_BoltSpark +// PROC A_GauntletAttack // -//---------------------------------------------------------------------------- +//--------------------------------------------------------------------------- -void A_BoltSpark (AActor *bolt) +void A_GauntletAttack (AActor *actor) { - AActor *spark; + angle_t angle; + int damage; + int slope; + int randVal; + fixed_t dist; + player_t *player; + const PClass *pufftype; + int power; + AActor *linetarget; - if (pr_boltspark() > 50) + if (NULL == (player = actor->player)) { - spark = Spawn (bolt->x, bolt->y, bolt->z, ALLOW_REPLACE); - spark->x += pr_boltspark.Random2() << 10; - spark->y += pr_boltspark.Random2() << 10; + return; } + + int index = CheckIndex (1, NULL); + if (index < 0) return; + + power = EvalExpressionI (StateParameters[index], actor); + + AWeapon *weapon = player->ReadyWeapon; + if (weapon != NULL) + { + if (!weapon->DepleteAmmo (weapon->bAltFire)) + return; + } + player->psprites[ps_weapon].sx = ((pr_gatk()&3)-2) * FRACUNIT; + player->psprites[ps_weapon].sy = WEAPONTOP + (pr_gatk()&3) * FRACUNIT; + angle = actor->angle; + if (power) + { + damage = pr_gatk.HitDice (2); + dist = 4*MELEERANGE; + angle += pr_gatk.Random2() << 17; + pufftype = PClass::FindClass("GauntletPuff2"); + } + else + { + damage = pr_gatk.HitDice (2); + dist = MELEERANGE+1; + angle += pr_gatk.Random2() << 18; + pufftype = PClass::FindClass("GauntletPuff1"); + } + slope = P_AimLineAttack (actor, angle, dist, &linetarget); + P_LineAttack (actor, angle, dist, slope, damage, NAME_Melee, pufftype); + if (!linetarget) + { + if (pr_gatk() > 64) + { + player->extralight = !player->extralight; + } + S_Sound (actor, CHAN_AUTO, "weapons/gauntletson", 1, ATTN_NORM); + return; + } + randVal = pr_gatk(); + if (randVal < 64) + { + player->extralight = 0; + } + else if (randVal < 160) + { + player->extralight = 1; + } + else + { + player->extralight = 2; + } + if (power) + { + P_GiveBody (actor, damage>>1); + S_Sound (actor, CHAN_AUTO, "weapons/gauntletspowhit", 1, ATTN_NORM); + } + else + { + S_Sound (actor, CHAN_AUTO, "weapons/gauntletshit", 1, ATTN_NORM); + } + // turn to face target + angle = R_PointToAngle2 (actor->x, actor->y, + linetarget->x, linetarget->y); + if (angle-actor->angle > ANG180) + { + if ((int)(angle-actor->angle) < -ANG90/20) + actor->angle = angle+ANG90/21; + else + actor->angle -= ANG90/20; + } + else + { + if (angle-actor->angle > ANG90/20) + actor->angle = angle-ANG90/21; + else + actor->angle += ANG90/20; + } + actor->flags |= MF_JUSTATTACKED; } // --- Mace ----------------------------------------------------------------- @@ -1411,258 +975,6 @@ boom: } } -// --- Gauntlets ------------------------------------------------------------ - -void A_GauntletAttack (AActor *); -void A_GauntletSound (AActor *); - -// Gauntlets ---------------------------------------------------------------- - -class AGauntlets : public AHereticWeapon -{ - DECLARE_ACTOR (AGauntlets, AHereticWeapon) -}; - -class AGauntletsPowered : public AGauntlets -{ - DECLARE_STATELESS_ACTOR (AGauntletsPowered, AGauntlets) -}; - -FState AGauntlets::States[] = -{ -#define S_WGNT 0 - S_NORMAL (WGNT, 'A', -1, NULL , NULL), - -#define S_GAUNTLETREADY (S_WGNT+1) - S_NORMAL (GAUN, 'A', 1, A_WeaponReady , &States[S_GAUNTLETREADY]), - -#define S_GAUNTLETDOWN (S_GAUNTLETREADY+1) - S_NORMAL (GAUN, 'A', 1, A_Lower , &States[S_GAUNTLETDOWN]), - -#define S_GAUNTLETUP (S_GAUNTLETDOWN+1) - S_NORMAL (GAUN, 'A', 1, A_Raise , &States[S_GAUNTLETUP]), - -#define S_GAUNTLETREADY2 (S_GAUNTLETUP+1) - S_NORMAL (GAUN, 'G', 4, A_WeaponReady , &States[S_GAUNTLETREADY2+1]), - S_NORMAL (GAUN, 'H', 4, A_WeaponReady , &States[S_GAUNTLETREADY2+2]), - S_NORMAL (GAUN, 'I', 4, A_WeaponReady , &States[S_GAUNTLETREADY2+0]), - -#define S_GAUNTLETDOWN2 (S_GAUNTLETREADY2+3) - S_NORMAL (GAUN, 'G', 1, A_Lower , &States[S_GAUNTLETDOWN2]), - -#define S_GAUNTLETUP2 (S_GAUNTLETDOWN2+1) - S_NORMAL (GAUN, 'G', 1, A_Raise , &States[S_GAUNTLETUP2]), - -#define S_GAUNTLETATK1 (S_GAUNTLETUP2+1) - S_NORMAL (GAUN, 'B', 4, A_GauntletSound , &States[S_GAUNTLETATK1+1]), - S_NORMAL (GAUN, 'C', 4, NULL , &States[S_GAUNTLETATK1+2]), - S_BRIGHT (GAUN, 'D', 4, A_GauntletAttack , &States[S_GAUNTLETATK1+3]), - S_BRIGHT (GAUN, 'E', 4, A_GauntletAttack , &States[S_GAUNTLETATK1+4]), - S_BRIGHT (GAUN, 'F', 4, A_GauntletAttack , &States[S_GAUNTLETATK1+5]), - S_NORMAL (GAUN, 'C', 4, A_ReFire , &States[S_GAUNTLETATK1+6]), - S_NORMAL (GAUN, 'B', 4, A_Light0 , &States[S_GAUNTLETREADY]), - -#define S_GAUNTLETATK2 (S_GAUNTLETATK1+7) - S_NORMAL (GAUN, 'J', 4, A_GauntletSound , &States[S_GAUNTLETATK2+1]), - S_NORMAL (GAUN, 'K', 4, NULL , &States[S_GAUNTLETATK2+2]), - S_BRIGHT (GAUN, 'L', 4, A_GauntletAttack , &States[S_GAUNTLETATK2+3]), - S_BRIGHT (GAUN, 'M', 4, A_GauntletAttack , &States[S_GAUNTLETATK2+4]), - S_BRIGHT (GAUN, 'N', 4, A_GauntletAttack , &States[S_GAUNTLETATK2+5]), - S_NORMAL (GAUN, 'K', 4, A_ReFire , &States[S_GAUNTLETATK2+6]), - S_NORMAL (GAUN, 'J', 4, A_Light0 , &States[S_GAUNTLETREADY2+0]) -}; - -IMPLEMENT_ACTOR (AGauntlets, Heretic, 2005, 32) - PROP_Flags (MF_SPECIAL) - PROP_Flags5 (MF5_BLOODSPLATTER) - PROP_SpawnState (S_WGNT) - - PROP_Weapon_SelectionOrder (2300) - PROP_Weapon_Flags (WIF_WIMPY_WEAPON|WIF_BOT_MELEE) - PROP_Weapon_UpState (S_GAUNTLETUP) - PROP_Weapon_DownState (S_GAUNTLETDOWN) - PROP_Weapon_ReadyState (S_GAUNTLETREADY) - PROP_Weapon_AtkState (S_GAUNTLETATK1) - PROP_Weapon_HoldAtkState (S_GAUNTLETATK1+2) - PROP_Weapon_Kickback (0) - PROP_Weapon_YAdjust (15) - PROP_Weapon_UpSound ("weapons/gauntletsactivate") - PROP_Weapon_SisterType ("GauntletsPowered") - PROP_Inventory_PickupMessage("$TXT_WPNGAUNTLETS") -END_DEFAULTS - -IMPLEMENT_STATELESS_ACTOR (AGauntletsPowered, Heretic, -1, 0) - PROP_Weapon_Flags (WIF_WIMPY_WEAPON|WIF_POWERED_UP|WIF_BOT_MELEE) - PROP_Weapon_UpState (S_GAUNTLETUP2) - PROP_Weapon_DownState (S_GAUNTLETDOWN2) - PROP_Weapon_ReadyState (S_GAUNTLETREADY2) - PROP_Weapon_AtkState (S_GAUNTLETATK2) - PROP_Weapon_HoldAtkState (S_GAUNTLETATK2+2) - PROP_Weapon_SisterType ("Gauntlets") -END_DEFAULTS - -void A_GauntletSound (AActor *actor) -{ - // Play the sound for the initial gauntlet attack - S_Sound (actor, CHAN_WEAPON, "weapons/gauntletsuse", 1, ATTN_NORM); -} - -// Gauntlet puff 1 ---------------------------------------------------------- - -class AGauntletPuff1 : public AActor -{ - DECLARE_ACTOR (AGauntletPuff1, AActor) -public: - void BeginPlay (); -}; - -FState AGauntletPuff1::States[] = -{ -#define S_GAUNTLETPUFF1 0 - S_BRIGHT (PUF1, 'A', 4, NULL , &States[S_GAUNTLETPUFF1+1]), - S_BRIGHT (PUF1, 'B', 4, NULL , &States[S_GAUNTLETPUFF1+2]), - S_BRIGHT (PUF1, 'C', 4, NULL , &States[S_GAUNTLETPUFF1+3]), - S_BRIGHT (PUF1, 'D', 4, NULL , NULL) -}; - -IMPLEMENT_ACTOR (AGauntletPuff1, Heretic, -1, 0) - PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY) - PROP_Flags3 (MF3_PUFFONACTORS) - PROP_RenderStyle (STYLE_Translucent) - PROP_Alpha (HR_SHADOW) - PROP_SpawnState (S_GAUNTLETPUFF1) -END_DEFAULTS - -void AGauntletPuff1::BeginPlay () -{ - Super::BeginPlay (); - momz = FRACUNIT * 8 / 10; -} - -// Gauntlett puff 2 --------------------------------------------------------- - -class AGauntletPuff2 : public AGauntletPuff1 -{ - DECLARE_ACTOR (AGauntletPuff2, AGauntletPuff1) -}; - -FState AGauntletPuff2::States[] = -{ -#define S_GAUNTLETPUFF2 0 - S_BRIGHT (PUF1, 'E', 4, NULL , &States[S_GAUNTLETPUFF2+1]), - S_BRIGHT (PUF1, 'F', 4, NULL , &States[S_GAUNTLETPUFF2+2]), - S_BRIGHT (PUF1, 'G', 4, NULL , &States[S_GAUNTLETPUFF2+3]), - S_BRIGHT (PUF1, 'H', 4, NULL , NULL) -}; - -IMPLEMENT_ACTOR (AGauntletPuff2, Heretic, -1, 0) - PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY) - PROP_RenderStyle (STYLE_Translucent) - PROP_Alpha (HR_SHADOW) - - PROP_SpawnState (S_GAUNTLETPUFF2) -END_DEFAULTS - -//--------------------------------------------------------------------------- -// -// PROC A_GauntletAttack -// -//--------------------------------------------------------------------------- - -void A_GauntletAttack (AActor *actor) -{ - angle_t angle; - int damage; - int slope; - int randVal; - fixed_t dist; - player_t *player; - const PClass *pufftype; - AInventory *power; - AActor *linetarget; - - if (NULL == (player = actor->player)) - { - return; - } - - AWeapon *weapon = player->ReadyWeapon; - if (weapon != NULL) - { - if (!weapon->DepleteAmmo (weapon->bAltFire)) - return; - } - player->psprites[ps_weapon].sx = ((pr_gatk()&3)-2) * FRACUNIT; - player->psprites[ps_weapon].sy = WEAPONTOP + (pr_gatk()&3) * FRACUNIT; - angle = actor->angle; - power = actor->FindInventory (RUNTIME_CLASS(APowerWeaponLevel2)); - if (power) - { - damage = pr_gatk.HitDice (2); - dist = 4*MELEERANGE; - angle += pr_gatk.Random2() << 17; - pufftype = RUNTIME_CLASS(AGauntletPuff2); - } - else - { - damage = pr_gatk.HitDice (2); - dist = MELEERANGE+1; - angle += pr_gatk.Random2() << 18; - pufftype = RUNTIME_CLASS(AGauntletPuff1); - } - slope = P_AimLineAttack (actor, angle, dist, &linetarget); - P_LineAttack (actor, angle, dist, slope, damage, NAME_Melee, pufftype); - if (!linetarget) - { - if (pr_gatk() > 64) - { - player->extralight = !player->extralight; - } - S_Sound (actor, CHAN_AUTO, "weapons/gauntletson", 1, ATTN_NORM); - return; - } - randVal = pr_gatk(); - if (randVal < 64) - { - player->extralight = 0; - } - else if (randVal < 160) - { - player->extralight = 1; - } - else - { - player->extralight = 2; - } - if (power) - { - P_GiveBody (actor, damage>>1); - S_Sound (actor, CHAN_AUTO, "weapons/gauntletspowhit", 1, ATTN_NORM); - } - else - { - S_Sound (actor, CHAN_AUTO, "weapons/gauntletshit", 1, ATTN_NORM); - } - // turn to face target - angle = R_PointToAngle2 (actor->x, actor->y, - linetarget->x, linetarget->y); - if (angle-actor->angle > ANG180) - { - if ((int)(angle-actor->angle) < -ANG90/20) - actor->angle = angle+ANG90/21; - else - actor->angle -= ANG90/20; - } - else - { - if (angle-actor->angle > ANG90/20) - actor->angle = angle-ANG90/21; - else - actor->angle += ANG90/20; - } - actor->flags |= MF_JUSTATTACKED; -} - // --- Blaster (aka Claw) --------------------------------------------------- void A_FireBlasterPL1 (AActor *); @@ -2229,7 +1541,7 @@ END_DEFAULTS int AHornRodFX2::DoSpecialDamage (AActor *target, int damage) { - if (target->IsKindOf (RUNTIME_CLASS (ASorcerer2)) && pr_hrfx2() < 96) + if (target->IsKindOf (PClass::FindClass("Sorcerer2")) && pr_hrfx2() < 96) { // D'Sparil teleports away P_DSparilTeleport (target); return -1; @@ -2665,7 +1977,7 @@ END_DEFAULTS int APhoenixFX1::DoSpecialDamage (AActor *target, int damage) { - if (target->IsKindOf (RUNTIME_CLASS (ASorcerer2)) && pr_pfx1() < 96) + if (target->IsKindOf (PClass::FindClass("Sorcerer2")) && pr_hrfx2() < 96) { // D'Sparil teleports away P_DSparilTeleport (target); return -1; diff --git a/src/g_heretic/a_ironlich.cpp b/src/g_heretic/a_ironlich.cpp index db2c6f43..f6523d97 100644 --- a/src/g_heretic/a_ironlich.cpp +++ b/src/g_heretic/a_ironlich.cpp @@ -11,235 +11,14 @@ static FRandom pr_foo ("WhirlwindDamage"); static FRandom pr_atk ("LichAttack"); static FRandom pr_seek ("WhirlwindSeek"); -void A_LichAttack (AActor *); -void A_LichIceImpact (AActor *); -void A_LichFireGrow (AActor *); -void A_WhirlwindSeek (AActor *); - -// Ironlich ----------------------------------------------------------------- - -class AIronlich : public AActor -{ - DECLARE_ACTOR (AIronlich, AActor) -public: - void NoBlockingSet (); -}; - -FState AIronlich::States[] = -{ -#define S_HEAD_LOOK 0 - S_NORMAL (LICH, 'A', 10, A_Look , &States[S_HEAD_LOOK]), - -#define S_HEAD_FLOAT (S_HEAD_LOOK+1) - S_NORMAL (LICH, 'A', 4, A_Chase , &States[S_HEAD_FLOAT]), - -#define S_HEAD_ATK (S_HEAD_FLOAT+1) - S_NORMAL (LICH, 'A', 5, A_FaceTarget , &States[S_HEAD_ATK+1]), - S_NORMAL (LICH, 'B', 20, A_LichAttack , &States[S_HEAD_FLOAT]), - -#define S_HEAD_PAIN (S_HEAD_ATK+2) - S_NORMAL (LICH, 'A', 4, NULL , &States[S_HEAD_PAIN+1]), - S_NORMAL (LICH, 'A', 4, A_Pain , &States[S_HEAD_FLOAT]), - -#define S_HEAD_DIE (S_HEAD_PAIN+2) - S_NORMAL (LICH, 'C', 7, NULL , &States[S_HEAD_DIE+1]), - S_NORMAL (LICH, 'D', 7, A_Scream , &States[S_HEAD_DIE+2]), - S_NORMAL (LICH, 'E', 7, NULL , &States[S_HEAD_DIE+3]), - S_NORMAL (LICH, 'F', 7, NULL , &States[S_HEAD_DIE+4]), - S_NORMAL (LICH, 'G', 7, A_NoBlocking , &States[S_HEAD_DIE+5]), - S_NORMAL (LICH, 'H', 7, NULL , &States[S_HEAD_DIE+6]), - S_NORMAL (LICH, 'I', -1, A_BossDeath , NULL) -}; - -IMPLEMENT_ACTOR (AIronlich, Heretic, 6, 20) - PROP_SpawnHealth (700) - PROP_RadiusFixed (40) - PROP_HeightFixed (72) - PROP_Mass (325) - PROP_SpeedFixed (6) - PROP_PainChance (32) - PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL|MF_NOBLOOD) - PROP_Flags2 (MF2_MCROSS|MF2_PASSMOBJ|MF2_PUSHWALL) - PROP_Flags3 (MF3_DONTMORPH|MF3_DONTSQUASH) - PROP_Flags4 (MF4_BOSSDEATH) - - PROP_SpawnState (S_HEAD_LOOK) - PROP_SeeState (S_HEAD_FLOAT) - PROP_PainState (S_HEAD_PAIN) - PROP_MissileState (S_HEAD_ATK) - PROP_DeathState (S_HEAD_DIE) - - PROP_SeeSound ("ironlich/sight") - PROP_AttackSound ("ironlich/attack") - PROP_PainSound ("ironlich/pain") - PROP_DeathSound ("ironlich/death") - PROP_ActiveSound ("ironlich/active") - PROP_Obituary("$OB_IRONLICH") - PROP_HitObituary("$OB_IRONLICHHIT") -END_DEFAULTS - -void AIronlich::NoBlockingSet () -{ - P_DropItem (this, "BlasterAmmo", 10, 84); - P_DropItem (this, "ArtiEgg", 0, 51); -} - -// Head FX 1 ---------------------------------------------------------------- - -class AHeadFX1 : public AActor -{ - DECLARE_ACTOR (AHeadFX1, AActor) -}; - -FState AHeadFX1::States[] = -{ -#define S_HEADFX1 0 - S_BRIGHT (FX05, 'A', 6, NULL , &States[S_HEADFX1+1]), - S_BRIGHT (FX05, 'B', 6, NULL , &States[S_HEADFX1+2]), - S_BRIGHT (FX05, 'C', 6, NULL , &States[S_HEADFX1+0]), - -#define S_HEADFXI1 (S_HEADFX1+3) - S_BRIGHT (FX05, 'D', 5, A_LichIceImpact , &States[S_HEADFXI1+1]), - S_BRIGHT (FX05, 'E', 5, NULL , &States[S_HEADFXI1+2]), - S_BRIGHT (FX05, 'F', 5, NULL , &States[S_HEADFXI1+3]), - S_BRIGHT (FX05, 'G', 5, NULL , NULL) -}; - -IMPLEMENT_ACTOR (AHeadFX1, Heretic, -1, 164) - PROP_RadiusFixed (12) - PROP_HeightFixed (6) - PROP_SpeedFixed (13) - PROP_Damage (1) - PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY) - PROP_Flags2 (MF2_NOTELEPORT|MF2_THRUGHOST) - PROP_RenderStyle (STYLE_Add) - - PROP_SpawnState (S_HEADFX1) - PROP_DeathState (S_HEADFXI1) -END_DEFAULTS - -AT_SPEED_SET (HeadFX1, speed) -{ - SimpleSpeedSetter (AHeadFX1, 13*FRACUNIT, 20*FRACUNIT, speed); -} - -// Head FX 2 ---------------------------------------------------------------- - -class AHeadFX2 : public AActor -{ - DECLARE_ACTOR (AHeadFX2, AActor) -}; - -FState AHeadFX2::States[] = -{ -#define S_HEADFX2 0 - S_BRIGHT (FX05, 'H', 6, NULL , &States[S_HEADFX2+1]), - S_BRIGHT (FX05, 'I', 6, NULL , &States[S_HEADFX2+2]), - S_BRIGHT (FX05, 'J', 6, NULL , &States[S_HEADFX2+0]), - -#define S_HEADFXI2 (S_HEADFX2+3) - S_BRIGHT (FX05, 'D', 5, NULL , &States[S_HEADFXI2+1]), - S_BRIGHT (FX05, 'E', 5, NULL , &States[S_HEADFXI2+2]), - S_BRIGHT (FX05, 'F', 5, NULL , &States[S_HEADFXI2+3]), - S_BRIGHT (FX05, 'G', 5, NULL , NULL) -}; - -IMPLEMENT_ACTOR (AHeadFX2, Heretic, -1, 0) - PROP_RadiusFixed (12) - PROP_HeightFixed (6) - PROP_SpeedFixed (8) - PROP_Damage (3) - PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY) - PROP_Flags2 (MF2_NOTELEPORT) - PROP_RenderStyle (STYLE_Add) - - PROP_SpawnState (S_HEADFX2) - PROP_DeathState (S_HEADFXI2) -END_DEFAULTS - -// Head FX 3 ---------------------------------------------------------------- - -class AHeadFX3 : public AActor -{ - DECLARE_ACTOR (AHeadFX3, AActor) -}; - -FState AHeadFX3::States[] = -{ -#define S_HEADFX3 0 - S_BRIGHT (FX06, 'A', 4, A_LichFireGrow , &States[S_HEADFX3+1]), - S_BRIGHT (FX06, 'B', 4, A_LichFireGrow , &States[S_HEADFX3+2]), - S_BRIGHT (FX06, 'C', 4, A_LichFireGrow , &States[S_HEADFX3+0]), - S_BRIGHT (FX06, 'A', 5, NULL , &States[S_HEADFX3+4]), - S_BRIGHT (FX06, 'B', 5, NULL , &States[S_HEADFX3+5]), - S_BRIGHT (FX06, 'C', 5, NULL , &States[S_HEADFX3+3]), - -#define S_HEADFXI3 (S_HEADFX3+6) - S_BRIGHT (FX06, 'D', 5, NULL , &States[S_HEADFXI3+1]), - S_BRIGHT (FX06, 'E', 5, NULL , &States[S_HEADFXI3+2]), - S_BRIGHT (FX06, 'F', 5, NULL , &States[S_HEADFXI3+3]), - S_BRIGHT (FX06, 'G', 5, NULL , NULL) -}; - -IMPLEMENT_ACTOR (AHeadFX3, Heretic, -1, 0) - PROP_RadiusFixed (14) - PROP_HeightFixed (12) - PROP_SpeedFixed (10) - PROP_Damage (5) - PROP_Flags (MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY) - PROP_Flags2 (MF2_WINDTHRUST|MF2_NOTELEPORT) - PROP_RenderStyle (STYLE_Add) - - PROP_SpawnState (S_HEADFX3) - PROP_DeathState (S_HEADFXI3) -END_DEFAULTS - -AT_SPEED_SET (HeadFX3, speed) -{ - SimpleSpeedSetter (AHeadFX3, 10*FRACUNIT, 18*FRACUNIT, speed); -} - -// Whirlwind ---------------------------------------------------------------- - class AWhirlwind : public AActor { - DECLARE_ACTOR (AWhirlwind, AActor) + DECLARE_CLASS (AWhirlwind, AActor) public: int DoSpecialDamage (AActor *target, int damage); }; -FState AWhirlwind::States[] = -{ -#define S_HEADFX4 0 - S_NORMAL (FX07, 'D', 3, NULL , &States[S_HEADFX4+1]), - S_NORMAL (FX07, 'E', 3, NULL , &States[S_HEADFX4+2]), - S_NORMAL (FX07, 'F', 3, NULL , &States[S_HEADFX4+3]), - S_NORMAL (FX07, 'G', 3, NULL , &States[S_HEADFX4+4]), - S_NORMAL (FX07, 'A', 3, A_WhirlwindSeek , &States[S_HEADFX4+5]), - S_NORMAL (FX07, 'B', 3, A_WhirlwindSeek , &States[S_HEADFX4+6]), - S_NORMAL (FX07, 'C', 3, A_WhirlwindSeek , &States[S_HEADFX4+4]), - -#define S_HEADFXI4 (S_HEADFX4+7) - S_NORMAL (FX07, 'G', 4, NULL , &States[S_HEADFXI4+1]), - S_NORMAL (FX07, 'F', 4, NULL , &States[S_HEADFXI4+2]), - S_NORMAL (FX07, 'E', 4, NULL , &States[S_HEADFXI4+3]), - S_NORMAL (FX07, 'D', 4, NULL , NULL) -}; - -IMPLEMENT_ACTOR (AWhirlwind, Heretic, -1, 165) - PROP_RadiusFixed (16) - PROP_HeightFixed (74) - PROP_SpeedFixed (10) - PROP_Damage (1) - PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY) - PROP_Flags2 (MF2_NOTELEPORT|MF2_SEEKERMISSILE) - PROP_Flags3 (MF3_EXPLOCOUNT) - PROP_RenderStyle (STYLE_Translucent) - PROP_Alpha (HR_SHADOW) - - PROP_SpawnState (S_HEADFX4) - PROP_DeathState (S_HEADFXI4) -END_DEFAULTS +IMPLEMENT_CLASS(AWhirlwind) int AWhirlwind::DoSpecialDamage (AActor *target, int damage) { @@ -309,18 +88,18 @@ void A_LichAttack (AActor *actor) randAttack = pr_atk (); if (randAttack < atkResolve1[dist]) { // Ice ball - P_SpawnMissile (actor, target, RUNTIME_CLASS(AHeadFX1)); + P_SpawnMissile (actor, target, PClass::FindClass("HeadFX1")); S_Sound (actor, CHAN_BODY, "ironlich/attack2", 1, ATTN_NORM); } else if (randAttack < atkResolve2[dist]) { // Fire column - baseFire = P_SpawnMissile (actor, target, RUNTIME_CLASS(AHeadFX3)); + baseFire = P_SpawnMissile (actor, target, PClass::FindClass("HeadFX3")); if (baseFire != NULL) { - baseFire->SetState (&AHeadFX3::States[S_HEADFX3+3]); // Don't grow + baseFire->SetState (baseFire->FindState("NoGrow")); for (i = 0; i < 5; i++) { - fire = Spawn (baseFire->x, baseFire->y, + fire = Spawn("HeadFX3", baseFire->x, baseFire->y, baseFire->z, ALLOW_REPLACE); if (i == 0) { @@ -394,7 +173,7 @@ void A_LichIceImpact (AActor *ice) for (i = 0; i < 8; i++) { - shard = Spawn (ice->x, ice->y, ice->z, ALLOW_REPLACE); + shard = Spawn("HeadFX2", ice->x, ice->y, ice->z, ALLOW_REPLACE); angle = i*ANG45; shard->target = ice->target; shard->angle = angle; @@ -419,7 +198,7 @@ void A_LichFireGrow (AActor *fire) if (fire->health == 0) { fire->Damage = fire->GetDefault()->Damage; - fire->SetState (&AHeadFX3::States[S_HEADFX3+3]); + fire->SetState (fire->FindState("NoGrow")); } } diff --git a/src/g_heretic/a_knight.cpp b/src/g_heretic/a_knight.cpp index 9879bd4f..c84da946 100644 --- a/src/g_heretic/a_knight.cpp +++ b/src/g_heretic/a_knight.cpp @@ -11,170 +11,6 @@ static FRandom pr_dripblood ("DripBlood"); static FRandom pr_knightatk ("KnightAttack"); -void A_KnightAttack (AActor *); -void A_DripBlood (AActor *); -void A_AxeSound (AActor *); - -// Knight ------------------------------------------------------------------- - -class AKnight : public AActor -{ - DECLARE_ACTOR (AKnight, AActor) -public: - void NoBlockingSet (); -}; - -FState AKnight::States[] = -{ -#define S_KNIGHT_STND 0 - S_NORMAL (KNIG, 'A', 10, A_Look , &States[S_KNIGHT_STND+1]), - S_NORMAL (KNIG, 'B', 10, A_Look , &States[S_KNIGHT_STND+0]), - -#define S_KNIGHT_WALK (S_KNIGHT_STND+2) - S_NORMAL (KNIG, 'A', 4, A_Chase , &States[S_KNIGHT_WALK+1]), - S_NORMAL (KNIG, 'B', 4, A_Chase , &States[S_KNIGHT_WALK+2]), - S_NORMAL (KNIG, 'C', 4, A_Chase , &States[S_KNIGHT_WALK+3]), - S_NORMAL (KNIG, 'D', 4, A_Chase , &States[S_KNIGHT_WALK+0]), - -#define S_KNIGHT_ATK (S_KNIGHT_WALK+4) - S_NORMAL (KNIG, 'E', 10, A_FaceTarget , &States[S_KNIGHT_ATK+1]), - S_NORMAL (KNIG, 'F', 8, A_FaceTarget , &States[S_KNIGHT_ATK+2]), - S_NORMAL (KNIG, 'G', 8, A_KnightAttack , &States[S_KNIGHT_ATK+3]), - S_NORMAL (KNIG, 'E', 10, A_FaceTarget , &States[S_KNIGHT_ATK+4]), - S_NORMAL (KNIG, 'F', 8, A_FaceTarget , &States[S_KNIGHT_ATK+5]), - S_NORMAL (KNIG, 'G', 8, A_KnightAttack , &States[S_KNIGHT_WALK+0]), - -#define S_KNIGHT_PAIN (S_KNIGHT_ATK+6) - S_NORMAL (KNIG, 'H', 3, NULL , &States[S_KNIGHT_PAIN+1]), - S_NORMAL (KNIG, 'H', 3, A_Pain , &States[S_KNIGHT_WALK+0]), - -#define S_KNIGHT_DIE (S_KNIGHT_PAIN+2) - S_NORMAL (KNIG, 'I', 6, NULL , &States[S_KNIGHT_DIE+1]), - S_NORMAL (KNIG, 'J', 6, A_Scream , &States[S_KNIGHT_DIE+2]), - S_NORMAL (KNIG, 'K', 6, NULL , &States[S_KNIGHT_DIE+3]), - S_NORMAL (KNIG, 'L', 6, A_NoBlocking , &States[S_KNIGHT_DIE+4]), - S_NORMAL (KNIG, 'M', 6, NULL , &States[S_KNIGHT_DIE+5]), - S_NORMAL (KNIG, 'N', 6, NULL , &States[S_KNIGHT_DIE+6]), - S_NORMAL (KNIG, 'O', -1, NULL , NULL) -}; - -IMPLEMENT_ACTOR (AKnight, Heretic, 64, 6) - PROP_SpawnHealth (200) - PROP_RadiusFixed (24) - PROP_HeightFixed (78) - PROP_Mass (150) - PROP_SpeedFixed (12) - PROP_PainChance (100) - PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL) - PROP_Flags2 (MF2_MCROSS|MF2_FLOORCLIP|MF2_PASSMOBJ|MF2_PUSHWALL) - - PROP_SpawnState (S_KNIGHT_STND) - PROP_SeeState (S_KNIGHT_WALK) - PROP_PainState (S_KNIGHT_PAIN) - PROP_MeleeState (S_KNIGHT_ATK) - PROP_MissileState (S_KNIGHT_ATK) - PROP_DeathState (S_KNIGHT_DIE) - - PROP_SeeSound ("hknight/sight") - PROP_AttackSound ("hknight/attack") - PROP_PainSound ("hknight/pain") - PROP_DeathSound ("hknight/death") - PROP_ActiveSound ("hknight/active") - PROP_Obituary("$OB_BONEKNIGHT") - PROP_HitObituary("$OB_BONEKNIGHTHIT") -END_DEFAULTS - -void AKnight::NoBlockingSet () -{ - P_DropItem (this, "CrossbowAmmo", 5, 84); -} - -// Knight ghost ------------------------------------------------------------- - -class AKnightGhost : public AKnight -{ - DECLARE_STATELESS_ACTOR (AKnightGhost, AKnight) -}; - -IMPLEMENT_STATELESS_ACTOR (AKnightGhost, Heretic, 65, 129) - PROP_FlagsSet (MF_SHADOW) - PROP_Flags3 (MF3_GHOST) - PROP_RenderStyle (STYLE_Translucent) - PROP_Alpha (HR_SHADOW) -END_DEFAULTS - -// Knight axe --------------------------------------------------------------- - -class AKnightAxe : public AActor -{ - DECLARE_ACTOR (AKnightAxe, AActor) -}; - -FState AKnightAxe::States[] = -{ -#define S_SPINAXE 0 - S_BRIGHT (SPAX, 'A', 3, A_AxeSound , &States[S_SPINAXE+1]), - S_BRIGHT (SPAX, 'B', 3, NULL , &States[S_SPINAXE+2]), - S_BRIGHT (SPAX, 'C', 3, NULL , &States[S_SPINAXE+0]), - -#define S_SPINAXEX (S_SPINAXE+3) - S_BRIGHT (SPAX, 'D', 6, NULL , &States[S_SPINAXEX+1]), - S_BRIGHT (SPAX, 'E', 6, NULL , &States[S_SPINAXEX+2]), - S_BRIGHT (SPAX, 'F', 6, NULL , NULL) -}; - -IMPLEMENT_ACTOR (AKnightAxe, Heretic, -1, 127) - PROP_RadiusFixed (10) - PROP_HeightFixed (8) - PROP_SpeedFixed (9) - PROP_Damage (2) - PROP_Flags (MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY) - PROP_Flags2 (MF2_WINDTHRUST|MF2_NOTELEPORT|MF2_THRUGHOST) - - PROP_SpawnState (S_SPINAXE) - PROP_DeathState (S_SPINAXEX) - - PROP_DeathSound ("hknight/hit") -END_DEFAULTS - -AT_SPEED_SET (KnightAxe, speed) -{ - SimpleSpeedSetter (AKnightAxe, 9*FRACUNIT, 18*FRACUNIT, speed); -} - -// Red axe ------------------------------------------------------------------ - -class ARedAxe : public AKnightAxe -{ - DECLARE_ACTOR (ARedAxe, AKnightAxe) -}; - -FState ARedAxe::States[] = -{ -#define S_REDAXE 0 - S_BRIGHT (RAXE, 'A', 5, A_DripBlood , &States[S_REDAXE+1]), - S_BRIGHT (RAXE, 'B', 5, A_DripBlood , &States[S_REDAXE+0]), - -#define S_REDAXEX (S_REDAXE+2) - S_BRIGHT (RAXE, 'C', 6, NULL , &States[S_REDAXEX+1]), - S_BRIGHT (RAXE, 'D', 6, NULL , &States[S_REDAXEX+2]), - S_BRIGHT (RAXE, 'E', 6, NULL , NULL) -}; - -IMPLEMENT_ACTOR (ARedAxe, Heretic, -1, 128) - PROP_Damage (7) - PROP_FlagsSet (MF_NOBLOCKMAP) - PROP_Flags2Clear (MF2_WINDTHRUST) - - PROP_SpawnState (S_REDAXE) - PROP_DeathState (S_REDAXEX) -END_DEFAULTS - -AT_SPEED_SET (RedAxe, speed) -{ - SimpleSpeedSetter (ARedAxe, 9*FRACUNIT, 18*FRACUNIT, speed); -} - //---------------------------------------------------------------------------- // // PROC A_DripBlood @@ -218,20 +54,10 @@ void A_KnightAttack (AActor *actor) S_Sound (actor, CHAN_BODY, actor->AttackSound, 1, ATTN_NORM); if (actor->flags & MF_SHADOW || pr_knightatk () < 40) { // Red axe - P_SpawnMissileZ (actor, actor->z + 36*FRACUNIT, actor->target, RUNTIME_CLASS(ARedAxe)); + P_SpawnMissileZ (actor, actor->z + 36*FRACUNIT, actor->target, PClass::FindClass("RedAxe")); return; } // Green axe - P_SpawnMissileZ (actor, actor->z + 36*FRACUNIT, actor->target, RUNTIME_CLASS(AKnightAxe)); + P_SpawnMissileZ (actor, actor->z + 36*FRACUNIT, actor->target, PClass::FindClass("KnightAxe")); } -//--------------------------------------------------------------------------- -// -// PROC A_AxeSound -// -//--------------------------------------------------------------------------- - -void A_AxeSound (AActor *actor) -{ - S_Sound (actor, CHAN_BODY, "hknight/axewhoosh", 1, ATTN_NORM); -} diff --git a/src/g_heretic/a_wizard.cpp b/src/g_heretic/a_wizard.cpp index b3f1f59a..d35ab053 100644 --- a/src/g_heretic/a_wizard.cpp +++ b/src/g_heretic/a_wizard.cpp @@ -10,126 +10,6 @@ static FRandom pr_wizatk3 ("WizAtk3"); -void A_WizAtk1 (AActor *); -void A_WizAtk2 (AActor *); -void A_WizAtk3 (AActor *); -void A_GhostOff (AActor *); - -// Class definitions -------------------------------------------------------- - -FState AWizard::States[] = -{ -#define S_WIZARD_LOOK 0 - S_NORMAL (WZRD, 'A', 10, A_Look , &States[S_WIZARD_LOOK+1]), - S_NORMAL (WZRD, 'B', 10, A_Look , &States[S_WIZARD_LOOK+0]), - -#define S_WIZARD_WALK (S_WIZARD_LOOK+2) - S_NORMAL (WZRD, 'A', 3, A_Chase , &States[S_WIZARD_WALK+1]), - S_NORMAL (WZRD, 'A', 4, A_Chase , &States[S_WIZARD_WALK+2]), - S_NORMAL (WZRD, 'A', 3, A_Chase , &States[S_WIZARD_WALK+3]), - S_NORMAL (WZRD, 'A', 4, A_Chase , &States[S_WIZARD_WALK+4]), - S_NORMAL (WZRD, 'B', 3, A_Chase , &States[S_WIZARD_WALK+5]), - S_NORMAL (WZRD, 'B', 4, A_Chase , &States[S_WIZARD_WALK+6]), - S_NORMAL (WZRD, 'B', 3, A_Chase , &States[S_WIZARD_WALK+7]), - S_NORMAL (WZRD, 'B', 4, A_Chase , &States[S_WIZARD_WALK+0]), - -#define S_WIZARD_ATK (S_WIZARD_WALK+8) - S_NORMAL (WZRD, 'C', 4, A_WizAtk1 , &States[S_WIZARD_ATK+1]), - S_NORMAL (WZRD, 'C', 4, A_WizAtk2 , &States[S_WIZARD_ATK+2]), - S_NORMAL (WZRD, 'C', 4, A_WizAtk1 , &States[S_WIZARD_ATK+3]), - S_NORMAL (WZRD, 'C', 4, A_WizAtk2 , &States[S_WIZARD_ATK+4]), - S_NORMAL (WZRD, 'C', 4, A_WizAtk1 , &States[S_WIZARD_ATK+5]), - S_NORMAL (WZRD, 'C', 4, A_WizAtk2 , &States[S_WIZARD_ATK+6]), - S_NORMAL (WZRD, 'C', 4, A_WizAtk1 , &States[S_WIZARD_ATK+7]), - S_NORMAL (WZRD, 'C', 4, A_WizAtk2 , &States[S_WIZARD_ATK+8]), - S_NORMAL (WZRD, 'D', 12, A_WizAtk3 , &States[S_WIZARD_WALK+0]), - -#define S_WIZARD_PAIN (S_WIZARD_ATK+9) - S_NORMAL (WZRD, 'E', 3, A_GhostOff , &States[S_WIZARD_PAIN+1]), - S_NORMAL (WZRD, 'E', 3, A_Pain , &States[S_WIZARD_WALK+0]), - -#define S_WIZARD_DIE (S_WIZARD_PAIN+2) - S_NORMAL (WZRD, 'F', 6, A_GhostOff , &States[S_WIZARD_DIE+1]), - S_NORMAL (WZRD, 'G', 6, A_Scream , &States[S_WIZARD_DIE+2]), - S_NORMAL (WZRD, 'H', 6, NULL , &States[S_WIZARD_DIE+3]), - S_NORMAL (WZRD, 'I', 6, NULL , &States[S_WIZARD_DIE+4]), - S_NORMAL (WZRD, 'J', 6, A_NoBlocking , &States[S_WIZARD_DIE+5]), - S_NORMAL (WZRD, 'K', 6, NULL , &States[S_WIZARD_DIE+6]), - S_NORMAL (WZRD, 'L', 6, NULL , &States[S_WIZARD_DIE+7]), - S_NORMAL (WZRD, 'M', -1, NULL , NULL) -}; - -IMPLEMENT_ACTOR (AWizard, Heretic, 15, 19) - PROP_SpawnHealth (180) - PROP_RadiusFixed (16) - PROP_HeightFixed (68) - PROP_Mass (100) - PROP_SpeedFixed (12) - PROP_PainChance (64) - PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL|MF_FLOAT|MF_NOGRAVITY) - PROP_Flags2 (MF2_MCROSS|MF2_PASSMOBJ|MF2_PUSHWALL) - PROP_Flags3 (MF3_DONTOVERLAP) - - PROP_SpawnState (S_WIZARD_LOOK) - PROP_SeeState (S_WIZARD_WALK) - PROP_PainState (S_WIZARD_PAIN) - PROP_MissileState (S_WIZARD_ATK) - PROP_DeathState (S_WIZARD_DIE) - - PROP_SeeSound ("wizard/sight") - PROP_AttackSound ("wizard/attack") - PROP_PainSound ("wizard/pain") - PROP_DeathSound ("wizard/death") - PROP_ActiveSound ("wizard/active") - PROP_Obituary("$OB_WIZARD") - PROP_HitObituary("$OB_WIZARDHIT") -END_DEFAULTS - -void AWizard::NoBlockingSet () -{ - P_DropItem (this, "BlasterAmmo", 10, 84); - P_DropItem (this, "ArtiTomeOfPower", 0, 4); -} - -class AWizardFX1 : public AActor -{ - DECLARE_ACTOR (AWizardFX1, AActor) -}; - -FState AWizardFX1::States[] = -{ -#define S_WIZFX1 0 - S_BRIGHT (FX11, 'A', 6, NULL , &States[S_WIZFX1+1]), - S_BRIGHT (FX11, 'B', 6, NULL , &States[S_WIZFX1+0]), - -#define S_WIZFXI1 (S_WIZFX1+2) - S_BRIGHT (FX11, 'C', 5, NULL , &States[S_WIZFXI1+1]), - S_BRIGHT (FX11, 'D', 5, NULL , &States[S_WIZFXI1+2]), - S_BRIGHT (FX11, 'E', 5, NULL , &States[S_WIZFXI1+3]), - S_BRIGHT (FX11, 'F', 5, NULL , &States[S_WIZFXI1+4]), - S_BRIGHT (FX11, 'G', 5, NULL , NULL) -}; - -IMPLEMENT_ACTOR (AWizardFX1, Heretic, -1, 140) - PROP_RadiusFixed (10) - PROP_HeightFixed (6) - PROP_SpeedFixed (18) - PROP_Damage (3) - PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY) - PROP_Flags2 (MF2_NOTELEPORT) - PROP_RenderStyle (STYLE_Add) - - PROP_SpawnState (S_WIZFX1) - PROP_DeathState (S_WIZFXI1) -END_DEFAULTS - -AT_SPEED_SET (WizardFX1, speed) -{ - SimpleSpeedSetter (AWizardFX1, 18*FRACUNIT, 24*FRACUNIT, speed); -} - -// --- Action functions ----------------------------------------------------- - //---------------------------------------------------------------------------- // // PROC A_GhostOff @@ -191,10 +71,11 @@ void A_WizAtk3 (AActor *actor) P_TraceBleed (damage, actor->target, actor); return; } - mo = P_SpawnMissile (actor, actor->target, RUNTIME_CLASS(AWizardFX1)); + const PClass *fx = PClass::FindClass("WizardFX1"); + mo = P_SpawnMissile (actor, actor->target, fx); if (mo != NULL) { - P_SpawnMissileAngle(actor, RUNTIME_CLASS(AWizardFX1), mo->angle-(ANG45/8), mo->momz); - P_SpawnMissileAngle(actor, RUNTIME_CLASS(AWizardFX1), mo->angle+(ANG45/8), mo->momz); + P_SpawnMissileAngle(actor, fx, mo->angle-(ANG45/8), mo->momz); + P_SpawnMissileAngle(actor, fx, mo->angle+(ANG45/8), mo->momz); } } diff --git a/src/g_level.cpp b/src/g_level.cpp index cf533709..528e3672 100644 --- a/src/g_level.cpp +++ b/src/g_level.cpp @@ -780,12 +780,18 @@ static void G_DoParseMapInfo (int lump) break; case MITL_MAP: // map + { + char maptemp[8]; + char *mapname; + levelflags = defaultinfo.flags; sc.MustGetString (); - if (IsNum (sc.String)) + mapname = sc.String; + if (IsNum (mapname)) { // MAPNAME is a number; assume a Hexen wad - int map = atoi (sc.String); - sprintf (sc.String, "MAP%02d", map); + int mapnum = atoi (mapname); + mysnprintf (maptemp, countof(maptemp), "MAP%02d", mapnum); + mapname = maptemp; HexenHack = true; // Hexen levels are automatically nointermission, // no auto sound sequences, falling damage, @@ -800,7 +806,7 @@ static void G_DoParseMapInfo (int lump) | LEVEL_MONSTERFALLINGDAMAGE | LEVEL_HEXENHACK; } - levelindex = FindWadLevelInfo (sc.String); + levelindex = FindWadLevelInfo (mapname); if (levelindex == -1) { levelindex = wadlevelinfos.Reserve(1); @@ -824,13 +830,13 @@ static void G_DoParseMapInfo (int lump) { levelinfo->WallHorizLight = levelinfo->WallVertLight = 0; } - uppercopy (levelinfo->mapname, sc.String); + uppercopy (levelinfo->mapname, mapname); sc.MustGetString (); if (sc.String[0] == '$') { // For consistency with other definitions allow $Stringtablename here, too. levelflags |= LEVEL_LOOKUPLEVELNAME; - ReplaceString (&levelinfo->level_name, sc.String+1); + ReplaceString (&levelinfo->level_name, sc.String + 1); } else { @@ -874,6 +880,7 @@ static void G_DoParseMapInfo (int lump) } } break; + } case MITL_CLUSTERDEF: // clusterdef sc.MustGetNumber (); @@ -999,22 +1006,26 @@ static void ParseMapInfoLower (FScanner &sc, case MITYPE_MAPNAME: { EndSequence newSeq; bool useseq = false; + char maptemp[8]; + char *mapname; sc.MustGetString (); - if (IsNum (sc.String)) + mapname = sc.String; + if (IsNum (mapname)) { - int map = atoi (sc.String); + int mapnum = atoi (mapname); if (HexenHack) { - sprintf (sc.String, "&wt@%02d", map); + mysnprintf (maptemp, countof(maptemp), "&wt@%02d", mapnum); } else { - sprintf (sc.String, "MAP%02d", map); + mysnprintf (maptemp, countof(maptemp), "MAP%02d", mapnum); } + mapname = maptemp; } - if (sc.Compare ("endgame")) + if (stricmp (mapname, "endgame") == 0) { newSeq.Advanced = true; newSeq.EndType = END_Pic1; @@ -1064,7 +1075,7 @@ static void ParseMapInfoLower (FScanner &sc, } useseq = true; } - else if (strnicmp (sc.String, "EndGame", 7) == 0) + else if (strnicmp (mapname, "EndGame", 7) == 0) { int type; switch (sc.String[7]) @@ -1080,46 +1091,46 @@ static void ParseMapInfoLower (FScanner &sc, newSeq.EndType = type; useseq = true; } - else if (sc.Compare ("endpic")) + else if (stricmp (mapname, "endpic") == 0) { sc.MustGetString (); newSeq.EndType = END_Pic; newSeq.PicName = sc.String; useseq = true; } - else if (sc.Compare ("endbunny")) + else if (stricmp (mapname, "endbunny") == 0) { newSeq.EndType = END_Bunny; useseq = true; } - else if (sc.Compare ("endcast")) + else if (stricmp (mapname, "endcast") == 0) { newSeq.EndType = END_Cast; useseq = true; } - else if (sc.Compare ("enddemon")) + else if (stricmp (mapname, "enddemon") == 0) { newSeq.EndType = END_Demon; useseq = true; } - else if (sc.Compare ("endchess")) + else if (stricmp (mapname, "endchess") == 0) { newSeq.EndType = END_Chess; useseq = true; } - else if (sc.Compare ("endunderwater")) + else if (stricmp (mapname, "endunderwater") == 0) { newSeq.EndType = END_Underwater; useseq = true; } - else if (sc.Compare ("endbuystrife")) + else if (stricmp (mapname, "endbuystrife") == 0) { newSeq.EndType = END_BuyStrife; useseq = true; } else { - strncpy ((char *)(info + handler->data1), sc.String, 8); + strncpy ((char *)(info + handler->data1), mapname, 8); } if (useseq) { @@ -1550,26 +1561,22 @@ void P_RemoveDefereds (void) } } -bool CheckWarpTransMap (char mapname[9], bool substitute) +bool CheckWarpTransMap (FString &mapname, bool substitute) { - if (mapname[0] == '&' && (mapname[1]&223) == 'W' && - (mapname[2]&223) == 'T' && mapname[3] == '@') + if (mapname[0] == '&' && (mapname[1] & 0xDF) == 'W' && + (mapname[2] & 0xDF) == 'T' && mapname[3] == '@') { - level_info_t *lev = FindLevelByWarpTrans (atoi (mapname + 4)); + level_info_t *lev = FindLevelByWarpTrans (atoi (&mapname[4])); if (lev != NULL) { - strncpy (mapname, lev->mapname, 8); - mapname[8] = 0; + mapname = lev->mapname; return true; } else if (substitute) { - mapname[0] = 'M'; - mapname[1] = 'A'; - mapname[2] = 'P'; - mapname[3] = mapname[4]; - mapname[4] = mapname[5]; - mapname[5] = 0; + char a = mapname[4], b = mapname[5]; + mapname = "MAP"; + mapname << a << b; } } return false; @@ -1580,12 +1587,12 @@ bool CheckWarpTransMap (char mapname[9], bool substitute) // Can be called by the startup code or the menu task, // consoleplayer, playeringame[] should be set. // -static char d_mapname[256]; +static FString d_mapname; static int d_skill=-1; void G_DeferedInitNew (const char *mapname, int newskill) { - strncpy (d_mapname, mapname, 8); + d_mapname = mapname; d_skill = newskill; CheckWarpTransMap (d_mapname, true); gameaction = ga_newgame2; @@ -1625,10 +1632,11 @@ CCMD (open) } if (argv.argc() > 1) { - sprintf(d_mapname, "file:%s", argv[1]); + d_mapname = "file:"; + d_mapname += argv[1]; if (!P_CheckMapData(d_mapname)) { - Printf ("No map %s\n", d_mapname); + Printf ("No map %s\n", d_mapname.GetChars()); } else { @@ -1679,7 +1687,10 @@ void G_DoNewGame (void) { G_NewInit (); playeringame[consoleplayer] = 1; - if (d_skill != -1) gameskill = d_skill; + if (d_skill != -1) + { + gameskill = d_skill; + } G_InitNew (d_mapname, false); gameaction = ga_nothing; } @@ -2004,34 +2015,30 @@ void G_DoCompleted (void) AM_Stop (); wminfo.finished_ep = level.cluster - 1; - strncpy (wminfo.lname0, level.info->pname, 8); - strncpy (wminfo.current, level.mapname, 8); + wminfo.lname0 = level.info->pname; + wminfo.current = level.mapname; if (deathmatch && (dmflags & DF_SAME_LEVEL) && !(level.flags & LEVEL_CHANGEMAPCHEAT)) { - strncpy (wminfo.next, level.mapname, 8); - strncpy (wminfo.lname1, level.info->pname, 8); + wminfo.next = level.mapname; + wminfo.lname1 = level.info->pname; } else { if (strncmp (nextlevel, "enDSeQ", 6) == 0) { - strncpy (wminfo.next, nextlevel, 8); - wminfo.lname1[0] = 0; + wminfo.next = FString(nextlevel, 8); + wminfo.lname1 = ""; } else { level_info_t *nextinfo = FindLevelInfo (nextlevel); - strncpy (wminfo.next, nextinfo->mapname, 8); - strncpy (wminfo.lname1, nextinfo->pname, 8); + wminfo.next = nextinfo->mapname; + wminfo.lname1 = nextinfo->pname; } } - wminfo.next[8]=0; - wminfo.lname0[8]=0; - wminfo.lname1[8]=0; - wminfo.current[8]=0; CheckWarpTransMap (wminfo.next, true); @@ -2632,21 +2639,18 @@ bool FLevelLocals::IsFreelookAllowed() const return !(dmflags & DF_NO_FREELOOK); } -char *CalcMapName (int episode, int level) +FString CalcMapName (int episode, int level) { - static char lumpname[9]; + FString lumpname; if (gameinfo.flags & GI_MAPxx) { - sprintf (lumpname, "MAP%02d", level); + lumpname.Format("MAP%02d", level); } else { - lumpname[0] = 'E'; - lumpname[1] = '0' + episode; - lumpname[2] = 'M'; - lumpname[3] = '0' + level; - lumpname[4] = 0; + lumpname = ""; + lumpname << 'E' << ('0' + episode) << 'M' << ('0' + level); } return lumpname; } @@ -2745,11 +2749,11 @@ const char *G_MaybeLookupLevelName (level_info_t *ininfo) // Strip out the header from the localized string if (info->mapname[0] == 'E' && info->mapname[2] == 'M') { - sprintf (checkstring, "%s: ", info->mapname); + mysnprintf (checkstring, countof(checkstring), "%s: ", info->mapname); } else if (info->mapname[0] == 'M' && info->mapname[1] == 'A' && info->mapname[2] == 'P') { - sprintf (checkstring, "%d: ", atoi(info->mapname + 3)); + mysnprintf (checkstring, countof(checkstring), "%d: ", atoi(info->mapname + 3)); } thename = strstr (lookedup, checkstring); if (thename == NULL) diff --git a/src/g_level.h b/src/g_level.h index 1367a660..6da01a8f 100644 --- a/src/g_level.h +++ b/src/g_level.h @@ -356,7 +356,7 @@ extern FWorldGlobalArray ACS_GlobalArrays[NUM_GLOBALVARS]; extern bool savegamerestore; // mapname will be changed if it is a valid warptrans -bool CheckWarpTransMap (char mapname[9], bool substitute); +bool CheckWarpTransMap (FString &mapname, bool substitute); void G_InitNew (const char *mapname, bool bTitleLevel); @@ -391,7 +391,7 @@ level_info_t *FindLevelInfo (const char *mapname); level_info_t *FindLevelByNum (int num); level_info_t *CheckLevelRedirect (level_info_t *info); -char *CalcMapName (int episode, int level); +FString CalcMapName (int episode, int level); void G_ParseMapInfo (void); void G_UnloadMapInfo (); diff --git a/src/g_raven/a_minotaur.cpp b/src/g_raven/a_minotaur.cpp index 87669e90..b9625a2f 100644 --- a/src/g_raven/a_minotaur.cpp +++ b/src/g_raven/a_minotaur.cpp @@ -110,7 +110,7 @@ FState AMinotaur::States[] = S_NORMAL (MNTR, 'E', 5, NULL , &States[S_MNTR_FADEOUT+6]), S_NORMAL (MNTR, 'E', 5, A_MinotaurFade1 , &States[S_MNTR_FADEOUT+7]), S_NORMAL (MNTR, 'E', 5, A_MinotaurFade0 , &States[S_MNTR_FADEOUT+8]), - S_NORMAL (MNTR, 'E', 10, NULL , NULL), + S_NORMAL (MNTR, 'E', 10, A_BossDeath , NULL), }; IMPLEMENT_ACTOR (AMinotaur, Heretic, 9, 0) @@ -124,6 +124,7 @@ IMPLEMENT_ACTOR (AMinotaur, Heretic, 9, 0) PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL|MF_DROPOFF) PROP_Flags2 (MF2_FLOORCLIP|MF2_PASSMOBJ|MF2_BOSS|MF2_PUSHWALL) PROP_Flags3 (MF3_NORADIUSDMG|MF3_DONTMORPH|MF3_NOTARGET) + PROP_Flags4 (MF4_BOSSDEATH) PROP_SpawnState (S_MNTR_LOOK) PROP_SeeState (S_MNTR_WALK) diff --git a/src/g_shared/a_debris.cpp b/src/g_shared/a_debris.cpp index a04fe273..2d52c45b 100644 --- a/src/g_shared/a_debris.cpp +++ b/src/g_shared/a_debris.cpp @@ -41,7 +41,7 @@ void P_SpawnDirt (AActor *actor, fixed_t radius) z = actor->z + (pr_dirt()<<9) + FRACUNIT; char fmt[8]; - sprintf(fmt, "Dirt%d", 1 + pr_dirt()%6); + mysnprintf(fmt, countof(fmt), "Dirt%d", 1 + pr_dirt()%6); dtype = PClass::FindClass(fmt); if (dtype) { diff --git a/src/g_shared/a_morph.cpp b/src/g_shared/a_morph.cpp index fd20fa8d..9f910be7 100644 --- a/src/g_shared/a_morph.cpp +++ b/src/g_shared/a_morph.cpp @@ -151,12 +151,15 @@ bool P_MorphPlayer (player_t *activator, player_t *p, const PClass *spawntype, i // taking events, set up the face, if any; // this is only needed for old-skool skins // and for the original DOOM status bar. - if ((p == &players[consoleplayer]) && - (strcmp(spawntype->Meta.GetMetaString (APMETA_Face), "None") != 0)) + if (p == &players[consoleplayer]) { - StatusBar->SetFace(&skins[p->MorphedPlayerClass]); - } + const char *face = spawntype->Meta.GetMetaString (APMETA_Face); + if (face != NULL && strcmp(face, "None") != 0) + { + StatusBar->SetFace(&skins[p->MorphedPlayerClass]); + } + } return true; } diff --git a/src/g_shared/a_weapons.cpp b/src/g_shared/a_weapons.cpp index 1303f3ec..1571ec69 100644 --- a/src/g_shared/a_weapons.cpp +++ b/src/g_shared/a_weapons.cpp @@ -922,7 +922,8 @@ CCMD (weaponsection) tackOn = fullSection + 4; } - sprintf (tackOn, ".%s.WeaponSlots", WeaponSection.GetChars()); + mysnprintf (tackOn, countof(fullSection) - (tackOn - fullSection), + ".%s.WeaponSlots", WeaponSection.GetChars()); if (GameConfig->SetSection (fullSection)) { LocalWeapons.RestoreSlots (*GameConfig); @@ -1032,7 +1033,7 @@ void FWeaponSlots::SaveSlots (FConfigFile &config) } if (index > 0) { - sprintf (keyname, "Slot[%d]", i); + mysnprintf (keyname, countof(keyname), "Slot[%d]", i); config.SetValueForKey (keyname, buff); } } diff --git a/src/g_shared/shared_hud.cpp b/src/g_shared/shared_hud.cpp index ab882dc7..680d34e0 100644 --- a/src/g_shared/shared_hud.cpp +++ b/src/g_shared/shared_hud.cpp @@ -179,7 +179,7 @@ static void DrawHudNumber(int color, int num, int x, int y, int trans=0xc000) { char text[15]; - sprintf(text, "%d", num); + mysnprintf(text, countof(text), "%d", num); DrawHudText(color, text, x, y, trans); } @@ -206,7 +206,7 @@ static void DrawStatus(player_t * CPlayer, int x, int y) DTA_KeepRatio, true, DTA_VirtualWidth, hudwidth, DTA_VirtualHeight, hudheight, DTA_Alpha, 0xc000, TAG_DONE); - sprintf(tempstr, "%i ", CPlayer->accuracy); + mysnprintf(tempstr, countof(tempstr), "%i ", CPlayer->accuracy); screen->DrawText(hudcolor_stats, x+space, y, tempstr, DTA_KeepRatio, true, DTA_VirtualWidth, hudwidth, DTA_VirtualHeight, hudheight, DTA_Alpha, 0xc000, TAG_DONE); @@ -216,7 +216,7 @@ static void DrawStatus(player_t * CPlayer, int x, int y) DTA_KeepRatio, true, DTA_VirtualWidth, hudwidth, DTA_VirtualHeight, hudheight, DTA_Alpha, 0xc000, TAG_DONE); - sprintf(tempstr, "%i ", CPlayer->stamina); + mysnprintf(tempstr, countof(tempstr), "%i ", CPlayer->stamina); screen->DrawText(hudcolor_stats, x+space, y, tempstr, DTA_KeepRatio, true, DTA_VirtualWidth, hudwidth, DTA_VirtualHeight, hudheight, DTA_Alpha, 0xc000, TAG_DONE); @@ -235,7 +235,7 @@ static void DrawStatus(player_t * CPlayer, int x, int y) DTA_KeepRatio, true, DTA_VirtualWidth, hudwidth, DTA_VirtualHeight, hudheight, DTA_Alpha, 0xc000, TAG_DONE); - sprintf(tempstr, "%i/%i ", multiplayer? CPlayer->secretcount : level.found_secrets, level.total_secrets); + mysnprintf(tempstr, countof(tempstr), "%i/%i ", multiplayer? CPlayer->secretcount : level.found_secrets, level.total_secrets); screen->DrawText(hudcolor_stats, x+space, y, tempstr, DTA_KeepRatio, true, DTA_VirtualWidth, hudwidth, DTA_VirtualHeight, hudheight, DTA_Alpha, 0xc000, TAG_DONE); @@ -248,7 +248,7 @@ static void DrawStatus(player_t * CPlayer, int x, int y) DTA_KeepRatio, true, DTA_VirtualWidth, hudwidth, DTA_VirtualHeight, hudheight, DTA_Alpha, 0xc000, TAG_DONE); - sprintf(tempstr, "%i/%i ", multiplayer? CPlayer->itemcount : level.found_items, level.total_items); + mysnprintf(tempstr, countof(tempstr), "%i/%i ", multiplayer? CPlayer->itemcount : level.found_items, level.total_items); screen->DrawText(hudcolor_stats, x+space, y, tempstr, DTA_KeepRatio, true, DTA_VirtualWidth, hudwidth, DTA_VirtualHeight, hudheight, DTA_Alpha, 0xc000, TAG_DONE); @@ -261,7 +261,7 @@ static void DrawStatus(player_t * CPlayer, int x, int y) DTA_KeepRatio, true, DTA_VirtualWidth, hudwidth, DTA_VirtualHeight, hudheight, DTA_Alpha, 0xc000, TAG_DONE); - sprintf(tempstr, "%i/%i ", multiplayer? CPlayer->killcount : level.killed_monsters, level.total_monsters); + mysnprintf(tempstr, countof(tempstr), "%i/%i ", multiplayer? CPlayer->killcount : level.killed_monsters, level.total_monsters); screen->DrawText(hudcolor_stats, x+space, y, tempstr, DTA_KeepRatio, true, DTA_VirtualWidth, hudwidth, DTA_VirtualHeight, hudheight, DTA_Alpha, 0xc000, TAG_DONE); @@ -548,7 +548,7 @@ static int DrawAmmo(player_t * CPlayer, int x, int y) int maxammo = inv->MaxAmount; int ammo = ammoitem? ammoitem->Amount : 0; - sprintf(buf,"%3d/%3d", ammo,maxammo); + mysnprintf(buf, countof(buf), "%3d/%3d", ammo, maxammo); int tex_width= clamp(ConFont->StringWidth(buf)-def_width, 0, 1000); @@ -692,7 +692,7 @@ static void DrawInventory(player_t * CPlayer, int x,int y) { char buffer[10]; int xx; - sprintf(buffer,"%d",rover->Amount); + mysnprintf(buffer, countof(buffer), "%d", rover->Amount); if (rover->Amount>=1000) xx = 32 - IndexFont->StringWidth(buffer); else xx = 22; @@ -764,17 +764,17 @@ static void DrawCoordinates(player_t * CPlayer) int xpos = vwidth - SmallFont->StringWidth("X: -00000")-6; int ypos = 18; - sprintf(coordstr, "X: %d", x>>FRACBITS); + mysnprintf(coordstr, countof(coordstr), "X: %d", x>>FRACBITS); screen->DrawText(hudcolor_xyco, xpos, ypos, coordstr, DTA_KeepRatio, true, DTA_VirtualWidth, vwidth, DTA_VirtualHeight, vheight, TAG_DONE); - sprintf(coordstr, "Y: %d", y>>FRACBITS); + mysnprintf(coordstr, countof(coordstr), "Y: %d", y>>FRACBITS); screen->DrawText(hudcolor_xyco, xpos, ypos+h, coordstr, DTA_KeepRatio, true, DTA_VirtualWidth, vwidth, DTA_VirtualHeight, vheight, TAG_DONE); - sprintf(coordstr, "Z: %d", z>>FRACBITS); + mysnprintf(coordstr, countof(coordstr), "Z: %d", z>>FRACBITS); screen->DrawText(hudcolor_xyco, xpos, ypos+2*h, coordstr, DTA_KeepRatio, true, DTA_VirtualWidth, vwidth, DTA_VirtualHeight, vheight, TAG_DONE); @@ -864,15 +864,15 @@ void DrawHUD() if (am_showtotaltime) { seconds = level.totaltime / TICRATE; - sprintf(printstr, "%02i:%02i:%02i", seconds/3600, (seconds%3600)/60, seconds%60); + mysnprintf(printstr, countof(printstr), "%02i:%02i:%02i", seconds/3600, (seconds%3600)/60, seconds%60); DrawHudText(hudcolor_ttim, printstr, hudwidth-length, bottom, FRACUNIT); bottom -= fonth; } if (am_showtime) { - seconds= level.time /TICRATE; - sprintf(printstr, "%02i:%02i:%02i", seconds/3600, (seconds%3600)/60, seconds%60); + seconds = level.time /TICRATE; + mysnprintf(printstr, countof(printstr), "%02i:%02i:%02i", seconds/3600, (seconds%3600)/60, seconds%60); DrawHudText(hudcolor_time, printstr, hudwidth-length, bottom, FRACUNIT); bottom -= fonth; @@ -880,12 +880,12 @@ void DrawHUD() if (level.clusterflags&CLUSTER_HUB) { seconds= level.maptime /TICRATE; - sprintf(printstr, "%02i:%02i:%02i", seconds/3600, (seconds%3600)/60, seconds%60); + mysnprintf(printstr, countof(printstr), "%02i:%02i:%02i", seconds/3600, (seconds%3600)/60, seconds%60); DrawHudText(hudcolor_ltim, printstr, hudwidth-length, bottom, FRACUNIT); } } - sprintf(printstr,"%s: %s",level.mapname,level.level_name); + mysnprintf(printstr, countof(printstr), "%s: %s", level.mapname, level.level_name); screen->DrawText(hudcolor_titl, 1, hudheight-fonth-1, printstr, DTA_KeepRatio, true, DTA_VirtualWidth, hudwidth, DTA_VirtualHeight, hudheight, TAG_DONE); diff --git a/src/g_shared/shared_sbar.cpp b/src/g_shared/shared_sbar.cpp index 440b8d04..f25e3d4f 100644 --- a/src/g_shared/shared_sbar.cpp +++ b/src/g_shared/shared_sbar.cpp @@ -109,10 +109,10 @@ CUSTOM_CVAR (Int, crosshair, 0, CVAR_ARCHIVE|CVAR_GLOBALCONFIG) num = -num; } size = (SCREENWIDTH < 640) ? 'S' : 'B'; - sprintf (name, "XHAIR%c%d", size, num); + mysnprintf (name, countof(name), "XHAIR%c%d", size, num); if ((lump = Wads.CheckNumForName (name, ns_graphics)) == -1) { - sprintf (name, "XHAIR%c1", size); + mysnprintf (name, countof(name), "XHAIR%c1", size); if ((lump = Wads.CheckNumForName (name, ns_graphics)) == -1) { strcpy (name, "XHAIRS1"); @@ -1155,7 +1155,7 @@ void DBaseStatusBar::Draw (EHudState state) value = &CPlayer->mo->z; for (i = 2, value = &CPlayer->mo->z; i >= 0; y -= height, --value, --i) { - sprintf (line, "%c: %d", labels[i], *value >> FRACBITS); + mysnprintf (line, countof(line), "%c: %d", labels[i], *value >> FRACBITS); screen->DrawText (CR_GREEN, xpos, y, line, DTA_KeepRatio, true, DTA_VirtualWidth, vwidth, DTA_VirtualHeight, vheight, @@ -1184,13 +1184,13 @@ void DBaseStatusBar::Draw (EHudState state) y = 8; if (am_showtime) { - sprintf (line, "%02d:%02d:%02d", time/3600, (time%3600)/60, time%60); // Time + mysnprintf (line, countof(line), "%02d:%02d:%02d", time/3600, (time%3600)/60, time%60); // Time screen->DrawText (CR_GREY, SCREENWIDTH - 80*CleanXfac, y, line, DTA_CleanNoMove, true, TAG_DONE); y+=8*CleanYfac; } if (am_showtotaltime) { - sprintf (line, "%02d:%02d:%02d", totaltime/3600, (totaltime%3600)/60, totaltime%60); // Total time + mysnprintf (line, countof(line), "%02d:%02d:%02d", totaltime/3600, (totaltime%3600)/60, totaltime%60); // Total time screen->DrawText (CR_GREY, SCREENWIDTH - 80*CleanXfac, y, line, DTA_CleanNoMove, true, TAG_DONE); } @@ -1233,7 +1233,7 @@ void DBaseStatusBar::Draw (EHudState state) i = 0; if (cluster == NULL || !(cluster->flags & CLUSTER_HUB)) { - i = sprintf (line, "%s: ", level.mapname); + i = mysnprintf (line, countof(line), "%s: ", level.mapname); } line[i] = TEXTCOLOR_ESCAPE; line[i+1] = CR_GREY + 'A'; @@ -1249,9 +1249,8 @@ void DBaseStatusBar::Draw (EHudState state) // Draw monster count if (am_showmonsters) { - sprintf (line, "MONSTERS:" - TEXTCOLOR_GREY " %d/%d", - level.killed_monsters, level.total_monsters); + mysnprintf (line, countof(line), "MONSTERS:" TEXTCOLOR_GREY " %d/%d", + level.killed_monsters, level.total_monsters); screen->DrawText (highlight, 8, y, line, DTA_CleanNoMove, true, TAG_DONE); y += height; @@ -1260,9 +1259,8 @@ void DBaseStatusBar::Draw (EHudState state) // Draw secret count if (am_showsecrets) { - sprintf (line, "SECRETS:" - TEXTCOLOR_GREY " %d/%d", - level.found_secrets, level.total_secrets); + mysnprintf (line, countof(line), "SECRETS:" TEXTCOLOR_GREY " %d/%d", + level.found_secrets, level.total_secrets); screen->DrawText (highlight, 8, y, line, DTA_CleanNoMove, true, TAG_DONE); y += height; @@ -1271,9 +1269,8 @@ void DBaseStatusBar::Draw (EHudState state) // Draw item count if (am_showitems) { - sprintf (line, "ITEMS:" - TEXTCOLOR_GREY " %d/%d", - level.found_items, level.total_items); + mysnprintf (line, countof(line), "ITEMS:" TEXTCOLOR_GREY " %d/%d", + level.found_items, level.total_items); screen->DrawText (highlight, 8, y, line, DTA_CleanNoMove, true, TAG_DONE); } @@ -1661,16 +1658,16 @@ void DBaseStatusBar::AddFaceToImageCollectionActual (void *skn, FImageCollection { for (j = 0; j < ST_NUMSTRAIGHTFACES; j++) { - sprintf (names[facenum++], "%sST%d%d", prefix, i, j); + mysnprintf (names[facenum++], countof(names[0]), "%sST%d%d", prefix, i, j); } - sprintf (names[facenum++], "%sTR%d0", prefix, i); // turn right - sprintf (names[facenum++], "%sTL%d0", prefix, i); // turn left - sprintf (names[facenum++], "%sOUCH%d", prefix, i); // ouch! - sprintf (names[facenum++], "%sEVL%d", prefix, i); // evil grin ;) - sprintf (names[facenum++], "%sKILL%d", prefix, i); // pissed off + mysnprintf (names[facenum++], countof(names[0]), "%sTR%d0", prefix, i); // turn right + mysnprintf (names[facenum++], countof(names[0]), "%sTL%d0", prefix, i); // turn left + mysnprintf (names[facenum++], countof(names[0]), "%sOUCH%d", prefix, i); // ouch! + mysnprintf (names[facenum++], countof(names[0]), "%sEVL%d", prefix, i); // evil grin ;) + mysnprintf (names[facenum++], countof(names[0]), "%sKILL%d", prefix, i); // pissed off } - sprintf (names[facenum++], "%sGOD0", prefix); - sprintf (names[facenum++], "%sDEAD0", prefix); + mysnprintf (names[facenum++], countof(names[0]), "%sGOD0", prefix); + mysnprintf (names[facenum++], countof(names[0]), "%sDEAD0", prefix); images->Add (nameptrs, ST_NUMFACES, namespc); } diff --git a/src/g_strife/a_alienspectres.cpp b/src/g_strife/a_alienspectres.cpp index ef061909..8a0c6287 100644 --- a/src/g_strife/a_alienspectres.cpp +++ b/src/g_strife/a_alienspectres.cpp @@ -577,7 +577,7 @@ void A_AlienSpectreDeath (AActor *self) { return; } - sprintf (voc, "svox/voc%d", log); + mysnprintf (voc, countof(voc), "svox/voc%d", log); S_Sound (CHAN_VOICE, voc, 1, ATTN_NORM); player->player->SetLogNumber (log); } diff --git a/src/g_strife/a_coin.cpp b/src/g_strife/a_coin.cpp index a1fa0499..a9f7d83a 100644 --- a/src/g_strife/a_coin.cpp +++ b/src/g_strife/a_coin.cpp @@ -33,7 +33,7 @@ const char *ACoin::PickupMessage () { static char msg[64]; - sprintf (msg, GStrings("TXT_XGOLD"), Amount); + mysnprintf (msg, countof(msg), GStrings("TXT_XGOLD"), Amount); return msg; } } diff --git a/src/g_strife/a_thingstoblowup.cpp b/src/g_strife/a_thingstoblowup.cpp index 588b99c1..5776e186 100644 --- a/src/g_strife/a_thingstoblowup.cpp +++ b/src/g_strife/a_thingstoblowup.cpp @@ -84,7 +84,7 @@ void A_GiveQuestItem (AActor *self) char messageid[64]; - sprintf(messageid, "TXT_QUEST_%d", questitem); + mysnprintf(messageid, countof(messageid), "TXT_QUEST_%d", questitem); const char * name = GStrings[messageid]; if (name != NULL) diff --git a/src/g_strife/strife_sbar.cpp b/src/g_strife/strife_sbar.cpp index b0a95553..e73ce1c1 100644 --- a/src/g_strife/strife_sbar.cpp +++ b/src/g_strife/strife_sbar.cpp @@ -584,7 +584,7 @@ private: { case POP_Log: // Draw the latest log message. - sprintf (buff, "%02d:%02d:%02d", + mysnprintf (buff, countof(buff), "%02d:%02d:%02d", (level.time/TICRATE)/3600, ((level.time/TICRATE)%3600)/60, (level.time/TICRATE)%60); diff --git a/src/gameconfigfile.cpp b/src/gameconfigfile.cpp index 0a8914d4..1eb832b8 100644 --- a/src/gameconfigfile.cpp +++ b/src/gameconfigfile.cpp @@ -142,100 +142,6 @@ void FGameConfigFile::MigrateOldConfig () // Set default key bindings. These will be overridden // by the bindings in the config file if it exists. C_SetDefaultBindings (); - -#if 0 // Disabled for now, maybe forever. - int i; - char *execcommand; - - i = strlen (GetPathName ()) + 8; - execcommand = new char[i]; - sprintf (execcommand, "exec \"%s\"", GetPathName ()); - execcommand[i-5] = 'c'; - execcommand[i-4] = 'f'; - execcommand[i-3] = 'g'; - cvar_defflags = CVAR_ARCHIVE; - C_DoCommand (execcommand); - cvar_defflags = 0; - delete[] execcommand; - - FBaseCVar *configver = FindCVar ("configver", NULL); - if (configver != NULL) - { - UCVarValue oldver = configver->GetGenericRep (CVAR_Float); - - if (oldver.Float < 118.f) - { - C_DoCommand ("alias idclip noclip"); - C_DoCommand ("alias idspispopd noclip"); - - if (oldver.Float < 117.2f) - { - dimamount = *dimamount * 0.25f; - if (oldver.Float <= 113.f) - { - C_DoCommand ("bind t messagemode; bind \\ +showscores;" - "bind f12 spynext; bind sysrq screenshot"); - if (C_GetBinding (KEY_F5) && !stricmp (C_GetBinding (KEY_F5), "menu_video")) - { - C_ChangeBinding ("menu_display", KEY_F5); - } - } - } - } - delete configver; - } - // Change all impulses to slot commands - for (i = 0; i < NUM_KEYS; i++) - { - char slotcmd[8] = "slot "; - char *bind, *numpart; - - bind = C_GetBinding (i); - if (bind != NULL && strnicmp (bind, "impulse ", 8) == 0) - { - numpart = strchr (bind, ' '); - if (numpart != NULL && strlen (numpart) < 4) - { - strcpy (slotcmd + 5, numpart); - C_ChangeBinding (slotcmd, i); - } - } - } - - // Migrate and delete some obsolete cvars - FBaseCVar *oldvar; - UCVarValue oldval; - - oldvar = FindCVar ("autoexec", NULL); - if (oldvar != NULL) - { - oldval = oldvar->GetGenericRep (CVAR_String); - if (oldval.String[0]) - { - SetSection ("Doom.AutoExec", true); - SetValueForKey ("Path", oldval.String, true); - } - delete oldvar; - } - - oldvar = FindCVar ("def_patch", NULL); - if (oldvar != NULL) - { - oldval = oldvar->GetGenericRep (CVAR_String); - if (oldval.String[0]) - { - SetSection ("Doom.DefaultDehacked", true); - SetValueForKey ("Path", oldval.String, true); - } - delete oldvar; - } - - oldvar = FindCVar ("vid_noptc", NULL); - if (oldvar != NULL) - { - delete oldvar; - } -#endif } void FGameConfigFile::DoGlobalSetup () @@ -334,15 +240,17 @@ void FGameConfigFile::DoGameSetup (const char *gamename) { MigrateOldConfig (); } - subsection = section + sprintf (section, "%s.", gamename); + sublen = countof(section) - 1 - mysnprintf (section, countof(section), "%s.", gamename); + subsection = section + countof(section) - sublen - 1; + section[countof(section) - 1] = '\0'; - strcpy (subsection, "UnknownConsoleVariables"); + strncpy (subsection, "UnknownConsoleVariables", sublen); if (SetSection (section)) { ReadCVars (0); } - strcpy (subsection, "ConsoleVariables"); + strncpy (subsection, "ConsoleVariables", sublen); if (SetSection (section)) { ReadCVars (0); @@ -355,19 +263,19 @@ void FGameConfigFile::DoGameSetup (const char *gamename) // The NetServerInfo section will be read when it's determined that // a netgame is being played. - strcpy (subsection, "LocalServerInfo"); + strncpy (subsection, "LocalServerInfo", sublen); if (SetSection (section)) { ReadCVars (0); } - strcpy (subsection, "Player"); + strncpy (subsection, "Player", sublen); if (SetSection (section)) { ReadCVars (0); } - strcpy (subsection, "Bindings"); + strncpy (subsection, "Bindings", sublen); if (!SetSection (section)) { // Config has no bindings for the given game if (!bMigrating) @@ -384,7 +292,7 @@ void FGameConfigFile::DoGameSetup (const char *gamename) } } - strcpy (subsection, "DoubleBindings"); + strncpy (subsection, "DoubleBindings", sublen); if (SetSection (section)) { while (NextInSection (key, value)) @@ -393,7 +301,7 @@ void FGameConfigFile::DoGameSetup (const char *gamename) } } - strcpy (subsection, "ConsoleAliases"); + strncpy (subsection, "ConsoleAliases", sublen); if (SetSection (section)) { const char *name = NULL; @@ -415,7 +323,7 @@ void FGameConfigFile::DoGameSetup (const char *gamename) // Separated from DoGameSetup because it needs all the weapons properly defined void FGameConfigFile::DoWeaponSetup (const char *gamename) { - strcpy (subsection, "WeaponSlots"); + strncpy (subsection, "WeaponSlots", sublen); if (!SetSection (section) || !LocalWeapons.RestoreSlots (*this)) { @@ -425,7 +333,7 @@ void FGameConfigFile::DoWeaponSetup (const char *gamename) void FGameConfigFile::ReadNetVars () { - strcpy (subsection, "NetServerInfo"); + strncpy (subsection, "NetServerInfo", sublen); if (SetSection (section)) { ReadCVars (0); @@ -455,19 +363,20 @@ void FGameConfigFile::ArchiveGameData (const char *gamename) { char section[32*3], *subsection; - subsection = section + sprintf (section, "%s.", gamename); + sublen = countof(section) - 1 - mysnprintf (section, countof(section), "%s.", gamename); + subsection = section + countof(section) - 1 - sublen; - strcpy (subsection, "Player"); + strncpy (subsection, "Player", sublen); SetSection (section, true); ClearCurrentSection (); C_ArchiveCVars (this, 4); - strcpy (subsection, "ConsoleVariables"); + strncpy (subsection, "ConsoleVariables", sublen); SetSection (section, true); ClearCurrentSection (); C_ArchiveCVars (this, 0); - strcpy (subsection, netgame ? "NetServerInfo" : "LocalServerInfo"); + strncpy (subsection, netgame ? "NetServerInfo" : "LocalServerInfo", sublen); if (!netgame || consoleplayer == 0) { // Do not overwrite this section if playing a netgame, and // this machine was not the initial host. @@ -476,35 +385,35 @@ void FGameConfigFile::ArchiveGameData (const char *gamename) C_ArchiveCVars (this, 5); } - strcpy (subsection, "UnknownConsoleVariables"); + strncpy (subsection, "UnknownConsoleVariables", sublen); SetSection (section, true); ClearCurrentSection (); C_ArchiveCVars (this, 2); - strcpy (subsection, "ConsoleAliases"); + strncpy (subsection, "ConsoleAliases", sublen); SetSection (section, true); ClearCurrentSection (); C_ArchiveAliases (this); - M_SaveCustomKeys (this, section, subsection); + M_SaveCustomKeys (this, section, subsection, sublen); strcpy (subsection, "Bindings"); SetSection (section, true); ClearCurrentSection (); C_ArchiveBindings (this, false); - strcpy (subsection, "DoubleBindings"); + strncpy (subsection, "DoubleBindings", sublen); SetSection (section, true); ClearCurrentSection (); C_ArchiveBindings (this, true); if (WeaponSection.IsEmpty()) { - strcpy (subsection, "WeaponSlots"); + strncpy (subsection, "WeaponSlots", sublen); } else { - sprintf (subsection, "%s.WeaponSlots", WeaponSection.GetChars()); + mysnprintf (subsection, sublen, "%s.WeaponSlots", WeaponSection.GetChars()); } SetSection (section, true); ClearCurrentSection (); @@ -535,7 +444,7 @@ FString FGameConfigFile::GetConfigPath (bool tryProg) if (pathval != NULL) return FString(pathval); -#ifndef unix +#ifdef _WIN32 path = NULL; HRESULT hr; @@ -602,7 +511,7 @@ void FGameConfigFile::AddAutoexec (DArgs *list, const char *game) const char *key; const char *value; - sprintf (section, "%s.AutoExec", game); + mysnprintf (section, countof(section), "%s.AutoExec", game); if (bMigrating) { diff --git a/src/gameconfigfile.h b/src/gameconfigfile.h index a3f7d578..8970c87a 100644 --- a/src/gameconfigfile.h +++ b/src/gameconfigfile.h @@ -69,6 +69,7 @@ private: char section[64]; char *subsection; + size_t sublen; }; extern FString WeaponSection; diff --git a/src/hu_scores.cpp b/src/hu_scores.cpp index 1b68ef9d..ee22e9ba 100644 --- a/src/hu_scores.cpp +++ b/src/hu_scores.cpp @@ -213,7 +213,7 @@ static void HU_DoDrawScores (player_t *player, player_t *sortedplayers[MAXPLAYER if (teams[i].players) { char score[80]; - sprintf (score, "%d", teams[i].score); + mysnprintf (score, countof(score), "%d", teams[i].score); screen->SetFont (BigFont); screen->DrawText (teams[i].GetTextColor (), scorexwidth, gamestate == GS_INTERMISSION ? y * 4 / 5 : y / 2, score, @@ -277,9 +277,9 @@ static void HU_DrawTimeRemaining (int y) seconds = timeleft / TICRATE; if (hours) - sprintf (str, "Level ends in %02d:%02d:%02d", hours, minutes, seconds); + mysnprintf (str, countof(str), "Level ends in %02d:%02d:%02d", hours, minutes, seconds); else - sprintf (str, "Level ends in %02d:%02d", minutes, seconds); + mysnprintf (str, countof(str), "Level ends in %02d:%02d", minutes, seconds); screen->DrawText (CR_GREY, SCREENWIDTH/2 - SmallFont->StringWidth (str)/2*CleanXfac, y, str, DTA_CleanNoMove, true, TAG_DONE); @@ -321,7 +321,7 @@ static void HU_DrawPlayer (player_t *player, bool highlight, int x, int y, int h deathmatch ? color = sb_deathmatch_yourplayercolor : color = sb_cooperative_yourplayercolor; } - sprintf (str, "%d", deathmatch ? player->fragcount : player->killcount); + mysnprintf (str, countof(str), "%d", deathmatch ? player->fragcount : player->killcount); screen->DrawText (color, SCREENWIDTH / 4, y, player->playerstate == PST_DEAD && !deathmatch ? "DEAD" : str, DTA_CleanNoMove, true, TAG_DONE); diff --git a/src/i_net.cpp b/src/i_net.cpp index 6e080df8..905f3cda 100644 --- a/src/i_net.cpp +++ b/src/i_net.cpp @@ -900,7 +900,7 @@ const char *neterror (void) case WSAEDISCON: return "EDISCON"; default: - sprintf (neterr, "%d", code); + mysnprintf (neterr, countof(neterr), "%d", code); return neterr; } } diff --git a/src/m_alloc.cpp b/src/m_alloc.cpp index 23d0edc6..1c14f3de 100644 --- a/src/m_alloc.cpp +++ b/src/m_alloc.cpp @@ -32,8 +32,8 @@ ** */ -#include "i_system.h" #include +#include "i_system.h" #ifndef _MSC_VER #define _NORMAL_BLOCK 0 diff --git a/src/m_cheat.cpp b/src/m_cheat.cpp index fb61103f..0b3a4ae3 100644 --- a/src/m_cheat.cpp +++ b/src/m_cheat.cpp @@ -241,7 +241,7 @@ void cht_DoCheat (player_t *player, int cheat) int killcount = P_Massacre (); // killough 3/22/98: make more intelligent about plural // Ty 03/27/98 - string(s) *not* externalized - sprintf (msgbuild, "%d Monster%s Killed", killcount, killcount==1 ? "" : "s"); + mysnprintf (msgbuild, countof(msgbuild), "%d Monster%s Killed", killcount, killcount==1 ? "" : "s"); msg = msgbuild; } break; diff --git a/src/m_menu.cpp b/src/m_menu.cpp index 736fe671..1e802294 100644 --- a/src/m_menu.cpp +++ b/src/m_menu.cpp @@ -1401,7 +1401,7 @@ void M_QuickSave () M_SaveGame (0); return; } - sprintf (tempstring, GStrings("QSPROMPT"), quickSaveSlot->Title); + mysnprintf (tempstring, countof(tempstring), GStrings("QSPROMPT"), quickSaveSlot->Title); strcpy (savegamestring, quickSaveSlot->Title); M_StartMessage (tempstring, M_QuickSaveResponse, true); } @@ -1437,7 +1437,7 @@ void M_QuickLoad () M_LoadGame (0); return; } - sprintf (tempstring, GStrings("QLPROMPT"), quickSaveSlot->Title); + mysnprintf (tempstring, countof(tempstring), GStrings("QLPROMPT"), quickSaveSlot->Title); M_StartMessage (tempstring, M_QuickLoadResponse, true); } @@ -1519,20 +1519,20 @@ void M_DrawHereticMainMenu () { int frame = (MenuTime / 5) % 7; - sprintf (name, "FBUL%c0", (frame+2)%7 + 'A'); + mysnprintf (name, countof(name), "FBUL%c0", (frame+2)%7 + 'A'); screen->DrawTexture (TexMan[name], 37, 80, DTA_Clean, true, TAG_DONE); - sprintf (name, "FBUL%c0", frame + 'A'); + mysnprintf (name, countof(name), "FBUL%c0", frame + 'A'); screen->DrawTexture (TexMan[name], 278, 80, DTA_Clean, true, TAG_DONE); } else { int frame = (MenuTime / 3) % 18; - sprintf (name, "M_SKL%.2d", 17 - frame); + mysnprintf (name, countof(name), "M_SKL%.2d", 17 - frame); screen->DrawTexture (TexMan[name], 40, 10, DTA_Clean, true, TAG_DONE); - sprintf (name, "M_SKL%.2d", frame); + mysnprintf (name, countof(name), "M_SKL%.2d", frame); screen->DrawTexture (TexMan[name], 232, 10, DTA_Clean, true, TAG_DONE); } } @@ -1666,7 +1666,7 @@ static void DrawClassMenu(void) } screen->DrawTexture (TexMan[boxLumpName[classnum]], 174, 8, DTA_Clean, true, TAG_DONE); - sprintf (name, walkLumpName[classnum], ((MenuTime >> 3) & 3) + 1); + mysnprintf (name, countof(name), walkLumpName[classnum], ((MenuTime >> 3) & 3) + 1); screen->DrawTexture (TexMan[name], 174+24, 8+12, DTA_Clean, true, TAG_DONE); } @@ -2609,9 +2609,8 @@ static void SendNewColor (int red, int green, int blue) { char command[24]; - sprintf (command, "color \"%02x %02x %02x\"", red, green, blue); + mysnprintf (command, countof(command), "color \"%02x %02x %02x\"", red, green, blue); C_DoCommand (command); - R_GetPlayerTranslation (MAKERGB (red, green, blue), &skins[PlayerSkin], translationtables[TRANSLATION_Players][MAXPLAYERS]); } @@ -2967,7 +2966,7 @@ bool M_SaveLoadResponder (event_t *ev) case GK_F1: if (!SelSaveGame->Filename.IsEmpty()) { - sprintf (workbuf, "File on disk:\n%s", SelSaveGame->Filename.GetChars()); + mysnprintf (workbuf, countof(workbuf), "File on disk:\n%s", SelSaveGame->Filename.GetChars()); if (SaveComment != NULL) { V_FreeBrokenLines (SaveComment); diff --git a/src/m_misc.h b/src/m_misc.h index 9802ead7..2ced7e74 100644 --- a/src/m_misc.h +++ b/src/m_misc.h @@ -41,7 +41,7 @@ void M_ScreenShot (const char *filename); void M_LoadDefaults (); bool M_SaveDefaults (const char *filename); -void M_SaveCustomKeys (FConfigFile *config, char *section, char *subsection); +void M_SaveCustomKeys (FConfigFile *config, char *section, char *subsection, size_t sublen); FString GetUserFile (const char *path, bool nodir=false); diff --git a/src/m_options.cpp b/src/m_options.cpp index 1ea88f89..77f4332c 100644 --- a/src/m_options.cpp +++ b/src/m_options.cpp @@ -1440,7 +1440,7 @@ void M_InitVideoModesMenu () { /* Depths[currval].value = currval; - sprintf (name, "%d bit", i); + mysnprintf (name, countof(name), "%d bit", i); Depths[currval].name = copystring (name); */ BitTranslate[currval++] = i; @@ -1496,13 +1496,13 @@ void M_SizeDisplay (int diff) CCMD (sizedown) { M_SizeDisplay (-1); - S_Sound (CHAN_VOICE, "menu/change", 1, ATTN_NONE); + S_Sound (CHAN_VOICE | CHAN_UI, "menu/change", 1, ATTN_NONE); } CCMD (sizeup) { M_SizeDisplay (1); - S_Sound (CHAN_VOICE, "menu/change", 1, ATTN_NONE); + S_Sound (CHAN_VOICE | CHAN_UI, "menu/change", 1, ATTN_NONE); } // Draws a string in the console font, scaled to the 8x8 cells @@ -1784,7 +1784,7 @@ void M_OptDrawer () { char tbuf[16]; - sprintf (tbuf, "%d.", item->b.position); + mysnprintf (tbuf, countof(tbuf), "%d.", item->b.position); x = CurrentMenu->indent - SmallFont->StringWidth (tbuf); screen->DrawText (CR_GREY, x, y, tbuf, DTA_Clean, true, TAG_DONE); } @@ -2077,10 +2077,10 @@ void M_OptDrawer () { if (printed) { - fillptr += sprintf (fillptr, " "); + fillptr += mysnprintf (fillptr, countof(flagsblah) - (fillptr - flagsblah), " "); } printed = true; - fillptr += sprintf (fillptr, "%s = %d", vars[i]->GetName (), **vars[i]); + fillptr += mysnprintf (fillptr, countof(flagsblah) - (fillptr - flagsblah), "%s = %d", vars[i]->GetName (), **vars[i]); } } screen->DrawText (ValueColor, @@ -2177,7 +2177,7 @@ void M_OptResponder (event_t *ev) CurrentMenu->items[CurrentItem].a.selmode = modecol; } - S_Sound (CHAN_VOICE, "menu/cursor", 1, ATTN_NONE); + S_Sound (CHAN_VOICE | CHAN_UI, "menu/cursor", 1, ATTN_NONE); } break; @@ -2241,7 +2241,7 @@ void M_OptResponder (event_t *ev) if (CurrentMenu->items[CurrentItem].type == screenres) CurrentMenu->items[CurrentItem].a.selmode = modecol; - S_Sound (CHAN_VOICE, "menu/cursor", 1, ATTN_NONE); + S_Sound (CHAN_VOICE | CHAN_UI, "menu/cursor", 1, ATTN_NONE); } break; @@ -2263,7 +2263,7 @@ void M_OptResponder (event_t *ev) { ++CurrentItem; } - S_Sound (CHAN_VOICE, "menu/cursor", 1, ATTN_NONE); + S_Sound (CHAN_VOICE | CHAN_UI, "menu/cursor", 1, ATTN_NONE); } break; @@ -2286,7 +2286,7 @@ void M_OptResponder (event_t *ev) { ++CurrentItem; } - S_Sound (CHAN_VOICE, "menu/cursor", 1, ATTN_NONE); + S_Sound (CHAN_VOICE | CHAN_UI, "menu/cursor", 1, ATTN_NONE); } break; @@ -2324,12 +2324,12 @@ void M_OptResponder (event_t *ev) else item->a.cvar->SetGenericRep (newval, CVAR_Float); } - S_Sound (CHAN_VOICE, "menu/change", 1, ATTN_NONE); + S_Sound (CHAN_VOICE | CHAN_UI, "menu/change", 1, ATTN_NONE); break; case palettegrid: SelColorIndex = (SelColorIndex - 1) & 15; - S_Sound (CHAN_VOICE, "menu/cursor", 1, ATTN_NONE); + S_Sound (CHAN_VOICE | CHAN_UI, "menu/cursor", 1, ATTN_NONE); break; case discretes: @@ -2359,14 +2359,14 @@ void M_OptResponder (event_t *ev) if (item->e.values == Depths) BuildModesList (SCREENWIDTH, SCREENHEIGHT, DisplayBits); } - S_Sound (CHAN_VOICE, "menu/change", 1, ATTN_NONE); + S_Sound (CHAN_VOICE | CHAN_UI, "menu/change", 1, ATTN_NONE); break; case ediscrete: value = item->a.cvar->GetGenericRep(CVAR_String); value.String = const_cast(M_FindPrevVal(value.String, item->e.enumvalues, (int)item->b.numvalues)); item->a.cvar->SetGenericRep(value, CVAR_String); - S_Sound (CHAN_VOICE, "menu/change", 1, ATTN_NONE); + S_Sound (CHAN_VOICE | CHAN_UI, "menu/change", 1, ATTN_NONE); break; case bitmask: @@ -2385,7 +2385,7 @@ void M_OptResponder (event_t *ev) value.Int = (value.Int & ~bmask) | int(item->e.values[cur].value); item->a.cvar->SetGenericRep (value, CVAR_Int); } - S_Sound (CHAN_VOICE, "menu/change", 1, ATTN_NONE); + S_Sound (CHAN_VOICE | CHAN_UI, "menu/change", 1, ATTN_NONE); break; case discrete_guid: @@ -2400,14 +2400,14 @@ void M_OptResponder (event_t *ev) *(item->a.guidcvar) = item->e.guidvalues[cur].ID; } - S_Sound (CHAN_VOICE, "menu/change", 1, ATTN_NONE); + S_Sound (CHAN_VOICE | CHAN_UI, "menu/change", 1, ATTN_NONE); break; case inverter: value = item->a.cvar->GetGenericRep (CVAR_Float); value.Float = -value.Float; item->a.cvar->SetGenericRep (value, CVAR_Float); - S_Sound (CHAN_VOICE, "menu/change", 1, ATTN_NONE); + S_Sound (CHAN_VOICE | CHAN_UI, "menu/change", 1, ATTN_NONE); break; case screenres: @@ -2431,7 +2431,7 @@ void M_OptResponder (event_t *ev) item->a.selmode = col; } } - S_Sound (CHAN_VOICE, "menu/cursor", 1, ATTN_NONE); + S_Sound (CHAN_VOICE | CHAN_UI, "menu/cursor", 1, ATTN_NONE); break; default: @@ -2473,12 +2473,12 @@ void M_OptResponder (event_t *ev) else item->a.cvar->SetGenericRep (newval, CVAR_Float); } - S_Sound (CHAN_VOICE, "menu/change", 1, ATTN_NONE); + S_Sound (CHAN_VOICE | CHAN_UI, "menu/change", 1, ATTN_NONE); break; case palettegrid: SelColorIndex = (SelColorIndex + 1) & 15; - S_Sound (CHAN_VOICE, "menu/cursor", 1, ATTN_NONE); + S_Sound (CHAN_VOICE | CHAN_UI, "menu/cursor", 1, ATTN_NONE); break; case discretes: @@ -2508,14 +2508,14 @@ void M_OptResponder (event_t *ev) if (item->e.values == Depths) BuildModesList (SCREENWIDTH, SCREENHEIGHT, DisplayBits); } - S_Sound (CHAN_VOICE, "menu/change", 1, ATTN_NONE); + S_Sound (CHAN_VOICE | CHAN_UI, "menu/change", 1, ATTN_NONE); break; case ediscrete: value = item->a.cvar->GetGenericRep(CVAR_String); value.String = const_cast(M_FindNextVal(value.String, item->e.enumvalues, (int)item->b.numvalues)); item->a.cvar->SetGenericRep(value, CVAR_String); - S_Sound (CHAN_VOICE, "menu/change", 1, ATTN_NONE); + S_Sound (CHAN_VOICE | CHAN_UI, "menu/change", 1, ATTN_NONE); break; case bitmask: @@ -2534,7 +2534,7 @@ void M_OptResponder (event_t *ev) value.Int = (value.Int & ~bmask) | int(item->e.values[cur].value); item->a.cvar->SetGenericRep (value, CVAR_Int); } - S_Sound (CHAN_VOICE, "menu/change", 1, ATTN_NONE); + S_Sound (CHAN_VOICE | CHAN_UI, "menu/change", 1, ATTN_NONE); break; case discrete_guid: @@ -2549,14 +2549,14 @@ void M_OptResponder (event_t *ev) *(item->a.guidcvar) = item->e.guidvalues[cur].ID; } - S_Sound (CHAN_VOICE, "menu/change", 1, ATTN_NONE); + S_Sound (CHAN_VOICE | CHAN_UI, "menu/change", 1, ATTN_NONE); break; case inverter: value = item->a.cvar->GetGenericRep (CVAR_Float); value.Float = -value.Float; item->a.cvar->SetGenericRep (value, CVAR_Float); - S_Sound (CHAN_VOICE, "menu/change", 1, ATTN_NONE); + S_Sound (CHAN_VOICE | CHAN_UI, "menu/change", 1, ATTN_NONE); break; case screenres: @@ -2583,7 +2583,7 @@ void M_OptResponder (event_t *ev) item->a.selmode = col; } } - S_Sound (CHAN_VOICE, "menu/cursor", 1, ATTN_NONE); + S_Sound (CHAN_VOICE | CHAN_UI, "menu/cursor", 1, ATTN_NONE); break; default: @@ -2641,7 +2641,7 @@ void M_OptResponder (event_t *ev) setmodeneeded = true; NewBits = BitTranslate[DummyDepthCvar]; } - S_Sound (CHAN_VOICE, "menu/choose", 1, ATTN_NONE); + S_Sound (CHAN_VOICE | CHAN_UI, "menu/choose", 1, ATTN_NONE); SetModesMenu (NewWidth, NewHeight, NewBits); } else if ((item->type == more || @@ -2652,7 +2652,7 @@ void M_OptResponder (event_t *ev) && item->e.mfunc) { CurrentMenu->lastOn = CurrentItem; - S_Sound (CHAN_VOICE, "menu/choose", 1, ATTN_NONE); + S_Sound (CHAN_VOICE | CHAN_UI, "menu/choose", 1, ATTN_NONE); if (item->type == safemore || item->type == rsafemore) { ActivateConfirm (item->label, item->e.mfunc); @@ -2687,7 +2687,7 @@ void M_OptResponder (event_t *ev) if (item->e.values == Depths) BuildModesList (SCREENWIDTH, SCREENHEIGHT, DisplayBits); - S_Sound (CHAN_VOICE, "menu/change", 1, ATTN_NONE); + S_Sound (CHAN_VOICE | CHAN_UI, "menu/change", 1, ATTN_NONE); } else if (item->type == control) { @@ -2700,7 +2700,7 @@ void M_OptResponder (event_t *ev) else if (item->type == listelement) { CurrentMenu->lastOn = CurrentItem; - S_Sound (CHAN_VOICE, "menu/choose", 1, ATTN_NONE); + S_Sound (CHAN_VOICE | CHAN_UI, "menu/choose", 1, ATTN_NONE); item->e.lfunc (CurrentItem); } else if (item->type == inverter) @@ -2708,7 +2708,7 @@ void M_OptResponder (event_t *ev) value = item->a.cvar->GetGenericRep (CVAR_Float); value.Float = -value.Float; item->a.cvar->SetGenericRep (value, CVAR_Float); - S_Sound (CHAN_VOICE, "menu/change", 1, ATTN_NONE); + S_Sound (CHAN_VOICE | CHAN_UI, "menu/change", 1, ATTN_NONE); } else if (item->type == screenres) { @@ -2716,7 +2716,7 @@ void M_OptResponder (event_t *ev) else if (item->type == colorpicker) { CurrentMenu->lastOn = CurrentItem; - S_Sound (CHAN_VOICE, "menu/choose", 1, ATTN_NONE); + S_Sound (CHAN_VOICE | CHAN_UI, "menu/choose", 1, ATTN_NONE); StartColorPickerMenu (item->label, item->a.colorcvar); } else if (item->type == palettegrid) @@ -2752,7 +2752,7 @@ void M_OptResponder (event_t *ev) NewBits = BitTranslate[DummyDepthCvar]; setmodeneeded = true; testingmode = I_GetTime(false) + 5 * TICRATE; - S_Sound (CHAN_VOICE, "menu/choose", 1, ATTN_NONE); + S_Sound (CHAN_VOICE | CHAN_UI, "menu/choose", 1, ATTN_NONE); SetModesMenu (NewWidth, NewHeight, NewBits); } } @@ -3205,7 +3205,7 @@ static void BuildModesList (int hiwidth, int hiheight, int hi_bits) if (/* hi_bits == showbits && */ width == hiwidth && height == hiheight) ModesItems[i].e.highlight = ModesItems[i].a.selmode = c; - sprintf (strtemp, "%dx%d%s", width, height, letterbox?TEXTCOLOR_BROWN" LB":""); + mysnprintf (strtemp, countof(strtemp), "%dx%d%s", width, height, letterbox?TEXTCOLOR_BROWN" LB":""); ReplaceString (str, strtemp); } else @@ -3302,7 +3302,7 @@ static void SetModesMenu (int w, int h, int bits) { char strtemp[64]; - sprintf (strtemp, "TESTING %dx%dx%d", w, h, bits); + mysnprintf (strtemp, countof(strtemp), "TESTING %dx%dx%d", w, h, bits); ModesItems[VM_ENTERLINE].label = copystring (strtemp); ModesItems[VM_TESTLINE].label = "Please wait 5 seconds..."; } @@ -3357,7 +3357,7 @@ void M_LoadKeys (const char *modname, bool dbl) if (GameNames[gameinfo.gametype] == NULL) return; - sprintf (section, "%s.%s%sBindings", GameNames[gameinfo.gametype], modname, + mysnprintf (section, countof(section), "%s.%s%sBindings", GameNames[gameinfo.gametype], modname, dbl ? ".Double" : "."); if (GameConfig->SetSection (section)) { @@ -3388,7 +3388,7 @@ int M_DoSaveKeys (FConfigFile *config, char *section, int i, bool dbl) return i; } -void M_SaveCustomKeys (FConfigFile *config, char *section, char *subsection) +void M_SaveCustomKeys (FConfigFile *config, char *section, char *subsection, size_t sublen) { if (ControlsMenu.items == ControlsItems) return; @@ -3404,9 +3404,9 @@ void M_SaveCustomKeys (FConfigFile *config, char *section, char *subsection) if (item->type == whitetext) { assert (item->e.command != NULL); - sprintf (subsection, "%s.Bindings", item->e.command); + mysnprintf (subsection, sublen, "%s.Bindings", item->e.command); M_DoSaveKeys (config, section, (int)i, false); - sprintf (subsection, "%s.DoubleBindings", item->e.command); + mysnprintf (subsection, sublen, "%s.DoubleBindings", item->e.command); i = M_DoSaveKeys (config, section, (int)i, true); } else diff --git a/src/oplsynth/music_opl_mididevice.cpp b/src/oplsynth/music_opl_mididevice.cpp index d08c97a1..d1f71cbe 100644 --- a/src/oplsynth/music_opl_mididevice.cpp +++ b/src/oplsynth/music_opl_mididevice.cpp @@ -45,9 +45,9 @@ // MACROS ------------------------------------------------------------------ -#if defined(_DEBUG) && defined(_WIN32) +#if defined(_DEBUG) && defined(_WIN32) && defined(_MSC_VER) #define DEBUGOUT(m,c,s,t) \ - { char foo[128]; sprintf(foo, m, c, s, t); OutputDebugString(foo); } + { char foo[128]; mysnprintf(foo, countof(foo), m, c, s, t); OutputDebugString(foo); } #else #define DEBUGOUT(m,c,s,t) #endif diff --git a/src/p_buildmap.cpp b/src/p_buildmap.cpp index 706da768..db3e9889 100644 --- a/src/p_buildmap.cpp +++ b/src/p_buildmap.cpp @@ -373,7 +373,7 @@ static void LoadSectors (sectortype *bsec) sec->floorplane.d = -sec->floortexz; sec->floorplane.c = FRACUNIT; sec->floorplane.ic = FRACUNIT; - sprintf (tnam, "BTIL%04d", LittleShort(bsec->floorpicnum)); + mysnprintf (tnam, countof(tnam), "BTIL%04d", LittleShort(bsec->floorpicnum)); sec->floorpic = TexMan.GetTexture (tnam, FTexture::TEX_Build); sec->SetXScale(sector_t::floor, (bsec->floorstat & 8) ? FRACUNIT*2 : FRACUNIT); sec->SetYScale(sector_t::floor, (bsec->floorstat & 8) ? FRACUNIT*2 : FRACUNIT); @@ -386,7 +386,7 @@ static void LoadSectors (sectortype *bsec) sec->ceilingplane.d = sec->ceilingtexz; sec->ceilingplane.c = -FRACUNIT; sec->ceilingplane.ic = -FRACUNIT; - sprintf (tnam, "BTIL%04d", LittleShort(bsec->ceilingpicnum)); + mysnprintf (tnam, countof(tnam), "BTIL%04d", LittleShort(bsec->ceilingpicnum)); sec->ceilingpic = TexMan.GetTexture (tnam, FTexture::TEX_Build); if (bsec->ceilingstat & 1) { @@ -480,9 +480,9 @@ static void LoadWalls (walltype *walls, int numwalls, sectortype *bsec) char tnam[9]; FTextureID overpic, pic; - sprintf (tnam, "BTIL%04d", LittleShort(walls[i].picnum)); + mysnprintf (tnam, countof(tnam), "BTIL%04d", LittleShort(walls[i].picnum)); pic = TexMan.GetTexture (tnam, FTexture::TEX_Build); - sprintf (tnam, "BTIL%04d", LittleShort(walls[i].overpicnum)); + mysnprintf (tnam, countof(tnam), "BTIL%04d", LittleShort(walls[i].overpicnum)); overpic = TexMan.GetTexture (tnam, FTexture::TEX_Build); walls[i].x = LittleLong(walls[i].x); @@ -807,7 +807,7 @@ void ACustomSprite::BeginPlay () char name[9]; Super::BeginPlay (); - sprintf (name, "BTIL%04d", (args[0] + args[1]*256) & 0xffff); + mysnprintf (name, countof(name), "BTIL%04d", (args[0] + args[1]*256) & 0xffff); picnum = TexMan.GetTexture (name, FTexture::TEX_Build); scaleX = args[2] * (FRACUNIT/64); diff --git a/src/p_conversation.cpp b/src/p_conversation.cpp index e1b6d6c9..8d40186a 100644 --- a/src/p_conversation.cpp +++ b/src/p_conversation.cpp @@ -328,7 +328,7 @@ static FStrifeDialogueNode *ReadRetailNode (FileReader *lump, DWORD &prevSpeaker // The speaker's voice for this node, if any. speech.Backdrop[0] = 0; //speech.Sound[8] = 0; - sprintf (fullsound, "svox/%s", speech.Sound); + mysnprintf (fullsound, countof(fullsound), "svox/%s", speech.Sound); node->SpeakerVoice = fullsound; // The speaker's name, if any. @@ -397,7 +397,7 @@ static FStrifeDialogueNode *ReadTeaserNode (FileReader *lump, DWORD &prevSpeaker // The speaker's voice for this node, if any. if (speech.VoiceNumber != 0) { - sprintf (fullsound, "svox/voc%u", speech.VoiceNumber); + mysnprintf (fullsound, countof(fullsound), "svox/voc%u", speech.VoiceNumber); node->SpeakerVoice = fullsound; } else @@ -491,7 +491,7 @@ static void ParseReplies (FStrifeDialogueReply **replyptr, Response *responses) { char moneystr[128]; - sprintf (moneystr, "%s for %u", rsp->Reply, rsp->Count[0]); + mysnprintf (moneystr, countof(moneystr), "%s for %u", rsp->Reply, rsp->Count[0]); reply->Reply = copystring (moneystr); reply->NeedsGold = true; } @@ -759,7 +759,7 @@ void P_StartConversation (AActor *npc, AActor *pc, bool facetalker, bool saveang ++i; } char goodbye[25]; - sprintf(goodbye, "TXT_RANDOMGOODBYE_%d", 1+(pr_randomspeech() % NUM_RANDOM_GOODBYES)); + mysnprintf(goodbye, countof(goodbye), "TXT_RANDOMGOODBYE_%d", 1+(pr_randomspeech() % NUM_RANDOM_GOODBYES)); item.label = (char*)GStrings[goodbye]; if (item.label == NULL) item.label = "Bye."; item.b.position = i; @@ -907,7 +907,7 @@ static void DrawConversationMenu () AInventory *coin = cp->ConversationPC->FindInventory (RUNTIME_CLASS(ACoin)); char goldstr[32]; - sprintf (goldstr, "%d", coin != NULL ? coin->Amount : 0); + mysnprintf (goldstr, countof(goldstr), "%d", coin != NULL ? coin->Amount : 0); screen->DrawText (CR_GRAY, 21, 191, goldstr, DTA_320x200, true, DTA_FillColor, 0, DTA_Alpha, HR_SHADOW, TAG_DONE); screen->DrawTexture (TexMan(((AInventory *)GetDefaultByType (RUNTIME_CLASS(ACoin)))->Icon), diff --git a/src/p_interaction.cpp b/src/p_interaction.cpp index f6142d74..76e5bb2a 100644 --- a/src/p_interaction.cpp +++ b/src/p_interaction.cpp @@ -265,7 +265,7 @@ void ClientObituary (AActor *self, AActor *inflictor, AActor *attacker) attacker->player->frags[attacker->player - players]++; self = attacker; gender = self->player->userinfo.gender; - sprintf (gendermessage, "OB_FRIENDLY%c", '1' + (pr_obituary() & 3)); + mysnprintf (gendermessage, countof(gendermessage), "OB_FRIENDLY%c", '1' + (pr_obituary() & 3)); message = GStrings(gendermessage); } else diff --git a/src/p_lnspec.cpp b/src/p_lnspec.cpp index a1d1bfbe..67e3d1c5 100644 --- a/src/p_lnspec.cpp +++ b/src/p_lnspec.cpp @@ -2718,7 +2718,7 @@ FUNC(LS_SendToCommunicator) if (it != NULL && it->player != NULL && it->FindInventory(NAME_Communicator)) { char name[32]; - sprintf (name, "svox/voc%d", arg0); + mysnprintf (name, countof(name), "svox/voc%d", arg0); if (!arg3) { diff --git a/src/p_user.cpp b/src/p_user.cpp index cec1ac53..fbde2cde 100644 --- a/src/p_user.cpp +++ b/src/p_user.cpp @@ -362,7 +362,7 @@ void player_t::SetLogNumber (int num) char lumpname[16]; int lumpnum; - sprintf (lumpname, "LOG%d", num); + mysnprintf (lumpname, countof(lumpname), "LOG%d", num); lumpnum = Wads.CheckNumForName (lumpname); if (lumpnum == -1) { diff --git a/src/r_main.cpp b/src/r_main.cpp index 5c15a0b8..b3b25703 100644 --- a/src/r_main.cpp +++ b/src/r_main.cpp @@ -656,7 +656,7 @@ void R_SetWindow (int windowSize, int fullWidth, int fullHeight, int stHeight) UCVarValue value; char temp[16]; - sprintf (temp, "%d x %d", viewwidth, viewheight); + mysnprintf (temp, countof(temp), "%d x %d", viewwidth, viewheight); value.String = temp; r_viewsize.ForceSet (value, CVAR_String); } diff --git a/src/r_plane.cpp b/src/r_plane.cpp index 89f5c70c..ca932d8f 100644 --- a/src/r_plane.cpp +++ b/src/r_plane.cpp @@ -701,6 +701,7 @@ visplane_t *R_CheckPlane (visplane_t *pl, int start, int stop) new_pl->viewy = pl->viewy; new_pl->viewz = pl->viewz; new_pl->viewangle = pl->viewangle; + new_pl->sky = pl->sky; pl = new_pl; pl->minx = start; pl->maxx = stop; diff --git a/src/r_polymost.cpp b/src/r_polymost.cpp index c2a344ba..bae0bb5b 100644 --- a/src/r_polymost.cpp +++ b/src/r_polymost.cpp @@ -665,7 +665,7 @@ void drawquad(float x0, float y0, float x1, float y1, float x2, float y2, float void printnum(int x, int y, int num) { - char foo[16]; sprintf (foo, "%d", num); + char foo[16]; mysnprintf (foo, countof(foo), "%d", num); RenderTarget->DrawText (CR_WHITE, x, y, foo); } diff --git a/src/r_things.cpp b/src/r_things.cpp index f49aca1d..346b0d48 100644 --- a/src/r_things.cpp +++ b/src/r_things.cpp @@ -476,7 +476,7 @@ void R_InitSkins (void) { if (stricmp (skins[i].name, skins[j].name) == 0) { - sprintf (skins[i].name, "skin%d", (int)i); + mysnprintf (skins[i].name, countof(skins[i].name), "skin%d", (int)i); Printf (PRINT_BOLD, "Skin %s duplicated as %s\n", skins[j].name, skins[i].name); break; @@ -657,7 +657,7 @@ void R_InitSkins (void) if (!remove) { if (skins[i].name[0] == 0) - sprintf (skins[i].name, "skin%d", (int)i); + mysnprintf (skins[i].name, countof(skins[i].name), "skin%d", (int)i); // Now collect the sprite frames for this skin. If the sprite name was not // specified, use whatever immediately follows the specifier lump. diff --git a/src/s_advsound.cpp b/src/s_advsound.cpp index 1a2c513f..b834dea2 100644 --- a/src/s_advsound.cpp +++ b/src/s_advsound.cpp @@ -1017,7 +1017,7 @@ static void S_AddSNDINFO (int lump) char temp[16]; sc.MustGetNumber (); - sprintf (temp, "MAP%02d", sc.Number); + mysnprintf (temp, countof(temp), "MAP%02d", sc.Number); info = FindLevelInfo (temp); sc.MustGetString (); if (info->mapname[0] && (!(info->flags & LEVEL_MUSICDEFINED))) diff --git a/src/s_sound.cpp b/src/s_sound.cpp index a50d5c33..d47f2774 100644 --- a/src/s_sound.cpp +++ b/src/s_sound.cpp @@ -201,21 +201,21 @@ void S_NoiseDebug (void) else { // X coordinate - sprintf (temp, "%.0f", origin.X); + mysnprintf (temp, countof(temp), "%.0f", origin.X); screen->DrawText (color, 70, y, temp, TAG_DONE); // Y coordinate - sprintf (temp, "%.0f", origin.Z); + mysnprintf (temp, countof(temp), "%.0f", origin.Z); screen->DrawText (color, 120, y, temp, TAG_DONE); // Z coordinate - sprintf (temp, "%.0f", origin.Y); + mysnprintf (temp, countof(temp), "%.0f", origin.Y); screen->DrawText (color, 170, y, temp, TAG_DONE); // Distance if (chan->DistanceScale > 0) { - sprintf (temp, "%.0f", (origin - listener).Length()); + mysnprintf (temp, countof(temp), "%.0f", (origin - listener).Length()); screen->DrawText (color, 260, y, temp, TAG_DONE); } else @@ -225,15 +225,15 @@ void S_NoiseDebug (void) } // Volume - sprintf (temp, "%.2g", chan->Volume); + mysnprintf (temp, countof(temp), "%.2g", chan->Volume); screen->DrawText (color, 220, y, temp, TAG_DONE); // Channel - sprintf (temp, "%d", chan->EntChannel); + mysnprintf (temp, countof(temp), "%d", chan->EntChannel); screen->DrawText (color, 300, y, temp, TAG_DONE); // Flags - sprintf (temp, "%s3%sZ%sU%sM%sN%sA%sL%sE", + mysnprintf (temp, countof(temp), "%s3%sZ%sU%sM%sN%sA%sL%sE", (chan->ChanFlags & CHAN_IS3D) ? TEXTCOLOR_GREEN : TEXTCOLOR_BLACK, (chan->ChanFlags & CHAN_LISTENERZ) ? TEXTCOLOR_GREEN : TEXTCOLOR_BLACK, (chan->ChanFlags & CHAN_UI) ? TEXTCOLOR_GREEN : TEXTCOLOR_BLACK, @@ -1770,13 +1770,13 @@ bool S_ChangeCDMusic (int track, unsigned int id, bool looping) { char temp[32]; - if (id) + if (id != 0) { - sprintf (temp, ",CD,%d,%x", track, id); + mysnprintf (temp, countof(temp), ",CD,%d,%x", track, id); } else { - sprintf (temp, ",CD,%d", track); + mysnprintf (temp, countof(temp), ",CD,%d", track); } return S_ChangeMusic (temp, 0, looping); } @@ -2054,7 +2054,7 @@ CCMD (playsound) CCMD (idmus) { level_info_t *info; - char *map; + FString map; int l; if (argv.argc() > 1) @@ -2063,7 +2063,9 @@ CCMD (idmus) { l = atoi (argv[1]); if (l <= 99) + { map = CalcMapName (0, l); + } else { Printf ("%s\n", GStrings("STSTR_NOMUS")); @@ -2137,9 +2139,13 @@ CCMD (cd_play) char musname[16]; if (argv.argc() == 1) + { strcpy (musname, ",CD,"); + } else - sprintf (musname, ",CD,%d", atoi(argv[1])); + { + mysnprintf (musname, countof(musname), ",CD,%d", atoi(argv[1])); + } S_ChangeMusic (musname, 0, true); } diff --git a/src/sound/music_midi_timidity.cpp b/src/sound/music_midi_timidity.cpp index 442b1ef3..c16e5a08 100644 --- a/src/sound/music_midi_timidity.cpp +++ b/src/sound/music_midi_timidity.cpp @@ -474,7 +474,7 @@ bool TimiditySong::LaunchTimidity () FORMAT_MESSAGE_IGNORE_INSERTS, NULL, err, 0, (LPTSTR)&msgBuf, 0, NULL)) { - sprintf (hres, "%08lx", err); + mysnprintf (hres, countof(hres), "%08lx", err); msgBuf = hres; } diff --git a/src/sound/music_timidity_mididevice.cpp b/src/sound/music_timidity_mididevice.cpp index 92a0d08c..a96b06bc 100644 --- a/src/sound/music_timidity_mididevice.cpp +++ b/src/sound/music_timidity_mididevice.cpp @@ -468,10 +468,10 @@ int TimidityMIDIDevice::PlayTick() }; #ifdef _WIN32 char buffer[128]; - sprintf(buffer, "C%02d: %11s %3d %3d\n", (status & 15) + 1, commands[(status >> 4) & 7], parm1, parm2); + mysnprintf(buffer, countof(buffer), "C%02d: %11s %3d %3d\n", (status & 15) + 1, commands[(status >> 4) & 7], parm1, parm2); OutputDebugString(buffer); #else - fprintf(stderr, "C%02d: %11s %3d %3d\n", (status & 15) + 1, commands[(status >> 4) & 7], parm1, parm2); + //fprintf(stderr, "C%02d: %11s %3d %3d\n", (status & 15) + 1, commands[(status >> 4) & 7], parm1, parm2); #endif } } diff --git a/src/st_stuff.cpp b/src/st_stuff.cpp index 47f007c5..655391c9 100644 --- a/src/st_stuff.cpp +++ b/src/st_stuff.cpp @@ -383,8 +383,8 @@ static bool Cht_ChangeLevel (cheatseq_t *cheat) static bool Cht_ChangeStartSpot (cheatseq_t *cheat) { char cmd[64]; - - sprintf (cmd, "changemap %s %c", level.mapname, cheat->Args[0]); + + mysnprintf (cmd, countof(cmd), "changemap %s %c", level.mapname, cheat->Args[0]); C_DoCommand (cmd); return true; } diff --git a/src/stats.h b/src/stats.h index 81066b3c..39aa7344 100644 --- a/src/stats.h +++ b/src/stats.h @@ -43,9 +43,13 @@ extern "C" double CyclesPerSecond; #define _interlockedbittestandset64 hackfixfor #define _interlockedbittestandreset64 x64compilation +#define _interlockedbittestandset wtfnmake +#define _interlockedbittestandreset doesittoo #include #undef _interlockedbittestandset64 #undef _interlockedbittestandreset64 +#undef _interlockedbittestandset +#undef _interlockedbittestandreset typedef QWORD cycle_t; diff --git a/src/svnrevision.h b/src/svnrevision.h index 551f9dbf..9cc96f13 100644 --- a/src/svnrevision.h +++ b/src/svnrevision.h @@ -3,5 +3,5 @@ // This file was automatically generated by the // updaterevision tool. Do not edit by hand. -#define ZD_SVN_REVISION_STRING "1076" -#define ZD_SVN_REVISION_NUMBER 1076 +#define ZD_SVN_REVISION_STRING "1082" +#define ZD_SVN_REVISION_NUMBER 1082 diff --git a/src/textures/buildtexture.cpp b/src/textures/buildtexture.cpp index d89ff840..21e3cc41 100644 --- a/src/textures/buildtexture.cpp +++ b/src/textures/buildtexture.cpp @@ -79,7 +79,7 @@ FBuildTexture::FBuildTexture (int tilenum, const BYTE *pixels, int width, int he LeftOffset = left; TopOffset = top; CalcBitSize (); - sprintf (Name, "BTIL%04d", tilenum); + mysnprintf (Name, countof(Name), "BTIL%04d", tilenum); UseType = TEX_Build; } diff --git a/src/thingdef/thingdef.cpp b/src/thingdef/thingdef.cpp index 780f8bc9..5f9079c3 100644 --- a/src/thingdef/thingdef.cpp +++ b/src/thingdef/thingdef.cpp @@ -287,6 +287,10 @@ static void ParseActionDef (FScanner &sc, PClass *cls) static FActorInfo *CreateNewActor(FScanner &sc, FActorInfo **parentc, Baggage *bag) { FName typeName; + const PClass *replacee = NULL; + int DoomEdNum = -1; + PClass *ti = NULL; + FActorInfo *info = NULL; // Get actor name sc.MustGetString(); @@ -339,10 +343,14 @@ static FActorInfo *CreateNewActor(FScanner &sc, FActorInfo **parentc, Baggage *b { sc.ScriptError ("Parent type '%s' not found", colon); } - else if (parent->ActorInfo == NULL) + else if (!parent->IsDescendantOf(RUNTIME_CLASS(AActor))) { sc.ScriptError ("Parent type '%s' is not an actor", colon); } + else if (parent->ActorInfo == NULL) + { + sc.ScriptError ("uninitialized parent type '%s'", colon); + } else { *parentc = parent->ActorInfo; @@ -351,8 +359,57 @@ static FActorInfo *CreateNewActor(FScanner &sc, FActorInfo **parentc, Baggage *b else sc.UnGet(); } - PClass *ti = parent->CreateDerivedClass (typeName, parent->Size); - FActorInfo *info = ti->ActorInfo; + // Check for "replaces" + if (sc.CheckString ("replaces")) + { + + // Get actor name + sc.MustGetString (); + replacee = PClass::FindClass (sc.String); + + if (replacee == NULL) + { + sc.ScriptError ("Replaced type '%s' not found", sc.String); + } + else if (replacee->ActorInfo == NULL) + { + sc.ScriptError ("Replaced type '%s' is not an actor", sc.String); + } + } + + // Now, after the actor names have been parsed, it is time to switch to C-mode + // for the rest of the actor definition. + sc.SetCMode (true); + if (sc.CheckNumber()) + { + if (sc.Number>=-1 && sc.Number<32768) DoomEdNum = sc.Number; + else sc.ScriptError ("DoomEdNum must be in the range [-1,32767]"); + } + + if (sc.CheckString("native")) + { + ti = (PClass*)PClass::FindClass(typeName); + if (ti == NULL) + { + sc.ScriptError("Unknown native class '%s'", typeName.GetChars()); + } + else if (ti->ParentClass != parent) + { + sc.ScriptError("Native class '%s' does not inherit from '%s'", + typeName.GetChars(),parent->TypeName.GetChars()); + } + else if (ti->ActorInfo != NULL) + { + sc.ScriptMessage("Redefinition of internal class '%s'", typeName.GetChars()); + } + ti->InitializeActorInfo(); + info = ti->ActorInfo; + } + else + { + ti = parent->CreateDerivedClass (typeName, parent->Size); + info = ti->ActorInfo; + } MakeStateDefines(parent->ActorInfo->StateList); @@ -373,40 +430,14 @@ static FActorInfo *CreateNewActor(FScanner &sc, FActorInfo **parentc, Baggage *b *info->PainChances = *parent->ActorInfo->PainChances; } - // Check for "replaces" - sc.MustGetString (); - if (sc.Compare ("replaces")) + if (replacee != NULL) { - const PClass *replacee; - - // Get actor name - sc.MustGetString (); - replacee = PClass::FindClass (sc.String); - - if (replacee == NULL) - { - sc.ScriptError ("Replaced type '%s' not found", sc.String); - } - else if (replacee->ActorInfo == NULL) - { - sc.ScriptError ("Replaced type '%s' is not an actor", sc.String); - } replacee->ActorInfo->Replacement = ti->ActorInfo; ti->ActorInfo->Replacee = replacee->ActorInfo; } - else - { - sc.UnGet(); - } - // Now, after the actor names have been parsed, it is time to switch to C-mode - // for the rest of the actor definition. - sc.SetCMode (true); - if (sc.CheckNumber()) - { - if (sc.Number>=-1 && sc.Number<32768) info->DoomEdNum = sc.Number; - else sc.ScriptError ("DoomEdNum must be in the range [-1,32767]"); - } + info->DoomEdNum = DoomEdNum; + if (parent == RUNTIME_CLASS(AWeapon)) { // preinitialize kickback to the default for the game @@ -707,8 +738,8 @@ void FinishThingdef() for(int i=0;i<31;i++) { char fmt[20]; - sprintf(fmt, "QuestItem%d", i+1); - QuestItemClasses[i]=PClass::FindClass(fmt); + mysnprintf(fmt, countof(fmt), "QuestItem%d", i+1); + QuestItemClasses[i] = PClass::FindClass(fmt); } } diff --git a/src/thingdef/thingdef_properties.cpp b/src/thingdef/thingdef_properties.cpp index ff9b63db..fd17e573 100644 --- a/src/thingdef/thingdef_properties.cpp +++ b/src/thingdef/thingdef_properties.cpp @@ -172,6 +172,7 @@ static flagdef ActorFlags[]= DEFINE_FLAG(MF3, DONTOVERLAP, AActor, flags3), DEFINE_FLAG(MF3, DONTMORPH, AActor, flags3), DEFINE_FLAG(MF3, DONTSQUASH, AActor, flags3), + DEFINE_FLAG(MF3, EXPLOCOUNT, AActor, flags3), DEFINE_FLAG(MF3, FULLVOLACTIVE, AActor, flags3), DEFINE_FLAG(MF3, ISMONSTER, AActor, flags3), DEFINE_FLAG(MF3, SKYEXPLODE, AActor, flags3), diff --git a/src/timidity/instrum_dls.cpp b/src/timidity/instrum_dls.cpp index 13a0528c..5be96f71 100644 --- a/src/timidity/instrum_dls.cpp +++ b/src/timidity/instrum_dls.cpp @@ -784,7 +784,7 @@ static const char *SourceToString(USHORT usSource) case CONN_SRC_CC93: return "CC93"; default: - sprintf(unknown, "UNKNOWN (0x%04x)", usSource); + mysnprintf(unknown, countof(unknown), "UNKNOWN (0x%04x)", usSource); return unknown; } } @@ -802,7 +802,7 @@ static const char *TransformToString(USHORT usTransform) case CONN_TRN_SWITCH: return "SWITCH"; default: - sprintf(unknown, "UNKNOWN (0x%04x)", usTransform); + mysnprintf(unknown, countof(unknown), "UNKNOWN (0x%04x)", usTransform); return unknown; } } @@ -876,7 +876,7 @@ static const char *DestinationToString(USHORT usDestination) case CONN_DST_FILTER_Q: return "FILTER_Q"; default: - sprintf(unknown, "UNKNOWN (0x%04x)", usDestination); + mysnprintf(unknown, countof(unknown), "UNKNOWN (0x%04x)", usDestination); return unknown; } } diff --git a/src/tmap.nas b/src/tmap.nas index e27b7ca1..28d2ba39 100644 --- a/src/tmap.nas +++ b/src/tmap.nas @@ -33,7 +33,7 @@ BITS 32 -%include "src/valgrind.inc" +%include "valgrind.inc" ; Segment/section definition macros. diff --git a/src/tmap2.nas b/src/tmap2.nas index da95a3d8..7f6ed82d 100644 --- a/src/tmap2.nas +++ b/src/tmap2.nas @@ -37,7 +37,7 @@ BITS 32 -%include "src/valgrind.inc" +%include "valgrind.inc" %define SPACEFILLER4 (0x44444444) diff --git a/src/tmap3.nas b/src/tmap3.nas index 05b68aae..49444419 100644 --- a/src/tmap3.nas +++ b/src/tmap3.nas @@ -1,4 +1,4 @@ -%include "src/valgrind.inc" +%include "valgrind.inc" %ifdef M_TARGET_WATCOM SEGMENT DATA PUBLIC ALIGN=16 CLASS=DATA USE32 diff --git a/src/v_font.cpp b/src/v_font.cpp index d4c1c6f5..0b428826 100644 --- a/src/v_font.cpp +++ b/src/v_font.cpp @@ -306,7 +306,7 @@ FFont::FFont (const char *name, const char *nametemplate, int first, int count, for (i = 0; i < count; i++) { charlumps[i] = -1; - sprintf (buffer, nametemplate, i + start); + mysnprintf (buffer, countof(buffer), nametemplate, i + start); lump = Wads.CheckNumForName (buffer, ns_graphics); if (doomtemplate && lump >= 0 && i + start == 121) { // HACKHACK: Don't load STCFN121 in doom(2), because diff --git a/src/v_video.cpp b/src/v_video.cpp index fdb351f8..1835fb0e 100644 --- a/src/v_video.cpp +++ b/src/v_video.cpp @@ -819,7 +819,7 @@ void DFrameBuffer::DrawRateStuff () int chars; int rate_x; - chars = sprintf (fpsbuff, "%2u ms (%3u fps)", howlong, LastCount); + chars = mysnprintf (fpsbuff, countof(fpsbuff), "%2u ms (%3u fps)", howlong, LastCount); rate_x = Width - chars * 8; Clear (rate_x, 0, Width, 8, 0, 0); SetFont (ConFont); diff --git a/src/w_wad.cpp b/src/w_wad.cpp index f2bd9543..249e5d20 100644 --- a/src/w_wad.cpp +++ b/src/w_wad.cpp @@ -465,13 +465,10 @@ void FWadCollection::AddFile (const char *filename, const char * data, int lengt // Rearrange the name and extension in a part of the lump record // that I don't have any use for in order to cnstruct the fullname. rff_p->Name[8] = '\0'; - sprintf ((char *)rff_p->IDontKnow, "%s.", rff_p->Name); - rff_p->Name[0] = '\0'; + strcpy ((char *)rff_p->IDontKnow, rff_p->Name); + strcat ((char *)rff_p->IDontKnow, "."); strcat ((char *)rff_p->IDontKnow, rff_p->Extension); lump_p->fullname = copystring ((char *)rff_p->IDontKnow); - if (strstr ((char *)rff_p->IDontKnow, "TILE")) - rff_p = rff_p; - lump_p++; } Printf (" (%u files)", header.rff.NumLumps); @@ -715,7 +712,7 @@ void FWadCollection::AddFile (const char *filename, const char * data, int lengt { char path[256]; - sprintf(path, "%s:", filename); + mysnprintf(path, countof(path), "%s:", filename); char * wadstr = path+strlen(path); for(unsigned int i = 0; i < EmbeddedWADs.Size(); i++) diff --git a/src/wi_stuff.cpp b/src/wi_stuff.cpp index c0ffc559..7c5b443f 100644 --- a/src/wi_stuff.cpp +++ b/src/wi_stuff.cpp @@ -317,10 +317,10 @@ void WI_LoadBackground(bool isenterpic) case GAME_Doom: if (gamemode != commercial) { - char * level = isenterpic? wbs->next : wbs->current; + const char *level = isenterpic ? wbs->next : wbs->current; if (IsExMy(level)) { - sprintf(buffer, "$IN_EPI%c", level[1]); + mysnprintf(buffer, countof(buffer), "$IN_EPI%c", level[1]); lumpname = buffer; } } @@ -353,7 +353,7 @@ void WI_LoadBackground(bool isenterpic) { if (IsExMy(wbs->next)) { - sprintf(buffer, "$IN_HTC%c", wbs->next[1]); + mysnprintf(buffer, countof(buffer), "$IN_HTC%c", wbs->next[1]); lumpname = buffer; } } @@ -842,7 +842,7 @@ void WI_drawEL () // //==================================================================== -int WI_MapToIndex (char *map) +int WI_MapToIndex (const char *map) { unsigned int i; @@ -904,11 +904,11 @@ int WI_drawNum (int x, int y, int n, int digits, bool leadingzeros = true) if (leadingzeros) { - sprintf (text, "%07d", n); + mysnprintf (text, countof(text), "%07d", n); } else { - sprintf (text, "%7d", n); + mysnprintf (text, countof(text), "%7d", n); if (digits < 0) { text_p = strrchr (text, ' '); @@ -1980,7 +1980,7 @@ void WI_loadData(void) for (i = 0; i < 10; i++) { // numbers 0-9 - sprintf (name, "WINUM%d", i); + mysnprintf (name, countof(name), "WINUM%d", i); num[i] = TexMan[name]; } } @@ -2004,7 +2004,7 @@ void WI_loadData(void) for (i = 0; i < 10; i++) { - sprintf (name, "FONTB%d", 16 + i); + mysnprintf (name, countof(name), "FONTB%d", 16 + i); num[i] = TexMan[name]; } } diff --git a/src/wi_stuff.h b/src/wi_stuff.h index 28be48f0..a3a0e07e 100644 --- a/src/wi_stuff.h +++ b/src/wi_stuff.h @@ -47,11 +47,11 @@ typedef struct wbstartstruct_s int finished_ep; int next_ep; - char current[9]; // [RH] Name of map just finished - char next[9]; // next level, [RH] actual map name + FString current; // [RH] Name of map just finished + FString next; // next level, [RH] actual map name - char lname0[9]; - char lname1[9]; + FString lname0; + FString lname1; int maxkills; int maxitems; diff --git a/src/win32/eaxedit.cpp b/src/win32/eaxedit.cpp index b94b0948..fa73ce4b 100644 --- a/src/win32/eaxedit.cpp +++ b/src/win32/eaxedit.cpp @@ -196,7 +196,7 @@ LRESULT AddEnvToDropDown (HWND hCtl, bool showID, const ReverbContainer *env) if (showID) { - sprintf (buff, "(%3d,%3d) %s", HIBYTE(env->ID), LOBYTE(env->ID), env->Name); + mysnprintf (buff, countof(buff), "(%3d,%3d) %s", HIBYTE(env->ID), LOBYTE(env->ID), env->Name); i = SendMessage (hCtl, CB_ADDSTRING, 0, (LPARAM)buff); } else @@ -255,9 +255,9 @@ void SetIDEdits (HWND hDlg, WORD id) { char text[4]; - sprintf (text, "%d", HIBYTE(id)); + mysnprintf (text, countof(text), "%d", HIBYTE(id)); SendMessage (GetDlgItem (hDlg, IDC_EDITID1), WM_SETTEXT, 0, (LPARAM)text); - sprintf (text, "%d", LOBYTE(id)); + mysnprintf (text, countof(text), "%d", LOBYTE(id)); SendMessage (GetDlgItem (hDlg, IDC_EDITID2), WM_SETTEXT, 0, (LPARAM)text); } @@ -406,11 +406,11 @@ LRESULT CALLBACK EditControlProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lP int vali = SendMessage (env->SliderHWND, TBM_GETPOS, 0, 0); if (env->Float) { - sprintf (buff, "%d.%03d", vali/1000, abs(vali%1000)); + mysnprintf (buff, countof(buff), "%d.%03d", vali/1000, abs(vali%1000)); } else { - sprintf (buff, "%d", vali); + mysnprintf (buff, countof(buff), "%d", vali); } CallWindowProc (StdEditProc, hWnd, WM_SETTEXT, 0, (LPARAM)buff); CallWindowProc (StdEditProc, hWnd, EM_SETSEL, 0, -1); @@ -487,7 +487,7 @@ void UpdateControl (const EnvControl *control, int value, bool slider) } if (control->Float) { - sprintf (buff, "%d.%03d", value/1000, abs(value%1000)); + mysnprintf (buff, countof(buff), "%d.%03d", value/1000, abs(value%1000)); if (CurrentEnv != NULL) { CurrentEnv->Properties.*control->Float = float(value) / 1000.0; @@ -495,7 +495,7 @@ void UpdateControl (const EnvControl *control, int value, bool slider) } else { - sprintf (buff, "%d", value); + mysnprintf (buff, countof(buff), "%d", value); if (CurrentEnv != NULL) { CurrentEnv->Properties.*control->Int = value; @@ -542,10 +542,10 @@ void UpdateControls (ReverbContainer *env, HWND hDlg) } EnableWindow (GetDlgItem (hDlg, IDC_REVERT), !env->Builtin); - sprintf (buff, "%d", HIBYTE(env->ID)); + mysnprintf (buff, countof(buff), "%d", HIBYTE(env->ID)); SendMessage (GetDlgItem (hDlg, IDC_ID1), WM_SETTEXT, 0, (LPARAM)buff); - sprintf (buff, "%d", LOBYTE(env->ID)); + mysnprintf (buff, countof(buff), "%d", LOBYTE(env->ID)); SendMessage (GetDlgItem (hDlg, IDC_ID2), WM_SETTEXT, 0, (LPARAM)buff); SavedProperties = env->Properties; @@ -690,7 +690,7 @@ void SuggestNewName (const ReverbContainer *env, HWND hEdit) { len = 31 - numdigits; } - sprintf (text + len, "%d", number); + mysnprintf (text + len, countof(text) - len, "%d", number); probe = Environments; while (probe != NULL) @@ -829,7 +829,7 @@ INT_PTR CALLBACK NewEAXProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) static char foo[80]; ti.uId = 2; ti.hwnd = GetDlgItem (hDlg, IDC_EDITID2); - sprintf (foo, "This ID is already used by \"%s\".", rev->Name); + mysnprintf (foo, countof(foo), "This ID is already used by \"%s\".", rev->Name); ti.lpszText = foo; ShowErrorTip (ToolTip, ti, hDlg, "Bad ID"); } diff --git a/src/win32/fb_ddraw.cpp b/src/win32/fb_ddraw.cpp index 19aeeb21..d4438ba4 100644 --- a/src/win32/fb_ddraw.cpp +++ b/src/win32/fb_ddraw.cpp @@ -1164,7 +1164,7 @@ void DDrawFB::Update () } unclock (BlitCycles); - LOG1 ("cycles = %d\n", BlitCycles); + LOG1 ("cycles = %llu\n", BlitCycles); Buffer = NULL; LockCount = 0; diff --git a/src/win32/i_crash.cpp b/src/win32/i_crash.cpp index 16841194..dec1b380 100644 --- a/src/win32/i_crash.cpp +++ b/src/win32/i_crash.cpp @@ -53,6 +53,9 @@ #include #include #include + +#define USE_WINDOWS_DWORD +#include "doomtype.h" #include "resource.h" #include "version.h" #include "m_swap.h" @@ -637,23 +640,24 @@ HANDLE WriteTextReport () break; } } - j = sprintf (CrashSummary, "Code: %08lX", CrashPointers.ExceptionRecord->ExceptionCode); + j = mysnprintf (CrashSummary, countof(CrashSummary), "Code: %08lX", CrashPointers.ExceptionRecord->ExceptionCode); if ((size_t)i < sizeof(exceptions)/sizeof(exceptions[0])) { - j += sprintf (CrashSummary + j, " (%s", exceptions[i].Text); + j += mysnprintf (CrashSummary + j, countof(CrashSummary) - j, " (%s", exceptions[i].Text); if (CrashPointers.ExceptionRecord->ExceptionCode == EXCEPTION_ACCESS_VIOLATION) { // Pre-NT kernels do not seem to provide this information. if (verinfo.dwPlatformId != VER_PLATFORM_WIN32_WINDOWS) { - j += sprintf (CrashSummary + j, " - tried to %s address %08lX", + j += mysnprintf (CrashSummary + j, countof(CrashSummary) - j, + " - tried to %s address %08lX", CrashPointers.ExceptionRecord->ExceptionInformation[0] ? "write" : "read", CrashPointers.ExceptionRecord->ExceptionInformation[1]); } } CrashSummary[j++] = ')'; } - j += sprintf (CrashSummary + j, "\r\nAddress: %p", CrashPointers.ExceptionRecord->ExceptionAddress); + j += mysnprintf (CrashSummary + j, countof(CrashSummary) - j, "\r\nAddress: %p", CrashPointers.ExceptionRecord->ExceptionAddress); Writef (file, "%s\r\nFlags: %08X\r\n\r\n", CrashSummary, CrashPointers.ExceptionRecord->ExceptionFlags); Writef (file, "Windows %s %d.%d Build %d %s\r\n\r\n", @@ -1125,15 +1129,15 @@ static void DumpBytes (HANDLE file, BYTE *address) { if ((i & 15) == 0) { - line_p += sprintf (line_p, "\r\n%p:", address); + line_p += mysnprintf (line_p, countof(line) - (line_p - line), "\r\n%p:", address); } if (SafeReadMemory (address, &peek, 1)) { - line_p += sprintf (line_p, " %02x", *address); + line_p += mysnprintf (line_p, countof(line) - (line_p - line), " %02x", *address); } else { - line_p += sprintf (line_p, " --"); + line_p += mysnprintf (line_p, countof(line) - (line_p - line), " --"); } address++; } @@ -1918,12 +1922,13 @@ static DWORD CALLBACK StreamEditBinary (DWORD_PTR cookie, LPBYTE buffer, LONG cb BYTE buf16[16]; DWORD read, i; char *buff_p = (char *)buffer; + char *buff_end = (char *)buffer + cb; repeat: switch (info->Stage) { case 0: // Write prologue - buff_p += sprintf (buff_p, "{\\rtf1\\ansi\\deff0" + buff_p += mysnprintf (buff_p, buff_end - buff_p, "{\\rtf1\\ansi\\deff0" "{\\colortbl ;\\red0\\green0\\blue80;\\red0\\green0\\blue0;\\red80\\green0\\blue80;}" "\\viewkind4\\pard"); info->Stage++; @@ -1939,19 +1944,19 @@ repeat: goto repeat; } char *linestart = buff_p; - buff_p += sprintf (buff_p, "\\cf1 %08lx:\\cf2 ", info->Pointer); + buff_p += mysnprintf (buff_p, buff_end - buff_p, "\\cf1 %08lx:\\cf2 ", info->Pointer); info->Pointer += read; for (i = 0; i < read;) { if (i <= read - 4) { - buff_p += sprintf (buff_p, " %08lx", *(DWORD *)&buf16[i]); + buff_p += mysnprintf (buff_p, buff_end - buff_p, " %08lx", *(DWORD *)&buf16[i]); i += 4; } else { - buff_p += sprintf (buff_p, " %02x", buf16[i]); + buff_p += mysnprintf (buff_p, buff_end - buff_p, " %02x", buf16[i]); i += 1; } } @@ -1959,7 +1964,7 @@ repeat: { *buff_p++ = ' '; } - buff_p += sprintf (buff_p, "\\cf3 "); + buff_p += mysnprintf (buff_p, buff_end - buff_p, "\\cf3 "); for (i = 0; i < read; ++i) { BYTE code = buf16[i]; @@ -1967,17 +1972,17 @@ repeat: if (code == '\\' || code == '{' || code == '}') *buff_p++ = '\\'; *buff_p++ = code; } - buff_p += sprintf (buff_p, "\\par\r\n"); + buff_p += mysnprintf (buff_p, buff_end - buff_p, "\\par\r\n"); } break; case 2: // Write epilogue - buff_p += sprintf (buff_p, "\\cf0 }"); + buff_p += mysnprintf (buff_p, buff_end - buff_p, "\\cf0 }"); info->Stage = 4; break; case 3: // Write epilogue for truncated file - buff_p += sprintf (buff_p, "--- Rest of file truncated ---\\cf0 }"); + buff_p += mysnprintf (buff_p, buff_end - buff_p, "--- Rest of file truncated ---\\cf0 }"); info->Stage = 4; break; @@ -2015,11 +2020,11 @@ static void SetEditControl (HWND edit, HWND sizedisplay, int filenum) size = GetFileSize (TarFiles[filenum].File, NULL); if (size < 1024) { - sprintf (sizebuf, "(%lu bytes)", size); + mysnprintf (sizebuf, countof(sizebuf), "(%lu bytes)", size); } else { - sprintf (sizebuf, "(%lu KB)", size/1024); + mysnprintf (sizebuf, countof(sizebuf), "(%lu KB)", size/1024); } SetWindowText (sizedisplay, sizebuf); @@ -2125,7 +2130,7 @@ static void UploadFail (HWND hDlg, const char *message, int reason) { char buff[512]; - sprintf (buff, "%s: %d", message, reason); + mysnprintf (buff, countof(buff), "%s: %d", message, reason); SetWindowText (GetDlgItem (hDlg, IDC_BOINGSTATUS), buff); if (reason >= 10000 && reason <= 11999) @@ -2681,7 +2686,7 @@ static DWORD WINAPI UploadProc (LPVOID lpParam) sizeof(MultipartBinaryHeader)-1 + sizeof(MultipartHeaderGZip)-1 + fileLen + sizeof(MultipartFooter)-1; - headerLen = sprintf (xferbuf, PostHeader, contentLength); + headerLen = mysnprintf (xferbuf, countof(xferbuf), PostHeader, contentLength); bytesSent = send (sock, xferbuf, headerLen, 0); if (bytesSent != headerLen) { @@ -2710,7 +2715,7 @@ static DWORD WINAPI UploadProc (LPVOID lpParam) UploadFail (parm->hDlg, "Could not upload report", WSAGetLastError()); throw 1; } - headerLen = sprintf (xferbuf, "Windows %08lX %p %X %08lX %08lX %08lX %08lX %08lX %s", + headerLen = mysnprintf (xferbuf, countof(xferbuf), "Windows %08lX %p %X %08lX %08lX %08lX %08lX %08lX %s", CrashPointers.ExceptionRecord->ExceptionCode, CrashPointers.ExceptionRecord->ExceptionAddress, !!CrashPointers.ExceptionRecord->ExceptionInformation[0], @@ -2746,7 +2751,7 @@ static DWORD WINAPI UploadProc (LPVOID lpParam) } // Send the report file. - headerLen = sprintf (xferbuf, "%s%s", MultipartBinaryHeader, MultipartHeaderZip); + headerLen = mysnprintf (xferbuf, countof(xferbuf), "%s%s", MultipartBinaryHeader, MultipartHeaderZip); bytesSent = send (sock, xferbuf, headerLen, 0); if (bytesSent == SOCKET_ERROR) @@ -3059,7 +3064,7 @@ void DisplayCrashLog () GAMENAME" crashed but was unable to produce\n" "detailed information about the crash.\n" "\nThis is all that is available:\n\nCode=XXXXXXXX\nAddr=XXXXXXXX"; - sprintf (ohPoo + sizeof(ohPoo) - 23, "%08lX\nAddr=%p", CrashCode, CrashAddress); + mysnprintf (ohPoo + countof(ohPoo) - 23, 23, "%08lX\nAddr=%p", CrashCode, CrashAddress); MessageBox (NULL, ohPoo, GAMENAME" Very Fatal Error", MB_OK|MB_ICONSTOP); if (WinHlp32 != NULL) { diff --git a/src/win32/i_input.cpp b/src/win32/i_input.cpp index 0314fffc..debe7efb 100644 --- a/src/win32/i_input.cpp +++ b/src/win32/i_input.cpp @@ -827,7 +827,7 @@ LRESULT CALLBACK WndProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) } #ifdef _DEBUG char foo[256]; - sprintf (foo, "Session Change: %ld %d\n", lParam, wParam); + mysnprintf (foo, countof(foo), "Session Change: %ld %d\n", lParam, wParam); OutputDebugString (foo); #endif } @@ -1064,7 +1064,7 @@ bool SetJoystickSection (bool create) if (g_pJoy != NULL && SUCCEEDED(g_pJoy->GetDeviceInfo (&inst))) { - FormatGUID (section + 9, inst.guidInstance); + FormatGUID (section + 9, countof(section) - 9, inst.guidInstance); strcpy (section + 9 + 38, ".Axes"); return GameConfig->SetSection (section, create); } diff --git a/src/win32/i_main.cpp b/src/win32/i_main.cpp index 783e0244..7adef077 100644 --- a/src/win32/i_main.cpp +++ b/src/win32/i_main.cpp @@ -964,22 +964,23 @@ void DoMain (HINSTANCE hInstance) // //========================================================================== -void DoomSpecificInfo (char *buffer) +void DoomSpecificInfo (char *buffer, size_t bufflen) { const char *arg; + char *const buffend = buffer + bufflen - 2; // -2 for CRLF at end int i; - buffer += wsprintf (buffer, "ZDoom version " DOTVERSIONSTR " (" __DATE__ ")\r\n"); - buffer += wsprintf (buffer, "\r\nCommand line: %s\r\n", GetCommandLine()); + buffer += mysnprintf (buffer, buffend - buffer, "ZDoom version " DOTVERSIONSTR " (" __DATE__ ")\r\n"); + buffer += mysnprintf (buffer, buffend - buffer, "\r\nCommand line: %s\r\n", GetCommandLine()); for (i = 0; (arg = Wads.GetWadName (i)) != NULL; ++i) { - buffer += wsprintf (buffer, "\r\nWad %d: %s", i, arg); + buffer += mysnprintf (buffer, buffend - buffer, "\r\nWad %d: %s", i, arg); } if (gamestate != GS_LEVEL && gamestate != GS_TITLELEVEL) { - buffer += wsprintf (buffer, "\r\n\r\nNot in a level."); + buffer += mysnprintf (buffer, buffend - buffer, "\r\n\r\nNot in a level."); } else { @@ -987,18 +988,18 @@ void DoomSpecificInfo (char *buffer) strncpy (name, level.mapname, 8); name[8] = 0; - buffer += wsprintf (buffer, "\r\n\r\nCurrent map: %s", name); + buffer += mysnprintf (buffer, buffend - buffer, "\r\n\r\nCurrent map: %s", name); if (!viewactive) { - buffer += wsprintf (buffer, "\r\n\r\nView not active."); + buffer += mysnprintf (buffer, buffend - buffer, "\r\n\r\nView not active."); } else { - buffer += wsprintf (buffer, "\r\n\r\nviewx = %d", viewx); - buffer += wsprintf (buffer, "\r\nviewy = %d", viewy); - buffer += wsprintf (buffer, "\r\nviewz = %d", viewz); - buffer += wsprintf (buffer, "\r\nviewangle = %x", viewangle); + buffer += mysnprintf (buffer, buffend - buffer, "\r\n\r\nviewx = %d", viewx); + buffer += mysnprintf (buffer, buffend - buffer, "\r\nviewy = %d", viewy); + buffer += mysnprintf (buffer, buffend - buffer, "\r\nviewz = %d", viewz); + buffer += mysnprintf (buffer, buffend - buffer, "\r\nviewangle = %x", viewangle); } } *buffer++ = '\r'; @@ -1093,7 +1094,7 @@ LONG WINAPI CatchAllExceptions (LPEXCEPTION_POINTERS info) char *custominfo = (char *)HeapAlloc (GetProcessHeap(), 0, 16384); CrashPointers = *info; - DoomSpecificInfo (custominfo); + DoomSpecificInfo (custominfo, 16384); CreateCrashLog (custominfo, (DWORD)strlen(custominfo)); // If the main thread crashed, then make it clean up after itself. diff --git a/src/win32/i_system.cpp b/src/win32/i_system.cpp index 48d21966..80745fdf 100644 --- a/src/win32/i_system.cpp +++ b/src/win32/i_system.cpp @@ -515,74 +515,6 @@ void I_Quit (void) extern FILE *Logfile; bool gameisdead; -// We should use ZDoom's internal formatting routine here so that the extended -// format specifiers work here as well. - -struct snprintf_state -{ - char *buffer; - size_t maxlen; - size_t curlen; - int ideallen; -}; - -static int myvsnprintf_helper(void *data, const char *cstr, int cstr_len) -{ - snprintf_state *state = (snprintf_state *)data; - - if (INT_MAX - state->ideallen > cstr_len) - { - state->ideallen = INT_MAX; - } - else - { - state->ideallen += cstr_len; - } - if (state->curlen + cstr_len > state->maxlen) - { - cstr_len = (int)(state->maxlen - state->curlen); - } - if (cstr_len > 0) - { - memcpy(state->buffer + state->curlen, cstr, cstr_len); - state->curlen += cstr_len; - } - return cstr_len; -} - -// Unlike the MS CRT function snprintf, this one always writes a terminating -// null character to the buffer. It also returns the full length of the string -// that would have been output if the buffer had been large enough. In other -// words, it follows BSD/Linux rules and not MS rules. -int myvsnprintf(char *buffer, size_t count, const char *format, va_list argptr) -{ - size_t originalcount = count; - if (count != 0) - { - count--; - } - if (count > INT_MAX) - { - count = INT_MAX; - } - snprintf_state state = { buffer, count, 0, 0 }; - StringFormat::VWorker(myvsnprintf_helper, &state, format, argptr); - if (originalcount > 0) - { - buffer[state.curlen] = '\0'; - } - return state.ideallen; -} - -int mysnprintf(char *buffer, size_t count, const char *format, ...) -{ - va_list argptr; - va_start(argptr, format); - int len = myvsnprintf(buffer, count, format, argptr); - va_end(argptr); - return len; -} - void STACK_ARGS I_FatalError (const char *error, ...) { static BOOL alreadyThrown = false; diff --git a/src/win32/st_start.cpp b/src/win32/st_start.cpp index 10a832fc..66c7512c 100644 --- a/src/win32/st_start.cpp +++ b/src/win32/st_start.cpp @@ -548,7 +548,7 @@ void FBasicStartupScreen :: NetProgress(int count) { char buf[16]; - sprintf (buf, "%d/%d", NetCurPos, NetMaxPos); + mysnprintf (buf, countof(buf), "%d/%d", NetCurPos, NetMaxPos); SetDlgItemText (NetStartPane, IDC_NETSTARTCOUNT, buf); SendDlgItemMessage (NetStartPane, IDC_NETSTARTPROGRESS, PBM_SETPOS, MIN(NetCurPos, NetMaxPos), 0); } diff --git a/src/win32/win32iface.h b/src/win32/win32iface.h index c54e4d40..1114d550 100644 --- a/src/win32/win32iface.h +++ b/src/win32/win32iface.h @@ -425,11 +425,11 @@ FILE *dbg; #define STARTLOG #define STOPLOG #define LOG(x) { OutputDebugString(x); } -#define LOG1(x,y) { char poo[1024]; sprintf(poo, x, y); OutputDebugString(poo); } -#define LOG2(x,y,z) { char poo[1024]; sprintf(poo, x, y, z); OutputDebugString(poo); } -#define LOG3(x,y,z,zz) { char poo[1024]; sprintf(poo, x, y, z, zz); OutputDebugString(poo); } -#define LOG4(x,y,z,a,b) { char poo[1024]; sprintf(poo, x, y, z, a, b); OutputDebugString(poo); } -#define LOG5(x,y,z,a,b,c) { char poo[1024]; sprintf(poo, x, y, z, a, b, c); OutputDebugString(poo); } +#define LOG1(x,y) { char poo[1024]; mysnprintf(poo, countof(poo), x, y); OutputDebugString(poo); } +#define LOG2(x,y,z) { char poo[1024]; mysnprintf(poo, countof(poo), x, y, z); OutputDebugString(poo); } +#define LOG3(x,y,z,zz) { char poo[1024]; mysnprintf(poo, countof(poo), x, y, z, zz); OutputDebugString(poo); } +#define LOG4(x,y,z,a,b) { char poo[1024]; mysnprintf(poo, countof(poo), x, y, z, a, b); OutputDebugString(poo); } +#define LOG5(x,y,z,a,b,c) { char poo[1024]; mysnprintf(poo, countof(poo), x, y, z, a, b, c); OutputDebugString(poo); } #else #define STARTLOG #define STOPLOG diff --git a/src/zstrformat.cpp b/src/zstrformat.cpp index 567ebbd8..bcb26490 100644 --- a/src/zstrformat.cpp +++ b/src/zstrformat.cpp @@ -1,11 +1,96 @@ +/* +** zstrformat.cpp +** Routines for generic printf-style formatting. +** +**--------------------------------------------------------------------------- +** Copyright 2005-2008 Randy Heit +** All rights reserved. +** +** Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions +** are met: +** +** 1. Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** 2. Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in the +** documentation and/or other materials provided with the distribution. +** 3. The name of the author may not be used to endorse or promote products +** derived from this software without specific prior written permission. +** +** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +**--------------------------------------------------------------------------- +** +** Portions of this file relating to printing floating point numbers +** are covered by the following copyright: +** +**--------------------------------------------------------------------------- +** Copyright (c) 1990, 1993 +** The Regents of the University of California. All rights reserved. +** +** This code is derived from software contributed to Berkeley by +** Chris Torek. +** +** Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions +** are met: +** 1. Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** 2. Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in the +** documentation and/or other materials provided with the distribution. +** 4. Neither the name of the University nor the names of its contributors +** may be used to endorse or promote products derived from this software +** without specific prior written permission. +** +** THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +** ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +** ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +** FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +** DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +** OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +** HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +** LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +** OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +** SUCH DAMAGE. +** +**--------------------------------------------------------------------------- +** +** Even though the standard C library has a function to do printf-style +** formatting in a generic way, there is no standard interface to this +** function. So if you want to do some printf formatting that doesn't fit in +** the context of the provided functions, you need to roll your own. Why is +** that? +** +** Maybe Microsoft wants you to write a better one yourself? When used as +** part of a sprintf replacement, this function is significantly faster than +** Microsoft's offering. When used as part of a fprintf replacement, this +** function turns out to be slower, but that's probably because the CRT's +** fprintf can interact with the FILE object on a low level for better +** perfomance. If you sprintf into a buffer and then fwrite that buffer, this +** routine wins again, though the difference isn't great. +*/ + #include #include #include #include #include #include +#include #include "zstring.h" +#include "gdtoa.h" #ifndef _MSC_VER #include @@ -14,21 +99,32 @@ typedef unsigned __int64 uint64_t; typedef signed __int64 int64_t; #endif -// Even though the standard C library has a function to do printf-style formatting in a -// generic way, there is no standard interface to this function. So if you want to do -// some printf formatting that doesn't fit in the context of the provided functions, -// you need to roll your own. Why is that? -// -// Maybe Microsoft wants you to write a better one yourself? When used as part of a -// sprintf replacement, this function is significantly faster than Microsoft's -// offering. When used as part of a fprintf replacement, this function turns out to -// be slower, but that's probably because the CRT's fprintf can interact with the -// FILE object on a low level for better perfomance. If you sprintf into a buffer -// and then fwrite that buffer, this routine wins again, though the difference isn't -// great. +/* + * MAXEXPDIG is the maximum number of decimal digits needed to store a + * floating point exponent in the largest supported format. It should + * be ceil(log10(LDBL_MAX_10_EXP)) or, if hexadecimal floating point + * conversions are supported, ceil(log10(LDBL_MAX_EXP)). But since it + * is presently never greater than 5 in practice, we fudge it. + */ +#define MAXEXPDIG 6 +#if LDBL_MAX_EXP > 999999 +#error "floating point buffers too small" +#endif + +#define DEFPREC 6 + +static const char hexits[16] = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'}; +static const char HEXits[16] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; +static const char spaces[16] = {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '}; +static const char zeroes[17] = {'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','.'}; +static const char dotchar = '.'; namespace StringFormat { + static int writepad (OutputFunc output, void *outputData, const char *pad, int padsize, int spaceToFill); + static int printandpad (OutputFunc output, void *outputData, const char *p, const char *ep, int len, const char *with, int padsize); + static int exponent (char *p0, int exp, int fmtch); + int Worker (OutputFunc output, void *outputData, const char *fmt, ...) { va_list arglist; @@ -40,43 +136,6 @@ namespace StringFormat return len; } - static inline int writepad (OutputFunc output, void *outputData, const char *pad, int padsize, int spaceToFill) - { - int outlen = 0; - while (spaceToFill > 0) - { - int count = spaceToFill > padsize ? padsize : spaceToFill; - outlen += output (outputData, pad, count); - spaceToFill -= count; - } - return outlen; - } - - // Gasp! This is supposed to be a replacement for sprintf formatting, but - // I used sprintf for doubles anyway! Oh no! - static int fmt_fp (OutputFunc output, void *outputData, int flags, int precision, int width, double number, char type) - { - char *buff; - char format[16]; - int i; - - format[0] = '%'; - i = 1; - if (flags & F_MINUS) format[i++] = '-'; - if (flags & F_PLUS) format[i++] = '+'; - if (flags & F_ZERO) format[i++] = '0'; - if (flags & F_BLANK) format[i++] = ' '; - if (flags & F_HASH) format[i++] = '#'; - format[i++] = '*'; - format[i++] = '.'; - format[i++] = '*'; - format[i++] = type; - format[i++] = '\0'; - buff = (char *)alloca (1000 + precision); - i = sprintf (buff, format, width, precision, number); - return output (outputData, buff, i); - } - int VWorker (OutputFunc output, void *outputData, const char *fmt, va_list arglist) { const char *c; @@ -233,18 +292,13 @@ namespace StringFormat // Now that that's all out of the way, we should be pointing at the type specifier { - static const char hexits[18] = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','0','x'}; - static const char HEXits[18] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','0','X'}; - static const char spaces[16] = {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '}; - static const char zeroes[17] = {'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','.'}; - static const char plusprefix = '+'; - static const char minusprefix = '-'; - static const char dotchar = '.'; - const char *prefix = NULL; - int prefixlen = 0; + char prefix[3]; + int prefixlen; + char hexprefix = '\0'; + char sign = '\0'; int postprefixzeros = 0; int size = flags & 0xF000; - char buffer[32], *ibuff; + char buffer[80], *ibuff; const char *obuff = 0; char type = *c++; int bufflen = 0; @@ -253,8 +307,32 @@ namespace StringFormat uint64_t int64arg = 0; const void *voidparg; const char *charparg; + double dblarg; const char *xits = hexits; int inlen = len; + /* + * We can decompose the printed representation of floating + * point numbers into several parts, some of which may be empty: + * + * [+|-| ] [0x|0X] MMM . NNN [e|E|p|P] [+|-] ZZ + * A B ---C--- D E F + * + * A: 'sign' holds this value if present; '\0' otherwise + * B: hexprefix holds the 'x' or 'X'; '\0' if not hexadecimal + * C: obuff points to the string MMMNNN. Leading and trailing + * zeros are not in the string and must be added. + * D: expchar holds this character; '\0' if no exponent, e.g. %f + * F: at least two digits for decimal, at least one digit for hex + */ + const char *decimal_point = ".";/* locale specific decimal point */ + int signflag; /* true if float is negative */ + int expt; /* integer value of exponent */ + char expchar = 'e'; /* exponent character: [eEpP\0] */ + char *dtoaend; /* pointer to end of converted digits */ + int expsize = 0; /* character count for expstr */ + int ndig = 0; /* actual number of digits returned by dtoa */ + char expstr[MAXEXPDIG+2]; /* buffer for exponent string: e+ZZZ */ + char *dtoaresult = NULL; /* buffer allocated by dtoa */ // Using a bunch of if/else if statements is faster than a switch, because a switch generates // a jump table. A jump table means a possible data cache miss and a hefty penalty while the @@ -263,7 +341,8 @@ namespace StringFormat if (type == 'x' || type == 'X' || type == 'p' || type == 'd' || type == 'u' || type == 'i' || - type == 'o') + type == 'o' || + type == 'B') { if (type == 'X' || type == 'p') { @@ -360,6 +439,14 @@ namespace StringFormat } intarg = int(int64arg); } + else if (type == 'B') + { // Binary: Dump digits until it fits in an unsigned int + while (int64arg > UINT_MAX) + { + *--ibuff = char(int64arg & 1) + '0'; int64arg >>= 1; + } + intarg = int(int64arg); + } else { if (type != 'u') @@ -413,10 +500,19 @@ namespace StringFormat } else if (type == 'u') { // Decimal - while (intarg != 0) + int i; + + // Unsigned division is typically slower than signed division. + // Do it at most once. + if (intarg > INT_MAX) { *--ibuff = char(intarg % 10) + '0'; intarg /= 10; } + i = (int)intarg; + while (i != 0) + { + *--ibuff = char(i % 10) + '0'; i /= 10; + } } else if (type == 'o') { // Octal @@ -425,6 +521,13 @@ namespace StringFormat *--ibuff = char(intarg & 7) + '0'; intarg >>= 3; } } + else if (type == 'B') + { // Binary + while (intarg != 0) + { + *--ibuff = char(intarg & 1) + '0'; intarg >>= 1; + } + } else { // Hexadecimal while (intarg != 0) @@ -439,14 +542,16 @@ namespace StringFormat { if (bufflen >= precision) { - prefix = zeroes; - prefixlen = 1; + sign = '0'; } } else if (type == 'x' || type == 'X') { - prefix = xits + 16; - prefixlen = 2; + hexprefix = type; + } + else if (type == 'B') + { + hexprefix = '!'; } } bufflen = (int)(ptrdiff_t)(&buffer[sizeof(buffer)] - ibuff); @@ -519,59 +624,149 @@ namespace StringFormat *va_arg (arglist, int *) = inlen; } } - else if (type == 'e' || type == 'E' || - type == 'f' || type == 'F' || - type == 'g' || type == 'G') + else if (type == 'f' || type == 'F') { - // IEEE 754 floating point numbers -#ifdef _MSC_VER -#define FP_SIGN_MASK (1ui64<<63) -#define FP_EXPONENT_MASK (2047ui64<<52) -#define FP_FRACTION_MASK ((1ui64<<52)-1) -#else -#define FP_SIGN_MASK (1llu<<63) -#define FP_EXPONENT_MASK (2047llu<<52) -#define FP_FRACTION_MASK ((1llu<<52)-1) -#endif - union + expchar = '\0'; + goto fp_begin; + } + else if (type == 'g' || type == 'G') + { + expchar = type - ('g' - 'e'); + if (precision == 0) { - double d; - uint64_t i64; - } number; - number.d = va_arg (arglist, double); - - if (precision < 0) precision = 6; - - flags |= F_SIGNED; - - if ((number.i64 & FP_EXPONENT_MASK) == FP_EXPONENT_MASK) + precision = 1; + } + goto fp_begin; + } +#if 0 + // The hdtoa function provided with FreeBSD uses a hexadecimal FP constant. + // Microsoft's compiler does not support these, so I would need to hack it + // together with ints instead. It's very do-able, but until I actually have + // some reason to print hex FP numbers, I won't bother. + else if (type == 'a' || type == 'A') + { + if (type == 'A') { - if (number.i64 & FP_SIGN_MASK) - { - flags |= F_NEGATIVE; - } - if ((number.i64 & FP_FRACTION_MASK) == 0) - { - obuff = "Infinity"; - bufflen = 8; - } - else if ((number.i64 & ((FP_FRACTION_MASK+1)>>1)) == 0) - { - obuff = "NaN"; - bufflen = 3; - } - else - { - obuff = "Ind"; - } + xits = HEXits; + hexprefix = 'X'; + expchar = 'P'; } else { - // Converting a binary floating point number to an ASCII decimal - // representation is non-trivial, so I'm not going to do it myself. - // (At least for now.) - len += fmt_fp (output, outputData, flags, precision, width, number.d, type); - continue; + hexprefix = 'x'; + expchar = 'p'; + } + if (precision >= 0) + { + precision++; + } + dblarg = va_arg(arglist, double); + dtoaresult = obuff = hdtoa(dblarg, xits, precision, &expt, &signflag, &dtoaend); + if (precision < 0) + { + precision = (int)(dtoaend - obuff); + } + if (expt == INT_MAX) + { + hexprefix = '\0'; + } + goto fp_common; + } +#endif + else if (type == 'e' || type == 'E') + { + expchar = type; + if (precision < 0) // account for digit before decpt + { + precision = DEFPREC + 1; + } + else + { + precision++; + } +fp_begin: + if (precision < 0) + { + precision = DEFPREC; + } + dblarg = va_arg(arglist, double); + obuff = dtoaresult = dtoa(dblarg, expchar ? 2 : 3, precision, &expt, &signflag, &dtoaend); +//fp_common: + decimal_point = localeconv()->decimal_point; + flags |= F_SIGNED; + if (signflag) + { + flags |= F_NEGATIVE; + } + if (expt == INT_MAX) // inf or nan + { + if (*obuff == 'N') + { + obuff = (type >= 'a') ? "nan" : "NAN"; + flags &= ~F_SIGNED; + } + else + { + obuff = (type >= 'a') ? "inf" : "INF"; + } + bufflen = 3; + flags &= ~F_ZERO; + } + else + { + flags |= F_FPT; + ndig = (int)(dtoaend - obuff); + if (type == 'g' || type == 'G') + { + if (expt > -4 && expt <= precision) + { // Make %[gG] smell like %[fF]. + expchar = '\0'; + if (flags & F_HASH) + { + precision -= expt; + } + else + { + precision = ndig - expt; + } + if (precision < 0) + { + precision = 0; + } + } + else + { // Make %[gG] smell like %[eE], but trim trailing zeroes if no # flag. + if (!(flags & F_HASH)) + { + precision = ndig; + } + } + } + if (expchar) + { + expsize = exponent(expstr, expt - 1, expchar); + bufflen = expsize + precision; + if (precision > 1 || (flags & F_HASH)) + { + ++bufflen; + } + } + else + { // space for digits before decimal point + if (expt > 0) + { + bufflen = expt; + } + else // "0" + { + bufflen = 1; + } + // space for decimal pt and following digits + if (precision != 0 || (flags & F_HASH)) + { + bufflen += precision + 1; + } + } } } @@ -580,21 +775,32 @@ namespace StringFormat { if (flags & F_NEGATIVE) { - prefix = &minusprefix; - prefixlen = 1; + sign = '-'; } else if (flags & F_PLUS) { - prefix = &plusprefix; - prefixlen = 1; + sign = '+'; } else if (flags & F_BLANK) { - prefix = spaces; - prefixlen = 1; + sign = ' '; } } + // Construct complete prefix from sign and hex prefix character + prefixlen = 0; + if (sign != '\0') + { + prefix[0] = sign; + prefixlen = 1; + } + if (hexprefix != '\0') + { + prefix[prefixlen] = '0'; + prefix[prefixlen + 1] = hexprefix; + prefixlen += 2; + } + // Pad the output to the field width, if needed int fieldlen = prefixlen + postprefixzeros + bufflen; const char *pad = (flags & F_ZERO) ? zeroes : spaces; @@ -617,9 +823,55 @@ namespace StringFormat outlen += output (outputData, prefix, prefixlen); } outlen += writepad (output, outputData, zeroes, sizeof(spaces), postprefixzeros); - if (bufflen > 0) + if (!(flags & F_FPT)) { - outlen += output (outputData, obuff, bufflen); + if (bufflen > 0) + { + outlen += output (outputData, obuff, bufflen); + } + } + else + { + if (expchar == '\0') // %[fF] or sufficiently short %[gG] + { + if (expt <= 0) + { + outlen += output (outputData, zeroes, 1); + if (precision != 0 || (flags & F_HASH)) + { + outlen += output (outputData, decimal_point, 1); + } + outlen += writepad (output, outputData, zeroes, sizeof(zeroes), -expt); + // already handled initial 0's + precision += expt; + } + else + { + outlen += printandpad (output, outputData, obuff, dtoaend, expt, zeroes, sizeof(zeroes)); + obuff += expt; + if (precision || (flags & F_HASH)) + { + outlen += output (outputData, decimal_point, 1); + } + } + outlen += printandpad (output, outputData, obuff, dtoaend, precision, zeroes, sizeof(zeroes)); + } + else // %[eE] or sufficiently long %[gG] + { + if (precision > 1 || (flags & F_HASH)) + { + buffer[0] = *obuff++; + buffer[1] = *decimal_point; + outlen += output (outputData, buffer, 2); + outlen += output (outputData, obuff, ndig - 1); + outlen += writepad (output, outputData, zeroes, sizeof(zeroes), precision - ndig); + } + else // XeYY + { + outlen += output (outputData, obuff, 1); + } + outlen += output (outputData, expstr, expsize); + } } if ((flags & F_MINUS) && fieldlen < width) @@ -627,7 +879,166 @@ namespace StringFormat outlen += writepad (output, outputData, pad, sizeof(spaces), width - fieldlen); } len += outlen; + if (dtoaresult != NULL) + { + freedtoa(dtoaresult); + dtoaresult = NULL; + } } } } + + static int writepad (OutputFunc output, void *outputData, const char *pad, int padsize, int spaceToFill) + { + int outlen = 0; + while (spaceToFill > 0) + { + int count = spaceToFill > padsize ? padsize : spaceToFill; + outlen += output (outputData, pad, count); + spaceToFill -= count; + } + return outlen; + } + + static int printandpad (OutputFunc output, void *outputData, const char *p, const char *ep, int len, const char *with, int padsize) + { + int outlen = 0; + int n2 = (int)(ep - p); + if (n2 > len) + { + n2 = len; + } + if (n2 > 0) + { + outlen = output (outputData, p, n2); + } + return outlen + writepad (output, outputData, with, padsize, len - (n2 > 0 ? n2 : 0)); + } + + static int exponent (char *p0, int exp, int fmtch) + { + char *p, *t; + char expbuf[MAXEXPDIG]; + + p = p0; + *p++ = fmtch; + if (exp < 0) + { + exp = -exp; + *p++ = '-'; + } + else + { + *p++ = '+'; + } + t = expbuf + MAXEXPDIG; + if (exp > 9) + { + do + { + *--t = '0' + (exp % 10); + } + while ((exp /= 10) > 9); + *--t = '0' + exp; + for(; t < expbuf + MAXEXPDIG; *p++ = *t++) + { } + } + else + { + // Exponents for decimal floating point conversions + // (%[eEgG]) must be at least two characters long, + // whereas exponents for hexadecimal conversions can + // be only one character long. + if (fmtch == 'e' || fmtch == 'E') + { + *p++ = '0'; + } + *p++ = '0' + exp; + } + return (int)(p - p0); + } }; + +//========================================================================// +// snprintf / vsnprintf imitations + +#ifdef __GNUC__ +#define GCCPRINTF(stri,firstargi) __attribute__((format(printf,stri,firstargi))) +#define GCCFORMAT(stri) __attribute__((format(printf,stri,0))) +#define GCCNOWARN __attribute__((unused)) +#else +#define GCCPRINTF(a,b) +#define GCCFORMAT(a) +#define GCCNOWARN +#endif + +struct snprintf_state +{ + char *buffer; + size_t maxlen; + size_t curlen; + int ideallen; +}; + +static int myvsnprintf_helper(void *data, const char *cstr, int cstr_len) +{ + snprintf_state *state = (snprintf_state *)data; + + if (INT_MAX - cstr_len < state->ideallen) + { + state->ideallen = INT_MAX; + } + else + { + state->ideallen += cstr_len; + } + if (state->curlen + cstr_len > state->maxlen) + { + cstr_len = (int)(state->maxlen - state->curlen); + } + if (cstr_len > 0) + { + memcpy(state->buffer + state->curlen, cstr, cstr_len); + state->curlen += cstr_len; + } + return cstr_len; +} + +extern "C" +{ + +// Unlike the MS CRT function snprintf, this one always writes a terminating +// null character to the buffer. It also returns the full length of the string +// that would have been output if the buffer had been large enough. In other +// words, it follows BSD/Linux rules and not MS rules. +int myvsnprintf(char *buffer, size_t count, const char *format, va_list argptr) +{ + size_t originalcount = count; + if (count != 0) + { + count--; + } + if (count > INT_MAX) + { // This is probably an error. Output nothing. + originalcount = 0; + count = 0; + } + snprintf_state state = { buffer, count, 0, 0 }; + StringFormat::VWorker(myvsnprintf_helper, &state, format, argptr); + if (originalcount > 0) + { + buffer[state.curlen] = '\0'; + } + return state.ideallen; +} + +int mysnprintf(char *buffer, size_t count, const char *format, ...) +{ + va_list argptr; + va_start(argptr, format); + int len = myvsnprintf(buffer, count, format, argptr); + va_end(argptr); + return len; +} + +} diff --git a/src/zstring.cpp b/src/zstring.cpp index 011ef517..9f392643 100644 --- a/src/zstring.cpp +++ b/src/zstring.cpp @@ -3,7 +3,7 @@ ** A dynamically-allocated string class. ** **--------------------------------------------------------------------------- -** Copyright 2005-2007 Randy Heit +** Copyright 2005-2008 Randy Heit ** All rights reserved. ** ** Redistribution and use in source and binary forms, with or without diff --git a/src/zstring.h b/src/zstring.h index ebfb357b..ad79fb11 100644 --- a/src/zstring.h +++ b/src/zstring.h @@ -281,6 +281,7 @@ namespace StringFormat F_SIGNED = 32, F_NEGATIVE = 64, F_ZEROVALUE = 128, + F_FPT = 256, // Format specification size prefixes F_HALFHALF = 0x1000, // hh diff --git a/tools/fixrtext/fixrtext.vcproj b/tools/fixrtext/fixrtext.vcproj index bc78575e..cc50b605 100644 --- a/tools/fixrtext/fixrtext.vcproj +++ b/tools/fixrtext/fixrtext.vcproj @@ -169,6 +169,10 @@ + + diff --git a/tools/lemon/lemon.vcproj b/tools/lemon/lemon.vcproj index 137b9d7b..9f46d4df 100644 --- a/tools/lemon/lemon.vcproj +++ b/tools/lemon/lemon.vcproj @@ -220,7 +220,6 @@ WarningLevel="3" Detect64BitPortabilityProblems="true" DebugInformationFormat="0" - CallingConvention="0" CompileAs="1" DisableSpecificWarnings="4996" /> @@ -357,6 +356,10 @@ + + diff --git a/tools/re2c/re2c.vcproj b/tools/re2c/re2c.vcproj index dbaedb5f..c1090618 100644 --- a/tools/re2c/re2c.vcproj +++ b/tools/re2c/re2c.vcproj @@ -217,7 +217,6 @@ WarningLevel="3" Detect64BitPortabilityProblems="false" DebugInformationFormat="0" - CallingConvention="0" DisableSpecificWarnings="4996" /> - - + diff --git a/tools/updaterevision/updaterevision.vcproj b/tools/updaterevision/updaterevision.vcproj index f39914dc..0421cbb6 100644 --- a/tools/updaterevision/updaterevision.vcproj +++ b/tools/updaterevision/updaterevision.vcproj @@ -23,7 +23,7 @@ OutputDirectory="$(SolutionDir)$(ConfigurationName)" IntermediateDirectory="$(ConfigurationName)" ConfigurationType="1" - CharacterSet="1" + CharacterSet="2" > + + + + + + + + + + + + diff --git a/wadsrc/Makefile b/wadsrc/Makefile deleted file mode 100644 index 366bad8a..00000000 --- a/wadsrc/Makefile +++ /dev/null @@ -1,30 +0,0 @@ -# NMAKE doesn't know how to handle executables that use forward slashes in -# their paths, but it can handle forward slashes in dependencies. Heh. -# The wadsrc project file redefines MAKEWAD using backslashes instead. It -# also defines NOLOGO, so you don't need to see NMAKE's banner. -# -# Summary: If you use Visual C++, the provided project file is set up to -# build the wad correctly with nmake. If you use GCC, then "make" is -# sufficient to build the wad. - -RM=rm -f -SLASH=/ -MAKEWAD=..$(SLASH)tools$(SLASH)makewad$(SLASH)makewad - -makethewad: wadmake Makefile2 - $(MAKE) $(NOLOGO) -f Makefile2 - -wadmake: zdoom.lst - $(MAKEWAD) -make wadmake zdoom.lst - -clean: - $(RM) wadmake zdoom.pk3 - -# This target is for Visual C++'s Rebuild All command -nrebuild: clean - $(MAKE) NOLOGO=$(NOLOGO) SLASH=$(SLASH) - copy gzdoom.pk3 ..\.. - -# Copy the wad to my testing area -andcopy: makethewad - copy gzdoom.pk3 ..\.. diff --git a/wadsrc/Makefile.mgw b/wadsrc/Makefile.mgw deleted file mode 100644 index 554730b9..00000000 --- a/wadsrc/Makefile.mgw +++ /dev/null @@ -1,21 +0,0 @@ -MAKEWAD=../tools/makewad/makewad - -ifneq ($(MAKECMDGOALS),clean) -include Makefile2 -endif -ifeq ($(findstring msys,$(shell sh --version 2>nul)),msys) -export OSTYPE=msys -endif - -wadmake: zdoom.lst $(MAKEWAD).exe - $(MAKEWAD) -make wadmake zdoom.lst - -clean: -ifeq ($(OSTYPE),msys) - rm -f wadmake gzdoom.pk3 -else - del /q /f wadmake gzdoom.pk3 2>nul -endif - -../tools/makewad/makewad.exe: - $(MAKE) -C ../tools/makewad -f Makefile diff --git a/wadsrc/Makefile2 b/wadsrc/Makefile2 deleted file mode 100644 index 82d1cf51..00000000 --- a/wadsrc/Makefile2 +++ /dev/null @@ -1,2 +0,0 @@ -include wadmake - diff --git a/wadsrc/althudcf.txt b/wadsrc/althudcf.txt deleted file mode 100644 index 52456118..00000000 --- a/wadsrc/althudcf.txt +++ /dev/null @@ -1,4 +0,0 @@ -Fist PUNGC0 -PunchDagger PNCHD0 -Beak "" -Snout "" diff --git a/wadsrc/amrka0.png b/wadsrc/amrka0.png deleted file mode 100644 index c95d00afeae69ed14c5b85900acfac42286eb877..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 234 zcmeAS@N?(olHy`uVBq!ia0vp@Ak4uGBwbBK{D72kfKP}kkpBOl!P1h!#)e_X4u*sT zhCO?LVhk59F!c2?u(LCK{mKv(#Sjz2@bf1_OAEt~9}GNyQ?>wAFqQ=Q1v5B2yO9Ru zaHJPGCIM+S5PmY>_A`(U^mK6ysfdg1a~C?Gz{6aqd*#pnt&BxQ-?lBDxVC76^G^e= z`En(9+w|7#D3MWpd#HD*_FIi7!(CG$m{~M7V#J=lfas9lD$r?8{&uY3a?qSY==%( zf!z0c;gVXwn%@s0=tM&_yI?XW(+FVJB)gcFIi7oDCwQ#p(~)Z4HybS4@qFPN8-Zud zY|+e?Q*y;QR*gB91|`J4C2jc<{lQ0cxy$`HfTY3S<*vjvT7r+VR>F5f_P{5_A#)Ib}j0fN}D{5Xx}B0vMhK8OOVQ;iq5~*h1po1-!3*6;S=}KTg2= AssI20 diff --git a/wadsrc/animdefs.txt b/wadsrc/animdefs.txt deleted file mode 100644 index 2c492ddb..00000000 --- a/wadsrc/animdefs.txt +++ /dev/null @@ -1,291 +0,0 @@ -// Tome of Power -texture optional SPINBK0 -pic SPINBK0 tics 3 -pic SPINBK1 tics 3 -pic SPINBK2 tics 3 -pic SPINBK3 tics 3 -pic SPINBK4 tics 3 -pic SPINBK5 tics 3 -pic SPINBK6 tics 3 -pic SPINBK7 tics 3 -pic SPINBK8 tics 3 -pic SPINBK9 tics 3 -pic SPINBK10 tics 3 -pic SPINBK11 tics 3 -pic SPINBK12 tics 3 -pic SPINBK13 tics 3 -pic SPINBK14 tics 3 -pic SPINBK15 tics 3 - -// Speed Boots -texture optional SPBOOT0 -pic SPBOOT0 tics 3 -pic SPBOOT1 tics 3 -pic SPBOOT2 tics 3 -pic SPBOOT3 tics 3 -pic SPBOOT4 tics 3 -pic SPBOOT5 tics 3 -pic SPBOOT6 tics 3 -pic SPBOOT7 tics 3 -pic SPBOOT8 tics 3 -pic SPBOOT9 tics 3 -pic SPBOOT10 tics 3 -pic SPBOOT11 tics 3 -pic SPBOOT12 tics 3 -pic SPBOOT13 tics 3 -pic SPBOOT14 tics 3 -pic SPBOOT15 tics 3 - -// Defensive Power -texture optional SPSHLD0 -pic SPSHLD0 tics 3 -pic SPSHLD1 tics 3 -pic SPSHLD2 tics 3 -pic SPSHLD3 tics 3 -pic SPSHLD4 tics 3 -pic SPSHLD5 tics 3 -pic SPSHLD6 tics 3 -pic SPSHLD7 tics 3 -pic SPSHLD8 tics 3 -pic SPSHLD9 tics 3 -pic SPSHLD10 tics 3 -pic SPSHLD11 tics 3 -pic SPSHLD12 tics 3 -pic SPSHLD13 tics 3 -pic SPSHLD14 tics 3 -pic SPSHLD15 tics 3 - -// Minotaur Active -texture optional SPMINO0 -pic SPMINO0 tics 3 -pic SPMINO1 tics 3 -pic SPMINO2 tics 3 -pic SPMINO3 tics 3 -pic SPMINO4 tics 3 -pic SPMINO5 tics 3 -pic SPMINO6 tics 3 -pic SPMINO7 tics 3 -pic SPMINO8 tics 3 -pic SPMINO9 tics 3 -pic SPMINO10 tics 3 -pic SPMINO11 tics 3 -pic SPMINO12 tics 3 -pic SPMINO13 tics 3 -pic SPMINO14 tics 3 -pic SPMINO15 tics 3 - -// The Wings of Wrath are not included, because they stop spinning when -// you stop flying, so they can't be a simple animation. - -switch doom 1 SW1BRCOM on pic SW2BRCOM tics 0 -switch doom 1 SW1BRN1 on pic SW2BRN1 tics 0 -switch doom 1 SW1BRN2 on pic SW2BRN2 tics 0 -switch doom 1 SW1BRNGN on pic SW2BRNGN tics 0 -switch doom 1 SW1BROWN on pic SW2BROWN tics 0 -switch doom 1 SW1COMM on pic SW2COMM tics 0 -switch doom 1 SW1COMP on pic SW2COMP tics 0 -switch doom 1 SW1DIRT on pic SW2DIRT tics 0 -switch doom 1 SW1EXIT on pic SW2EXIT tics 0 -switch doom 1 SW1GRAY on pic SW2GRAY tics 0 -switch doom 1 SW1GRAY1 on pic SW2GRAY1 tics 0 -switch doom 1 SW1METAL on pic SW2METAL tics 0 -switch doom 1 SW1PIPE on pic SW2PIPE tics 0 -switch doom 1 SW1SLAD on pic SW2SLAD tics 0 -switch doom 1 SW1STARG on pic SW2STARG tics 0 -switch doom 1 SW1STON1 on pic SW2STON1 tics 0 -switch doom 1 SW1STON2 on pic SW2STON2 tics 0 -switch doom 1 SW1STONE on pic SW2STONE tics 0 -switch doom 1 SW1STRTN on pic SW2STRTN tics 0 - -switch doom 2 SW1BLUE on pic SW2BLUE tics 0 -switch doom 2 SW1CMT on pic SW2CMT tics 0 -switch doom 2 SW1GARG on pic SW2GARG tics 0 -switch doom 2 SW1GSTON on pic SW2GSTON tics 0 -switch doom 2 SW1HOT on pic SW2HOT tics 0 -switch doom 2 SW1LION on pic SW2LION tics 0 -switch doom 2 SW1SATYR on pic SW2SATYR tics 0 -switch doom 2 SW1SKIN on pic SW2SKIN tics 0 -switch doom 2 SW1VINE on pic SW2VINE tics 0 -switch doom 2 SW1WOOD on pic SW2WOOD tics 0 - -switch doom 3 SW1PANEL on pic SW2PANEL tics 0 -switch doom 3 SW1ROCK on pic SW2ROCK tics 0 -switch doom 3 SW1MET2 on pic SW2MET2 tics 0 -switch doom 3 SW1WDMET on pic SW2WDMET tics 0 -switch doom 3 SW1BRIK on pic SW2BRIK tics 0 -switch doom 3 SW1MOD1 on pic SW2MOD1 tics 0 -switch doom 3 SW1ZIM on pic SW2ZIM tics 0 -switch doom 3 SW1STON6 on pic SW2STON6 tics 0 -switch doom 3 SW1TEK on pic SW2TEK tics 0 -switch doom 3 SW1MARB on pic SW2MARB tics 0 -switch doom 3 SW1SKULL on pic SW2SKULL tics 0 - -switch heretic SW1OFF on pic SW1ON tics 0 -switch heretic SW2OFF on pic SW2ON tics 0 - -switch hexen SW_1_UP on sound Switch1 pic SW_1_DN tics 0 -switch hexen SW_2_UP on sound Switch1 pic SW_2_DN tics 0 -switch hexen VALVE1 on sound ValveTurn pic VALVE2 tics 0 -switch hexen SW51_OFF on sound Switch2 pic SW51_ON tics 0 -switch hexen SW52_OFF on sound Switch2 pic SW52_ON tics 0 -switch hexen SW53_UP on sound RopePull pic SW53_DN tics 0 -switch hexen PUZZLE5 on sound Switch1 pic PUZZLE9 tics 0 -switch hexen PUZZLE6 on sound Switch1 pic PUZZLE10 tics 0 -switch hexen PUZZLE7 on sound Switch1 pic PUZZLE11 tics 0 -switch hexen PUZZLE8 on sound Switch1 pic PUZZLE12 tics 0 - -switch strife GLASS01 on sound world/glassbreak pic GLASS02 tics 0 -switch strife GLASS03 on sound world/glassbreak pic GLASS04 tics 0 -switch strife GLASS05 on sound world/glassbreak pic GLASS06 tics 0 -switch strife GLASS07 on sound world/glassbreak pic GLASS08 tics 0 -switch strife GLASS17 on sound world/glassbreak pic GLASS18 tics 0 -switch strife GLASS19 on sound world/glassbreak pic GLASS20 tics 0 -switch strife SWKNOB01 on sound switches/knob pic SWKNOB02 tics 0 -switch strife SWLITE01 on pic SWLITE02 tics 0 -switch strife SWCHN01 on sound switches/chain pic SWCHN02 tics 0 -switch strife COMP01 on sound world/glassbreak pic COMP04B tics 0 -switch strife COMP05 on sound world/glassbreak pic COMP12B tics 0 -switch strife COMP09 on sound world/glassbreak pic COMP12B tics 0 -switch strife COMP12 on sound world/glassbreak pic COMP04B tics 0 -switch strife COMP13 on sound world/glassbreak pic COMP12B tics 0 -switch strife COMP17 on sound world/glassbreak pic COMP20B tics 0 -switch strife COMP21 on sound world/glassbreak pic COMP28B tics 0 -switch strife WALTEK09 on sound world/glassbreak pic WALTEKB1 tics 0 -switch strife WALTEK10 on sound world/glassbreak pic WALTEKB1 tics 0 -switch strife WALTEK15 on sound world/glassbreak pic WALTEKB1 tics 0 -switch strife SWFORC01 on pic SWFORC02 tics 0 -switch strife SWEXIT01 on pic SWEXIT02 tics 0 -switch strife DORSBK01 on sound switches/stone pic DORSBK02 tics 0 -switch strife SWSLD01 on sound switches/keycard pic SWSLD02 tics 0 -switch strife DORWS04 on sound switches/bolt pic DORWS05 tics 0 -switch strife SWIRON01 on pic SWIRON02 tics 0 -switch strife GLASS09 on sound world/glassbreak pic GLASS10 tics 0 -switch strife GLASS11 on sound world/glassbreak pic GLASS12 tics 0 -switch strife GLASS13 on sound world/glassbreak pic GLASS14 tics 0 -switch strife GLASS15 on sound world/glassbreak pic GLASS16 tics 0 -switch strife SWFORC03 on pic SWFORC04 tics 0 -switch strife SWCIT01 on pic SWCIT02 tics 0 -switch strife SWTRMG01 on pic SWTRMG04 tics 0 -switch strife SWMETL01 on pic SWMETL02 tics 0 -switch strife SWWOOD01 on pic SWWOOD02 tics 0 -switch strife SWTKBL01 on pic SWTKBL02 tics 0 -switch strife AZWAL21 on pic AZWAL22 tics 0 -switch strife SWINDT01 on pic SWINDT02 tics 0 -switch strife SWRUST01 on pic SWRUST02 tics 0 -switch strife SWCHAP01 on pic SWCHAP02 tics 0 -switch strife SWALIN01 on pic SWALIN02 tics 0 -switch strife SWWALG01 on pic SWWALG02 tics 0 -switch strife SWWALG03 on pic SWWALG04 tics 0 -switch strife SWTRAM01 on pic SWTRAM02 tics 0 -switch strife SWTRAM03 on pic SWTRAM04 tics 0 -switch strife SWORC01 on pic SWORC02 tics 0 -switch strife SWBRIK01 on pic SWBRIK02 tics 0 -switch strife SWIRON03 on pic SWIRON04 tics 0 -switch strife SWIRON05 on pic SWIRON06 tics 0 -switch strife SWIRON07 on pic SWIRON08 tics 0 -switch strife SWCARD01 on pic SWCARD02 tics 0 -switch strife SWSIGN01 on pic SWSIGN02 tics 0 -switch strife SWLEV01 on pic SWLEV02 tics 0 -switch strife SWLEV03 on pic SWLEV04 tics 0 -switch strife SWLEV05 on pic SWLEV06 tics 0 -switch strife SWBRN01 on pic SWBRN02 tics 0 -switch strife SWPIP01 on sound switches/valve pic SWPIP02 tics 0 -switch strife SWPALM01 on sound switches/scanner pic SWPALM02 tics 0 -switch strife SWKNOB03 on pic SWKNOB04 tics 0 -switch strife ALTSW01 on pic ALTSW02 tics 0 -switch strife COMP25 on sound world/glassbreak pic COMP28B tics 0 -switch strife COMP29 on sound world/glassbreak pic COMP20B tics 0 -switch strife COMP33 on sound world/glassbreak pic COMP50 tics 0 -switch strife COMP42 on sound world/glassbreak pic COMP51 tics 0 -switch strife GODSCRN1 on sound switches/fool pic GODSCRN2 tics 0 -switch strife ALIEN04 on pic ALIEN05 tics 0 -switch strife CITADL04 on pic CITADL05 tics 0 -switch strife SWITE03 on pic SWITE04 tics 0 -switch strife SWTELP01 on pic SWTELP02 tics 0 -switch strife BRNSCN01 quest on sound switches/sizzle pic BRNSCN05 tics 0 - -// The animated doors from Strife - -animateddoor SIGLDR01 - opensound DoorOpenLargeMetal - closesound DoorCloseLargeMetal - pic SIGLDR01 - pic SIGLDR02 - pic SIGLDR03 - pic SIGLDR04 - pic SIGLDR05 - pic SIGLDR06 - pic SIGLDR07 - pic SIGLDR08 - -animateddoor DORSTN01 - opensound DoorOpenStone - closesound DoorCloseStone - pic DORSTN01 - pic DORSTN02 - pic DORSTN03 - pic DORSTN04 - pic DORSTN05 - pic DORSTN06 - pic DORSTN07 - pic DORSTN08 - -animateddoor DORQTR01 - opensound DoorOpenAirlock - closesound DoorCloseAirlock - pic DORQTR01 - pic DORQTR02 - pic DORQTR03 - pic DORQTR04 - pic DORQTR05 - pic DORQTR06 - pic DORQTR07 - pic DORQTR08 - -animateddoor DORCRG01 - opensound DoorOpenSmallMetal - closesound DoorCloseSmallMetal - pic DORCRG01 - pic DORCRG02 - pic DORCRG03 - pic DORCRG04 - pic DORCRG05 - pic DORCRG06 - pic DORCRG07 - pic DORCRG08 - -animateddoor DORCHN01 - opensound DoorOpenChain - closesound DoorCloseChain - pic DORCHN01 - pic DORCHN02 - pic DORCHN03 - pic DORCHN04 - pic DORCHN05 - pic DORCHN06 - pic DORCHN07 - pic DORCHN08 - -animateddoor DORIRS01 - opensound DoorOpenAirlock - closesound DoorCloseAirlock - pic DORIRS01 - pic DORIRS02 - pic DORIRS03 - pic DORIRS04 - pic DORIRS05 - pic DORIRS06 - pic DORIRS07 - pic DORIRS08 - -animateddoor DORALN01 - opensound DoorOpenAirlock - closesound DoorCloseAirlock - pic DORALN01 - pic DORALN02 - pic DORALN03 - pic DORALN04 - pic DORALN05 - pic DORALN06 - pic DORALN07 - pic DORALN08 diff --git a/wadsrc/artibox.png b/wadsrc/artibox.png deleted file mode 100644 index 381c220f9b5ac5bbf331a80c5053e0ee54a1857f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 650 zcmV;50(Jd~P)XQ%5mxNCq@-vNEwi#W0NWW1$75bNn)8Z1;rP-)=xl=oz z`Ewvx$-*R#?oBMV;)R#nLDvh>x7Q%vxxZQpQw;MpY{a3+}3JHe1(ZIy`4kEJpU%n^Vl@0Ak@Q`7B?bHO&QFw~gZ9xHh4YbeJ$woy~>evf8ORDLKt*>Us*LQS;N zYG-wKp5Ql(H{&R*6Qs?nrJnFfQR|k96D|m0750vd&hg%8)HC2t!IUD|uSq3%W*Q{7 zr5-Faiwo4wONHiw*kGG1`fI#FNi>$P<aYG>&dZLi%{vx^IR? zi8n>%I8dB-)z!e zGfs}wW9&0DwgjZLdYXQuPYyo>a4Sb`+(Mwi0~OJ^E1=+$_fJqB?&7e$D{Dr;@c}5# z+>Q@j(wSd;V3t$cH~klRo!zy#u+5`Dw6dRbxwB%^6r$Gx@bJ@I-%;bvfBXf!O77jC kOKniuKRz!^cP%&F|9XLWl@PohrT_o{07*qoM6N<$g4jSaM*si- diff --git a/wadsrc/badpatch.lmp b/wadsrc/badpatch.lmp deleted file mode 100644 index 3f3224f966d6123a718539101a6a8ddbce321aac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 546 zcmZ{gxedZV5JkVSjks*FAh1XXD1jO%fieil$qC2^$dD)k(E|x35LhChi{;PQ_*jFb zH<}&)IcG>Pz#JO@JF+K7awa$OATQ#3z=ABvimb_&9LR}W$d%m5le|gT0{X;|ghV~0 z#RnUCNHG%g$3;zFkwcOKF6EdYLTDtGK`2cRQ1tcD@WO zZ<8VvqvN>mxKpg%&}#8)jG!!N!Yl(e_<9wgw$n~OgGL6K=w_wTI=8G{)@q8?YPqd! F_W@_Vr|AFy diff --git a/wadsrc/clerface.lmp b/wadsrc/clerface.lmp deleted file mode 100644 index eab608ed1bf5f2663573cc6b1c218bb1dd6e6240..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 260 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 G7XE)78R{4S diff --git a/wadsrc/crouch/plyca1.lmp b/wadsrc/crouch/plyca1.lmp deleted file mode 100644 index 50c9756195a9360111c6e8af4169f95ba7a689f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 923 zcmX|=!EVz)5QZm7p^&N|Au14|?VV!|sX|v#mBhkWc>;u}L}?P-dV6qin%FLF;#$3x zo1NWkEUw&m08Tss;vEn#z&ZSzR2}J)teM|4v)HTVvGgMZ*jfv5`J01nQ~hZ`PYMzw>}jdqY;K?2LC`vL-`nv~8c%staITF8gG@|0ZfG98HHZnw+1g&kT!5c*+w zAH`?nT?!!v?RMM2n~7z${J{5hRhLUNM3rM@9Xv^r)-ceqtmmIoEaG&`9h@8js|5kx zy%pp(DT-3twzYynt+0}0Szor$ijm#z9NrAEEC>>8z6iYpZPCT#!ah7W^xJLQcDP}h z7_(>+glZw#q|tO_zu!NIY&*1V%YY&Yg0l>ph)g%pipbu7doYS39&%o1mVu9OmMJL~ zHw494#=6IsC^`vwz0M3H@PhyXnH6z|xf03vW9LJsb0tq~UawY|A(T|vnp$+oZBdj8 z+wM*#AtqGIs0R>8lxI@PBbw)NT9Kxsb2U@EUanNwG?*wzV0l-yejbrM<+OO@%2KA}2D6ZhN?& z`h!MoX+Y<-5;Gy?bgD$G_b5Ep-tz{vUAC~SQxus}Q!1^{Ob8sM0CU1|1IC!Pcvghh hR@SN4>kmz4FkF(UGezoor@sCVOcN$wh3&)T^MCwOM%VxV diff --git a/wadsrc/crouch/plyca2a8.lmp b/wadsrc/crouch/plyca2a8.lmp deleted file mode 100644 index 490a6aba31a6fb152f0923a802f5c4066995711d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1216 zcmY+D&2QXP6vc0nndvxU!Gb3J2($}!uwd0ikX2V|Qp+7F5)y1tQ~Vm3@mLvT#b1%e zb|!9Gsp_Wk^Ru5vNQi#`cC4uAqD$5+0kP!|KpM{Tgs8RVC(pa*oO}JO=a1+nZPFI~ zL_|M>m*6${4g3!N0{?)2!TJi(Rq!#m4L$>pz!ZE3eg%I6ZI$Q~@Hq&81iyekL1&HV zL$CuFI0Zj|SKtq@(jmG5J_TO@2b_Wz;Ct{RSYIXArN!GfZ4E_K`(1T^`=8cZ)*x$_ zh_Uf_G_YuKNkf^j-gwj-V71<^+_7bKyR_)FL$p3I*L8NR0@*i9ySrB5w53y*;6fv7 z*Hop>yEJ<|%g&y;%-J!Ey{>7}V)Z=~o#F8D*)xaTGcA<6h7wjTQ=X030n45|9kP+J zx3^amkm&t2dR{iPpba`X%MNU2C;5}%XuOSBQCPY`TOH!5s4pxJAJ}e8lW&I(E#qktw8*RV}~aBAHclZ0ZK3Fb$_^nrnA;HLNKcQC0XQJmcq{Jj;@4 zn&+CPx1K>IYpy(^6yn?yrzf*n{pG&2E* zDa(r2m7LFoQ&q66U8gW@4fee(8|=!t!~kq841*|cbsupp44IQ<+>}}aQN}?KhONFu zzNh4UoCVGYgC-2ZD2l@%h%OA1qa)wn-!}voxX>Aja>2KpFoEtfX6TSPSJ^o7|DSLj z6MXMme}oqSgJG!2Q4GD!cdn7=O(uS%Z{OO+>umcj|9PHrA;wE2L{Q bUoLrxUNv&|6~X~RXLfei-1r-i=s&=b16(<9MXI>;1m-(-Q?(;~cIUnCdvD&(zK`fCZO}SB zCZZ?cKag7@x(rsqI(P?M10RAKXn>nw7u*B)!S~=N@Cf`4{sAv%h~5WZf_oqWkHDWG zlSN%{9oz&Ra3A~#eg?mRzd>o4=v}Z0w!sld!7t!f@CWz{JO=-QQjVw$u7dZ#2cQnV z0Jp$OhW6Vud+ya)SkJw(wB0f0GHu&WH@0mrJkK_5+iudVl&3a!`5euP1#G)pcGK*a zs7)(*>TESyxfkuGu?rc*nt=UAquDWzB6Yh5`?*E~$H17hzwLHvpSEZtL-B2z8&g&xlgmqOB5dLVtx0+Ij?QCjBqUXXhyG4FcIHu-}*{C=pJ~M)uQ!f zk{6md_JwU9g{Pf1uhtuLO#~>2JmCx9_k)u&d+$coT4++@%I2CMJ{X5558FGRR8aHP z0%@!?j_J)D$wX?jih&YiRG6GSJm}h0#Cb~TBvv{-m_{m!7BL9%{qTIZyJLM^wOX77 zs3c{SXnh=+k6U`11X?*cZF}DJT6MGKIDw8LsdSv^ql=KS5aRUA^LBh$+iY@2Y8eF) zj?*Gi=885b6ca@7s_#cu%XQ;KX^9#sh!K%pqtkxBzgI_qNSll&NJg`%xy>{+HLef> zdIPtHkR#a~I?QD{PNA$)?{2T(cdM0}QJCX!=FRjlC{AKFhxzp>p zl}hz9t#7*yV~%SQ%Jg+_QOL5II(8U$SZN{j`-8!NS1kxEMSX{lAY{v=`iFIdO>wz}*U^*X z33+Ia@;sA?3&yRWaA}1g31^4{T`FIqdGn5x&JofCL^wAJCM7^VgglKE{?*fMXhsoUjI{_QeswudG6+-zy<9Y7 ouP}z1W~-Md!3@eMQc6XzFH+N)0~s;kV*mgE diff --git a/wadsrc/crouch/plyca4a6.lmp b/wadsrc/crouch/plyca4a6.lmp deleted file mode 100644 index bfed66a0e18835670bcfd1ca770adf25492886e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1129 zcmXw%J8u**6ov2RogiK!Q4$469SVK{kVGS8l|}FmkPt#CvO9y6%*$g3&5ZL}cBO5Q z@Y*wzmLfEi)X>l%Y9wkz4Gqn5yqj40Hnz{X_Pw6FMyqs_R_L6FK7vo+Gx!F6fM4Jr zxK<-t16$xFXoC;nJNOHh$A}()=RknB;2eAfzrox%(LK-ryWkCY559n(;18e)_`p0^ z1^2-t@Dw})vo-Q)Ff&e`Xa7%5O)NYWJ@~GGCZEtL( z84hXC$^>bhL&OtiGS8BP@hu0(K~+OlDXT6~mgOuALtcNlzM1t)musa=RaMqxbYV@a zFr}gI2b`~OZ7Y4|GNVkXwKiv^QToyYi@(n}cj|T5b(vCyQc4?RwCayMGTYz7h}p=) zS#FA4TMvFNJV!&%K0NjqAviaM!Ywet(?q>@DGT>;7c98PW!6&a0* z+v-Txs@z2|WMs@E&ILpKNJplS+iel?M7+jXI`8X>kMxK^4iF#_!NtJ=R;e4+JvFq|(q)EzS>phKiu4%uj+Kj>F?D%~ero=;O;2;w4$smJ%<9k~uq0 z(P@y;ze`Yk6f0#Mg(wI~q@!3GOwK~AJFaM>kojqXB9%eZ^b|P`+C$mh!z?{QH_-rd zCDUA6$HFA3Oxj({x`%yjpifcvB$ualI!E1Od3fAGf7#^~Iyu$dq9}~(UaY&j%@#g? WtBH diff --git a/wadsrc/crouch/plyca5.lmp b/wadsrc/crouch/plyca5.lmp deleted file mode 100644 index 433881092e18bd7cf8d29fce728fa7f85d783625..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 802 zcmYk4yKWOf6o!wJ5P`y_L*!z}bI=4twYkvKBGK5G!aLWUSu2~h*G`06vYzo|dmey- zm!P5J1$Y1|gk=6%l87UH#qRm$oS8GTP5ZP(d-R@&B$$9p@D=<3e?YfGbO7Fh3HS`Y zfnVUs8qss`1}Ja|zJTxGC-@Dv)`@n(-A#IZc<6ng)t!4Jq_RiHKHzKP0SU&19t|4r zj4`xYe@v1y3B}eI8Gcz~>JY91?QYPObA2d##5os2>X8p7GuB$OaJ5547h(?xnhVZR zW8Rj4;UGBgYgaG-3CQ!zp3gPb=TTVHwfDZPOGm4g>->RR%wO!U+O%gvKXerVQM~%v1ucf zl89c2`-u&4ur5ueQ-MM{pB+hUBt|W`{5W1FHTJ z+#O=+kZGOejZ{Xam=Tjz5wjTWdQ78uM~`MkTE%(Fxzt5jyQRNLGjn|MuByD&61Tvm zxJ_?kHDl)GagtP3({S{`HR0;o#g9la&h?9fBuO-;tlKAs9{K>0B;Gf8g7-;Dlelp6 WCO5Z8+gC0eoivO1ejct-fcF=q6DKWyymurxldH|tGWJldkm{*YBFhvTEytjU@-Es9Ub?|VV5TCHW(gM)52 zifFO=lzh+g!iMX*iXAf3wC#xF{WI!&o{zU!=CNrSwjD;C>(F!Z{F^io=iP4CbuIK^ zM^VH>&L1OMCjUkV5wzRw9`;Tw%Z|b*40Tw?cWH>Qi^lbGCzFXi9AZB*AQiMYz0eHu+i&WDrJ*m1bySO$~{TDh9T5_6qKE3tF({&W<_E_dBJ zvkZ>IxSA^|^6P>!mWj^tHI6U1Tdy<2;5d{BhMbphqlI0P$*0c8PUlWuIBvaKVFu3y zsq!3!GR3KIoNktJ6saCS5K5}~#xjmmi$$7_zNndU>j#wz;}PO|_e@H8Mhh6jScrI( z%1rOqMy8<1OeLvMx#4?$lDcQ-=@o-Nx#+9!Wo7jOlTo vm$;ZKHKlTqWRRB^% diff --git a/wadsrc/crouch/plycb2b8.lmp b/wadsrc/crouch/plycb2b8.lmp deleted file mode 100644 index 617bdcb411a12318a432f7ebc5c7a5d1bb473310..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1228 zcmY+CJ8aWX6oyY9N#i0A1GLZwkDUPti6N4O5l}1>sS_|F3b_>Wuo`65v0W*)6HJR# zAr{}*zK#%LXJi90AQnbu1RG*y5C3&49#%d%=luVFuJ6@7M`vh}R_HAey#pV?XYd7l z1wX(qKvP6Vz$!Qou7F#h0s7!I_ym4}!_!0;z-{0F0p5e}U}}cwEVv9dKnPxe58xXZ zgVkB0D!2(uFaR&WOYjD~1M|~lnl%3ZrOcp-ZlxsO|Nm3UlOAMcju>mVn>B;Ra|+sw zmD|m74b^;6nQg-;m1tZp7Evn1OtW>(h>`ubwYFx&t)lhBB)BlhSkq-|_9zXW4#M4i zleMnt@p?(uX*_)l%~qrFba%hSuImQcB~1!b$0-V%Y?Fn1&l;?$t*@`gF(g`VCA>Xtt|}#j&Akv^+~ZNU}ecdw1)RzuT4;4J*W2VF`UMU^$K{z0JFK zSUtpdw5zJ7mkdLfLwrAxjz#jL9@b%D5SbH)ZX`koI$5TE;s=H6H1&JE#sgOG1?`qz z%+W<6(o8(!i9bk3*wQHq;A!-NAX2WXa;ZE|(iA_Rhy1`2g`wXIqDWEH!cr3%mzHFh zBnK8R=nn?b!@8nezNBJ`J`}JBk#dn_IO*wC>IT8!J`9c?CNSv3lxL|JjgnTH!ZEW% zPEhFe>tR@16C+H=mK>++dXSgNMp$ti)(S(e3k90+y4`|Do)aoZP$Zb#39?APRDXp^&;|GF?J$*GJUd;J1*j?l;z`kc`n4x zM76fIwk%hJrrp?yZ#Z4glScrxbb{;y6`JR{NbckUSzOBUf)uUoZQ1l7x?Y-LDx|qX zkSw^Nm^m$!33sDVDixe|-F2}+S}dWR1$w&~QlOg?Y+`DFPYBO-epQJcG9= S^Nc4PNm(M9XPHRz5sKf;&#F}b diff --git a/wadsrc/crouch/plycb3b7.lmp b/wadsrc/crouch/plycb3b7.lmp deleted file mode 100644 index 27a64e2a03058bd25a8631ef075aa7c979a9364a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1386 zcmY+C&u<$=6vtnj*v^k4q}mutXaR{E;)<%K#zd>8#j@ds1QHiQLN;z}THC}kvuie! z^^!&*98k#2&hGla9U<`-Ai;qP{{Rvvq+U57A#uR{j-6IzrH^;s`+n!W@$9=nFVj_8 zrN4;iAMhW@&k1vm#kfM3C%fEI|Zft%n%FaT%ZNAMH)4g3xsg1-UfiB>=byaHYa z*TEg|0a(t_Zi^;Qz1p+rsns_mD2pefx;&+J;i5$v9`8wU?-S?_Rg- zt*uqxG3G88j4#ddpLJ(t9H(It!I>D^d>LK){l2I=$n%V&>Cg)EWzxOH-|tT9-{m?jHP zRNLJX(~?&7e5iS=>OQQ(6Jo%JL(bUXv08u%(f8G0zz4z~LW9V-KgM+zU%;7|FV((n z<@muOu38{K7YADDhzcDy}U>mUX8gl kG%2l6ijh-sthJ62U!qKnMmmY{m}Hj7GLxoBf)PaG5mX%AM*si- diff --git a/wadsrc/crouch/plycb4b6.lmp b/wadsrc/crouch/plycb4b6.lmp deleted file mode 100644 index abf3129db9b9cf33fa1d4ef60c6f6437ef3a8582..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1138 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 diff --git a/wadsrc/crouch/plycc4c6.lmp b/wadsrc/crouch/plycc4c6.lmp deleted file mode 100644 index f398ae839361b481e822fe5f7415ae0f6f45b135..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1131 zcmYL{O=}b}7{{OO_RTkZsnmBxkAmPAkhToCSP}dNibxT6XM}b#lT1>bnY7iiD|<9e zW~N`EUIZ_my{l(WUc|HD#r2~rNA$S35@E&{y-@#8XHBEFB zEP|`xCRhgd!2@upMG=kW+Z09qe}+BX_a zAEQU`tj^T6K>*gN<5;KP?+@PuIoiKie>fcU2X|Li@*;QeU2K!>KBZCX1Zl0ehlAmr z<>kD%GNmgsI@?8id#vzlrrHV zhe4`IoW)6!asizy#sA0G*BQf%G!@9%uXPCivn1Gh%+eIUNnA*!GCT*K8A&qa=p`9q zj>zyqrjVhY_bSqZxVx)Tui_C?DV6Y(&m()N3<0e~CNuRsWwzY2jhx7sD6q85wZIZ; zbCa>$xXLwhJUfX6&Hy7-Wkz^Ti%O~?_G&f5@fPyfzFh>Y$<1hjJts>t>Esgs| z=cV=W(=%iW?W5=ow)U)pK1+j_rGDkRhiR~*w|4rdEPr07>2(zp(>Pig&>k1K)b-wvzYlFzqUVnj}B;?TJ)BPBsd2j!58oy{093qqC@Z+ya%7a zSMU?;Y!E#KuRsr6g3sU^_yK-_tvXQ?Y;DrZqa*JFt?t|;4hhDE9`-8l zj4`yTKP1VSgksCf0e)Fy$`GytwHkEoTo=k?;+zX1_0W4L)>^Z0r9+|%aSaHX3(k=- zUq`@j5S;g=E0=!-)cL^9<`(m_C@jj-dta1=qt(VfO?6x(>rF0oG_ov4EJ6sSj}f&e zG%gfpjAgxIK7cTUT*DP+32r?UOf?nb(T*luMl#rCXv? z>ndaBc{@oa7gZ&3FH+oAo1_@$`q^QUB-&RM!@UVyWt`gBC4}iij3n{C(s+OONlBBq ZaPuHHw@KR6DKWyymurxldH|tGWJldkm{*YBFhvTEytjU@-Es9Ub?|VV5TCHW(gM)52 zifFO=lzh+g!iMX*iXAf3wC#xF{WI!&o{zU!=CNrSwjD;C>(F!Z{F^io=iP4CbuIK^ zM^VH>&L1OMCjUkV5wzRw9`;Tw%Z|b*40Tw?cWH>Qi^lbGCzFXi9AZB*AQiMYz0eHu+i&WDrJ*m1bySO$~{TDh9T5_6qKE3tF({&W<_E_dBJ zvkZ>IxSA^|^6P>!mWj^tHI6U1Tdy<2;5d{BhMbphqlI0P$*0c8PUlWuIBvaKVFu3y zsq!3!GR3KIoNktJ6saCS5K5}~#xjmmi$$7_zNndU>j#wz;}PO|_e@H8Mhh6jScrI( z%1rOqMy8<1OeLvMx#4?$lDcQ-=@o-Nx#+9!Wo7jOlTo vm$;ZKHKlTqWRRB^% diff --git a/wadsrc/crouch/plycd2d8.lmp b/wadsrc/crouch/plycd2d8.lmp deleted file mode 100644 index 617bdcb411a12318a432f7ebc5c7a5d1bb473310..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1228 zcmY+CJ8aWX6oyY9N#i0A1GLZwkDUPti6N4O5l}1>sS_|F3b_>Wuo`65v0W*)6HJR# zAr{}*zK#%LXJi90AQnbu1RG*y5C3&49#%d%=luVFuJ6@7M`vh}R_HAey#pV?XYd7l z1wX(qKvP6Vz$!Qou7F#h0s7!I_ym4}!_!0;z-{0F0p5e}U}}cwEVv9dKnPxe58xXZ zgVkB0D!2(uFaR&WOYjD~1M|~lnl%3ZrOcp-ZlxsO|Nm3UlOAMcju>mVn>B;Ra|+sw zmD|m74b^;6nQg-;m1tZp7Evn1OtW>(h>`ubwYFx&t)lhBB)BlhSkq-|_9zXW4#M4i zleMnt@p?(uX*_)l%~qrFba%hSuImQcB~1!b$0-V%Y?Fn1&l;?$t*@`gF(g`VCA>Xtt|}#j&Akv^+~ZNU}ecdw1)RzuT4;4J*W2VF`UMU^$K{z0JFK zSUtpdw5zJ7mkdLfLwrAxjz#jL9@b%D5SbH)ZX`koI$5TE;s=H6H1&JE#sgOG1?`qz z%+W<6(o8(!i9bk3*wQHq;A!-NAX2WXa;ZE|(iA_Rhy1`2g`wXIqDWEH!cr3%mzHFh zBnK8R=nn?b!@8nezNBJ`J`}JBk#dn_IO*wC>IT8!J`9c?CNSv3lxL|JjgnTH!ZEW% zPEhFe>tR@16C+H=mK>++dXSgNMp$ti)(S(e3k90+y4`|Do)aoZP$Zb#39?APRDXp^&;|GF?J$*GJUd;J1*j?l;z`kc`n4x zM76fIwk%hJrrp?yZ#Z4glScrxbb{;y6`JR{NbckUSzOBUf)uUoZQ1l7x?Y-LDx|qX zkSw^Nm^m$!33sDVDixe|-F2}+S}dWR1$w&~QlOg?Y+`DFPYBO-epQJcG9= S^Nc4PNm(M9XPHRz5sKf;&#F}b diff --git a/wadsrc/crouch/plycd3d7.lmp b/wadsrc/crouch/plycd3d7.lmp deleted file mode 100644 index 27a64e2a03058bd25a8631ef075aa7c979a9364a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1386 zcmY+C&u<$=6vtnj*v^k4q}mutXaR{E;)<%K#zd>8#j@ds1QHiQLN;z}THC}kvuie! z^^!&*98k#2&hGla9U<`-Ai;qP{{Rvvq+U57A#uR{j-6IzrH^;s`+n!W@$9=nFVj_8 zrN4;iAMhW@&k1vm#kfM3C%fEI|Zft%n%FaT%ZNAMH)4g3xsg1-UfiB>=byaHYa z*TEg|0a(t_Zi^;Qz1p+rsns_mD2pefx;&+J;i5$v9`8wU?-S?_Rg- zt*uqxG3G88j4#ddpLJ(t9H(It!I>D^d>LK){l2I=$n%V&>Cg)EWzxOH-|tT9-{m?jHP zRNLJX(~?&7e5iS=>OQQ(6Jo%JL(bUXv08u%(f8G0zz4z~LW9V-KgM+zU%;7|FV((n z<@muOu38{K7YADDhzcDy}U>mUX8gl kG%2l6ijh-sthJ62U!qKnMmmY{m}Hj7GLxoBf)PaG5mX%AM*si- diff --git a/wadsrc/crouch/plycd4d6.lmp b/wadsrc/crouch/plycd4d6.lmp deleted file mode 100644 index abf3129db9b9cf33fa1d4ef60c6f6437ef3a8582..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1138 zcmX|>+LLNcLz{%mt3eE zW_Fj(*x6XwnAjPu^$#$178+}Fe&cQ7+XbRFCWAvgf9z&r36`~tJ%L^r@a&;bYFHTVd=fuG-PJ-Ztu?OYL;il`WmN6O1azb_1ACT z&T_2Yprvurt;aN=GnC6BPZAbu4z_`)XmNtHF8-={!C@GR=B<_0{IGJxP*uvR3zX+s z==*^XD{JdYAGum7Q`fci7+qS=C3s-*w^#_L*>qjkC{t;z%~55P9$93*)xn5)WMQRB zrIa?tXmvQU><%qku-Hum7p5$~9O9-zm{Q>cSm0<49c(KJVuqeP zv5rcYFjTdvjdh%-i2Wc4nC~WWyqz%DwW-Ros_EhwRd|xdJVg<{M;Hqs!r0|F7OAdq z9=P$V(_6Y7hw_Qx;Z^@vxYtY?m()Rx-90ndB%DN%|DW z>*7$?Vx)&Yqj=~U`z+G!ZS0mQQ<_@PV0@86d_0c!rDQ*Gw^P)fOQj*>{u37<`zTh* zI7)&bj>Ek?D^yu(sFMp&n~t0AqXK*a!Fw5c5h4wy=E!mI;3^4m5fq<|meJtc6k#Hj zfeZ0Yp6#M_hOv@ap>2L{l2k5j7Ey2KP#fsSsQ0Xp&uw^udV6wbuZwQ7)06bzVWRPR8qxCBe8KcN_or@mm$qq@Ht7u!NpK22fREq{_zspAh@OHTI0SFO zC-4>g0^JtTGw=#zpa!48H}Dg57Kt8!a-TToLP$OKS2(f8R3Tgi+Gx|2a|dudBFzQo$a$Y-##(D?S2>h- zAvTOUWS-gcUWNh)2i!OVlBR%EuD4MU#`FR4L=;pnR9vd<>8C^(+J!e6&2I$#GFA#<)Ew&eg3YG#=VL zXh%g%M~5?wWPG&Vq2?yw*p3c9O4AgM3zLr#aT|ld@HQ~#6Do^QIvSHM|U`h%Md9AFGN=d{Z#9?B$o1L!#_OzOPgz?@_PY^&lejLtWQQ6(dww>0R$89*A?x zvRv1|c>n9(jSyncZnqtjhz!FVAzcl&tUrY8Vj~r96h-;aD}B90p$OxN>kuiEVJd@a zKjNt>uvVfVh;7?e4&usTL{WN`!6UMzVQgES(`66CfF7AwSt>>TUa3si$+dlYeCoH` zw(Yo@uIEi)kXaFLo=P;Hj_tQc$AN8g+cq>9B8-@Ar;8H1Fa-9|>*H|{xZHIc%+S;d z2&C`QM20H;V-Q?$x6xqQUv+JlWcaRg(&^mF3)^kfs%#}97itg-+qRN~qi(J8kGlSl z0ujgK59us*8b*3?V9-Z?<%!HKFX)3}H lGZc!{^Dce$v*`JS^-V2jNy{46{dOB*EAqd$>|UQqx5 diff --git a/wadsrc/crouch/plyce2e8.lmp b/wadsrc/crouch/plyce2e8.lmp deleted file mode 100644 index fe6f2af027a45b908cd699a68d3c6df530e8b1d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1198 zcmY+DO^eh>7{?#Gr)MVPMM1~+m&3y17f=`oM$j?DhJpP8;;gBirMuHkOVdeJ8ak8N{o%^&sAMZ=SvFvf$AV;MHya)gz(>Kf3e$f6r4%b@~cjrc-pDUJ=os z;4SzIyaVsSf8Znd1R6((j)R}THQ<4}AOz3BYw!Co%ZSVm60p5Ur!Dn!(Npu5j z0tsG%zrhFaKRCC5`QR52fIaX6tTd?Kr`eAmRue^3ms{rZ$8Xl+VGXghM2rPNx9!nv z$wHa2#h|;`#?{LFsvme>t3|WL`6kvfv3|dI%bTM2`_lTlH|@UulopOr z_BfNfPy4KQ%bjktT$g5z6DamNoyWURd+fIBq1(4d zGg_scUAg5mKgstx-Czy=bn4j-ooy25{G0LXJwH!&17kRtJars8y+osE6!E%-brN$X zTlelVU*Z;mHQRApp6Al)3WeclG>W2U`^LLWNj|}TOs0AN&~v@IuAz*=NTy{qmv$zT z&Tq`0q(RS}4|Cy!m=s2}ObU%>x!xistd&x=R&`j{Nm3prfQ!cCDerN*^4QJ*A9sp27hRD%{+3%A&+FhSr+%TEsZtLjecHm}4U@iW;eoacpKm zIEOvL;lr?to3~pdB7z*3IihjgV zBw~RrzDoxJ-8Ry(K&yz6Y14ZeTW@b~4~2uwxic16sxp&l);jeqL}U`qRb}Sl{a-cN za5Umvj6uYsSXGtTamlm|;UXF1IfNK1U6)$z<4=mr_l3Y6&R1ORD~v=V&5kt*H9B#W V@Z42V7G@sJR+n*IRd|PR@dXMSt0DjZ diff --git a/wadsrc/crouch/plyce3e7.lmp b/wadsrc/crouch/plyce3e7.lmp deleted file mode 100644 index fdabde08259e4cfcfd9444822e861fbb84115b03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1410 zcmY+C!EYNy6vkg{ukEA}5+qGZlfa>H?Uf>9jM+8?%dU{PBSe}i8^<=OZPmN8Yn;jM zDz)5jK%p}`yKD6yK>P(r+_-b(!~uyL2L!jud}F6jR{Ck@&G)_cW_I5#dXsi&i+(4f zKfvGMImj&$T>)!g8@vr}f_K1&;2!u4w82+k0wnkj`~-djxeU=;;5M+p6YxFw8T9o#LOHRFZOeO+7YqwsMMo;_{ue^4?TEyGyk z3xSVHo5TZTkI$dBI#wBaL*Yr|n64Wn5}|N(%o#i=bMc_FZ@yPH8=jOZiKR+g(?~`U zJWFp7N2jw%)AQc1l2-DGPh)Q zDCA=}Sa~#x%m%ZC5|JOFnc|T|k?b~2dcEF36$YNxT{ljo5~z@Z7>3LyLGSk63LGb* z?yv;OIBKdtc$#Xmk*BVSweb0uIne zt}`5Zs4+JT<~61;T-#xu=g>xx0wKacC77nw z0^!DJ=jwePN^Azr0a1c8hrJStvnq^U}hIL54D;~#L_;X?ob diff --git a/wadsrc/crouch/plyce4e6.lmp b/wadsrc/crouch/plyce4e6.lmp deleted file mode 100644 index 43bf1ceb85019706336c9fec31c349796a6b0c70..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1129 zcmYL{yKWOf6o!vuI~O8|B4Lz^LpmCG0~96EO0nXIC!pX`q=>zXWbbV}YiZY;n`KKb z8PCjapn#GZ(NNIP@dD{6c>)SB|JVUW{_NfTzd2`TJP&A_R%w&o5Yc<^0el2sz&G$6 z`~n*Vq8;!I^uRmt75o4zb3~880eB8NU<^KiYw#Ov7m4=33y^@f;4`=eKf!8=s0to} z$KVJ&1xp2TXtG!&$1%TUa*mx^4OjDY+;p5;9hVDq>@+RQvT?mgPSeTEpv@x5#tBVI zx9KI+dO6Dkp4VxkL{j#U%&nm8U@#cHwqgvEt(Qp(abm&>4MwBkV0g5@A1ATO>O!bI z&yAv_HcDZO(lk9A4M&H2dvSv5b)_;XrMk+LkTB>zC223|bQnLd&;*LmS_mPPQc{d> zl%&Ue-{-ZR-Th>o*-Go4Gzz}{DY5Um9_PCUheBQ%MW6*7D2-X81cuvYoLjY;ZQCl# zq=u2@Dpy8Xr!;A|FhVv{qMUP{X`SU%oudrV3 zGR_%~_%varxfe1#@4UK6qG=K^*YiBao^-;n8+I7O9FuHN5Mb4Qi1L1Dhb%;0wCiBE z5LYSiT;C5u1}((nS`Y#!?Zd zLSc4k4XKMwOVbb~%v64w#Ai5zG%4RfShMV?Z|WnW$~=iQ?ny|UMe$iyG+CL^z?l2|Ni2#*=X8!?4W*UFd8;hZ Mu%Vksb&)2203X(}T>t<8 diff --git a/wadsrc/crouch/plyce5.lmp b/wadsrc/crouch/plyce5.lmp deleted file mode 100644 index d22c10836a03087a59c82df867ae39afecf37280..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 847 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 OyQt@W^A0x1LH8e&%3AXP diff --git a/wadsrc/crouch/plycg1.lmp b/wadsrc/crouch/plycg1.lmp deleted file mode 100644 index ec71a6bd6feae32d36cc0d72481d7f5b11e24a62..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 991 zcmZ9L&2G~`6oqe_go;#%MHi?vfgNI7V!wIy5<>Jz;mE*#-S?emA;M7nfo(yU8m>tm=0)0MAskzU%?Id3I2fk7Ev3# z19R{N+<@PpvQ6{?^uT*C2P^O$`~sB{(Mw=}Q}7vl13y4@hjc`iS82VoOZ-h&({v$h z+ott{N96k5cAF*Pai`bm(YmrnpT<+xY#uINzhXVsGdY6RG zKI1;;4{2R`O73Vh^1F`XWbBaXx@r2R?<-Zw2Q(gyT!;w$Sl2aE#S9q=eY-}GuM$t3 zS(fEE2Ku{iaNR2*gxBx)Z6t{e!<-?3YE4x@hUpZ#gQ0BOv7I=Mi@yIeL?TKSxMt`m zVJd^_V8%0*VXH=A7)Hb4ox_OZ>>`IpMG8RY#SYA(VPhrc(qeJX1U1Mu~HJmMoB;X%;+E zVziZ%^42n*OgzpFwOp*%GYgB9X%;0S!$a1wW#f+%uY0uFNc*j-B!x&s7)27xR8xEC zdhH`t?66%GS+8fG-F9Oy3hlOvAH|zDFBT~TBib6`LOpr#SZqZ0BXniiWF`yQOyhPd z6mOemGTA>s!GlM^lUEOV@FsZo>OnzRf3vm4frn(~_q^{UvzzO*O3QSK-Vo6{@E&{w zpTJk}9sB^lz}y+4C2$Sg02X)zJTL^W!DsLrT$v%d3!Z|P;4Sz9eu8R==oWYkLZHA0 z@D2O{7iNiWf`_01_Q4p;&yeTQWWI!pzRv3F|2LJBl}dRUAv5NV?{HhGkmtIsR-@*i z*uc7rX=AR2*;#G5UdwUHWfWD&^}ObWGty-+G27g9MopT`Ezk?StLtpqdR{tDNfIYw zc<8y!4STdzwr!fsEK(wpdc7`Q9=i8!2g_wk2WOUOAfhOmCWj4cYinyXLPQg)(%ukJ zjOgItu(b|Z~c8a2a()9xoXZcjxi?mda;#Sk1HnZXQ z=;Q~5=%)(rbd_TLMo}COjC-cuu#i#~N)~=m^!wSdGZ3O5#e;!im{X@F(ZHcral-nOzd!_bOSim`%+IACpb+7Nu#wM^t`S|C;-4o(jkmtb`K&U3$k z6M+$`kOu(|Ikq{8k+$0$ z^(NvTM==i(Dpb#|VE^6S-43^qSr2*~L*}|SP0GusAtIeHCUe~wA3;@Too<&g-U9&( zLYe1!%XwYafs3Svcj3GzRgo!qgf9u%&JO2z#OVn0BZ-zMq{+DwVT~3S2=AV!S*rWd Nq*}o|&+%8nxOOZll9EV5L>?*7 zG|4!Q;VyM@$0MmFYx^Avbm-Vm&?!U5qC?S5eNM7al)w*n?>+CoBVXR7TeMAO`h$r6 z1pfe9BPxQ+;2O9EJ_VnFyTAnBfN#M7Fz^EW0Dc6&f_EU7Bl-l~1CPKf@DunA`~^1i z$Oj&R9(V!Xf?vQppsf?#20P#ph`?L$Gx#0+4RRX#1Z8j=+yNC(2M@t67=c2bI-M@f zS8Gw(eVVVX z>y4K7f4iyd5_~(2Mzg=%_c~gm(bo}Ir0(~Fe)X#sjQsl)1nu_z@yWSf+xc48X*);B zW18nKlfO{*U!SvTy#?iFo&@jEeC-1|@%^Cv-Tuo#&o#{p?T8;h`;d-2zui8JPWxSE z)EYVh%j?7!DqSJZ^F7ZCj?dZ$JBHcNR=OV`GxX5&qL*QG{HDA2WyNguG;JBrIo>E; zqYw_k$=RFUplv{JNjzDS&<%}v$|X9-l)(pS&i4m<=I4gla)pp-B4pN^#UhU3v-UCh z=;Qdb>$+c5jr%QT2S~(uoJx5Vt6S!_;o_g3x$d6FtM{9h705W|LMEv^TzN$P2|SqL zd9m4I7MDB@V$_m;ES5P&r=!v6pau^=YdTJn3dxZo1BrT<*9rP)ICiRVIpj^7r3go_ znR?$@rhK+&ID9r7jU1y=RX!8Tc5Inskgn43nR=K}sdFw{wq-Hfb(hNU>C@rRsZ@*y zQa(;6wrx8~LCGh>WjfPr%EYm3+j0;@xOEx*jK^bUn9%IZvYBOSgU2G#Yh&aVe`w_=?-qeW) vfrz1R773FoFolxlSKgx(Q_AC52ob~Hpp1v1NMbxPSsrAWOw%O6z~SIuvd-Wr diff --git a/wadsrc/crouch/plycg4g6.lmp b/wadsrc/crouch/plycg4g6.lmp deleted file mode 100644 index 0f00e4a86e8d8bee3fe0c2a9c731dcfd2bc794a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1133 zcmYL|PjAyO7{=eO?KU=P2#LbRHikHG;lL+A+X$>$5#l540z0ftklOrnok~fwe^n#( zh-*6;7bLiILDv#SuSb8GI&(DwjI?f~7qFc01ABgBP^ac6`{e*r& zmr%Jxv;{qb-ax0&C+G)s3Ei9{dJMgQ4j=}Np|8+yh{{9{q36(B=mh!*eTV))f1z51 z=mGQu+J;_32T-*_4jN6W^V5#$&M%nmp;NEZWC8udmgCeLG+A7rL#Jg~mW}=*IV~qQ zjn>N~n@3=mFt3{D0)q{@S0O3;7%s2SXgC}?@2wckSZh_1LL9-HtI=>Y%7)p?-Q75e zRo)On6-8kXCAC3Ho0O*M$tWA`@9e}0!W&BEQc87^Drc0LlW}eUG<; zRh~-?ATLy*46#Z{r;Qe}84(qn^IYq^pp7}oacrf##0=5_VlpB$FdP+6N;UHR4pxAN zba=Yk+W$$p4@KeR&@A{gs+ zaZ>O%;d`zRo`DN7KJz&ufPlD9ENHhq4;ewgu;?tI$GG4;VhF*v3B0!JA?cdH=|sJr z)>;;PMljFA)(yaIWUwwa(Zl!AS{0_aO=8S5H2@e4B5>D)0D*&<+n@j;060%0<_FUf zO$0Ke0oDnV%@RCL8HxshB{XgefT{1hrcC%Tb7y{}MckkHYDSSHKDE(IpTxl^Ge zHIsm3$79?qn%rKZ?5v-jE7S10OxbCAd^-I9esK0sGrpZ5dc(QK* diff --git a/wadsrc/crouch/plycg5.lmp b/wadsrc/crouch/plycg5.lmp deleted file mode 100644 index 214a160a23d568cf98a39f7cbd19b2a4fa70a646..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 829 zcmYL{Pma?t6vkg?It+irfP@eT29Q{>gcA&iRfYkHLm(mAvS{r1UtFmqlNN~sq;~AA z*>D3cz=|udXTu4~=X4O3ev0LM{@(L@?=C%}YjmI96HyLU;4An6euJYC(NpjiaIgX2 z!7p&INAv__-~;#qzJZ_M54gEc^cXw?hnMKh>8baDw&NRA2wA>5^C4(0jWM*{zfA?> zg<8yd?_{ZQ*oF`T-5XPMZbI9=V-lPRTrAsKF0|36w61k9aUt1`9zei(Q3$nw2Nq0> zZJqPJb!|5&6a<{ZW3BO#*qE|yz4ujHxeEmZT$i64D3a77&L)J=`s9H$;K2(!Th*Gg zq*#>J_P!q$EbdSvIb+Pus!HeBaA_rcV*Ia5m8jYJXAZ&9GURn@x53@t_n8AGCKq!w$VmDUWFsvHzy zw)02|X3k!}YZ|Y#fsYhvT#UIAQjd=*6@-}=XIa)XeQ%6lN(e3#9)wBTJA#07_538u uGKIF$t;?9bB6U3t;&qbvdxDi^-lKryt0aZVaDe%x?ZF|b@+IzOwEYYHEJ#oQ diff --git a/wadsrc/crouch/plych0.lmp b/wadsrc/crouch/plych0.lmp deleted file mode 100644 index e29ded5a5cd3290d7b5673a70e4541f2e701bb19..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1248 zcmYL|UvJw~7>D1aZK|fF9Uw;6(2zFWqSEz(OD+h?a1$1FU!X#3n$-F4_#(4Ua%@*^ z(nZm-WL$un*l{Cq!xaK`Yy|}3cGtTCJ^*|NBxHV0B5|Temi<2G_nsX4Y*B=6QkeQg z^fmYv{03fwzrjCX*+X;(d;$)D0=@(FZO2j@627;mOZCT1!Dl$1Y7AQUtVymlx zK$zBiBuiqsTq0-LPl6!C`$8-r1jmI`u3RpXv$#Y|7w+8?;)8@Bgxpf*uppHSps^}E&KQ$ll=eq%Gd_-SqsW=vq*lB0EMH?PtE*gL z*E`ocawb#2nvn#RyV^{cT8++w%26IcjPYxQ?e6Z#?p~G+H)-0{8>Z4(qy6+Eljpq7 zYfRC8+}YiikCAs`Aj;6q5%$5eMN+nL+U!-1i@c6NrYcuIZ9zof2@-Y7v`2n&=r%nr z9-W?j(UbCdh)jQ^GPV)Prn4}0{bZz@*2wRgThtT}PS377ACz*~8KzeiWp`}@Zxy0u zoQ!OH5*eaKK9y>;F76g{YV}c-E6SC!Asilx1xeR*-L{YxqGmC3+<5uJFLz5-48|13 z_m4h5$_+Ksw(QX&qzFBh@?yL5{e^T4M{&2g<~w{S7A#wbWufDxWm)(TJ$L9yvG}~v z>PcxusWQFBICtX;=1?ElaIJye>YFw>-rLkZKWp}S7h+XW4UKc|J3^)mvk%iW`{sG8 zg;jdz>8jOkw>w?(uM<|F3$a)-md@r2eRF8^?V)A4a4L@b^2EbudTipi}kZb zsifgRtj&>$eI8PHmM%>b|9cT9My)6IV%d^hoSeHl$NipIlnOG0H#}6Qm3c}ea4SjV Jyy+$P@*m_#uG;_r diff --git a/wadsrc/crouch/plyci0.lmp b/wadsrc/crouch/plyci0.lmp deleted file mode 100644 index c1481cd9bd7e2fe1bdf0fb54d0e88517db1ea7c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1044 zcmX|<-EJF26vvN~%;u{V(1K#ujvW%BUQ`VafYjP`Tz4D#22|<=Qr4v-ODx{)?#@Q_ zN39j63F5}~%x;!jknlRmnr2YB;1#$mJOFon0l=I!Q7?Wg&H4Y&Idjg=CKTWbWZ_!? z5Xg_nE97_NFXSI&Ed{WH>>>L|8~Gmj6?u*Pjb!HlK0!W17&1hDMqVTTBAfF76=War zkROoWkUx+&2rK|xLN2FZ1n(xF>E#88w@$Z`(v;wl!1?*)9M22zgb<9ZF2Ptz44#hQ z8iAUIVT>+99lT zsS|hkLbIHEk@wrli3f%cGxUQ_O5Mnvopc$WNk)>&y~u#_U8~NP!3F_%0L0^3~4HMtt98*cP)dYR_MTuGcg5 zj2Z82Y|H4ri>p%Ts>^tYcb>~ayZ7L5Br~zxTHp9M`hOtC1P{U$n5J^jZcV;9`6`o- z;_YlU!(PdFbHM^APvtaP494=&*A)1 zMxlfM&|xePFh#Nbu-WZtYA&t!qsVY5eL@2fgsUhPp!M)kvw!`=blP~TD^J6^Lh3va z0xKU2A-hOwxuIK@MX5sAFhG+S2HgP)!!WE*)k>8K;RgJe3*q|#?mL1lF4H~<{ZZ% zSK*X3bVt2)t5h277K?@PMnU4Mdj|~NR*Scb#ZIMMsKyf3<^VGj#cWvj%Eddo?P0a5 j&SIC~7sGI>)k>wz{Sc;0i(r|SW2<{GU6}{lwqg1ok&$PT diff --git a/wadsrc/crouch/plycj0.lmp b/wadsrc/crouch/plycj0.lmp deleted file mode 100644 index 887e6eeeb716740e49df8c7e900981fe75285faa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 954 zcmYL{Jxmi}9LE1w`kqq4MgUY*0Vqf#lck*28R|oI-Fd+zVD%eBz{1e z5Tum5Yc~fIIKXT4R3;ZEcN1sh;^vOewImL|;eCGZ^M2h;P?Y*;fHsN91}^vtet^HA zS0cI!GGGC4@CLZxJNOMkA)*+#4(@^?*aYvuH}DIDJBTJg65IpJ;2GEfZ^3&I4%4=h znWljbQi~Bf3o}Zmm8mTCGX#tw>X1pfnM{whGuF;7kdhoqD_KF8WLi>@c3~#co5_** zq@bQIGUKLc7M9M{ASvl&G!~z1sKOML`lg*PV5y)rNZYrf(OB$6a4v*nS+)F9kwsWb zm7*un%ZEb11WM$C1%p!!l73J+^gUs4!Oem@Kmfc9JA&67)gT^C#V=xhf?-fBuA` z%DSLK19bdo%=NAu3v*S>MY`^wsTOfDn4iZn%}X?W@sRUH;RGglD43(MBfsMFO4V`7 zoby%(H-=fy4r^6+`qgXOava-+DF$yr!_-_~n;2ekwH?E%?c2h#RhboKmcto`Xzl6v zM_u!u@Y)_+&B+(={pKIEiW|*my0%i%@2o;PyyoDkwsN@G8Ggm}`z={Ea@M|8ukRab zp_p5i&h6U$1zpqeidzlKY1o#*up#7m_rZd$8zMVf|Fb)nx12JQYya)WV!ot_Y`UgI z8rAB|EbNQUc2^pvSBone&)(RZQhJo$-P0=DdD+?CHZ(*pbgi6C?J23$Sk?D@$==-w z*2Q<~rP7KqqddQzN{x)iPY!+RmuQ{_LzGD1|LrDSuT0l6%J}qXJnkduA){n)#mZzd uqj3-O&zMZ*$K^`Jr|vKv#m5m{lnA2`c|P@pD3}xpk$)OQ=L2y{Xa4}yx*L`N diff --git a/wadsrc/crouch/plyck0.lmp b/wadsrc/crouch/plyck0.lmp deleted file mode 100644 index cb789d28b360e5477f782e55900fc1d4adecbcf0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 984 zcmY+D&u`LT7{{N&=zj2HlX+pK@Uo4Ahu%y)ZG&{Mpj)qc_hy_Vl7TJ6(+(SRX^aa{ zeqN06U|<_;&_L!? z_yv9g2S>CFqF@s|0WZM`cn@yCPcR0&gGdDT!6Wb#Xy7gQ2tI=!U<_PNq7ZlhlHf6T z23~`A-~%wh7w`@EoKz}tbnA7|Y2C-!qiVG^8S!KsVFc-!rJ`ZD)2>;%o#Tj+dk&&F zHM1UKdh<=)s1)rIh)|B@N~<0 zDIS-T5kVB1jYgzJi!<~u+1iMQB0*ubtSCy^O7`tJ9@>b@k=9CZJ-EKk{U5Bbwblv~ zS-7lB1J`7gtw7LR6WK1?MKddTo_1M@hXR4%wHXmt*LUqH)4)%cf%9uq53lN2f4H~5 z&!LSk9|jy@hgXlhC{uy|`eap06D@Pxm;U$1y=?deW5{7IhWd zzxRSmyR29Alc}3|=(1X@7<)Lk1|vOOhCZ5~R$H%<&8YbS z$D+D+c0B(AABMf=K`yK5qmiN%>ZLPu_efaNO9wekRa>LcP?~J8lO)N5gP*5tCaV<+ zWgRET(U9&q$TL8&K-sKXNTnVcwFVwNbdV`%aoLcQ$y5r$2a(q{W0j;V$jMY2Y7xCO zEf%lHv6zrDdnVixpa1{> diff --git a/wadsrc/crouch/plycl0.lmp b/wadsrc/crouch/plycl0.lmp deleted file mode 100644 index 18fcc1c9224f23e0c07ae9ca72d52b2e4bc8e1a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 962 zcmX|D1o6*gdV2NPulsdJ0Qr19dxgNZ`~)`^WCynE1-Vh>~>1+oifY;kF_ z%(c*#>CF?}1{)*eXkwygFJ6p)z_N>1gTD_p4o~|2p6`9Xrr*~)G(%S?NMDKQ2lxs8 zfHUw91UaHva1-1G55Y6=0;pgW=-@MGgKyv$I0fV(x(sfC``{^f3EqJZ;1f6m-@$M2 z7x>1ALf|&I2a@19cm;Bx3QX_??1K~F^UyL!eJ@WR{Tzpi_fgGaC95YgIapB6`tkZk`UBsqdShy8ZYxpkg-`OtV%S2J|(|idi2f-cL(T)ikY9)E%q7wH3&y z7{sdMG%VXj^iqF3K%!&q+IC}sq$#?YE(RE!i)tdm(yzr jAti_+GJceNA!Q{Jg4ky3{&Ct9qpaYm-E9t(huGskbBYIr diff --git a/wadsrc/crouch/plycm0.lmp b/wadsrc/crouch/plycm0.lmp deleted file mode 100644 index 872fb8c13cd85b6ccb1f651656f16f5a50980a53..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 966 zcmX|<&u`LT7{{No6(%s>fE9+X}owcCJqr;CpLQY=D~|m?12DMAiH4pBU_p* zb1k%GdN*_qHijedVq&6aFJ6p)z_N>1gWnf64xjY>e%|MK-}HUoTQo(NC`ez4=m+=- z{(uwk4+J@)X>c9f2KT`e@C>M63FzPhXoGLy7dQswA-V`|fVAz z$f#(^~W0bF;+}hd64CXzP6i*03!x5cR!=0yCEH2C#ilQ*Z zQy=PHC>GYD;n`X4mC6rQEFx=KS&SOWNKK2^G_6=dXC~uS2aTa{x1^P|bXviFP;`Mp zq42@gVyToiQmPk+$lP9N_dt)%=!TNw&s?GDx(7W;k~rq@GpKXn4w;jbk?XYF))A_< zw-wIo#TB5g)oFDqbL9&Dfm8Y6zMXE%tyCh0U9&ju)Vb}sPnC#nudSZPb+NiB%C@C_ zxXon)H^bx6G1=9-FUt|*?aCu|uk31BrQu3TVWqmvWKbH)yqi6&M2+gQ!6a+P`Q@{v z32|<1g)NCE-sdJMSI~Mr#opQ)tk~y*FvVi2cXA@(0IBZ@pew&&7`k!vxjW4HVtTP= zIm*!?vY&FBS^p#za>a$}gZax*ajyw8 ph8^;HEg_@?QAEaLDHKyyA|Z%vHt!#&T`|fAJhi*cf$|Xh{0G>?3Y7o= diff --git a/wadsrc/crouch/plycn0.lmp b/wadsrc/crouch/plycn0.lmp deleted file mode 100644 index 82060bc97c9650a423917041398c9a6e5648c835..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 971 zcmX|<&u$V?6o=2y4pgAE3lpUSGS)Vln28&gO)Mf%DxK&H7#HpoSr9-5NH>`NiOs~O zb_Qmk_63->P+&^kH8Ih(8#l%WXu5H0@OPnQ@nz2W?m72n?zs;~o-g#-3@`NBM1(8+&`n!MbCT!Vy8J*TmYT;if1Q3JbHEEXz#s z)Q5WP3;C6xe{PO@o8pHm6o@NIQ4DJGNX>|M6(wIlXENzb4H|uZyPy=6L_)@SP;{Mq zK7ad8zEDVLv6K^+$lQ_dpsfaHRZWiZS1#AEtoErSNgQ+d8Pr*DUFIZt* z+iMyo!{gC0X{+{|VnF+_zQX3pM$0NSOIr2IGP-OFo<%&_0 zd)@XxWYWcWB^-^$3{2v2&YFJDnDKkEvrfoy78%1)GYLCY>(XFk*p(N@*3#D>O}W5wtT^ z)O5-QRH-2fn-1HV;>Px|y?_OOU=WM+uZZ7?|A-X<*do3nE{QjUC;|oIV`87^6TcDv5)b3R z`^2Y2i};?nBpl*b;tlZ^@i(y`z>+Xrh@)yr^k-VY$|~k%R7G3j15Ys-?jO4s(LaR<1C1GdIm-G@B_5Wj=Rm7Vfp<8NL?z0SjfHC)o8m8Ki(KaRDp>tu#Vv4hPI1 z_~C;8v*+71pG|h7(YVn?1p^jFe&h{|z%XXb1&`U%D6x4b2@+1PSr{TY56^X6!!T#e z*=z51@jUBpa)*CepFj$Q(xkZ;xPCJpfed~)jIdzaoA~dp!$L38;#9(6b z0Swt1oeW<@quCp6O~9!OF@x8R7kI&9&QTv>T)>rw$q8!M-KAr;TYYM|=+jXMWBAPB zZqC)zz+;%0#1$O@e;anQ)$esLdi^wpvHPfOy3U8~7t4;S6lQ4=lVF-GkMbG~^1A&r zi9!~ezW?X*6U9}6VBTaik4U1hUbolJ^hROAG7f$JkHh10zM-X=tC_qd@^53M-tCg| z?Ut?^6t#?_y(do&pLLW2&kg3HxqOwc%PiJ=-SI88P%dkQk@npBa=YE>ocn`;w-{xM zJ3CeDso5x=bu_iCWy@t9L-9SF?CotI9-mnUH7T<5*0yL_^{8OxbzLKCv8-YkSI~a; z&C%J}xy!a}yIB3AYROI0tmyPp^=y_$Nm(4X+wIPa0jqeMqa4W$FDja@=ko>1qE#iP z@%2%A|7q>zfbkH+Xf*qkLLN#SMOCBiC1YqKJ%*a+R$elZ<}q3=x>y<1YoSxAR3+IU zjjqu_&G&aL`Q|Z&dUJi9>?9TMCD3TD+f>3-3^Z^*4ugU)q<1dUO{A-BfbKuty8i*) C#A($4 diff --git a/wadsrc/crouch/plycp0.lmp b/wadsrc/crouch/plycp0.lmp deleted file mode 100644 index 2825e46a2a165655b45b09ff9c8b332b2d2b0b7c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1481 zcmXAp&u<$=6vw~zde`yVX_Gc7Nvb+d)^?oQ<99)vxFEU2A*sZLOAiRB5DH}FbCY!? zTBzJ63MUlkFJF+jhGOr|%+4MV;>I6fH^9%D2GnWP4WIkk$8O^+A@)qzGbDKF~6!RBj<$&wV z`%Ittf%%>Jmnqx8+srM-XAYT%%oFAXW0+r=%URSnu#~|jCW|@Ly$XL^%s^rx2VJiz zEKlby%|Povy^8WGn7HXYkG#_5u%fC}UQvX4{%%LUQ|W{r_w5W6E|k!D^<;Z%)ag`J zWdm0;Ae1vmP_y9od`xDt&nNdu zi;4r^+VgD(6Rx*HX$7(JYIRaXQYK@?0l2>Jv&1G$kiiI!#i>Y8T!t~##tIojTS+;N zc?tP@j_vpO{IKxocmxh5)Jja%RIav`h|Dle8MT6DKHa#NMvE+tBTP$?FC&bEpcO+b zp0=?Lbdyu(IJR9VaFPp%g<7I({KMr-Xb}aPbg{H&+m3Hjs>$bYJk~KvIb1Vbsrdzn zb#~)o+%2VEe9C?*%w`cq>1Dr-LLO0d#23nf0lY%7K_<@2GXmHn!G*cFQeUVlQtXbkaNn%4IU3uX$J4Xaq*F; z#Bt2=Po?z@(urw_UYe+$c>HYW@{M&N!(>&49J9vU0yas;hT@of%dvaz=98hD%E}m> zaLiH|sWr9NBHE2*?=#EqCBmIL<<=2~$6VqUMuk#T*C^85^R4|Ji9`&)*{#jF=;I23boIF<2mtm66VsM1w z1?W4n;*DCZAPCZuP2Y_Pk00JSP$RG532r<-DHU+=bo<7QZNqmm?FH)T_RdW$(zzLI q@9aK(HWUI^ruICd)0Nz?n2x+L9iFuzv@m?Si&^kfFqunJKKUPgW~pQV diff --git a/wadsrc/crouch/plycq0.lmp b/wadsrc/crouch/plycq0.lmp deleted file mode 100644 index 5af8433271dfcaa3218b6687decd7f9c938d4888..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1883 zcmXX{OK&4Z5dLguoH(zw_mR!UiR1V&PH@^KB#^iwEi0mp_67)$K!A`~DJJK|Gv*O? z745E;6XM1ZuCUmi?w%fr6Gu28PKbxZ5s6=bWWFADq|fqne_d5w^;OLPeOyBi-vju8 z_>uUFm=m=E@GS8<@e%Pg@e5HY0*ZK=36C%y#vfI1~Aj( z<6~?t!iMeU!2uUnJf&KI!o@XQ|Lw?H`$xNJxQls>E5GWSzu87()-;_C=0O1l>jh+} zt>br{ynkI^f4+Hr*6uXXEFlxYyi$U-8LCx?O(w^7qF=nxF-_s#UKt{BEE(oY0g_~9 z$h!)0GvhMnoVDB?i;0E*NaB6dBzc^qs4YTeHgQVf+8T|BL|rjPMiD)h%WyVLrU`h( zXf%pQD!`$>0+}WzlS6Uj9TYJTPZ$SFR_jYe$?c4lUoNuAo>-QC;U%UX;g9-j<7 zkpXC*MCQGMMx*62^PN-Js$sj^4a2b2O_?Qo`^1wM7Vw648J3G+yz9JCbF z^c0Qkcs#tFdsJ0#o0+odQrN?_)(vkqENDw4rq803kn_)4uVK~K&9)GI|$7MuJv zxoH!}O2tBc`P5&XRUHfzR(C0zl+iFpBB5BP^eh@hl-A%RD3^mlUW5TCeuZ^PE9ZvT zxQwt*ow;7rBYPZp%R?G2`J7(x;nWx{gWkNzBxdd~?o$$cXx3}1RK!eUtpJPaLM~Hm zuOrbZQxN^nqP5i$Chb0Iyaz26(7;v|tuRe>Y~o0%C&re`NV;v?XKQ-Tn*p{vG6>OF zfig2Au_w}Lr3^c1Hz(H5B!#PG&l8gqQ#Ofn2g7pUiHq#HW;#t2Y5{#)H}F=&!4s=l znr6q)q_9york!PCqHVtBH6`>k1 zFNsYh6Z95v*y%DEOAYAr_uf4_zx(J5o$5xLIx$8GWu+}6KIC^+nclZ1OYFD9oPN|H;)a+{3hm?Rxld5o44Ggz0XSQ zRw$7;%Jq%;m38RTn@2C)IChHdJc=;iSb@EH90Wn$w`h5hcKy%%Y6Uj8O!1&yM8;W8 Op(R$-EwugTWBwl|E)_cf diff --git a/wadsrc/crouch/plycr0.lmp b/wadsrc/crouch/plycr0.lmp deleted file mode 100644 index 1fe276d4829d15c9708c5f2ea00cc7617f147a04..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1794 zcmXw(%WoT16vjV46F>5BoTO>u*krD6e6$qE)^#uB8h zqNWWyQ2z!Hi`MqceQj8>M}Sa;*deiEm)-DP2S)m7H1~ez-1E9~0|PYB#jgPVBA29; z0UG26d5e5P9+N5ggCGkWlGn&>a-V!h{v=B|U`XC3_s9kLf&5G^$#$Om(fcg;gZ+QF7Frw^g?*r9`@xK?1JF)7PiTtL>wCr`tYs zNS8BEsIS4zmEsvUyQ%K7jki?oF(CjMw-jOf)1_ky2V-rJFR{*=&8h5;e(SS z<`N-Y-@?Jp{%+8dR`|yTO{Z+cuvd7hKz##3S|f$wX5iY&I6Ya^>U~u6mD?%Ld6{Du$HF}zPD>|^umz! zOh=)<(y*3yCDzN(v9wMGLn`;Gw4vz3_at3#NaE3F-CQpjT zMWl@~vr%(3k;MW(S#^v3GBsLD4kiOhmoi{Dc{GB95n3e}8S%tu%q?Cff$K$X9m??- z?PZuzMBmXE>Gie6vKmX}Z`9$0gTuk>fNkR(Vz+?aSkeov^xRpBXvOyLcc%t>8T8OB zGgn>&!C<&oVe0XLop!L{L)u$`Y;~L*9I$DYBjW{T+Obx9fxs5$LoswOZdB1cVE=ff zsU1ETbFls%v2=cwHC{-|c&J)! zjv^mitHE^o-U%;;pWcDjEN9tzR4O=q#I=P|;2Nve5BMcC+8I1Yz%+yjeahu^d~kYp zu9WxWoRFrAMiweT;3Mhg5d9~+{qE`cxq8M}{16(A{SxQhCQfqH7FTu-di(IbJ6}Dz z@F9AY)BbPZl4&AOc-SV+?tXN7_Tb{%g!PbepnHN1Y87CUVHC0)JGlSl>FL?U#n=80 zIHwd}J`ZkI3wZeO?CczMKVyu-O{d&OE5{KNNH?mCI}z6DSPi5=%l9R%RdMo#)hw`5 zgONnj=ate$cw!SPJ6v112sOo9D@cwLHyw@m9}fM0YMaCJhEGS+>RN%nYAJ3Z{TH>a B_y_<1 diff --git a/wadsrc/crouch/plycs0.lmp b/wadsrc/crouch/plycs0.lmp deleted file mode 100644 index 081f93b0ab0659640b51f249d932951b59da69b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1773 zcmXw(%Wqp%5XL{-aoW_e(>O^RH;LnC9@xjj4p>%HLV}8JKte(SQG{4k*|0(Oy=qAn zqL!v&1FBfCWlL-O-t(%2SnwYp@e&KzAhBS>3JLR_o3Qvv_s)EC&YYP!=Q-?R3vK)k z;4ktospNnPn$(l|{Iz*6w;o zH+FkHG;?s6oj-GlI4w$|;bfAanTPS1T`0mP3BRgA#7&07Q55@VL{X+mFSaw0b@1^I%c1 zGx9Bz=P*@Xg1c4QqQB{tiiPe)rZ`TNpvrh31mc=oE#K`a?_&z`1$^=##ko90KsEDs znc8M)JmUw0&bIbFC2?HD3^{1z^LSv+Ldpd=tFU&F%ZJjKR=4LRJ~*J5lPXxLLhZD6 zn6I@q)JARvUn#5oGP;}1PBe^+^!K8um$?>lco&zJu-zGqA~P}3$ecRLA*MP9#YM1Q z#-7N?2sLpQ$HAw4c^)Pa$7)c)(oq~o?sU^!sBj^VG28OLIGt!`C|-mg=_rT?gIi3n zP{1@bSUS%|ZDK=tsWItvG#E%c7=%O2nxMGE`bh?R9(Xs^h7{bhg`A4O^`*LG}kmZH6(WyH9tyh<2LV zF4kD}EE{QgX|^Z`_vuuz)ftbwSS>(to@xcOoWj;=ZCSSr{XM?^$NC~)2YZ49Vr=5R4U={ zzMW7LW+ybgtL#+#leDkQ;H)R5CEU69Adyp%ZSN{$En1e3_dj}N)_BWIuR>u-^3E?C`i+8;0|sm+|r4!`sIv51*vgvdKJ&nr2sfR=$Lz zqr1oVIeB~o#$z2v37^9e!}!!$E?^S97mYk8Av0Dn8al4A*XO$?Y8ZLmm)Ytv6szB+ zRU&0MZ(-xrGFpic+NR%$ z=r2G8qE+w;cop0PZ-EcN2z&>A1kb_WV68~>8n^@Qf{(zL;CtY}Z=kY3)B|sT+u$Df z7>vNz;0N#%_!ayKmKKR_00j=g5%>&z3p{uZ{sGrZcsDo%?}1bB4G{1%_ya7LiFUy2 z;MyW(k}=IT%QSIrI2_Wfu|&6Ci1hcvLw%WU{bF87tIzPNS4h(Fo8w-qZ|9G0nq_W( zFc3?#YKd%`il_AzicezgvUoB{C8JrTK~8Ks&Ad$|*71p%OvE6!-B*`PFin(j55 zO{2}OWoD0Xiv{vjt&>ml@X0DtWfq zG~-g)37&(4w;~!T<>OYPtu`ymI*zrD*wd^K-h<^-w6O-U&(YKlb><*L4Ypn%x5_Z2 zu8&MFZNg$?>K)8cnByYtMRcu-;g)HpL^xO*xMN4DgWUl}#O32(qkbf6t24+=LpW87 zgyE@$4C*!bdv13ih8g}}&3)<%)NzWgSMqYAQYauwR3uRpUNt{t?Llrw-&%%HKof2j z8m9!sVH>kU;FSh#cMwAoY$EYpf3Ol$QDZTH4wQ9Y`!QnQO-&&*Isq{4z;p|tCE zF}Pv+)zEdto3UYa*%vI^1iKXGq}lD*u61UR=*wnSmS{4WKntfUgo4_Ak9CY`w%nl8 z$9Asaq~efR*eM7P9-XHgp3nwdQLqQdA0sM;f_ygOY-&+2&j+$6*uW$|_x9=86V9GO zvKTacWyI@z?Xz&~?!8Y(k1qHtgSdVy)2UbUJVqb9fBN9!;^K+5O45@wbs@pZCVl?! z^pnxWlh_!QWja>&1Vfa6v(C;QjvmuSjkGB4vbL=7g@U$GrPw$>9xAJyrzUbn>adz) XlpMcgZp}xdOmZl!?$B2F0L}gdwvOQ7 diff --git a/wadsrc/crouch/plycu0.lmp b/wadsrc/crouch/plycu0.lmp deleted file mode 100644 index d788b4d8cbd67f824b71127f3ba6c957ee14fd61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1480 zcmX|>J!~9B6vyA)InLQ- zD~y9DS}QD7q)?xyRJoS&nzcwS&z9(2n#b0oY^B*%mgAu)g>;}H zdZoF}17@$43N%4WEmbP?C-g8_)_t8Myt|i=I!@G>rH~mXDDr-x;nYhw zwKGT{+1+FGsez?YE@ORie;*Z`EJ0vrQ_H*iJ|Bl%KnX-N5^(TXtP`4{9P2pNItr*W zj)@j5l4`E^I7;0>TMrYQ7Z#}5?Xe0L6XttJ?@|*MBWduEqrCcM+KlL04U;LURT#uv zZOjw5mD=9uqxBwb&NuHxqMGe~A>|`pFOeeX+z!0nhMdpf|9XYmUeWR_DvRs31@Y4$m%Tk7D6O7<20l^HZx8N4YrPpq7)h4(9x+87PTRiQ>|%wyjeG z-;rQOhE?7K6acqlwL2P#@3dXVdDBmHZb1??4133Kc#OZ>3b-EeW#48Rl-e;a2VTVv z*FY(nRF~-Ru^Z#j8)lhDVw37J9e?=2;lb(Y>6x-t$I1=S zeq8irdidb*i{sNXQQTqeSm6f&!|Wm*9X&XH92*}-1LZV|cLP}==Y<-XeH0Z>a-kNj QohEr*SiM0j`OjnWFCzQa^8f$< diff --git a/wadsrc/crouch/plycv0.lmp b/wadsrc/crouch/plycv0.lmp deleted file mode 100644 index 8a1bb8a7e277d4cf9195e3c2754a4cd0049de08d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1384 zcmXYw%Woq^5XLLcV-q_M_N9F|nRRUEVR?G$!~qGxWd#Qw=ZMQnE1?B;od~V87f+9X zgz#9Fy>Zw-0Et_q#GdZz?j!sG2yubEAr6QW5(sfIUyozycj&LCtE#I$zeLw4q096q z5&aElhG+$>gA}|B-U4^PL+})Q3rg@4_yhb08a1K~@FI8<+y#%o7vLE<0pEk4!SCQ- zury0_6DaT+cn9o*Bk&FQ4tVe*_znC6mgb1s;8m~(J_MhFXW#_<0Dc93f%-gA2fPCI z!15efu}qW30*$;+)08IlMY{c5q_>koU#ipXU(9o9_1MK@gQPrr{jA&S$@$rjt@S(o zzKEyE;xY|$?QK39m0}%DF04>4Wv=s~8I8mUP3G6A=SmTy&6Z>401YFyG<%6Uo$Vx9 zPr9bG%v!5h0&=r;{noXl-BMn&7EvCRmX_(pdRJM_hoTfJO>@lBS5FL8!A(w?y;ceZ zW^43BsNSF(8(kHYDmbb*yVizRP>OiQHSa>Js}vW-0JRra$T=URC4r0k_xEX1yG+TJ z+HP+L7o0gfHk5#a+hwq`cb4?gF7zYnIi`~~~JEP_3D;ZlQ z!cj$c+*WFLtB)0Wj^C|PFB7%i?pIRfO^mD^c(V;9Iw^iNOKq=crH)}TQ>ztc(PHy8>L!Fh(t%A+O{yeQ4#PztX%f~`s?>KR zm@~tQuGT2}75;7}rA<0**KywT3mx}_baQKDo6RkSak!lTf9K~5MBpT8wp7wl>|kc4 z;HMX8JZd#t7$7ICalQVz?~ql;+jJ9j_Hht?Qnt0#U0j;75>Nw zpu5kG4nO)jH$I%D%4r|yN{yn6@R;M{qsQg|qr|V6MylN`kh~$R-lj`4gem?Hqy@gc diff --git a/wadsrc/crouch/plycw0.lmp b/wadsrc/crouch/plycw0.lmp deleted file mode 100644 index 2067320b22a9583d76a6507e657cae7a2de18e98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1364 zcmXw(J8WD<6o!x2@AV5O4q$eDvrpTry>m}PgMiKw5(p$D3MwK+LJ1@r3sIrHb4B9F zSP72`i4M_&gz)a(nKLsqDd=dZ07XKgO@kup<-d20rLUNO=AJq8pWpiuJxdW?q9;W3 zFQ7T14NwO$cm=!(u7Qui1MnUA2|NP7fxp31uvj75122Nt!F%8%a1VR~egHp%U%_AC zA5fVmx&nIORq!^r0X_krgKxnY`~rRlPr%{=Q472b-T^m32EGR0gGb;G@Dyw;qBb}J zYYSw>GEJ*XH1CvIQK!+9i?yFv>ks;U z5l_?QbsDDH+jKn6#X6cUZBQzCs?(tvkHrX07q+P9auK6V*D-T|R=Gs&_I?!AqmIcf zv(~Dp4!PEN{_1m4tD(GREuuUwSy`vudPiAKhoTfNDTOA-%w8*ndaG-+yVp@csf;hy zuCeD8lFgCKAw^3kelb985=1hAoC72dcs|zJb zJ{XiPikYNI!da5w)}1+;c^@q6zRofplw!b3@ojFLz@Fnf3@@r{c#6S=*`QpnZcu;^ z#`^5`u@}^-;uCguVtH`vUGWKo5S)nCjK{*yO{zB;BhYE8by7@dc?(jHlZlJ9^$>Ba z&^kRVN7}wJmjQkyh8g4trgLciB%$8sA!B^N*#9l7@Ozf+$QxBQT0~8 zl*;(QtybV>3rZ1|;?z8~yrT6gd}PMc@%gOU?1*!R%tZ!JAH&B>*`@5EpuV%-FrQnk zI4PpEP@zsl*ofLl;<<^HB+9{8Y(zD}WO5bzwgfXWtZ1h~MJ^HHT9n(U-EwW`O+VAc zh)`~Ri)^jdRj|Vy1mrlqm>o8LjA{)PwG}&rRw+bmnQuQQCX9_MbavzYle;NWt+>tFvBJMBcF^Q!_fI}O`!Y2?jAG@q n4|KUgMUX1b(CO*@vxnvwp5iZ?ZIwe>B6&kty+zw|1Uvr&%ci{$ diff --git a/wadsrc/dbigfont.lmp b/wadsrc/dbigfont.lmp deleted file mode 100644 index b44080a5a8107ae41b3925545b32d2096d25f0a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6671 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 diff --git a/wadsrc/decals/bfglite1.png b/wadsrc/decals/bfglite1.png deleted file mode 100644 index 882211642cf38b9d308e86cf543637c5d94cc1a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1107 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 diff --git a/wadsrc/decals/bfgscrc2.png b/wadsrc/decals/bfgscrc2.png deleted file mode 100644 index 1f8dcf9cdcddaa83e18cc99d847d0a6c91dbbcdf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2681 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 e$VQC||KH#8r$jp=M1^Pfu{XcB zlo3#6A;7>OB_f?Me@nC?ewCU@keH0h@|TATiY!0vjj2>o9#c$t%hUHW)i8vGMX|)$ z&Cg$E1^J+e$qQh0l-#MWZ=UT!5pv9M#_oas(^rlam?JyMgINlDP>PB;MWF~p+4G=> zMlL*dg-~Q#xzyoNpkTozpi!Q`eZM_cYn&K@;7Wb6O62EVUvTj9Y!fVTsf?849KFj* z{f|9;aQV`nTw?;!8{hwS|Fs{#UpB66B#;;lS`VIl_v`<&Tl4lsD&SWt*|FsQn=ikA z-rroC5$B3msaN;1W4o`t{dBOWFwWoNOD#Vw z*OTnD?y=WD@Ogjwe8Dk~sHiY7$0^WWD+L0$U?xX9I@~2HG#YDt!GL>XQO7u8(tjZI zVmC0rEgUqAm`GE1LxL9=N$u;N(TucKxr3q0B{%zfvV*~#KwIF2vj|TQ#aTGu|G0*8 z{GAZu4Te(H+C+070BP#9kCP(v}G^->lSwSRbc@N-!$)eJwI$d_Nlk@nfD90vfR zOR_YA)Nuef394)AOaysg*(c3g4e?(%aeIhpE>$Jt9^%ru9#BITAMP zP&{MG`R-{r$l7W ozMatKvzWd}XNWY?I05YW1ETNfcV}|INdN!<07*qoM6N<$g7VpSO8@`> diff --git a/wadsrc/decals/bsplat3.png b/wadsrc/decals/bsplat3.png deleted file mode 100644 index 5d9ad06ca225a12e250a6fb1f4fb5018cc09499a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 346 zcmeAS@N?(olHy`uVBq!ia0vp^LO?9Z0VEhClN3FG6i0fIV-ko4VxHYqSv^3SAu%T) zL+ap3Ad8XF)5S5QA};hIqYHDQMEl3%YkU37djqbAaF@1rE#}*tGIL6Xq;Sg$KOs(K zj!7C!n|K-7I68VUxV33>CgaT8`;A4?{@5x61$|8Ucu03n&cY)MkJ>-| zet7wq$0_TKI=h)IF7A839@E~HQMpUJHLv8`n}~C+$!X8!-iN(yoRQgLR^J^n|8`4? o>yp5$`zNovqODmHF<0Xcb7Y;Pg+;_$X;8p;y85}Sb4q9e0HXAW9RL6T diff --git a/wadsrc/decals/bsplat4.png b/wadsrc/decals/bsplat4.png deleted file mode 100644 index e9ef345a8af1d33e0758e91bcd28429f5ed71634..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 366 zcmV-!0g?WRP)pDp*N2fTpuVs03v z5~7=W!P~TKr;9q)-P276rXGAbFG3F@$at~<3}C{EIjK5GB19mu6NqqK-mp^>qfZB5 z4V!h!iEsdz?Fxo5RJTp02mO> zrDhSDD?DbQhG;UL3R6dy)j7XTgASDJ{FmW2P|`5h)J_jdUFt0RFM+Q)(H;K;lK=n! M07*qoM6N<$g11eSu>b%7 diff --git a/wadsrc/decals/bsplat5.png b/wadsrc/decals/bsplat5.png deleted file mode 100644 index ff822df4ca1af57eb888bbc4b51225eb39359443..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 399 zcmeAS@N?(olHy`uVBq!ia0vp^LO?9e0VEidGaM{{6i0fIV-k?&1Y({xDQ6oX&5)QA zkRf&OB#^~u=IP=XQW2Nzz@VvK$riF8uy&t2OK8U7>*w{K3NSJ8#C*&BK3$n*$r7if zJ9L<|Nr~RW9QyI4SV((FgMqnJ<}V=6aVi|<;}_WqvFNV4<0zMVAjsOpv#Bt z_fLzhtE>-q+QomP!g}q5=KcH68oai(_de||p`vo&XzIoXrzg++6qNaoCt-oqii4>S zH~lHtZ#td9#YLsOte<6iP2wUOab^~S4O8~n=Nveou>O22M~CbFJdrK~0|l3sGqdGF rRxfHXWoa00000VQf%n8o|i`0006GNklA!pF7cq94yB zSWgy0`b9{?EQ`z3Ik)pSe}XuIAPoEu(#UPMKB>0-Mg`DnA+2>}DEA6}zs^7^cXG->qFTdja& z{?$i&HE9wrQfq#*bBd`1Bp5nDI8?3Q@zIWn`&l;ts!$#^lz#SPE6G9x0O3%FrFXuh zGq+7RB0Tyvx9(L(WgInf*&QLGQ9uKogaGv`e*k@Bb}v($u`mDt002ovPDHLkV1gPK B63qYr diff --git a/wadsrc/decals/bsplat7.png b/wadsrc/decals/bsplat7.png deleted file mode 100644 index 21f33724e551ad4bdaf28ef26f648452e0ec5a8f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 229 zcmeAS@N?(olHy`uVBq!ia0vp^d?3sLBp9rei+F()M|zQC5|9QdVh_uBkOHI`5_1AF zqz;}0F?&2+978JNk{KA;IN9{rST3yCxK+%ppjh4}BCmHsepKDgPDairASWqMTHIOR`}!MF0J=%=5RBfPr$8PC~D=o~qApy5GuL9+&fP_~*> SkD+KL$YGwYelF{r5}E)ZV@-?z diff --git a/wadsrc/decals/cbalscr1.png b/wadsrc/decals/cbalscr1.png deleted file mode 100644 index bed27db98b1b28443e68a7c2d69f0e4cb7a161d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 636 zcmV-?0)zdDP)5 z6k&x`mOwZ~2n3e3ghH1H10ez;G*k$Ifig+L-Q#?Sjc z?^o+WS5l|bk=m`Vk~;Emq$tYprhD~;^aqOe+c5NrI_UjFt_P}S%^d(-+tlynOP3o( zH=gE>$*N3njND} zO~9k5abzwbVtY>c>BKp$C<@q~CNnXTJIh_*9cD)^0OkB}pjE?gD54ZI2yvFb7MvqN zc(X!;*YUGJH<}Y+!ZJ2Aj`?_H8R8ipPqv)OA^l6 zyVu*xYxXh`Evu#%$2f%{s&jPAH!h*|CUr&vbrsvmiX7t=r7$6s5>iuW|N2-;-zDp^ zqHpOCgfLBmrFvfF*nxB%(kep;1<~dZS)DVwg=Iqb%^|PYj^%V=s8Z`JElT2wq_`-S zUgq1wi^Gxi7qGwh(joW5Tr-e8C%$uM#0`b+M>4Hb#TqIXothn~_UA$2Ll7 znmGM;NhZrIFZN|c9gRg%nK{2subnhl6G{itSKR)J0_ikqt+34>+jDiHeZ9*&%$I`rYiMH z)b45zT>{p8rmaj}0RpHa$I;tBWc<6U!g*j?mW?(O!LT`QiQp42@^NBc6y1?@G?l>y z%^eMn-=QJ1%?hm~G^dII9i&)>@wAj1$@{xK^2hp`?aU2BgFvpoZDtxYU;~}4G?NNp3@7#^e_!lQw$94X*AOAJ8M0ZQCmh(J5KU#-j&w@p!+^@NAKU|35CA44lXx^tK`fV1nM#00000NkvXXu0mjfh7>6i diff --git a/wadsrc/decals/cbowmark.png b/wadsrc/decals/cbowmark.png deleted file mode 100644 index d2740050730bc1914555f5bd8830cfa5022dd2ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1680 zcmV;B25E~MyG zR_vrMS~zX*y%lJ`SHD8hW9|itqK5{ulg4cB3ArLfGL1{;UXrAlP9 zFJHpv4}Olm?U%^l80vB@-`8(}Yi!60LW&^ff7z@vVm`^Oow{C%qxCNC{vP4QG}87z zgzH;Xz85VPJ7G-7D?B}>OYA8eHBF|jq>Zr3jKh|LH{W~!%gdFy`lzfpIleYu61XtM z(@lJr;zfJxQv!(OAnCW?d@!+5^p3lW#gdq3Qfa=%*q9$LF{DafIOpG9|EK1aakt+; zfDhmi7bebLjj3}%LL!8e)Q+fHg2@H}-YYPV)<`(KbpdvE9vr|brTu!z3IQX~h~(AO zW^yQyer3Kmg44S<=K$ag*z(+(eElvPe=TqoA$*<;Tb2b&r3hrfQl~ zgZxnAM#!IA#ArOkRgN?`+$XTe)>A}s)!ggtcQ8Bk$b&Z06i@1Ps z1dMS7j2H8enr=8o_1`VjUYt$f!W4qXnWjlQtcyU3P@_PlE+Vx89r7DJFYU!dOhnht z1y9p;Mf!UygTE-Jr+ui-=ldona}Ph1B=s(DKdeAgB5X3ESIG;}t4pQBkPH zJwJ88SL30?fyGNMX&YyKE9zBg0rh-gGKj`0=LxoI@P$Ku)tgm<#ZVMKx?5_3<Z%VJ zw{zu_q5uBo>~bj~a{3%jnq4Cy`67j!xQOLU7iX+)XPgW}?*?iAIBNa>wfYW#u{_3h zE!!VbtWG3sg3%F{rtQlcyFKhv3$k|bw_7jrHvoSu^XV`yU_-tt&`AhkV(I^Vd8xlx zX+emb)}3#Fui=rDM5H1%vQ0p~PIw7IrtU#TPE_sLoe*GWnyqm=q-Yx$%GA4L31gzj z<)iQK|31=e=yfEq?-meIO9pJyv-;)`?tzb3O=1{ko&mQ*)+!Vsc%`}S+wa=`4L}LFj`GpGhu#p5gp!Co6FwNAMcFVc>6f-aTSc>$FnC^=EvKw z1annNaVLI_<%E-Gpz-b3ozBT@=ykeZ13c6Rp?z=;HcAr!Y&;ytM=%qvttB^ERQq7i zIX(aySq4C?lkx@3glp?X>oRLH7@3#*0Q5yb0fYqfpU;LR1$CmVkZR|87D+K90Bul0 z5BFxmFdSP!RtF=@)2wRlFatbcb+XKYJ~awnWkr#RXL*D>VHT42dN3Q>XUp-lgNs9e zRVFl?$^2fpe-Au68{?Di%9EU_av0T*VPB2l9td#sF5gV!h7@mR)$=ppt?@AaEX(dK a4*myF_E)P0VEi18)w!7DUS3a$0Q)l0>TA>{QH44Lt;)q zhSb56Af~OSi(^Q|E!EQ-c@G%yFgu<*bJBvlJm9TY!+{+g6KaaDGEeDP`)r1Hp3kAm qcOEOwl}LVDqP)RhJZ!@K@Avhuzf&u+Fl{;jGRf1`&t;ucLK6TZc`&5_ diff --git a/wadsrc/decals/chip2.png b/wadsrc/decals/chip2.png deleted file mode 100644 index abb047789393438518e7853f77f75ad9f7e09e54..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 137 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)M0VEi-Qg5#UQXJ_;j!8h81&Ep7na+{{(hP|? z0U1&UPlA{Ro-U3d6}LpYHgYmJ@Gu!~UcAdWYqi4x{d)~3PDZZq?h>$hmBp4oAa_|Ewj`SkOBp}TK!Uci+`++n=VopGY z)WMS=rm?4sV@Sm<)uS7E85DS!9nZfxY13W4z^_%LQ$*t9QQI9|$5t500*Bq_y eHw7nj9NEt;+Amp{R>ZUbq~Fuk&t;ucLK6Uuh$uAx diff --git a/wadsrc/decals/chip4.png b/wadsrc/decals/chip4.png deleted file mode 100644 index 9768fe3ad141e3c13a9d1f14fab9916be3249a7d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)Q0VEjKd|b%_q&U)x9Fu@Fh|M(9XjK=GW=PBl z$dEdC62#Q@ba4!+h+}Qo$jM+Jz?7e+UOeqh!rWJiAH*2vREl}-=G%AMOrtoP*-E=s WMM6sDQ|^joAbp;$elF{r5}E)o3n8Ka diff --git a/wadsrc/decals/chip5.png b/wadsrc/decals/chip5.png deleted file mode 100644 index 421c3f3d23ce6860865649b0a5cdd36a13003af6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)H0VEg%@^{?=ang$%lYle}2p0tM?+4Nhi8%oo zQU_0hm?oYsjv*Css>e2R9%0~NIrz5HdUxEF!%w^9dOkESmOQ}mpl0Svw?p5wuI*00 g_*S3kCwIdk?in*=&dB-v=K&eu>FVdQ&MBb@0C!$1&;S4c diff --git a/wadsrc/decals/decaldef.txt b/wadsrc/decals/decaldef.txt deleted file mode 100644 index 2cd09e1d..00000000 --- a/wadsrc/decals/decaldef.txt +++ /dev/null @@ -1,1061 +0,0 @@ -/***** Animators ***********************************************************/ - -fader GoAway -{ - DecayStart 0.5 - DecayTime 1.0 -} - -fader GoAway2 -{ - DecayStart 1.0 - DecayTime 3.0 -} - -colorchanger ToBlack -{ - FadeStart 0.5 - FadeTime 1.0 -} - -stretcher BloodStretcher -{ - StretchTime 35 - GoalY 2.0 -} - -slider BloodSlider -{ - SlideTime 35 - DistY -5 -} - -combiner BloodSmearer -{ - BloodStretcher - BloodSlider -} - -/***** Bullet Chips *****/ - -decal BulletChip1 -{ - pic CHIP1 - translucent 0.85 - shade "00 00 00" - x-scale 0.5 - y-scale 0.5 - randomflipx - randomflipy -} - -decal BulletChip2 -{ - pic CHIP2 - translucent 0.85 - shade "00 00 00" - x-scale 0.5 - y-scale 0.5 - randomflipx - randomflipy -} - -decal BulletChip3 -{ - pic CHIP3 - translucent 0.85 - shade "00 00 00" - x-scale 0.5 - y-scale 0.5 - randomflipx - randomflipy -} - -decal BulletChip4 -{ - pic CHIP4 - translucent 0.85 - shade "00 00 00" - x-scale 0.5 - y-scale 0.5 - randomflipx - randomflipy -} - -decal BulletChip5 -{ - pic CHIP5 - translucent 0.85 - shade "00 00 00" - x-scale 0.5 - y-scale 0.5 - randomflipx - randomflipy -} - -decalgroup BulletChip -{ - BulletChip1 1 - BulletChip2 1 - BulletChip3 1 - BulletChip4 1 - BulletChip5 1 -} - -/***** Blood Decals ********************************************************/ -/* - * Blood splats just stick to the walls. - * Blood smears crawl down walls a bit like in Blood. - * - * These do not need generators; the engine will create them automatically - * when something bleeds. In the future, the shade color will be ignored, - * and the actor's blood color will be used instead. - */ -decal BloodSplat1 -{ - pic BSPLAT1 - shade "68 00 00" - x-scale 0.75 - y-scale 0.75 - randomflipx - randomflipy -} - -decal BloodSplat2 -{ - pic BSPLAT2 - shade "68 00 00" - x-scale 0.75 - y-scale 0.75 - randomflipx - randomflipy -} - -decal BloodSplat3 -{ - pic BSPLAT3 - shade "68 00 00" - x-scale 0.75 - y-scale 0.75 - randomflipx - randomflipy -} - -decal BloodSplat4 -{ - pic BSPLAT4 - shade "68 00 00" - x-scale 0.75 - y-scale 0.75 - randomflipx - randomflipy -} - -decal BloodSplat5 -{ - pic BSPLAT5 - shade "68 00 00" - x-scale 0.75 - y-scale 0.75 - randomflipx - randomflipy -} - -decal BloodSplat6 -{ - pic BSPLAT6 - shade "68 00 00" - x-scale 0.75 - y-scale 0.75 - randomflipx - randomflipy -} - -decal BloodSplat7 -{ - pic BSPLAT7 - shade "68 00 00" - x-scale 0.75 - y-scale 0.75 - randomflipx - randomflipy -} - -// The smaller blood splats are more common than the big ones. - -decalgroup BloodSplat -{ - BloodSplat1 2 - BloodSplat2 1 - BloodSplat3 5 - BloodSplat4 5 - BloodSplat5 5 - BloodSplat6 5 - BloodSplat7 6 -} - -decal BloodSmear1 -{ - pic BSMEAR1 - x-scale 0.625 - y-scale 0.625 - shade "68 00 00" - randomflipx - animator BloodSmearer -} - -decal BloodSmear2 -{ - pic BSMEAR1 - x-scale 0.625 - y-scale 0.625 - shade "68 00 00" - randomflipx - animator BloodSmearer -} - -decalgroup BloodSmear -{ - BloodSmear1 1 - BloodSmear2 1 -} - -/***** Rocket Scorches *****************************************************/ - -decal Scorch -{ - pic SCORCH1 - shade "00 00 00" - x-scale 0.5 - y-scale 0.5 - randomflipx - randomflipy -} - -decal BigScorch -{ - pic SCORCH1 - shade "00 00 00" - x-scale 0.75 - y-scale 0.75 - randomflipx - randomflipy -} - -/***** Plasma Rifle Scorches ***********************************************/ - -decal PlasmaScorchLower1 -{ - pic PLASMA1 - shade "00 00 00" - x-scale 0.3 - y-scale 0.3 - randomflipx - randomflipy -} - -decal PlasmaScorch1 -{ - pic PLSSA0 - add 1.0 - fullbright - animator GoAway - lowerdecal PlasmaScorchLower1 -} - -decal PlasmaScorchLower2 -{ - pic PLASMA2 - shade "00 00 00" - x-scale 0.3 - y-scale 0.3 - randomflipx - randomflipy -} - -decal PlasmaScorch2 -{ - pic PLSSB0 - add 1.0 - fullbright - animator GoAway - lowerdecal PlasmaScorchLower2 -} - -decalgroup PlasmaScorchLower -{ - PlasmaScorchLower1 1 - PlasmaScorchLower2 1 -} - -decalgroup PlasmaScorch -{ - PlasmaScorch1 1 - PlasmaScorch2 1 -} - -/***** BFG Scorches ********************************************************/ - -decal BFGScorch1 -{ - pic BFGSCRC1 - shade "00 00 00" - randomflipx - randomflipy -} - -decal BFGScorch2 -{ - pic BFGSCRC2 - shade "00 00 00" - randomflipx - randomflipy -} - -decalgroup BFGScorch -{ - BFGScorch1 1 - BFGScorch2 1 -} - -decal BFGLightning1 -{ - pic BFGLITE1 - shade "80 ff 80" - fullbright - randomflipx - animator GoAway2 - lowerdecal BFGScorch -} - -decal BFGLightning2 -{ - pic BFGLITE2 - shade "80 ff 80" - fullbright - randomflipy - animator GoAway2 - lowerdecal BFGScorch -} - -decalgroup BFGLightning -{ - BFGLightning1 1 - BFGLightning2 1 -} - -/***** Rail Gun Scorches - contributed by Nigel Rowand *********************/ - -decal RailScorchLower1 -{ - pic CBALSCR1 - shade "00 00 00" - x-scale 0.2 - y-scale 0.2 - randomflipx - randomflipy -} - -decal RailScorchLower2 -{ - pic CBALSCR2 - shade "00 00 00" - x-scale 0.2 - y-scale 0.2 - randomflipx - randomflipy -} - -decalgroup RailScorchLower -{ - RailScorchLower1 1 - RailScorchLower2 1 -} - - - -decal RailScorch1 -{ - pic CBALSCR1 - shade "00 00 56" - fullbright - x-scale 0.4 - y-scale 0.4 - animator GoAway - lowerdecal RailScorchLower -} - -decal RailScorch2 -{ - pic CBALSCR2 - shade "00 00 56" - fullbright - x-scale 0.4 - y-scale 0.4 - animator GoAway - lowerdecal RailScorchLower -} - -decalgroup RailScorch -{ - RailScorch1 1 - RailScorch2 1 -} - -/***** Arachnotron Plasma Scorches *****************************************/ - -decal ArachScorch1 -{ - pic APLSA0 - add 1.0 - animator GoAway - lowerdecal PlasmaScorchLower1 -} - -decal ArachScorch2 -{ - pic APLSB0 - add 1.0 - animator GoAway - lowerdecal PlasmaScorchLower2 -} - -decalgroup ArachnotronScorch -{ - ArachScorch1 1 - ArachScorch2 1 -} - -/***** Baron of Hell/Hell Knight Scorches **********************************/ - -decal BaronScorch1 -{ - pic BAL7SCR1 - shade "00 00 00" - x-scale 0.5 - y-scale 0.5 - randomflipx - randomflipy -} - -decal BaronScorch2 -{ - pic BAL7SCR2 - shade "00 00 00" - x-scale 0.5 - y-scale 0.5 - randomflipx - randomflipy -} - -decalgroup BaronScorch -{ - BaronScorch1 1 - BaronScorch2 1 -} - -/***** Cacodemon Scorches **************************************************/ - -decal CacoScorch1 -{ - pic BAL7SCR1 - shade "00 00 00" - x-scale 0.78125 - y-scale 0.78125 - randomflipx - randomflipy -} - -decal CacoScorch2 -{ - pic BAL7SCR2 - shade "00 00 00" - x-scale 0.78125 - y-scale 0.78125 - randomflipx - randomflipy -} - -decalgroup CacoScorch -{ - CacoScorch1 1 - CacoScorch2 1 -} - -/***** Doom Imp Scorches ***************************************************/ - -decal DImpScorch1 -{ - pic CBALSCR1 - shade "00 00 00" - x-scale 0.78125 - y-scale 0.78125 - randomflipx - randomflipy -} - -decal DImpScorch2 -{ - pic CBALSCR2 - shade "00 00 00" - x-scale 0.78125 - y-scale 0.78125 - randomflipx - randomflipy -} - -decalgroup DoomImpScorch -{ - DImpScorch1 1 - DImpScorch2 1 -} - -/***** Revenant ************************************************************/ - -decal RevenantScorch -{ - pic BLAST1 - shade "00 00 00" - x-scale 0.5 - y-scale 0.5 - randomflipx - randomflipy -} - -// Graf Zahl provided definitions for the other games. - -/***** Crossbow ************************************************************/ - -decal CrossbowScorch -{ - pic CBOWMARK - shade "00 00 00" - x-scale 0.4 - y-scale 0.4 - randomflipx - randomflipy -} - -/***** Heretic Imp Scorches ************************************************/ - -decal HImpScorch1 -{ - pic CBALSCR1 - shade "00 00 00" - x-scale 0.5 - y-scale 0.5 - randomflipx - randomflipy -} - -decal HImpScorch2 -{ - pic CBALSCR2 - shade "00 00 00" - x-scale 0.5 - y-scale 0.5 - randomflipx - randomflipy -} - -decalgroup HImpScorch -{ - HImpScorch1 1 - HImpScorch2 1 -} - -/***** Mummy Scorches ******************************************************/ - -decal MummyScorch1 -{ - pic PLASMA1 - shade "00 00 00" - x-scale 0.6 - y-scale 0.6 - randomflipx - randomflipy -} - -decal MummyScorch2 -{ - pic PLASMA2 - shade "00 00 00" - x-scale 0.6 - y-scale 0.6 - randomflipx - randomflipy -} - -decalgroup MummyScorch -{ - MummyScorch1 1 - MummyScorch2 1 -} - -/***** Heretic Knight Axe Scorches **********************************//////// - -decal AxeScorch1 -{ - pic PLASMA1 - shade "00 00 00" - x-scale 0.15 - y-scale 0.6 - randomflipx - randomflipy -} - -decal AxeScorch2 -{ - pic PLASMA2 - shade "00 00 00" - x-scale 0.15 - y-scale 0.6 - randomflipx - randomflipy -} - -decalgroup AxeScorch -{ - AxeScorch1 1 - AxeScorch2 1 -} - -/***** Wizard Scorches *****************************************************/ - -decal WizardScorch1 -{ - pic CBALSCR1 - shade "00 00 00" - x-scale 0.6 - y-scale 0.6 - randomflipx - randomflipy -} - -decal WizardScorch2 -{ - pic CBALSCR2 - shade "00 00 00" - x-scale 0.6 - y-scale 0.6 - randomflipx - randomflipy -} - -decalgroup WizardScorch -{ - WizardScorch1 1 - WizardScorch2 1 -} - -decal SnakeScorch11 -{ - pic CBALSCR1 - shade "00 00 00" - x-scale 0.4 - y-scale 0.4 - randomflipx - randomflipy -} - -decal SnakeScorch12 -{ - pic CBALSCR2 - shade "00 00 00" - x-scale 0.4 - y-scale 0.4 - randomflipx - randomflipy -} - -decalgroup SnakeScorch1 -{ - SnakeScorch11 1 - SnakeScorch12 1 -} - -decal SnakeScorch21 -{ - pic CBALSCR1 - shade "00 00 00" - x-scale 0.7 - y-scale 0.7 - randomflipx - randomflipy -} - -decal SnakeScorch22 -{ - pic CBALSCR1 - shade "00 00 00" - x-scale 0.7 - y-scale 0.7 - randomflipx - randomflipy -} - -decalgroup SnakeScorch2 -{ - SnakeScorch21 1 - SnakeScorch22 1 -} - -/***** Minotaur Scorches ***************************************************/ - -decal MinotaurScorch -{ - pic SCORCH1 - shade "00 00 00" - x-scale 0.55 - y-scale 0.55 - randomflipx - randomflipy -} - -/***** Sorcerer Scorches ***************************************************/ - -decal SorcererScorch1 -{ - pic BFGSCRC1 - shade "00 00 00" - randomflipx - randomflipy -} - -decal SorcererScorch2 -{ - pic BFGSCRC2 - shade "00 00 00" - randomflipx - randomflipy -} - -decalgroup SorcererScorch -{ - SorcererScorch1 1 - SorcererScorch2 1 -} - -decal SorcererLightning1 -{ - pic FX16J0 - add 1.0 - fullbright - animator GoAway2 - lowerdecal SorcererScorch1 -} - -decal SorcererLightning2 -{ - pic FX16K0 - add 1.0 - fullbright - animator GoAway2 - lowerdecal SorcererScorch2 -} - -decalgroup SorcererLightning -{ - SorcererLightning1 1 - SorcererLightning2 1 -} - -/**** Crossbow Scorch ******************************************************/ - -decal CrossbowScorch2 -{ - pic CBOWMARK - shade "00 00 00" - x-scale 0.25 - y-scale 0.25 - randomflipx - randomflipy -} - -/***** Centaur Scorches ****************************************************/ - -decal CentaurScorch -{ - pic BLAST02 - shade "00 00 00" - x-scale 0.7 - y-scale 0.7 - randomflipx - randomflipy -} - -/***** Demon2 Scorch *******************************************************/ - -decal Demon2Scorch -{ - pic BLAST02 - shade "00 00 00" - x-scale 0.65 - y-scale 0.65 - randomflipx - randomflipy -} - -/***** Bishop Scorches *****************************************************/ - -decal BishopScorch1 -{ - pic PLASMA1 - shade "00 00 00" - x-scale 0.5 - y-scale 0.5 - randomflipx - randomflipy -} - -decal BishopScorch2 -{ - pic PLASMA2 - shade "00 00 00" - x-scale 0.5 - y-scale 0.5 - randomflipx - randomflipy -} - -decalgroup BishopScorch -{ - BishopScorch1 1 - BishopScorch2 1 -} - - -/***** Fire Demon Scorches *************************************************/ - -decal FireDemonScorchLower1 -{ - pic CBALSCR1 - shade "00 00 00" - x-scale 0.4 - y-scale 0.4 - randomflipx - randomflipy -} - -decal FireDemonScorchLower2 -{ - pic CBALSCR2 - shade "00 00 00" - x-scale 0.4 - y-scale 0.4 - randomflipx - randomflipy -} - -decalgroup FireDemonScorch -{ - FireDemonScorchLower1 1 - FireDemonScorchLower2 1 -} - -/***** Serpent Scorches ****************************************************/ - -decal SerpentScorchLower1 -{ - pic PLASMA1 - shade "00 00 00" - x-scale 0.8 - y-scale 0.8 - randomflipx - randomflipy -} - -decal SerpentScorchLower2 -{ - pic PLASMA2 - shade "00 00 00" - x-scale 0.8 - y-scale 0.8 - randomflipx - randomflipy -} - -decalgroup SerpentScorch -{ - SerpentScorchLower1 1 - SerpentScorchLower2 1 -} - -/******************** Warrior Decals ***************************************/ - -decal SwordScorch1 -{ - pic BFGSCRC1 - shade "00 00 00" - x-scale 0.5 - y-scale 0.5 - randomflipx - randomflipy -} - -decal SwordScorch2 -{ - pic BFGSCRC2 - shade "00 00 00" - x-scale 0.5 - y-scale 0.5 - randomflipx - randomflipy -} - -decalgroup SwordScorch -{ - SwordScorch1 1 - SwordScorch2 1 -} - -decal SwordLightning1 -{ - pic BFGLITE1 - shade "80 ff 80" - x-scale 0.5 - y-scale 0.5 - fullbright - randomflipx - animator GoAway2 - lowerdecal SwordScorch -} - -decal SwordLightning2 -{ - pic BFGLITE2 - shade "80 ff 80" - x-scale 0.5 - y-scale 0.5 - fullbright - randomflipy - animator GoAway2 - lowerdecal SwordScorch -} - -decalgroup SwordLightning -{ - SwordLightning1 1 - SwordLightning2 1 -} - - -/***** Generators **********************************************************/ - -generator Pistol BulletChip -generator Chainsaw BulletChip -generator Shotgun BulletChip -generator SuperShotgun BulletChip -generator Chaingun BulletChip - -generator PlasmaBall PlasmaScorch -generator Rocket Scorch -generator BFGBall BFGLightning - -generator MarinePistol BulletChip -generator MarineShotgun BulletChip -generator MarineSSG BulletChip -generator MarineChaingun BulletChip -generator MarineRailgun RailScorch - -generator ZombieMan BulletChip -generator ShotgunGuy BulletChip -generator ChaingunGuy BulletChip -generator WolfensteinSS BulletChip -generator SpiderMastermind BulletChip - -generator ArachnotronPlasma ArachnotronScorch -generator BaronBall BaronScorch -generator CacodemonBall CacoScorch -generator DoomImpBall DoomImpScorch -generator FatShot Scorch -generator RevenantTracer RevenantScorch - -generator VolcanoBlast DoomImpScorch -generator VolcanoTBlast SnakeScorch1 -generator HereticImpBall HImpScorch -generator MummyFX1 MummyScorch -generator KnightAxe AxeScorch -generator RedAxe BloodSmear -generator WizardFX1 WizardScorch -generator SnakeProjA SnakeScorch1 -generator SnakeProjB SnakeScorch2 -generator BeastBall DoomImpScorch -generator HeadFX1 SnakeScorch2 -generator HeadFX3 CacoScorch -generator MinotaurFX1 MinotaurScorch -generator SorcererFX1 RevenantScorch -generator Sorcerer2FX1 SorcererLightning -generator GoldWand RailScorchLower -generator GoldWandPowered RailScorchLower -generator GoldWandFX1 HImpScorch -generator CrossbowFX1 CrossbowScorch -generator CrossbowFX3 CrossbowScorch2 -generator MaceFX1 BaronScorch -generator Blaster RailScorchLower -generator BlasterFX1 HImpScorch -generator Ripper HImpScorch -generator HornRodFX1 PlasmaScorchLower -generator HornRodFX2 PlasmaScorchLower -generator PhoenixFX1 Scorch -generator PhoenixFX2 Scorch - -generator CStaffMissile DoomImpScorch -generator HammerMissile Scorch -generator FSwordMissile SwordLightning -generator MageWandMissile RailScorchLower -generator MageStaffFX2 Scorch -generator RipperBall HImpScorch -generator SorcFX1 RevenantScorch -generator SorcFX4 RevenantScorch -generator CentaurFX CentaurScorch -generator Demon1FX1 RevenantScorch -generator Demon2FX1 Demon2Scorch -generator WraithFX1 Demon2Scorch -generator BishopFX BishopScorch -generator FireDemonMissile FireDemonScorch -generator DragonFireball CacoScorch -generator SerpentFX DoomImpScorch - -generator Acolyte BulletChip -generator AcolyteTan BulletChip -generator AcolyteRed BulletChip -generator AcolyteRust BulletChip -generator AcolyteGray BulletChip -generator AcolyteDGreen BulletChip -generator AcolyteGold BulletChip -generator AcolyteLGreen BulletChip -generator AcolyteBlue BulletChip -generator AcolyteShadow BulletChip -generator Rebel BulletChip -generator Rebel1 BulletChip -generator Rebel2 BulletChip -generator Rebel3 BulletChip -generator Rebel4 BulletChip -generator Rebel5 BulletChip -generator Macil1 BulletChip -generator Macil2 BulletChip -generator SentinelFX1 PlasmaScorchLower -generator SentinelFX2 PlasmaScorchLower -generator Templar RailScorchLower -generator Reaver BulletChip -generator FlameMissile CacoScorch -generator FastFlameMissile CacoScorch -generator CrusaderMissile BaronScorch -generator BishopMissile Scorch -generator CeilingTurret BulletChip -generator SpectralLightningBall1 BaronScorch -generator SpectralLightningBall2 BaronScorch -generator SpectralLightningH1 BaronScorch -generator SpectralLightningH2 BaronScorch -generator SpectralLightningH3 BaronScorch -generator SpectralLightningBigBall1 BaronScorch -generator SpectralLightningBigBall2 BaronScorch -generator SpectralLightningV1 BaronScorch -generator SpectralLightningV2 BaronScorch -generator SpectralLightningBigV1 BaronScorch -generator SpectralLightningBigV2 BaronScorch -generator ElectricBolt CrossbowScorch2 -generator AssaultGun BulletChip -generator MiniMissile Scorch -generator Mauler RailScorchLower diff --git a/wadsrc/decals/plasma1.png b/wadsrc/decals/plasma1.png deleted file mode 100644 index cdc99eeab698d589b4d36a20cd90cfebd397aaa3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1214 zcmV;v1VQ_WP)2lL7zN;eRt|Sjt8K-0QUtl| z`#($D1c}{hu_RLBJ_~2+rp<20?&0-^0}}Xgh~UADYzYsCJPbJP{trNq#?mn4o(E7A z=y6243%_ReSq&nQfkz+?Iw7CcfX^5a+z`&`=@}r7tC(rQFcAn3{nJ2PaxM@izys>A zRZjvrea)B{Q{?#p22%VKAZ8IumVpGEbk6wl66FblsxOc=l2O>}5peA>*+%NJ)elC(x@$fuyrvE>SWHDDww`2ga#~y~s6>00dc>OcR_;B0979 z{-Kda4wQS<_kdYC&XVaFrx7H}#HM}}rYN4mC{~UQMw;)yII!cZX*L#~zc{--Lo^El zUWOCPsnODz*12y0YQxm|7lDqlEWUU-UoHb`6%`}xnqJ;3IzlZ&#C`(tf^yEqg45Ar z_UdYp#k_|uO?|E_h$4n5V_D=|^&dc!Ng4$V(Kn0i^4B*D4&ZUmH%=q#rDLA}AnY+* zeF7|D(`gn(JX>DBem%o*A1|J^6$qol!C+^M1xjr75yX5ZtT!4bjSZ0LYYOb@RSc^#BM= zZGi;7&*{KD=4wS#PE+q|V2b?REp1N?5XwBvYDbKSA`ugyBAU+TAxge!sBccgTZGU_ zTWbNMEf7Zo1k$DF(;%Webb(L4F5vHelU@0t>Pw>!gO!R9Iv8&IWit;&m?7Dz!bPQ02?dfc7rckllw*k-e?oNWz!0bu*4E}OyBy4SOj zMa`DA@(9PxzWOVQR(JcF(bj!?(+)^FQ!S2X6xuyHDvz5#^U9!AF41~bp6n0%fJITG z>?+hBIg#hHa0w>m2Bo48AWfA#iht1yV+_=8qKtp znZ$-Mhz%#d10>IpXU!7?Fp@ZSV#71qmr=8uE$(D(F-B6WHHnk+k3gNeyj6t{zl@Fl zhJ{}ww4eKAQ?LOLY!YvKYIAwA|18%;p4U?i>^0`2n^JC|4FPNefNsTA4Log|0s#5~ zdtNo?7>UGgQJao;QVR1-W5YCie6uVkqNyALV!QHURP3V1N zOhzn4@2jgRJ2%Q>eeJL|R1?2Hh3IK&|(x$$@Oqq;NE9zR7r`+wk zK?N3>kE;?@HOT(Mm3q85d*VcNH&U->+_9V1u@BnmRNrRrJPQRn!cMx|o8}lFp#ap% z_ndB&+JqsR3Y%~~p8UA{;`e{0KarzYTm?6k!QRzcfDk`#*l#7G#m>wtWwyH={Q;1F zT#da&-mJ7tCgFKiJUzbX(7>Ap{cPvO4o|(wZt4QCoG2YF22$yu?@GzI93B!-olboa z#MP?=gmbKM|4F>TaYI=W@KC=v5%+>o!aJ<^Oh`Xq*nsTI<6wDtv1(P*%b^yJza$5l zB>mlQN1n&9iKvS~oUMkuJVP$kV~0Tmz@Fo@?O8g;CSF~x7Os1%Qm5^Se(V5yn=`Ys z>-kfK=deRwUY?h2$pD455FB;Mj5U3kP&}uRKBhYtsIM#FNpLIiMwwAf%_oBRw%y_7 zYxx%@tIZ+cTm5_~$kD6)y-$YAo0!S^Mrc1ZrFj}N`Me}sp*3-m9?#K1FJrEWZjj(f zpuR1M@=c^Ao+Ia&tn}C>H^pD+ziFY)W0)bHLe{{*_RUf|nz`eYDJsT#m8QREJ_F|_=_A*L;J zO9}^XnEM&S&2NhB!kVf|2IL zz*fK!jvo_7FnUZEC4dIs=8+pB}!pm z`v3ncSqyQO?piVdoW(Q4&_+{Y$bKU)5zhf4?*PUBiogkc`~L0zH^)@KiOh`r(*K*Q zjT!6~Gs2PoSB{|phe(BTi9X4K3_k}6gv?*(Aj}DHEmeycQNoG9>6V}`<(G&^KoOC@ z!V$9wTapL2S}foID+=NfDJo%}LBb-DX8tQ22nk(zNc+v!{4sMPQ$fY!#o=?TuzH(Haf1{|!TuVLxP}L&r!;^wzBwk6Om7uJ0jR%OK)=D)-du@(^`W{msw_Wfn{ zqt?`Rc|OylmWtimO0;d44AQcg)Ed`_$Y11iSr?`NgzWXt^}EyMz6{{>{AN?wC~n%O zlx->FE4QL8vOmD|OI(7el_p7<%zpp0)@@q{;qr7YBn6lvWm)Q0I*FFG>bA}!DS=<& zq^>J34dk38v0qQRES>mtY6VM7%Tg-QA_#WqLd&Wz4*U|w5UPc{F5gk_45=Kc>(WWr zjU7;y94)If3*m{PWhs%AAkO?b2jRl!6U=xcM&Ys+NLz-=wiI<~!8x5nOP`BtkhbQJ zK0!>#$e-^HIgdp=RNlO@)UvL^%j&b9Y9ZlFMx-CVcF2UJ0j_52;HP)KkrR zS~c7w5S3Dv)3U!vd3g8?3#!Q(9rpKJ31lFB^co1WbBKZnv~IMtLSccqQ!QLC&vjo) zEysM!9;l@hny(#yOIw>B#01zF&Qx0ggqTIOE+QEv#q97!sWB!WHF^x5EMNmX-%)}=BrONb_# zFlA(zM+EDta(;W#W7yo@qxZ2RjF6flyk4G`?TyavYIDv=sheA=Dx@qkj6{SpJUyI( zWFb0VWbqY&`keO%Y%(RFqH8%d^7HrG_-v-5A5E(iI5i7gkK60DTSfw^g>o2uc-!9bs^FyE zm5>C0699uz;l~_{RB@0bJMjw2nEQ1f_t(#_kH`c7C1g7M<-c25P{fzTrjZf=0w^Lm zD*l#b_&!0cN++VIe{>mY3?D-#m_^*w+TAOkLKtO{d!UIk=_c3Pz z5M59C{{HF1hmRk(k1u^V9Dst{ef$vDcW+MTttd(0H8p|w9!B9pHClu_lNfz6)r`H$iV<&-aNMgv!kfy;yoF}nK2`S!mJ-? zjb=IkB}#Yi*Q3_MNGLZ=3g=)L1Mu;AZ`fjv*OMTIjoC@42vN?7`8cvZ;qf}68e9P; zGV95en9>6R6G|qMAVOe!?4-4J@}3sQ=z+CVI6TAl+rG8Z zMiD0xRRt`yIfeJv7)_)ol`J(hVljDnd3~{DA}A49N|Dl*?fL!lDnjY$;Z#=*3P6J4 zlEMWTgU6-|(omeneEo4p_Hn%jZGl4+BwB@7>*>w=cjuyHyO<|$m6(A@XD1`hEFcwG z0*M)!Z2PC%Z9MT>kJr~s7+je}G9lVd@7`@HVaJP`E*D`Xq-OwEEnZDP$<>gXBvLa* z&yLJBpH5GY2hRdh7IH}vU7p{bN=`d&9|u33w{2B~XJlY`wYqL1EL5{VXa<+XM?7eI ze>qQnI!3*R!4*yjQZDDWYYwtwyk7C<^mJYeVmd`S5_Q2Oq9kb??$*&Qxwq%7)OOf# zo9;zaGhHCU?eZl3!DHOJd^z^hqG>UL1CjN+XYPAu5EB7rqYqs9*t?|0txsLf`#2_` zkpwN2<;2nVctq;7 zby;hgXHwY^mdU`_8@RSia7vAYO@;`^7`N9?FZUjET1G+v=TU6^G#}^Fx^P>zM*heV z{8V`w5}dOq*hMXvgp&`qfvjZk9Alch*_>{sN?j|N`(a+B>M#aTcubRr z1ZOa)z)c7K!ZI?U!~$dj5G@(RW{5uA%e3871jrnLo~op*m3tJ#i$hB;{J);0R6V2 z)lzF)*n1Honumu{zdM)ANQ4m~!`y?UwZ=Z?=*R0}68`DfYb>N=%!C3YRg1`s==nHq zrSR|}P3DJnTU`ZVQ{Xnx5t#&58*9JC{aQaT-I%og6n8YxvyK} zv`}vLTK^zy5;O;Mt$CmOy=O{U)(i^k{n0(lNRRk*yUqkO0LjS==gxK8%m*XLdE4r9 zwMjM6cXB#QD>?QVNxb?Su|E1drl}SVOA~=Z(@U7U4u<3rNT0&Us$+e(4BM%u-0!i^ zd0wB7n|F`I=X$?PN`lW_wdI_RYa*e%kgM;fz>l~hZM@Dds1|LkTq0c6@i(akwo-KS!XdCUw8ha)qb zCfMK^K67SL{_}g|L|O)!WhMr>uEAsM5grHt>0mI}5Fx>VMB<-v8RjurA`_8<;>G6d z7UB3yKe<5KuRbuumw?E~q}ff_*3R7~0{>3>kCOvH_@O`?iSB`aum1sWffm_k7lWJt O0000 spraytype, optional eval int numrays, optional eval int damagecount); - action native A_Pain(); - action native A_NoBlocking(); - action native A_XScream(); - action native A_Look(); - action native A_Chase(optional state melee, optional state missile, optional eval int flags); - action native A_FaceTarget(); - action native A_PosAttack(); - action native A_Scream(); - action native A_SPosAttack(); - action native A_SPosAttackUseAtkSound(); - action native A_VileChase(); - action native A_VileStart(); - action native A_VileTarget(); - action native A_VileAttack(); - action native A_StartFire(); - action native A_Fire(); - action native A_FireCrackle(); - action native A_Tracer(); - action native A_SkelWhoosh(); - action native A_SkelFist(); - action native A_SkelMissile(); - action native A_FatRaise(); - action native A_FatAttack1(optional class spawntype); - action native A_FatAttack2(optional class spawntype); - action native A_FatAttack3(optional class spawntype); - action native A_BossDeath(); - action native A_CPosAttack(); - action native A_CPosRefire(); - action native A_TroopAttack(); - action native A_SargAttack(); - action native A_HeadAttack(); - action native A_BruisAttack(); - action native A_SkullAttack(optional eval float speed); - action native A_Metal(); - action native A_SpidRefire(); - action native A_BabyMetal(); - action native A_BspiAttack(); - action native A_Hoof(); - action native A_CyberAttack(); - action native A_PainAttack(optional class spawntype); - action native A_DualPainAttack(optional class spawntype); - action native A_PainDie(optional class spawntype); - action native A_KeenDie(); - action native A_BrainPain(); - action native A_BrainScream(); - action native A_BrainDie(); - action native A_BrainAwake(); - action native A_BrainSpit(optional class spawntype); - action native A_SpawnSound(); - action native A_SpawnFly(optional class spawntype); - action native A_BrainExplode(); - action native A_Die(optional name damagetype); - action native A_Detonate(); - action native A_Mushroom(optional class spawntype, optional eval int numspawns); - - action native A_SetFloorClip(); - action native A_UnSetFloorClip(); - action native A_HideThing(); - action native A_UnHideThing(); - action native A_SetInvulnerable(); - action native A_UnSetInvulnerable(); - action native A_SetReflective(); - action native A_UnSetReflective(); - action native A_SetReflectiveInvulnerable(); - action native A_UnSetReflectiveInvulnerable(); - action native A_SetShootable(); - action native A_UnSetShootable(); - action native A_NoGravity(); - action native A_Gravity(); - action native A_LowGravity(); - action native A_SetGravity(eval float gravity); - action native A_Fall(); - action native A_SetSolid(); - action native A_UnsetSolid(); - action native A_SetFloat(); - action native A_UnsetFloat(); - - action native A_M_Saw(); - - action native A_ScreamAndUnblock(); - action native A_ActiveAndUnblock(); - action native A_ActiveSound(); - - action native A_FastChase(); - action native A_FreezeDeath(); - action native A_FreezeDeathChunks(); - action native A_GenericFreezeDeath(); - action native A_IceGuyDie(); - action native A_CentaurDefend(); - action native A_BishopMissileWeave(); - action native A_CStaffMissileSlither(); - action native A_PlayerScream(); - action native A_SkullPop(optional class skulltype); - action native A_CheckPlayerDone(); - - action native A_Wander(); - action native A_Look2(); - action native A_TossGib(); - action native A_SentinelBob(); - action native A_SentinelRefire(); - action native A_Tracer2(); - action native A_SetShadow(); - action native A_ClearShadow(); - action native A_GetHurt(); - action native A_TurretLook(); - action native A_KlaxonBlare(); - action native A_Countdown(); - action native A_AlertMonsters(); - action native A_ClearSoundTarget(); - action native A_FireAssaultGun(); - action native A_CheckTerrain(); - - action native A_MissileAttack(); - action native A_MeleeAttack(); - action native A_ComboAttack(); - action native A_BulletAttack(); - action native A_PlaySound(sound whattoplay); - action native A_PlayWeaponSound(sound whattoplay); - action native A_FLoopActiveSound(); - action native A_LoopActiveSound(); - action native A_StopSound(); - action native A_PlaySoundEx(sound whattoplay, coerce name slot, optional eval bool looping, optional eval int attenuation); - action native A_StopSoundEx(coerce name slot); - action native A_SeekerMissile(eval int threshold, eval int turnmax); - action native A_Jump(eval int chance, state label, ...); - action native A_CustomMissile(class missiletype, eval float spawnheight, eval int spawnofs_xy, optional eval float angle, optional eval int flags, optional eval float pitch); - action native A_CustomBulletAttack(eval float spread_xy, eval float spread_z, eval int numbullets, eval int damageperbullet, optional class pufftype, optional eval float range, optional eval bool aimfacing); - action native A_CustomRailgun(eval int damage, optional eval int spawnofs_xy, optional color color1, optional color color2, optional eval bool silent, optional eval bool aim, optional eval float maxdiff, optional class pufftype); - action native A_JumpIfHealthLower(eval int health, state label); - action native A_JumpIfCloser(eval float distance, state label); - action native A_JumpIfInventory(class itemtype, eval int itemamount, state label); - action native A_GiveInventory(class itemtype, optional eval int amount); - action native A_TakeInventory(class itemtype, optional eval int amount); - action native A_SpawnItem(class itemtype, optional eval float distance, optional eval float zheight, optional evalnot bool useammo, optional eval bool transfer_translation); - action native A_SpawnItemEx(class itemtype, optional eval float xofs, optional eval float yofs, optional eval float zofs, optional eval float xmom, optional eval float ymom, optional eval float zmom, optional eval float angle, optional eval int flags, optional eval int chance); - action native A_Print(string whattoprint, optional eval float time, optional string fontname); - action native A_SetTranslucent(eval float alpha, optional eval int style); - action native A_FadeIn(optional eval float reduce); - action native A_FadeOut(optional eval float reduce); - action native A_SpawnDebris(class spawntype, optional eval bool transfer_translation, optional eval float mult_h, optional eval float mult_v); - action native A_CheckSight(state label); - action native A_ExtChase(eval bool usemelee, eval bool usemissile, optional evalnot bool playactive, optional eval bool nightmarefast); - action native A_DropInventory(class itemtype); - action native A_SetBlend(color color1, eval float alpha, eval int tics, optional color color2); - action native A_ChangeFlag(string flagname, eval bool value); - action native A_JumpIf(eval bool expression, state label); - action native A_KillMaster(); - action native A_KillChildren(); - action native A_CheckFloor(state label); - action native A_PlayerSkinCheck(state label); - action native A_BasicAttack(int meleedamage, sound meleesound, class missiletype, float missileheight); - action native A_ThrowGrenade(class itemtype, optional eval float zheight, optional eval float xymom, optional eval float zmom, optional evalnot bool useammo); - - action native A_Recoil(eval float xymom); - action native A_JumpIfInTargetInventory(class itemtype, eval int amount, state label); - action native A_GiveToTarget(class itemtype, optional eval int amount); - action native A_TakeFromTarget(class itemtype, optional eval int amount); - action native A_CountdownArg(eval int argnum); - action native A_CustomMeleeAttack(eval int damage, optional sound meleesound, optional sound misssound, optional name damagetype, optional evalnot bool bleed); - action native A_CustomComboAttack(class missiletype, eval float spawnheight, eval int damage, optional sound meleesound, optional name damagetype, optional evalnot bool bleed); - action native A_Burst(class chunktype); - action native A_RadiusThrust(optional eval int force, optional eval int distance, optional evalnot bool affectsource); - action native A_Explode(optional eval int damage, optional eval int distance, optional evalnot bool hurtsource); - action native A_Stop(); - action native A_Respawn(optional evalnot bool fog); - action native A_BarrelDestroy(); - action native A_QueueCorpse(); - action native A_DeQueueCorpse(); - action native A_LookEx(optional eval int flags, optional eval float minseedist, optional eval float maxseedist, optional eval float maxheardist, optional eval float fov, optional state label); - action native A_ClearTarget(); - action native A_JumpIfTargetInLOS (state label, optional eval float fov, optional eval bool projectiletarget); - action native A_DamageMaster(eval int amount, optional name damagetype); - action native A_DamageChildren(eval int amount, optional name damagetype); - action native A_SelectWeapon(class whichweapon); - action native A_Punch(); -} - -class Inventory extends Actor - native -{ - action native A_JumpIfNoAmmo(state label); - action native A_CustomPunch(eval int damage, optional eval bool norandom, optional evalnot bool useammo, optional class pufftype, optional eval float range); - action native A_FireBullets(eval float spread_xy, eval float spread_z, eval int numbullets, eval int damageperbullet, optional class pufftype, optional evalnot bool useammo, optional eval float range); - action native A_FireCustomMissile(class missiletype, optional eval float angle, optional evalnot bool useammo, optional eval int spawnofs_xy, optional eval float spawnheight, optional eval bool aimatangle); - action native A_RailAttack(eval int damage, optional eval int spawnofs_xy, optional evalnot int useammo, optional color color1, optional color color2, optional eval bool silent, optional eval float maxdiff, optional class pufftype); - action native A_Light(eval int extralight); - action native A_Light0(); - action native A_Light1(); - action native A_Light2(); - action native A_LightInverse(); - action native A_WeaponReady(); - action native A_Lower(); - action native A_Raise(); - action native A_FirePistol(); - action native A_FireShotgun(); - action native A_FireShotgun2(); - action native A_OpenShotgun2(); - action native A_LoadShotgun2(); - action native A_CloseShotgun2(); - action native A_FireCGun(); - action native A_FireMissile(); - action native A_FirePlasma(); - action native A_FireRailgun(); - action native A_FireRailgunLeft(); - action native A_FireRailgunRight(); - action native A_RailWait(); - action native A_BFGsound(); - action native A_FireBFG(); - action native A_ReFire(); - action native A_ClearReFire(); - action native A_CheckReload(); - action native A_GunFlash(); - action native A_Saw(optional coerce sound fullsound, optional coerce sound hitsound, optional eval int damage, optional class pufftype); - action native A_CheckForReload(eval int counter, state label); - action native A_ResetReloadCounter(); -} - diff --git a/wadsrc/decorate/raven/artiegg.txt b/wadsrc/decorate/raven/artiegg.txt deleted file mode 100644 index 18a2d83f..00000000 --- a/wadsrc/decorate/raven/artiegg.txt +++ /dev/null @@ -1,108 +0,0 @@ - -// Egg missile -------------------------------------------------------------- - -ACTOR EggFX : MorphProjectile -{ - Game Heretic - SpawnID 40 - Radius 8 - Height 8 - Speed 18 - MorphProjectile.PlayerClass "ChickenPlayer" - MorphProjectile.MonsterClass "Chicken" - MorphProjectile.MorphStyle MRF_UNDOBYTOMEOFPOWER - States - { - Spawn: - EGGM ABCDE 4 - Loop - Death: - FX01 FFGH 3 Bright - Stop - } -} - - -// Morph Ovum ---------------------------------------------------------------- - -ACTOR ArtiEgg : CustomInventory 30 -{ - Game Heretic - SpawnID 14 - +COUNTITEM - +FLOATBOB - +INVENTORY.INVBAR - +INVENTORY.PICKUPFLASH - +INVENTORY.FANCYPICKUPSOUND - Inventory.Icon "ARTIEGGC" - Inventory.PickupSound "misc/p_pkup" - Inventory.PickupMessage "$TXT_ARTIEGG" - Inventory.DefMaxAmount - States - { - Spawn: - EGGC ABCB 6 - Loop - Use: - TNT1 A 0 A_FireCustomMissile("EggFX", -15, 0, 0, 0, 1) - TNT1 A 0 A_FireCustomMissile("EggFX", -7.5, 0, 0, 0, 1) - TNT1 A 0 A_FireCustomMissile("EggFX", 0, 0, 0, 0, 1) - TNT1 A 0 A_FireCustomMissile("EggFX", 7.5, 0, 0, 0, 1) - TNT1 A 0 A_FireCustomMissile("EggFX", 15, 0, 0, 0, 1) - Stop - } -} - -// Pork missile -------------------------------------------------------------- - -ACTOR PorkFX : MorphProjectile -{ - Game Hexen - SpawnID 40 - Radius 8 - Height 8 - Speed 18 - MorphProjectile.PlayerClass "PigPlayer" - MorphProjectile.MonsterClass "Pig" - MorphProjectile.MorphStyle MRF_UNDOBYTOMEOFPOWER|MRF_UNDOBYCHAOSDEVICE - States - { - Spawn: - PRKM ABCDE 4 - Loop - Death: - FHFX IJKL 3 Bright - Stop - } -} - -// Porkalator --------------------------------------------------------------- - -ACTOR ArtiPork : CustomInventory 30 -{ - Game Hexen - SpawnID 14 - +COUNTITEM - +FLOATBOB - +INVENTORY.INVBAR - +INVENTORY.PICKUPFLASH - +INVENTORY.FANCYPICKUPSOUND - Inventory.Icon "ARTIPORK" - Inventory.PickupSound "misc/p_pkup" - Inventory.PickupMessage "$TXT_ARTIEGG2" - Inventory.DefMaxAmount - States - { - Spawn: - PORK ABCB 6 - Loop - Use: - TNT1 A 0 A_FireCustomMissile("PorkFX", -15, 0, 0, 0, 1) - TNT1 A 0 A_FireCustomMissile("PorkFX", -7.5, 0, 0, 0, 1) - TNT1 A 0 A_FireCustomMissile("PorkFX", 0, 0, 0, 0, 1) - TNT1 A 0 A_FireCustomMissile("PorkFX", 7.5, 0, 0, 0, 1) - TNT1 A 0 A_FireCustomMissile("PorkFX", 15, 0, 0, 0, 1) - Stop - } -} - diff --git a/wadsrc/decorate/raven/ravenambient.txt b/wadsrc/decorate/raven/ravenambient.txt deleted file mode 100644 index 8489803e..00000000 --- a/wadsrc/decorate/raven/ravenambient.txt +++ /dev/null @@ -1,42 +0,0 @@ - - -// Wind --------------------------------------------------------------------- - -ACTOR SoundWind 42 -{ - Game Heretic - SpawnID 110 - +NOBLOCKMAP - +NOSECTOR - +DONTSPLASH - States - { - Spawn: - TNT1 A 2 A_PlaySoundEx("world/wind", "SoundSlot6", 1) - Loop - } -} - -ACTOR SoundWindHexen : SoundWind 1410 -{ - Game Hexen - SpawnID 110 -} - - -// Waterfall ---------------------------------------------------------------- - -ACTOR SoundWaterfall 41 -{ - Game Heretic - SpawnID 111 - +NOBLOCKMAP - +NOSECTOR - +DONTSPLASH - States - { - Spawn: - TNT1 A 2 A_PlaySoundEx("world/waterfall", "SoundSlot6", 1) - Loop - } -} diff --git a/wadsrc/decorate/raven/ravenartifacts.txt b/wadsrc/decorate/raven/ravenartifacts.txt deleted file mode 100644 index 6729869f..00000000 --- a/wadsrc/decorate/raven/ravenartifacts.txt +++ /dev/null @@ -1,108 +0,0 @@ - -// Health ------------------------------------------------------------------- - -ACTOR ArtiHealth : HealthPickup 82 -{ - Game Raven - SpawnID 24 - Health 25 - +COUNTITEM - +FLOATBOB - +INVENTORY.PICKUPFLASH - +INVENTORY.FANCYPICKUPSOUND - Inventory.Icon ARTIPTN2 - Inventory.PickupSound "misc/p_pkup" - Inventory.PickupMessage "$TXT_ARTIHEALTH" - States - { - Spawn: - PTN2 ABC 4 - Loop - } -} - -// Super health ------------------------------------------------------------- - -ACTOR ArtiSuperHealth : HealthPickup 32 -{ - Game Raven - SpawnID 25 - Health 100 - +COUNTITEM - +FLOATBOB - +INVENTORY.PICKUPFLASH - +INVENTORY.FANCYPICKUPSOUND - Inventory.Icon ARTISPHL - Inventory.PickupSound "misc/p_pkup" - Inventory.PickupMessage "$TXT_ARTISUPERHEALTH" - States - { - Spawn: - SPHL A 350 - Loop - } -} - -// Flight ------------------------------------------------------------------- - -ACTOR ArtiFly : PowerupGiver 83 -{ - Game Raven - SpawnID 15 - +COUNTITEM - +FLOATBOB - +INVENTORY.PICKUPFLASH - +INVENTORY.INTERHUBSTRIP - Inventory.RespawnTics 4230 - Inventory.Icon ARTISOAR - Inventory.PickupMessage "$TXT_ARTIFLY" - Powerup.Type Flight - States - { - Spawn: - SOAR ABCB 5 - Loop - } -} - -// Invulnerability ---------------------------------------------------------- - -ACTOR ArtiInvulnerability : PowerupGiver 84 -{ - Game Raven - SpawnID 133 - +COUNTITEM - +FLOATBOB - +INVENTORY.PICKUPFLASH - Inventory.RespawnTics 4230 - Inventory.Icon ARTIINVU - Inventory.PickupMessage "$TXT_ARTIINVULNERABILITY" - Inventory.PickupMessage Hexen, "$TXT_ARTIINVULNERABILITY2" - Powerup.Type Invulnerable - States - { - Spawn: - INVU ABCD 3 - Loop - } -} - -// Torch -------------------------------------------------------------------- - -ACTOR ArtiTorch : PowerupGiver 33 -{ - Game Raven - SpawnID 73 - +COUNTITEM - +FLOATBOB - +INVENTORY.PICKUPFLASH - Inventory.Icon ARTITRCH - Inventory.PickupMessage "$TXT_ARTITORCH" - Powerup.Type Torch - States - { - Spawn: - TRCH ABC 3 Bright - Loop - } -} diff --git a/wadsrc/decorate/raven/ravenhealth.txt b/wadsrc/decorate/raven/ravenhealth.txt deleted file mode 100644 index af951be1..00000000 --- a/wadsrc/decorate/raven/ravenhealth.txt +++ /dev/null @@ -1,15 +0,0 @@ -ACTOR CrystalVial : Health 81 -{ - Game Raven - SpawnID 23 - +FLOATBOB - Inventory.Amount 10 - Inventory.PickupMessage "$TXT_ITEMHEALTH" - States - { - Spawn: - PTN1 ABC 3 - Loop - } -} - diff --git a/wadsrc/decorate/shared/blood.txt b/wadsrc/decorate/shared/blood.txt deleted file mode 100644 index 5a7ae201..00000000 --- a/wadsrc/decorate/shared/blood.txt +++ /dev/null @@ -1,67 +0,0 @@ - -// Blood sprite ------------------------------------------------------------ - -ACTOR Blood -{ - SpawnID 130 - Mass 5 - +NOBLOCKMAP - +NOTELEPORT - States - { - Spawn: - BLUD CBA 8 - Stop - Spray: - SPRY ABCDEF 3 - SPRY G 2 - Stop - } -} - -// Blood splatter ----------------------------------------------------------- - -ACTOR BloodSplatter -{ - Radius 2 - Height 4 - +NOBLOCKMAP - +MISSILE - +DROPOFF - +NOTELEPORT - +CANNOTPUSH - Mass 5 - States - { - Spawn: - BLUD CBA 8 - Stop - Death: - BLUD A 6 - Stop - } -} - -// Axe Blood ---------------------------------------------------------------- - -ACTOR AxeBlood -{ - Radius 2 - Height 4 - +NOBLOCKMAP - +NOGRAVITY - +DROPOFF - +NOTELEPORT - +CANNOTPUSH - Mass 5 - States - { - Spawn: - FAXE FGHIJ 3 - Death: - FAXE K 3 - Stop - } -} - - \ No newline at end of file diff --git a/wadsrc/decorate/shared/botstuff.txt b/wadsrc/decorate/shared/botstuff.txt deleted file mode 100644 index b64b6963..00000000 --- a/wadsrc/decorate/shared/botstuff.txt +++ /dev/null @@ -1,19 +0,0 @@ - -ACTOR CajunBodyNode -{ - +NOSECTOR - +NOGRAVITY - +INVISIBLE -} - -ACTOR CajunTrace -{ - Speed 12 - Radius 6 - Height 8 - +NOBLOCKMAP - +DROPOFF - +MISSILE - +NOGRAVITY - +NOTELEPORT -} diff --git a/wadsrc/decorate/shared/debris.txt b/wadsrc/decorate/shared/debris.txt deleted file mode 100644 index e34c55f5..00000000 --- a/wadsrc/decorate/shared/debris.txt +++ /dev/null @@ -1,410 +0,0 @@ - -// Rocks -------------------------------------------------------------------- - -ACTOR Rock1 -{ - SpawnID 41 - +NOBLOCKMAP - +DROPOFF - +MISSILE - +NOTELEPORT - States - { - Spawn: - ROKK A 20 - Loop - Death: - ROKK A 10 - Stop - } -} - -ACTOR Rock2 -{ - SpawnID 42 - +NOBLOCKMAP - +DROPOFF - +MISSILE - +NOTELEPORT - States - { - Spawn: - ROKK B 20 - Loop - Death: - ROKK B 10 - Stop - } -} - - -ACTOR Rock3 -{ - SpawnID 43 - +NOBLOCKMAP - +DROPOFF - +MISSILE - +NOTELEPORT - States - { - Spawn: - ROKK C 20 - Loop - Death: - ROKK C 10 - Stop - } -} - - -// Dirt -------------------------------------------------------------------- - -ACTOR Dirt1 -{ - SpawnID 44 - +NOBLOCKMAP - +DROPOFF - +MISSILE - +NOTELEPORT - States - { - Spawn: - ROKK D 20 - Loop - Death: - ROKK D 10 - Stop - } -} - -ACTOR Dirt2 -{ - SpawnID 45 - +NOBLOCKMAP - +DROPOFF - +MISSILE - +NOTELEPORT - States - { - Spawn: - ROKK E 20 - Loop - Death: - ROKK E 10 - Stop - } -} - -ACTOR Dirt3 -{ - SpawnID 46 - +NOBLOCKMAP - +DROPOFF - +MISSILE - +NOTELEPORT - States - { - Spawn: - ROKK F 20 - Loop - Death: - ROKK F 10 - Stop - } -} - -ACTOR Dirt4 -{ - SpawnID 47 - +NOBLOCKMAP - +DROPOFF - +MISSILE - +NOTELEPORT - States - { - Spawn: - ROKK G 20 - Loop - Death: - ROKK G 10 - Stop - } -} - -ACTOR Dirt5 -{ - SpawnID 48 - +NOBLOCKMAP - +DROPOFF - +MISSILE - +NOTELEPORT - States - { - Spawn: - ROKK H 20 - Loop - Death: - ROKK H 10 - Stop - } -} - -ACTOR Dirt6 -{ - SpawnID 49 - +NOBLOCKMAP - +DROPOFF - +MISSILE - +NOTELEPORT - States - { - Spawn: - ROKK I 20 - Loop - Death: - ROKK I 10 - Stop - } -} - -// Stained glass ------------------------------------------------------------ - - -ACTOR SGShard1 : GlassShard -{ - SpawnID 54 - Radius 5 - Mass 5 - Projectile - -ACTIVATEMCROSS - -ACTIVATEIMPACT - +HEXENBOUNCE - BounceFactor 0.3 - States - { - Spawn: - SGSA ABCDE 4 - Loop - Death: - SGSA E 30 - Stop - } -} - -ACTOR SGShard2 : GlassShard -{ - SpawnID 55 - Radius 5 - Mass 5 - Projectile - -ACTIVATEMCROSS - -ACTIVATEIMPACT - +HEXENBOUNCE - BounceFactor 0.3 - States - { - Spawn: - SGSA FGHIJ 4 - Loop - Death: - SGSA J 30 - Stop - } -} - -ACTOR SGShard3 : GlassShard -{ - SpawnID 56 - Radius 5 - Mass 5 - Projectile - -ACTIVATEMCROSS - -ACTIVATEIMPACT - +HEXENBOUNCE - BounceFactor 0.3 - States - { - Spawn: - SGSA KLMNO 4 - Loop - Death: - SGSA O 30 - Stop - } -} - -ACTOR SGShard4 : GlassShard -{ - SpawnID 57 - Radius 5 - Mass 5 - Projectile - -ACTIVATEMCROSS - -ACTIVATEIMPACT - +HEXENBOUNCE - BounceFactor 0.3 - States - { - Spawn: - SGSA PQRST 4 - Loop - Death: - SGSA T 30 - Stop - } -} - -ACTOR SGShard5 : GlassShard -{ - SpawnID 58 - Radius 5 - Mass 5 - Projectile - -ACTIVATEMCROSS - -ACTIVATEIMPACT - +HEXENBOUNCE - BounceFactor 0.3 - States - { - Spawn: - SGSA UVWXY 4 - Loop - Death: - SGSA Y 30 - Stop - } -} - -ACTOR SGShard6 : GlassShard -{ - SpawnID 59 - Radius 5 - Mass 5 - Projectile - -ACTIVATEMCROSS - -ACTIVATEIMPACT - +HEXENBOUNCE - BounceFactor 0.3 - States - { - Spawn: - SGSB A 4 - Loop - Death: - SGSB A 30 - Stop - } -} - -ACTOR SGShard7 : GlassShard -{ - SpawnID 60 - Radius 5 - Mass 5 - Projectile - -ACTIVATEMCROSS - -ACTIVATEIMPACT - +HEXENBOUNCE - BounceFactor 0.3 - States - { - Spawn: - SGSB B 4 - Loop - Death: - SGSB B 30 - Stop - } -} - -ACTOR SGShard8 : GlassShard -{ - SpawnID 61 - Radius 5 - Mass 5 - Projectile - -ACTIVATEMCROSS - -ACTIVATEIMPACT - +HEXENBOUNCE - BounceFactor 0.3 - States - { - Spawn: - SGSB C 4 - Loop - Death: - SGSB C 30 - Stop - } -} - -ACTOR SGShard9 : GlassShard -{ - SpawnID 62 - Radius 5 - Mass 5 - Projectile - -ACTIVATEMCROSS - -ACTIVATEIMPACT - +HEXENBOUNCE - BounceFactor 0.3 - States - { - Spawn: - SGSB D 4 - Loop - Death: - SGSB D 30 - Stop - } -} - -ACTOR SGShard0 : GlassShard -{ - SpawnID 63 - Radius 5 - Mass 5 - Projectile - -ACTIVATEMCROSS - -ACTIVATEIMPACT - +HEXENBOUNCE - BounceFactor 0.3 - States - { - Spawn: - SGSB E 4 - Loop - Death: - SGSB E 30 - Stop - } -} - -ACTOR GlassJunk -{ - +NOCLIP - +NOBLOCKMAP - RenderStyle Translucent - Alpha 0.4 - Health 3 // Number of different shards - States - { - // Are the first three frames used anywhere? - SHAR A 128 - Goto Death - SHAR B 128 - Goto Death - SHAR C 128 - Goto Death - Spawn: - SHAR D 128 - Goto Death - SHAR E 128 - Goto Death - SHAR F 128 - Goto Death - Death: - "----" A 1 A_FadeOut(0.03) - Wait - } -} diff --git a/wadsrc/decorate/shared/fountain.txt b/wadsrc/decorate/shared/fountain.txt deleted file mode 100644 index 5f1e5521..00000000 --- a/wadsrc/decorate/shared/fountain.txt +++ /dev/null @@ -1,35 +0,0 @@ - -ACTOR RedParticleFountain : ParticleFountain 9027 -{ - Health 1 -} - -ACTOR GreenParticleFountain : ParticleFountain 9028 -{ - Health 2 -} - -ACTOR BlueParticleFountain : ParticleFountain 9029 -{ - Health 3 -} - -ACTOR YellowParticleFountain : ParticleFountain 9030 -{ - Health 4 -} - -ACTOR PurpleParticleFountain : ParticleFountain 9031 -{ - Health 5 -} - -ACTOR BlackParticleFountain : ParticleFountain 9032 -{ - Health 6 -} - -ACTOR WhiteParticleFountain : ParticleFountain 9033 -{ - Health 7 -} diff --git a/wadsrc/decorate/shared/pickups.txt b/wadsrc/decorate/shared/pickups.txt deleted file mode 100644 index 43e2d228..00000000 --- a/wadsrc/decorate/shared/pickups.txt +++ /dev/null @@ -1,18 +0,0 @@ -/***************************************************************************/ -// -// shown for respawning Doom and Strife items -// -/***************************************************************************/ - -ACTOR ItemFog -{ - +NOBLOCKMAP - +NOGRAVITY - States - { - Spawn: - IFOG ABABCDE 6 BRIGHT - Stop - } -} - diff --git a/wadsrc/decorate/shared/sharedmisc.txt b/wadsrc/decorate/shared/sharedmisc.txt deleted file mode 100644 index 3a643881..00000000 --- a/wadsrc/decorate/shared/sharedmisc.txt +++ /dev/null @@ -1,92 +0,0 @@ - -// Default actor for unregistered doomednums ------------------------------- - -ACTOR Unknown -{ - Radius 32 - Height 56 - +NOGRAVITY - +NOBLOCKMAP - +DONTSPLASH - States - { - Spawn: - UNKN A -1 - Stop - } -} - -// Route node for monster patrols ------------------------------------------- - -ACTOR PatrolPoint 9024 -{ - Radius 8 - Height 8 - Mass 10 - +NOGRAVITY - +NOBLOCKMAP - +DONTSPLASH - RenderStyle None -} - -// A special to execute when a monster reaches a matching patrol point ------ - -ACTOR PatrolSpecial 9047 -{ - Radius 8 - Height 8 - Mass 10 - +NOGRAVITY - +NOBLOCKMAP - +DONTSPLASH - RenderStyle None -} - -// Map spot ---------------------------------------------------------------- - -ACTOR MapSpot 9001 -{ - +NOBLOCKMAP - +NOSECTOR - +NOGRAVITY - +DONTSPLASH - RenderStyle None -} - -// Map spot with gravity --------------------------------------------------- - -ACTOR MapSpotGravity : MapSpot 9013 -{ - -NOBLOCKMAP - -NOSECTOR - -NOGRAVITY -} - -// Bloody gibs ------------------------------------------------------------- - -ACTOR RealGibs -{ - +DROPOFF - +CORPSE - +NOTELEPORT - +DONTGIB - States - { - Spawn: - POL5 A -1 - Stop - } -} - -// Gibs that can be placed on a map. --------------------------------------- -// -// These need to be a separate class from the above, in case someone uses -// a deh patch to change the gibs, since ZDoom actually creates a gib actor -// for actors that get crushed instead of changing their state as Doom did. - -ACTOR Gibs : RealGibs 24 -{ - Game Doom - SpawnID 146 - ClearFlags -} diff --git a/wadsrc/decorate/shared/soundsequence.txt b/wadsrc/decorate/shared/soundsequence.txt deleted file mode 100644 index 523e97d4..00000000 --- a/wadsrc/decorate/shared/soundsequence.txt +++ /dev/null @@ -1,63 +0,0 @@ - -// Heretic Sound sequences ----------------------------------------------------------- - -ACTOR HereticSoundSequence1 : SoundSequence 1200 -{ - Game Heretic - Args 0 -} - -ACTOR HereticSoundSequence2 : SoundSequence 1201 -{ - Game Heretic - Args 1 -} - -ACTOR HereticSoundSequence3 : SoundSequence 1202 -{ - Game Heretic - Args 2 -} - -ACTOR HereticSoundSequence4 : SoundSequence 1203 -{ - Game Heretic - Args 3 -} - -ACTOR HereticSoundSequence5 : SoundSequence 1204 -{ - Game Heretic - Args 4 -} - -ACTOR HereticSoundSequence6 : SoundSequence 1205 -{ - Game Heretic - Args 5 -} - -ACTOR HereticSoundSequence7 : SoundSequence 1206 -{ - Game Heretic - Args 6 -} - -ACTOR HereticSoundSequence8 : SoundSequence 1207 -{ - Game Heretic - Args 7 -} - -ACTOR HereticSoundSequence9 : SoundSequence 1208 -{ - Game Heretic - Args 8 -} - -ACTOR HereticSoundSequence10 : SoundSequence 1209 -{ - Game Heretic - Args 9 -} - diff --git a/wadsrc/decorate/shared/splashes.txt b/wadsrc/decorate/shared/splashes.txt deleted file mode 100644 index 64bb1490..00000000 --- a/wadsrc/decorate/shared/splashes.txt +++ /dev/null @@ -1,237 +0,0 @@ - -// Water -------------------------------------------------------------------- - -ACTOR WaterSplash -{ - Radius 2 - Height 4 - +NOBLOCKMAP - +MISSILE - +DROPOFF - +NOTELEPORT - +LOWGRAVITY - +CANNOTPUSH - +DONTSPLASH - +DONTBLAST - States - { - Spawn: - SPSH ABC 8 - SPSH D 16 - Stop - Death: - SPSH D 10 - Stop - } -} - - -ACTOR WaterSplashBase -{ - +NOBLOCKMAP - +NOCLIP - +NOGRAVITY - +DONTSPLASH - +DONTBLAST - States - { - Spawn: - SPSH EFGHIJK 5 - Stop - } -} - -// Lava --------------------------------------------------------------------- - -ACTOR LavaSplash -{ - +NOBLOCKMAP - +NOCLIP - +NOGRAVITY - +DONTSPLASH - +DONTBLAST - States - { - Spawn: - LVAS ABCDEF 5 Bright - Stop - } -} - -ACTOR LavaSmoke -{ - +NOBLOCKMAP - +NOCLIP - +NOGRAVITY - +DONTSPLASH - RenderStyle Translucent - Alpha Default - States - { - Spawn: - LVAS GHIJK 5 Bright - Stop - } -} - -// Sludge ------------------------------------------------------------------- - -ACTOR SludgeChunk -{ - Radius 2 - Height 4 - +NOBLOCKMAP - +MISSILE - +DROPOFF - +NOTELEPORT - +LOWGRAVITY - +CANNOTPUSH - +DONTSPLASH - States - { - Spawn: - SLDG ABCD 8 - Stop - Death: - SLDG D 6 - Stop - } -} - -ACTOR SludgeSplash -{ - +NOBLOCKMAP - +NOCLIP - +NOGRAVITY - +DONTSPLASH - States - { - Spawn: - SLDG EFGH 6 - Stop - } -} - -/* - * These next four classes are not used by me anywhere. - * They are for people who want to use them in a TERRAIN lump. - */ - -// Blood (water with a different sprite) ------------------------------------ - -ACTOR BloodSplash -{ - Radius 2 - Height 4 - +NOBLOCKMAP - +MISSILE - +DROPOFF - +NOTELEPORT - +LOWGRAVITY - +CANNOTPUSH - +DONTSPLASH - +DONTBLAST - States - { - Spawn: - BSPH ABC 8 - BSPH D 16 - Stop - Death: - BSPH D 10 - Stop - } -} - - -ACTOR BloodSplashBase -{ - +NOBLOCKMAP - +NOCLIP - +NOGRAVITY - +DONTSPLASH - +DONTBLAST - States - { - Spawn: - BSPH EFGHIJK 5 - Stop - } -} - -// Slime (sludge with a different sprite) ----------------------------------- - -ACTOR SlimeChunk -{ - Radius 2 - Height 4 - +NOBLOCKMAP - +MISSILE - +DROPOFF - +NOTELEPORT - +LOWGRAVITY - +CANNOTPUSH - +DONTSPLASH - States - { - Spawn: - SLIM ABCD 8 - Stop - Death: - SLIM D 6 - Stop - } -} - -ACTOR SlimeSplash -{ - +NOBLOCKMAP - +NOCLIP - +NOGRAVITY - +DONTSPLASH - States - { - Spawn: - SLIM EFGH 6 - Stop - } -} - -// Smoke trail for rocket ----------------------------------- - -ACTOR RocketSmokeTrail -{ - RenderStyle Translucent - Alpha 0.4 - VSpeed 1 - +NOBLOCKMAP - +NOCLIP - +NOGRAVITY - +DONTSPLASH - +NOTELEPORT - States - { - Spawn: - RSMK ABCDE 5 - Stop - } -} - -ACTOR GrenadeSmokeTrail -{ - RenderStyle Translucent - Alpha 0.4 - +NOBLOCKMAP - +NOCLIP - +DONTSPLASH - +NOTELEPORT - Gravity 0.1 - VSpeed 0.5 - Scale 0.6 - States - { - Spawn: - RSMK ABCDE 4 - Stop - } -} diff --git a/wadsrc/decorate/strife/beggars.txt b/wadsrc/decorate/strife/beggars.txt deleted file mode 100644 index 8820f32d..00000000 --- a/wadsrc/decorate/strife/beggars.txt +++ /dev/null @@ -1,97 +0,0 @@ - -// Base class for the beggars --------------------------------------------- - -ACTOR Beggar : StrifeHumanoid -{ - Health 20 - PainChance 250 - Speed 3 - Radius 20 - Height 56 - Monster - +JUSTHIT - -COUNTKILL - +NOSPLASHALERT - MinMissileChance 150 - Tag "Beggar" - MaxStepHeight 16 - MaxDropoffHeight 32 - HitObituary "$OB_BEGGAR" - - AttackSound "beggar/attack" - PainSound "beggar/pain" - DeathSound "beggar/death" - States - { - Spawn: - BEGR A 10 A_Look - Loop - See: - BEGR AABBCC 4 A_Wander - Loop - Melee: - BEGR D 8 - BEGR D 8 A_CustomMeleeAttack(2*random[PeasantAttack](1,5)+2) - BEGR E 1 A_Chase - BEGR D 8 A_SentinelRefire - Loop - Pain: - BEGR A 3 A_Pain - BEGR A 3 A_Chase - Goto Melee - Death: - BEGR F 4 - BEGR G 4 A_Scream - BEGR H 4 - BEGR I 4 A_NoBlocking - BEGR JKLM 4 - BEGR N -1 - Stop - XDeath: - BEGR F 5 A_TossGib - GIBS M 5 A_TossGib - GIBS N 5 A_XScream - GIBS O 5 A_NoBlocking - GIBS PQRST 4 A_TossGib - GIBS U 5 - GIBS V 1400 - Stop - } -} - - -// Beggars ----------------------------------------------------------------- - -ACTOR Beggar1 : Beggar 141 -{ - Game Strife - ConversationID 38, 37, 38 -} - - -ACTOR Beggar2 : Beggar 155 -{ - Game Strife - ConversationID 39, 38, 39 -} - - -ACTOR Beggar3 : Beggar 156 -{ - Game Strife - ConversationID 40, 39, 40 -} - - -ACTOR Beggar4 : Beggar 157 -{ - Game Strife - ConversationID 41, 40, 41 -} - - -ACTOR Beggar5 : Beggar 158 -{ - Game Strife - ConversationID 42, 41, 42 -} diff --git a/wadsrc/decorate/strife/merchants.txt b/wadsrc/decorate/strife/merchants.txt deleted file mode 100644 index e49db9ee..00000000 --- a/wadsrc/decorate/strife/merchants.txt +++ /dev/null @@ -1,99 +0,0 @@ -// Base class for the merchants --------------------------------------------- - -ACTOR Merchant -{ - Health 10000000 - PainChance 256 // a merchant should always enter the pain state when getting hurt - Radius 20 - Height 56 - Mass 5000 - +SOLID - +SHOOTABLE - +NOTDMATCH - +NOSPLASHALERT - +NODAMAGE - States - { - Spawn: - MRST A 10 A_Look2 - Loop - MRLK A 30 A_ActiveSound - Loop - MRLK B 30 - Loop - MRBD ABCDEDCB 4 - MRBD A 5 - MRBD F 6 - Loop - See: - Pain: - MRPN A 3 A_AlertMonsters - MRPN B 3 A_Pain - MRPN C 3 - MRPN D 9 Door_CloseWaitOpen(999, 64, 960) - MRPN C 4 - MRPN B 3 - MRPN A 3 A_ClearSoundTarget - Goto Spawn - Yes: - MRYS A 20 - // Fall through - Greetings: - MRGT ABCDEFGHI 5 - Goto Spawn - No: - MRNO AB 6 - MRNO C 10 - MRNO BA 6 - Goto Greetings - } -} - - -// Weapon Smith ------------------------------------------------------------- - -ACTOR WeaponSmith : Merchant 116 -{ - Game Strife - ConversationID 2 - PainSound "smith/pain" - Tag "Weapon_Smith" -} - - -// Bar Keep ----------------------------------------------------------------- - -ACTOR BarKeep : Merchant 72 -{ - Game Strife - Translation 4 - ConversationID 3 - PainSound "barkeep/pain" - ActiveSound "barkeep/active" - Tag "Bar_Keep" -} - - -// Armorer ------------------------------------------------------------------ - -ACTOR Armorer : Merchant 73 -{ - Game Strife - Translation 5 - ConversationID 4 - PainSound "armorer/pain" - Tag "Armorer" -} - - -// Medic -------------------------------------------------------------------- - -ACTOR Medic : Merchant 74 -{ - Game Strife - Translation 6 - ConversationID 5 - PainSound "medic/pain" - Tag "Medic" -} - diff --git a/wadsrc/decorate/strife/peasants.txt b/wadsrc/decorate/strife/peasants.txt deleted file mode 100644 index c0e98855..00000000 --- a/wadsrc/decorate/strife/peasants.txt +++ /dev/null @@ -1,224 +0,0 @@ - -// Peasant Base Class ------------------------------------------------------- - -ACTOR Peasant : StrifeHumanoid -{ - Health 31 - PainChance 200 - Speed 8 - Radius 20 - Height 56 - Monster - +FRIENDLY - -COUNTKILL - +NOSPLASHALERT - MinMissileChance 150 - MaxStepHeight 16 - MaxDropoffHeight 32 - SeeSound "peasant/sight" - AttackSound "peasant/attack" - PainSound "peasant/pain" - DeathSound "peasant/death" - HitObituary "$OB_PEASANT" - States - { - Spawn: - PEAS A 10 A_Look2 - Loop - See: - PEAS AABBCCDD 5 A_Wander - Loop - Melee: - PEAS E 10 A_FaceTarget - PEAS F 8 A_CustomMeleeAttack(2*random[PeasantAttack](1,5)+2) - PEAS E 8 - Goto See - Pain: - PEAS O 3 - PEAS O 3 A_Pain - Goto Melee - Wound: - PEAS G 5 - PEAS H 10 A_GetHurt - PEAS I 6 - Goto Wound+1 - Death: - PEAS G 5 - PEAS H 5 A_Scream - PEAS I 6 - PEAS J 5 A_NoBlocking - PEAS K 5 - PEAS L 6 - PEAS M 8 - PEAS N 1400 - GIBS U 5 - GIBS V 1400 - Stop - XDeath: - GIBS M 5 A_TossGib - GIBS N 5 A_XScream - GIBS O 5 A_NoBlocking - GIBS PQRS 4 A_TossGib - Goto Death+8 - } -} - -// Peasant Variant 1 -------------------------------------------------------- - -ACTOR Peasant1 : Peasant 3004 -{ - Game Strife - ConversationID 6 - Speed 4 -} - -ACTOR Peasant2 : Peasant 130 -{ - Game Strife - ConversationID 7 - Speed 5 -} - -ACTOR Peasant3 : Peasant 131 -{ - Game Strife - ConversationID 8 - Speed 5 -} - -ACTOR Peasant4 : Peasant 65 -{ - Game Strife - Translation 0 - ConversationID 9 - Speed 7 -} - -ACTOR Peasant5 : Peasant 132 -{ - Game Strife - Translation 0 - ConversationID 10 - Speed 7 -} - -ACTOR Peasant6 : Peasant 133 -{ - Game Strife - Translation 0 - ConversationID 11 - Speed 7 -} - -ACTOR Peasant7 : Peasant 66 -{ - Game Strife - Translation 2 - ConversationID 12 -} - -ACTOR Peasant8 : Peasant 134 -{ - Game Strife - Translation 2 - ConversationID 13 -} - -ACTOR Peasant9 : Peasant 135 -{ - Game Strife - Translation 2 - ConversationID 14 -} - -ACTOR Peasant10 : Peasant 67 -{ - Game Strife - Translation 1 - ConversationID 15 -} - -ACTOR Peasant11 : Peasant 136 -{ - Game Strife - Translation 1 - ConversationID 16 -} - -ACTOR Peasant12 : Peasant 137 -{ - Game Strife - Translation 1 - ConversationID 17 -} - -ACTOR Peasant13 : Peasant 172 -{ - Game Strife - Translation 3 - ConversationID 18 -} - -ACTOR Peasant14 : Peasant 173 -{ - Game Strife - Translation 3 - ConversationID 19 -} - -ACTOR Peasant15 : Peasant 174 -{ - Game Strife - Translation 3 - ConversationID 20 -} - -ACTOR Peasant16 : Peasant 175 -{ - Game Strife - Translation 5 - ConversationID 21 -} - -ACTOR Peasant17 : Peasant 176 -{ - Game Strife - Translation 5 - ConversationID 22 -} - -ACTOR Peasant18 : Peasant 177 -{ - Game Strife - Translation 5 - ConversationID 23 -} - -ACTOR Peasant19 : Peasant 178 -{ - Game Strife - Translation 4 - ConversationID 24 -} - -ACTOR Peasant20 : Peasant 179 -{ - Game Strife - Translation 4 - ConversationID 25 -} - -ACTOR Peasant21 : Peasant 180 -{ - Game Strife - Translation 4 - ConversationID 26 -} - -ACTOR Peasant22 : Peasant 181 -{ - Game Strife - Translation 6 - ConversationID 27 -} - diff --git a/wadsrc/decorate/strife/questitems.txt b/wadsrc/decorate/strife/questitems.txt deleted file mode 100644 index b06cdfaa..00000000 --- a/wadsrc/decorate/strife/questitems.txt +++ /dev/null @@ -1,206 +0,0 @@ -/* - * Quest Item Usage: - * - * 1 You got Beldin's ring - * 2 You got the Chalice - * 3 You got 300 gold, so it's time to visit Irale and the governor - * 4 Accepted the governor's power coupling mission - * 5 Accepted the governor's mission to kill Derwin - * 6 You broke the Front's power coupling - * 7 You took out the scanning team - * 8 You got the broken power coupling - * 9 You got the ear - * 10 You got the prison pass - * 11 You got the prison key - * 12 You got the severed hand - * 13 You've freed the prisoners! - * 14 You've Blown Up the Crystal - * 15 You got the guard uniform - * 16 You've Blown Up the Gates (/Piston) - * 17 You watched the Sigil slideshow on map10 - * 18 You got the Oracle pass - * 19 You met Quincy and talked to him about the Bishop - * 20 - * 21 You Killed the Bishop! - * 22 The Oracle has told you to kill Macil - * 23 You've Killed The Oracle! - * 24 You Killed Macil! - * 25 You've destroyed the Converter! - * 26 You've Killed The Loremaster! - * 27 You've Blown Up the Computer - * 28 You got the catacomb key - * 29 You destroyed the mind control device in the mines - * 30 - * 31 - */ - -ACTOR QuestItem : Inventory -{ - States - { - Spawn: - TOKN A -1 - Stop - } -} - -// Quest Items ------------------------------------------------------------- - -ACTOR QuestItem1 : QuestItem -{ - ConversationID 312, 293, 310 -} - -ACTOR QuestItem2 : QuestItem -{ - ConversationID 313, 294, 311 -} - -ACTOR QuestItem3 : QuestItem -{ - ConversationID 314, 295, 312 -} - -ACTOR QuestItem4 : QuestItem -{ - ConversationID 315, 296, 313 - Tag "quest4" -} - -ACTOR QuestItem5 : QuestItem -{ - ConversationID 316, 297, 314 - Tag "quest5" -} - -ACTOR QuestItem6 : QuestItem -{ - ConversationID 317, 298, 315 - Tag "quest4" -} - -ACTOR QuestItem7 : QuestItem -{ - ConversationID 318, -1, -1 -} - -ACTOR QuestItem8 : QuestItem -{ - ConversationID 319, -1, -1 -} - -ACTOR QuestItem9 : QuestItem -{ - ConversationID 320, -1, -1 -} - -ACTOR QuestItem10 : QuestItem -{ - ConversationID 321, -1, -1 -} - -ACTOR QuestItem11 : QuestItem -{ - ConversationID 322, -1, -1 -} - -ACTOR QuestItem12 : QuestItem -{ - ConversationID 323, -1, -1 -} - -ACTOR QuestItem13 : QuestItem -{ - ConversationID 324, -1, -1 -} - -ACTOR QuestItem14 : QuestItem -{ - ConversationID 325, -1, -1 -} - -ACTOR QuestItem15 : QuestItem -{ - ConversationID 326, -1, -1 -} - -ACTOR QuestItem16 : QuestItem -{ - ConversationID 327, -1, -1 -} - -ACTOR QuestItem17 : QuestItem -{ - ConversationID 328, -1, -1 -} - -ACTOR QuestItem18 : QuestItem -{ - ConversationID 329, -1, -1 -} - -ACTOR QuestItem19 : QuestItem -{ - ConversationID 330, -1, -1 -} - -ACTOR QuestItem20 : QuestItem -{ - ConversationID 331, -1, -1 -} - -ACTOR QuestItem21 : QuestItem -{ - ConversationID 332, -1, -1 -} - -ACTOR QuestItem22 : QuestItem -{ - ConversationID 333, -1, -1 -} - -ACTOR QuestItem23 : QuestItem -{ - ConversationID 334, -1, -1 -} - -ACTOR QuestItem24 : QuestItem -{ - ConversationID 335, -1, -1 -} - -ACTOR QuestItem25 : QuestItem -{ - ConversationID 336, -1, -1 -} - -ACTOR QuestItem26 : QuestItem -{ - ConversationID 337, -1, -1 -} - -ACTOR QuestItem27 : QuestItem -{ - ConversationID 338, -1, -1 -} - -ACTOR QuestItem28 : QuestItem -{ - ConversationID 339, -1, -1 -} - -ACTOR QuestItem29 : QuestItem -{ - ConversationID 340, -1, -1 -} - -ACTOR QuestItem30 : QuestItem -{ - ConversationID 341, -1, -1 -} - -ACTOR QuestItem31 : QuestItem -{ - ConversationID 342, -1, -1 -} - diff --git a/wadsrc/decorate/strife/ratbuddy.txt b/wadsrc/decorate/strife/ratbuddy.txt deleted file mode 100644 index 660e28d6..00000000 --- a/wadsrc/decorate/strife/ratbuddy.txt +++ /dev/null @@ -1,36 +0,0 @@ - -ACTOR RatBuddy 85 -{ - Game Strife - ConversationID 202, 196, 200 - Health 5 - Speed 13 - Radius 10 - Height 16 - +NOBLOOD +FLOORCLIP +CANPASS - +ISMONSTER +INCOMBAT - MinMissileChance 150 - MaxStepHeight 16 - MaxDropoffHeight 32 - Tag "rat_buddy" - SeeSound "rat/sight" - DeathSound "rat/death" - ActiveSound "rat/active" - States - { - Spawn: - RATT A 10 A_Look - Loop - See: - RATT AABB 4 A_Chase - Loop - Melee: - RATT A 8 A_Wander - RATT B 4 A_Wander - Goto See - Death: - MEAT Q 700 - Stop - } -} - diff --git a/wadsrc/decorate/strife/strifeammo.txt b/wadsrc/decorate/strife/strifeammo.txt deleted file mode 100644 index f34af7fc..00000000 --- a/wadsrc/decorate/strife/strifeammo.txt +++ /dev/null @@ -1,231 +0,0 @@ -// HE-Grenade Rounds -------------------------------------------------------- - -ACTOR HEGrenadeRounds : Ammo 152 -{ - Game Strife - +FLOORCLIP - ConversationID 177, 170, 174 - Inventory.Amount 6 - Inventory.MaxAmount 30 - Ammo.BackpackAmount 6 - Ammo.BackpackMaxAmount 60 - Inventory.Icon "I_GRN1" - Tag "HE-Grenade_Rounds" - Inventory.PickupMessage "$TXT_HEGRENADES" - States - { - Spawn: - GRN1 A -1 - Stop - } -} - -// Phosphorus-Grenade Rounds ------------------------------------------------ - -ACTOR PhosphorusGrenadeRounds : Ammo 153 -{ - Game Strife - +FLOORCLIP - ConversationID 178, 171, 175 - Inventory.Amount 4 - Inventory.MaxAmount 16 - Ammo.BackpackAmount 4 - Ammo.BackpackMaxAmount 32 - Inventory.Icon "I_GRN2" - Tag "Phoshorus-Grenade_Rounds" // "Fire-Grenade_Rounds" in the Teaser - Inventory.PickupMessage "$TXT_PHGRENADES" - States - { - Spawn: - GRN2 A -1 - Stop - } -} - -// Clip of Bullets ---------------------------------------------------------- - -ACTOR ClipOfBullets : Ammo 2007 -{ - Game Strife - SpawnID 11 - ConversationID 179, 173, 177 - +FLOORCLIP - Inventory.Amount 10 - Inventory.MaxAmount 250 - Ammo.BackpackAmount 10 - Ammo.BackpackMaxAmount 500 - Inventory.Icon "I_BLIT" - Tag "clip_of_bullets" // "bullets" in the Teaser - Inventory.PickupMessage "$TXT_CLIPOFBULLETS" - States - { - Spawn: - BLIT A -1 - Stop - } -} - -// Box of Bullets ----------------------------------------------------------- - -ACTOR BoxOfBullets : ClipOfBullets 2048 -{ - Game Strife - SpawnID 139 - ConversationID 180, 174, 178 - Inventory.Amount 50 - Tag "ammo" - Inventory.PickupMessage "$TXT_BOXOFBULLETS" - States - { - Spawn: - BBOX A -1 - Stop - } -} - -// Mini Missiles ------------------------------------------------------------ - -ACTOR MiniMissiles : Ammo 2010 -{ - Game Strife - SpawnID 140 - ConversationID 181, 175, 179 - +FLOORCLIP - Inventory.Amount 4 - Inventory.MaxAmount 100 - Ammo.BackpackAmount 4 - Ammo.BackpackMaxAmount 200 - Inventory.Icon "I_ROKT" - Tag "mini_missiles" //"rocket" in the Teaser - Inventory.PickupMessage "$TXT_MINIMISSILES" - States - { - Spawn: - MSSL A -1 - Stop - } -} - -// Crate of Missiles -------------------------------------------------------- - -ACTOR CrateOfMissiles : MiniMissiles 2046 -{ - Game Strife - SpawnID 141 - ConversationID 182, 176, 180 - Inventory.Amount 20 - Tag "crate_of_missiles" //"box_of_rockets" in the Teaser - Inventory.PickupMessage "$TXT_CRATEOFMISSILES" - States - { - Spawn: - ROKT A -1 - Stop - } -} - -// Energy Pod --------------------------------------------------------------- - -ACTOR EnergyPod : Ammo 2047 -{ - Game Strife - SpawnID 75 - ConversationID 183, 177, 181 - +FLOORCLIP - Inventory.Amount 20 - Inventory.MaxAmount 400 - Ammo.BackpackAmount 20 - Ammo.BackpackMaxAmount 800 - Ammo.DropAmount 20 - Inventory.Icon "I_BRY1" - Tag "energy_pod" - Inventory.PickupMessage "$TXT_ENERGYPOD" - States - { - Spawn: - BRY1 AB 6 - Loop - } -} - -// Energy pack --------------------------------------------------------------- - -ACTOR EnergyPack : EnergyPod 17 -{ - Game Strife - SpawnID 142 - ConversationID 184, 178, 182 - Inventory.Amount 100 - Tag "energy_pack" - Inventory.PickupMessage "$TXT_ENERGYPACK" - States - { - Spawn: - CPAC AB 6 - Loop - } -} - -// Poison Bolt Quiver ------------------------------------------------------- - -ACTOR PoisonBolts : Ammo 115 -{ - Game Strife - ConversationID 185, 179, 183 - +FLOORCLIP - Inventory.Amount 10 - Inventory.MaxAmount 25 - Ammo.BackpackAmount 2 - Ammo.BackpackMaxAmount 50 - Inventory.Icon "I_PQRL" - Tag "poison_bolts" // "poison_arrows" in the Teaser - Inventory.PickupMessage "$TXT_POISONBOLTS" - States - { - Spawn: - PQRL A -1 - Stop - } -} - -// Electric Bolt Quiver ------------------------------------------------------- - -ACTOR ElectricBolts : Ammo 114 -{ - Game Strife - ConversationID 186, 180, 184 - +FLOORCLIP - Inventory.Amount 20 - Inventory.MaxAmount 50 - Ammo.BackpackAmount 4 - Ammo.BackpackMaxAmount 100 - Inventory.Icon "I_XQRL" - Tag "electric_bolts" // "electric_arrows" in the Teaser - Inventory.PickupMessage "$TXT_ELECTRICBOLTS" - States - { - Spawn: - XQRL A -1 - Stop - } -} - -// Ammo Satchel ------------------------------------------------------------- - -ACTOR AmmoSatchel : BackpackItem 183 -{ - Game Strife - SpawnID 144 - ConversationID 187, 181, 184 - +FLOORCLIP - Inventory.Icon "I_BKPK" - Tag "Ammo_satchel" // "Back_pack" in the Teaser - Inventory.PickupMessage "$TXT_AMMOSATCHEL" - States - { - Spawn: - BKPK A -1 - Stop - } -} - diff --git a/wadsrc/decorate/strife/strifearmor.txt b/wadsrc/decorate/strife/strifearmor.txt deleted file mode 100644 index 3da5e738..00000000 --- a/wadsrc/decorate/strife/strifearmor.txt +++ /dev/null @@ -1,49 +0,0 @@ - -ACTOR MetalArmor : BasicArmorPickup 2019 -{ - Game Strife - SpawnID 69 - ConversationID 129, 125, 128 - Radius 20 - Height 16 - +FLOORCLIP - +INVENTORY.AUTOACTIVATE - +INVENTORY.INVBAR - Inventory.MaxAmount 3 - Inventory.Icon "I_ARM1" - Inventory.PickupMessage "$TXT_METALARMOR" - Armor.SaveAmount 200 - Armor.SavePercent 50 - Tag "Metal_Armor" - States - { - Spawn: - ARM3 A -1 - Stop - } -} - -ACTOR LeatherArmor : BasicArmorPickup 2018 -{ - Game Strife - SpawnID 68 - ConversationID 130, 126, 129 - Radius 20 - Height 16 - +FLOORCLIP - +INVENTORY.AUTOACTIVATE - +INVENTORY.INVBAR - Inventory.MaxAmount 5 - Inventory.Icon "I_ARM2" - Inventory.PickupMessage "$TXT_LEATHERARMOR" - Armor.SaveAmount 100 - Armor.SavePercent 33.33333 - Tag "Leather_Armor" - States - { - Spawn: - ARM4 A -1 - Stop - } -} - diff --git a/wadsrc/decorate/strife/strifebishop.txt b/wadsrc/decorate/strife/strifebishop.txt deleted file mode 100644 index 5f7eb578..00000000 --- a/wadsrc/decorate/strife/strifebishop.txt +++ /dev/null @@ -1,100 +0,0 @@ - -// Bishop ------------------------------------------------------------------- - -ACTOR StrifeBishop 187 -{ - Game Strife - ConversationID 64,-1,-1 - Health 500 - Painchance 128 - Speed 8 - Radius 40 - Height 56 - Mass 500 - Monster - +NOBLOOD - +NOTDMATCH - +FLOORCLIP - +INCOMBAT - +FIRERESIST - +NOICEDEATH - MinMissileChance 150 - MaxDropoffHeight 32 - SeeSound "bishop/sight" - PainSound "bishop/pain" - DeathSound "bishop/death" - ActiveSound "bishop/active" - DropItem "CrateOfMissiles", 256, 20 - Obituary "$OB_STFBISHOP" - States - { - Spawn: - MLDR A 10 A_Look - Loop - See: - MLDR AABBCCDD 3 A_Chase - Loop - Missile: - MLDR E 3 A_FaceTarget - MLDR F 2 Bright A_CustomMissile("BishopMissile", 64, 0, 0, CMF_AIMOFFSET) - Goto See - Pain: - MLDR D 1 A_Pain - Goto See - Death: - MLDR G 3 Bright - MLDR H 5 Bright A_Scream - MLDR I 4 Bright A_TossGib - MLDR J 0 Bright A_AlertMonsters - MLDR J 4 Bright A_Explode(64,64) - MLDR KL 3 Bright - MLDR M 4 Bright A_NoBlocking - MLDR N 4 Bright - MLDR O 4 Bright A_TossGib - MLDR P 4 Bright - MLDR Q 4 Bright A_TossGib - MLDR R 4 Bright - MLDR S 4 Bright A_TossGib - MLDR T 4 Bright - MLDR U 4 Bright A_TossGib - MLDR V 4 Bright A_SpawnItemEx("AlienSpectre2", 0, 0, 0, 0, 0, random[spectrespawn](0,255)*0.0078125, 0, SXF_NOCHECKPOSITION) - Stop - } -} - - -// The Bishop's missile ----------------------------------------------------- - -ACTOR BishopMissile -{ - Speed 20 - Radius 10 - Height 14 - Damage 10 - Projectile - +SEEKERMISSILE - +STRIFEDAMAGE - MaxStepHeight 4 - SeeSound "bishop/misl" - DeathSound "bishop/mislx" - States - { - Spawn: - MISS A 4 Bright - MISS B 3 Bright A_Tracer2 - MISS A 0 Bright A_PlaySoundEx("misc/missileinflight", "Voice") - MISS A 0 Bright A_SpawnItemEx("MiniMissilePuff", 0,0, random2[BishopMissile]()*0.015625) - MISS A 4 Bright A_SpawnItemEx("RocketTrail", -momx,-momy,0, 0,0,1) - Goto Spawn+1 - Death: - SMIS A 0 Bright A_SetTranslucent(1,1) - SMIS A 0 Bright A_StopSoundEx("Voice") - SMIS A 0 Bright A_AlertMonsters - SMIS A 5 Bright A_Explode(64,64) - SMIS B 5 Bright - SMIS C 4 Bright - SMIS DEFG 2 Bright - Stop - } -} - diff --git a/wadsrc/decorate/strife/strifeitems.txt b/wadsrc/decorate/strife/strifeitems.txt deleted file mode 100644 index 50df056d..00000000 --- a/wadsrc/decorate/strife/strifeitems.txt +++ /dev/null @@ -1,373 +0,0 @@ -// Med patch ----------------------------------------------------------------- - -ACTOR MedPatch : HealthPickup 2011 -{ - Game Strife - ConversationID 125, 121, 124 - Health 10 - +FLOORCLIP - +INVENTORY.INVBAR - Inventory.MaxAmount 20 - Tag "Med_patch" - Inventory.Icon "I_STMP" - Inventory.PickupMessage "$TXT_MEDPATCH" - States - { - Spawn: - STMP A -1 - Stop - } -} - - -// Medical Kit --------------------------------------------------------------- - -ACTOR MedicalKit : HealthPickup 2012 -{ - Game Strife - ConversationID 126, 122, 125 - Health 25 - +FLOORCLIP - +INVENTORY.INVBAR - Inventory.MaxAmount 15 - Tag "Medical_kit" - Inventory.Icon "I_MDKT" - Inventory.PickupMessage "$TXT_MEDICALKIT" - States - { - Spawn: - MDKT A -1 - Stop - } -} - - -// Surgery Kit -------------------------------------------------------------- - -ACTOR SurgeryKit : HealthPickup 83 -{ - Game Strife - ConversationID 127, 123, 126 - +FLOORCLIP - +INVENTORY.INVBAR - Health -100 - Inventory.MaxAmount 5 - Tag "Surgery_Kit" // "full_health" in the Teaser - Inventory.Icon "I_FULL" - Inventory.PickupMessage "$TXT_SURGERYKIT" - States - { - Spawn: - FULL AB 35 - Loop - } -} - - -// StrifeMap ---------------------------------------------------------------- - -ACTOR StrifeMap : MapRevealer 2026 -{ - Game Strife - SpawnID 137 - ConversationID 164, 160, 163 - +FLOORCLIP - Inventory.PickupSound "misc/p_pkup" - Inventory.PickupMessage "$TXT_STRIFEMAP" - States - { - Spawn: - SMAP AB 6 Bright - Loop - } -} - - -// Beldin's Ring ------------------------------------------------------------ - -ACTOR BeldinsRing : Inventory -{ - Game Strife - +NOTDMATCH - +FLOORCLIP - +INVENTORY.INVBAR - ConversationID 173, 165, 169 - Tag "ring" - Inventory.Icon "I_RING" - Inventory.GiveQuest 1 - Inventory.PickupMessage "$TXT_BELDINSRING" - States - { - Spawn: - RING A -1 - Stop - } -} - - -// Offering Chalice --------------------------------------------------------- - -ACTOR OfferingChalice : Inventory 205 -{ - Game Strife - +DROPPED - +FLOORCLIP - +INVENTORY.INVBAR - ConversationID 174, 166, 170 - Radius 10 - Height 16 - Tag "Offering_Chalice" - Inventory.Icon "I_RELC" - Inventory.PickupMessage "$TXT_OFFERINGCHALICE" - Inventory.GiveQuest 2 - States - { - Spawn: - RELC A -1 - Stop - } -} - - -// Ear ---------------------------------------------------------------------- - -ACTOR Ear : Inventory -{ - Game Strife - +FLOORCLIP - +INVENTORY.INVBAR - ConversationID 175, 167, 171 - Tag "ear" - Inventory.Icon "I_EARS" - Inventory.PickupMessage "$TXT_EAR" - Inventory.GiveQuest 9 - States - { - Spawn: - EARS A -1 - Stop - } -} - - -// Broken Power Coupling ---------------------------------------------------- - -ACTOR BrokenPowerCoupling : Inventory 226 -{ - Game Strife - ConversationID 289, -1, -1 - Health 40 - +DROPPED - +FLOORCLIP - +INVENTORY.INVBAR - Radius 16 - Height 16 - Tag "BROKEN_POWER_COUPLING" - Inventory.MaxAmount 1 - Inventory.Icon "I_COUP" - Inventory.PickupMessage "$TXT_BROKENCOUPLING" - Inventory.GiveQuest 8 - States - { - Spawn: - COUP C -1 - Stop - } -} - - -// Shadow Armor ------------------------------------------------------------- - -ACTOR ShadowArmor : PowerupGiver 2024 -{ - Game Strife - SpawnID 135 - ConversationID 160, 156, 159 - +FLOORCLIP - +VISIBILITYPULSE - +INVENTORY.INVBAR - -INVENTORY.FANCYPICKUPSOUND - RenderStyle Translucent - Tag "Shadow_armor" - Inventory.MaxAmount 2 - Powerup.Type "Shadow" - Inventory.Icon "I_SHD1" - Inventory.PickupSound "misc/i_pkup" - Inventory.PickupMessage "$TXT_SHADOWARMOR" - States - { - Spawn: - SHD1 A -1 Bright - Stop - } -} - - -// Environmental suit ------------------------------------------------------- - -ACTOR EnvironmentalSuit : PowerupGiver 2025 -{ - Game Strife - SpawnID 136 - ConversationID 161, 157, 160 - +FLOORCLIP - +INVENTORY.INVBAR - -INVENTORY.FANCYPICKUPSOUND - Inventory.MaxAmount 5 - Powerup.Type "Mask" - Tag "Environmental_Suit" - Inventory.Icon "I_MASK" - Inventory.PickupSound "misc/i_pkup" - Inventory.PickupMessage "$TXT_ENVSUIT" - States - { - Spawn: - MASK A -1 - Stop - } -} - - -// Guard Uniform ------------------------------------------------------------ - -ACTOR GuardUniform : Inventory 90 -{ - Game Strife - ConversationID 162, 158, 161 - +FLOORCLIP - +INVENTORY.INVBAR - Tag "Guard_Uniform" - Inventory.Icon "I_UNIF" - Inventory.PickupMessage "$TXT_GUARDUNIFORM" - Inventory.GiveQuest 15 - States - { - Spawn: - UNIF A -1 - Stop - } -} - - -// Officer's Uniform -------------------------------------------------------- - -ACTOR OfficersUniform : Inventory 52 -{ - Game Strife - ConversationID 163, 159, 162 - +FLOORCLIP - +INVENTORY.INVBAR - Tag "Officer's_Uniform" - Inventory.Icon "I_OFIC" - Inventory.PickupMessage "$TXT_OFFICERSUNIFORM" - States - { - Spawn: - OFIC A -1 - Stop - } -} - - -// Flame Thrower Parts ------------------------------------------------------ - -ACTOR FlameThrowerParts : Inventory -{ - Game Strife - ConversationID 191, 185, 189 - +FLOORCLIP - +INVENTORY.INVBAR - Inventory.Icon "I_BFLM" - Tag "flame_thrower_parts" - Inventory.PickupMessage "$TXT_FTHROWERPARTS" - States - { - Spawn: - BFLM A -1 - Stop - } -} - -// InterrogatorReport ------------------------------------------------------- -// SCRIPT32 in strife0.wad has an Acolyte that drops this, but I couldn't -// find that Acolyte in the map. It seems to be totally unused in the -// final game. - -ACTOR InterrogatorReport : Inventory -{ - Game Strife - ConversationID 308, 289, 306 - +FLOORCLIP - Tag "report" - Inventory.PickupMessage "$TXT_REPORT" - States - { - Spawn: - TOKN A -1 - Stop - } -} - - -// Info --------------------------------------------------------------------- - -ACTOR Info : Inventory -{ - Game Strife - ConversationID 300, 282, 299 - +FLOORCLIP - +INVENTORY.INVBAR - Tag "info" - Inventory.Icon "I_TOKN" - Inventory.PickupMessage "$TXT_INFO" - States - { - Spawn: - TOKN A -1 - Stop - } -} - - -// Targeter ----------------------------------------------------------------- - -ACTOR Targeter : PowerupGiver 207 -{ - Game Strife - ConversationID 167, 169, 173 - +FLOORCLIP - +INVENTORY.INVBAR - -INVENTORY.FANCYPICKUPSOUND - Tag "Targeter" - Powerup.Type "Targeter" - Inventory.MaxAmount 5 - Inventory.Icon "I_TARG" - Inventory.PickupSound "misc/i_pkup" - Inventory.PickupMessage "$TXT_TARGETER" - States - { - Spawn: - TARG A -1 - Stop - } -} - -// Communicator ----------------------------------------------------------------- - -ACTOR Communicator : Inventory 206 -{ - Game Strife - ConversationID 176, 168, 172 - +NOTDMATCH - Tag "Communicator" - Inventory.Icon "I_COMM" - Inventory.PickupSound "misc/p_pkup" - Inventory.PickupMessage "$TXT_COMMUNICATOR" - States - { - Spawn: - COMM A -1 - Stop - } -} - diff --git a/wadsrc/decorate/strife/strifekeys.txt b/wadsrc/decorate/strife/strifekeys.txt deleted file mode 100644 index 805df880..00000000 --- a/wadsrc/decorate/strife/strifekeys.txt +++ /dev/null @@ -1,516 +0,0 @@ -ACTOR StrifeKey : Key -{ - Radius 20 - Height 16 - +NOTDMATCH - +FLOORCLIP -} - -// Base Key ----------------------------------------------------------------- - -ACTOR BaseKey : StrifeKey 230 -{ - Game Strife - ConversationID 133, 129, 132 - Inventory.Icon "I_FUSL" - Tag "Base_Key" - Inventory.PickupMessage "$TXT_BASEKEY" - States - { - Spawn: - FUSL A -1 - Stop - } -} - - -// Govs Key ----------------------------------------------------------------- - -ACTOR GovsKey : StrifeKey -{ - Game Strife - ConversationID 134, 130, 133 - Inventory.Icon "I_REBL" - Tag "Govs_Key" // "Rebel_Key" in the Teaser - Inventory.PickupMessage "$TXT_GOVSKEY" - States - { - Spawn: - REBL A -1 - Stop - } -} - - -// Passcard ----------------------------------------------------------------- - -ACTOR Passcard : StrifeKey 185 -{ - Game Strife - ConversationID 135, 131, 134 - Inventory.Icon "I_TPAS" - Tag "Passcard" - Inventory.PickupMessage "$TXT_PASSCARD" - States - { - Spawn: - TPAS A -1 - Stop - } -} - - -// ID Badge ----------------------------------------------------------------- - -ACTOR IDBadge : StrifeKey 184 -{ - Game Strife - ConversationID 136, 132, 135 - Inventory.Icon "I_CRD1" - Tag "ID_Badge" - Inventory.PickupMessage "$TXT_IDBADGE" - States - { - Spawn: - CRD1 A -1 - Stop - } -} - - -// Prison Key --------------------------------------------------------------- - -ACTOR PrisonKey : StrifeKey -{ - Game Strife - ConversationID 137, 133, 136 - Inventory.Icon "I_PRIS" - Tag "Prison_Key" - Inventory.GiveQuest 11 - Inventory.PickupMessage "$TXT_PRISONKEY" - States - { - Spawn: - PRIS A -1 - Stop - } -} - - -// Severed Hand ------------------------------------------------------------- - -ACTOR SeveredHand : StrifeKey 91 -{ - Game Strife - ConversationID 138, 134, 137 - Inventory.Icon "I_HAND" - Tag "Severed_Hand" - Inventory.GiveQuest 12 - Inventory.PickupMessage "$TXT_SEVEREDHAND" - States - { - Spawn: - HAND A -1 - Stop - } -} - - -// Power1 Key --------------------------------------------------------------- - -ACTOR Power1Key : StrifeKey -{ - Game Strife - ConversationID 139, 135, 138 - Inventory.Icon "I_PWR1" - Tag "Power1_Key" - Inventory.PickupMessage "$TXT_POWER1KEY" - States - { - Spawn: - PWR1 A -1 - Stop - } -} - - -// Power2 Key --------------------------------------------------------------- - -ACTOR Power2Key : StrifeKey -{ - Game Strife - ConversationID 140, 136, 139 - Inventory.Icon "I_PWR2" - Tag "Power2_Key" - Inventory.PickupMessage "$TXT_POWER2KEY" - States - { - Spawn: - PWR2 A -1 - Stop - } -} - - -// Power3 Key --------------------------------------------------------------- - -ACTOR Power3Key : StrifeKey -{ - Game Strife - ConversationID 141, 137, 140 - Inventory.Icon "I_PWR3" - Tag "Power3_Key" - Inventory.PickupMessage "$TXT_POWER3KEY" - States - { - Spawn: - PWR3 A -1 - Stop - } -} - - -// Gold Key ----------------------------------------------------------------- - -ACTOR GoldKey : StrifeKey 40 -{ - Game Strife - ConversationID 142, 138, 141 - Inventory.Icon "I_KY1G" - Tag "Gold_Key" - Inventory.PickupMessage "$TXT_GOLDKEY" - States - { - Spawn: - KY1G A -1 - Stop - } -} - - -// ID Card ------------------------------------------------------------------ - -ACTOR IDCard : StrifeKey 13 -{ - Game Strife - ConversationID 143, 139, 142 - Inventory.Icon "I_CRD2" - Tag "ID_Card" - Inventory.PickupMessage "$TXT_IDCARD" - States - { - Spawn: - CRD2 A -1 - Stop - } -} - - -// Silver Key --------------------------------------------------------------- - -ACTOR SilverKey : StrifeKey 38 -{ - Game Strife - ConversationID 144, 140, 143 - Inventory.Icon "I_KY2S" - Tag "Silver_Key" - Inventory.PickupMessage "$TXT_SILVERKEY" - States - { - Spawn: - KY2S A -1 - Stop - } -} - - -// Oracle Key --------------------------------------------------------------- - -ACTOR OracleKey : StrifeKey 61 -{ - Game Strife - ConversationID 145, 141, 144 - Inventory.Icon "I_ORAC" - Tag "Oracle_Key" - Inventory.PickupMessage "$TXT_ORACLEKEY" - States - { - Spawn: - ORAC A -1 - Stop - } -} - - -// Military ID -------------------------------------------------------------- - -ACTOR MilitaryID : StrifeKey -{ - Game Strife - ConversationID 146, 142, 145 - Inventory.Icon "I_GYID" - Tag "Military ID" - Inventory.PickupMessage "$TXT_MILITARYID" - States - { - Spawn: - GYID A -1 - Stop - } -} - - -// Order Key ---------------------------------------------------------------- - -ACTOR OrderKey : StrifeKey 86 -{ - Game Strife - ConversationID 147, 143, 146 - Inventory.Icon "I_FUBR" - Tag "Order_Key" - Inventory.PickupMessage "$TXT_ORDERKEY" - States - { - Spawn: - FUBR A -1 - Stop - } -} - - -// Warehouse Key ------------------------------------------------------------ - -ACTOR WarehouseKey : StrifeKey 166 -{ - Game Strife - ConversationID 148, 144, 147 - Inventory.Icon "I_WARE" - Tag "Warehouse_Key" - Inventory.PickupMessage "$TXT_WAREHOUSEKEY" - States - { - Spawn: - WARE A -1 - Stop - } -} - - -// Brass Key ---------------------------------------------------------------- - -ACTOR BrassKey : StrifeKey 39 -{ - Game Strife - ConversationID 149, 145, 148 - Inventory.Icon "I_KY3B" - Tag "Brass_Key" - Inventory.PickupMessage "$TXT_BRASSKEY" - States - { - Spawn: - KY3B A -1 - Stop - } -} - - -// Red Crystal Key ---------------------------------------------------------- - -ACTOR RedCrystalKey : StrifeKey 192 -{ - Game Strife - ConversationID 150, 146, 149 - Inventory.Icon "I_RCRY" - Tag "Red_Crystal_Key" - Inventory.PickupMessage "$TXT_REDCRYSTAL" - States - { - Spawn: - RCRY A -1 Bright - Stop - } -} - - -// Blue Crystal Key --------------------------------------------------------- - -ACTOR BlueCrystalKey : StrifeKey 193 -{ - Game Strife - ConversationID 151, 147, 150 - Inventory.Icon "I_BCRY" - Tag "Blue_Crystal_Key" - Inventory.PickupMessage "$TXT_BLUECRYSTAL" - States - { - Spawn: - BCRY A -1 Bright - Stop - } -} - - -// Chapel Key --------------------------------------------------------------- - -ACTOR ChapelKey : StrifeKey 195 -{ - Game Strife - ConversationID 152, 148, 151 - Inventory.Icon "I_CHAP" - Tag "Chapel_Key" - Inventory.PickupMessage "$TXT_CHAPELKEY" - States - { - Spawn: - CHAP A -1 - Stop - } -} - - -// Catacomb Key ------------------------------------------------------------- - -ACTOR CatacombKey : StrifeKey -{ - Game Strife - ConversationID 153, 149, 152 - Inventory.Icon "I_TUNL" - Tag "Catacomb_Key" // "Tunnel_Key" in the Teaser - Inventory.GiveQuest 28 - Inventory.PickupMessage "$TXT_CATACOMBKEY" - States - { - Spawn: - TUNL A -1 - Stop - } -} - - -// Security Key ------------------------------------------------------------- - -ACTOR SecurityKey : StrifeKey -{ - Game Strife - ConversationID 154, 150, 153 - Inventory.Icon "I_SECK" - Tag "Security_Key" - Inventory.PickupMessage "$TXT_SECURITYKEY" - States - { - Spawn: - SECK A -1 - Stop - } -} - - -// Core Key ----------------------------------------------------------------- - -ACTOR CoreKey : StrifeKey 236 -{ - Game Strife - ConversationID 155, 151, 154 - Inventory.Icon "I_GOID" - Tag "Core_Key" // "New_Key1" in the Teaser - Inventory.PickupMessage "$TXT_COREKEY" - States - { - Spawn: - GOID A -1 - Stop - } -} - - -// Mauler Key --------------------------------------------------------------- - -ACTOR MaulerKey : StrifeKey 233 -{ - Game Strife - ConversationID 156, 152, 155 - Inventory.Icon "I_BLTK" - Tag "Mauler_Key" // "New_Key2" in the Teaser - Inventory.PickupMessage "$TXT_MAULERKEY" - States - { - Spawn: - BLTK A -1 - Stop - } -} - - -// Factory Key -------------------------------------------------------------- - -ACTOR FactoryKey : StrifeKey 234 -{ - Game Strife - ConversationID 157, 153, 156 - Inventory.Icon "I_PROC" - Tag "Factory_Key" // "New_Key3" in the Teaser - Inventory.PickupMessage "$TXT_FACTORYKEY" - States - { - Spawn: - PROC A -1 - Stop - } -} - - -// Mine Key ----------------------------------------------------------------- - -ACTOR MineKey : StrifeKey 235 -{ - Game Strife - ConversationID 158, 154, 157 - Inventory.Icon "I_MINE" // "New_Key4" in the Teaser - Tag "MINE_KEY" - Inventory.PickupMessage "$TXT_MINEKEY" - States - { - Spawn: - MINE A -1 - Stop - } -} - - -// New Key5 ----------------------------------------------------------------- - -ACTOR NewKey5 : StrifeKey -{ - Game Strife - ConversationID 159, 155, 158 - Inventory.Icon "I_BLTK" - Tag "New_Key5" - Inventory.PickupMessage "$TXT_NEWKEY5" - States - { - Spawn: - BLTK A -1 - Stop - } -} - - -// Oracle Pass -------------------------------------------------------------- - -ACTOR OraclePass : Inventory -{ - Game Strife - ConversationID 311, 292, 309 - +INVENTORY.INVBAR - Inventory.Icon "I_OTOK" - Inventory.GiveQuest 18 - Inventory.PickupMessage "$TXT_ORACLEPASS" - Tag "Oracle_Pass" - States - { - Spawn: - OTOK A -1 - Stop - } -} - diff --git a/wadsrc/decorate/strife/strifeplayer.txt b/wadsrc/decorate/strife/strifeplayer.txt deleted file mode 100644 index e86a7c2e..00000000 --- a/wadsrc/decorate/strife/strifeplayer.txt +++ /dev/null @@ -1,76 +0,0 @@ -// The player --------------------------------------------------------------- - -ACTOR StrifePlayer : PlayerPawn -{ - Health 100 - Radius 18 - Height 56 - Mass 100 - PainChance 255 - Speed 1 - MaxStepHeight 16 - Player.ColorRange 128, 143 - Player.DisplayName "Rebel" - Player.StartItem "PunchDagger" - - action native A_ItBurnsItBurns(); - action native A_DropFire(); - action native A_CrispyPlayer(); - - States - { - Spawn: - PLAY A -1 - stop - See: - PLAY ABCD 4 - loop - Missile: - PLAY E 12 - goto Spawn - Melee: - PLAY F 6 - goto Missile - Pain: - PLAY Q 4 - PLAY Q 4 A_Pain - Goto Spawn - Death: - PLAY H 3 - PLAY I 3 A_PlayerScream - PLAY J 3 A_NoBlocking - PLAY KLMNO 4 - PLAY P -1 - Stop - XDeath: - RGIB A 5 A_TossGib - RGIB B 5 A_XScream - RGIB C 5 A_NoBlocking - RGIB DEFG 5 A_TossGib - RGIB H -1 A_TossGib - Burn: - BURN A 3 Bright A_ItBurnsItBurns - BURN B 3 Bright A_DropFire - BURN C 3 Bright A_Wander - BURN D 3 Bright A_NoBlocking - BURN E 5 Bright A_DropFire - BURN FGH 5 Bright A_Wander - BURN I 5 Bright A_DropFire - BURN JKL 5 Bright A_Wander - BURN M 5 Bright A_DropFire - BURN N 5 Bright A_CrispyPlayer - BURN OPQPQ 5 Bright - BURN RSTU 7 Bright - BURN V -1 - Stop - Disintegrate: - DISR A 5 A_PlaySoundEx("misc/disruptordeath", "Voice") - DISR BC 5 - DISR D 5 A_NoBlocking - DISR EF 5 - DISR GHIJ 4 - MEAT D -1 - Stop - } -} - diff --git a/wadsrc/decorate/strife/strifestuff.txt b/wadsrc/decorate/strife/strifestuff.txt deleted file mode 100644 index c2e2cec4..00000000 --- a/wadsrc/decorate/strife/strifestuff.txt +++ /dev/null @@ -1,1659 +0,0 @@ -// Tank 1 Huge ------------------------------------------------------------ - -ACTOR Tank1 209 -{ - Game Strife - Radius 16 - Height 192 - +SOLID - ConversationID 31, -1, -1 - States - { - Spawn: - TNK1 A 15 - TNK1 B 11 - TNK1 C 40 - Loop - } -} - -// Tank 2 Huge ------------------------------------------------------------ - -ACTOR Tank2 210 -{ - Game Strife - Radius 16 - Height 192 - +SOLID - ConversationID 32, -1, -1 - States - { - Spawn: - TNK2 A 15 - TNK2 B 11 - TNK2 C 40 - Loop - } -} - -// Tank 3 Huge ------------------------------------------------------------ - -ACTOR Tank3 211 -{ - Game Strife - Radius 16 - Height 192 - +SOLID - ConversationID 33, -1, -1 - States - { - Spawn: - TNK3 A 15 - TNK3 B 11 - TNK3 C 40 - Loop - } -} - -// Tank 4 ------------------------------------------------------------------- - -ACTOR Tank4 213 -{ - Game Strife - Radius 16 - Height 56 - +SOLID - ConversationID 34, -1, -1 - States - { - Spawn: - TNK4 A 15 - TNK4 B 11 - TNK4 C 40 - Loop - } -} - -// Tank 5 ------------------------------------------------------------------- - -ACTOR Tank5 214 -{ - Game Strife - Radius 16 - Height 56 - +SOLID - ConversationID 35, -1, -1 - States - { - Spawn: - TNK5 A 15 - TNK5 B 11 - TNK5 C 40 - Loop - } -} - -// Tank 6 ------------------------------------------------------------------- - -ACTOR Tank6 229 -{ - Game Strife - Radius 16 - Height 56 - +SOLID - ConversationID 36, -1, -1 - States - { - Spawn: - TNK6 A 15 - TNK6 B 11 - TNK6 C 40 - Loop - } -} - -// Water Bottle ------------------------------------------------------------- - -ACTOR WaterBottle 2014 -{ - Game Strife - ConversationID 131, -1, -1 - States - { - Spawn: - WATR A -1 - Stop - } -} - -// Mug ---------------------------------------------------------------------- - -ACTOR Mug 164 -{ - Game Strife - ConversationID 132, -1, -1 - States - { - Spawn: - MUGG A -1 - Stop - } -} - -// Wooden Barrel ------------------------------------------------------------ - -ACTOR WoodenBarrel 82 -{ - Game Strife - Health 10 - Radius 10 - Height 32 - +SOLID +SHOOTABLE +NOBLOOD - +INCOMBAT - ConversationID 203, -1, -1 - DeathSound "woodenbarrel/death" - States - { - Spawn: - BARW A -1 - Stop - Death: - BARW B 2 A_Scream - BARW C 2 - BARW D 2 A_NoBlocking - BARW EFG 2 - BARW H -1 - Stop - } -} - -// Strife's explosive barrel ------------------------------------------------ - -ACTOR ExplosiveBarrel2 : ExplosiveBarrel 94 -{ - Game Strife - Health 30 - Radius 10 - Height 32 - ConversationID 204, -1, -1 - //+SOLID +SHOOTABLE +NOBLOOD - +INCOMBAT - States - { - Spawn: - BART A -1 - Stop - Death: - BART B 2 Bright A_Scream - BART CD 2 Bright - BART E 2 Bright A_NoBlocking - BART F 0 Bright A_AlertMonsters - BART F 2 Bright A_Explode(64, 64) - BART GHIJ 2 Bright - BART K 3 Bright - BART L -1 - Stop - } -} - -// Light Silver, Fluorescent ---------------------------------------------- - -ACTOR LightSilverFluorescent 95 -{ - Game Strife - Radius 2.5 - Height 16 - +NOBLOCKMAP - +FIXMAPTHINGPOS - ConversationID 206, -1, -1 - States - { - Spawn: - LITS A -1 Bright - Stop - } -} - -// Light Brown, Fluorescent ----------------------------------------------- - -ACTOR LightBrownFluorescent 96 -{ - Game Strife - Radius 2.5 - Height 16 - +NOBLOCKMAP - +FIXMAPTHINGPOS - ConversationID 207, -1, -1 - States - { - Spawn: - LITB A -1 Bright - Stop - } -} - -// Light Gold, Fluorescent ------------------------------------------------ - -ACTOR LightGoldFluorescent 97 -{ - Game Strife - Radius 2.5 - Height 16 - +NOBLOCKMAP - +FIXMAPTHINGPOS - ConversationID 208, -1, -1 - States - { - Spawn: - LITG A -1 Bright - Stop - } -} - -// Light Globe -------------------------------------------------------------- - -ACTOR LightGlobe 2028 -{ - Game Strife - Radius 16 - Height 16 - +SOLID - ConversationID 209, -1, -1 - States - { - Spawn: - LITE A -1 Bright - Stop - } -} - -// Techno Pillar ------------------------------------------------------------ - -ACTOR PillarTechno 48 -{ - Game Strife - Radius 20 - Height 128 - +SOLID - ConversationID 210, -1, -1 - States - { - Spawn: - MONI A -1 - Stop - } -} - -// Aztec Pillar ------------------------------------------------------------- - -ACTOR PillarAztec 54 -{ - Game Strife - Radius 16 - Height 128 - +SOLID - ConversationID 211, -1, -1 - States - { - Spawn: - STEL A -1 - Stop - } -} - -// Damaged Aztec Pillar ----------------------------------------------------- - -ACTOR PillarAztecDamaged 55 -{ - Game Strife - Radius 16 - Height 80 - +SOLID - ConversationID 212, -1, -1 - States - { - Spawn: - STLA A -1 - Stop - } -} - -// Ruined Aztec Pillar ------------------------------------------------------ - -ACTOR PillarAztecRuined 56 -{ - Game Strife - Radius 16 - Height 40 - +SOLID - ConversationID 213, -1, -1 - States - { - Spawn: - STLE A -1 - Stop - } -} - -// Huge Tech Pillar --------------------------------------------------------- - -ACTOR PillarHugeTech 57 -{ - Game Strife - Radius 24 - Height 192 - +SOLID - ConversationID 214, -1, -1 - States - { - Spawn: - HUGE ABCD 4 - Loop - } -} - -// Alien Power Crystal in a Pillar ------------------------------------------ - -ACTOR PillarAlienPower 227 -{ - Game Strife - Radius 24 - Height 192 - +SOLID - ConversationID 215, -1, -1 - ActiveSound "ambient/alien2" - States - { - Spawn: - APOW A -1 A_LoopActiveSound - Stop - } -} - -// SStalactiteBig ----------------------------------------------------------- - -ACTOR SStalactiteBig 98 -{ - Game Strife - Radius 16 - Height 54 - +SOLID +SPAWNCEILING +NOGRAVITY - ConversationID 216, -1, -1 - States - { - Spawn: - STLG C -1 - Stop - } -} - -// SStalactiteSmall --------------------------------------------------------- - -ACTOR SStalactiteSmall 161 -{ - Game Strife - Radius 16 - Height 40 - +SOLID +SPAWNCEILING +NOGRAVITY - ConversationID 217, -1, -1 - States - { - Spawn: - STLG A -1 - Stop - } -} - -// SStalagmiteBig ----------------------------------------------------------- - -ACTOR SStalagmiteBig 160 -{ - Game Strife - Radius 16 - Height 40 - +SOLID - ConversationID 218, -1, -1 - States - { - Spawn: - STLG B -1 - Stop - } -} - -// Cave Pillar Top ---------------------------------------------------------- - -ACTOR CavePillarTop 159 -{ - Game Strife - Radius 16 - Height 128 - +SOLID +SPAWNCEILING +NOGRAVITY - ConversationID 219, -1, -1 - States - { - Spawn: - STLG D -1 - Stop - } -} - -// Cave Pillar Bottom ------------------------------------------------------- - -ACTOR CavePillarBottom 162 -{ - Game Strife - Radius 16 - Height 128 - +SOLID - ConversationID 220, -1, -1 - States - { - Spawn: - STLG E -1 - Stop - } -} - -// SStalagmiteSmall --------------------------------------------------------- - -ACTOR SStalagmiteSmall 163 -{ - Game Strife - Radius 16 - Height 25 - +SOLID - ConversationID 221, -1, -1 - States - { - Spawn: - STLG E -1 - Stop - } -} - -// Candle ------------------------------------------------------------------- - -ACTOR Candle 34 -{ - Game Strife - ConversationID 222, -1, -1 - States - { - Spawn: - KNDL A -1 Bright - Stop - } -} - -// StrifeCandelabra --------------------------------------------------------- - -ACTOR StrifeCandelabra 35 -{ - Game Strife - Radius 16 - Height 40 - +SOLID - ConversationID 223, -1, -1 - States - { - Spawn: - CLBR A -1 - Stop - } -} - -// Floor Water Drop --------------------------------------------------------- - -ACTOR WaterDropOnFloor 103 -{ - Game Strife - +NOBLOCKMAP - ConversationID 224, -1, -1 - ActiveSound "world/waterdrips" - States - { - Spawn: - DRIP A 6 A_FLoopActiveSound - DRIP BC 4 - DRIP D 4 A_FLoopActiveSound - DRIP EF 4 - DRIP G 4 A_FLoopActiveSound - DRIP H 4 - Loop - } -} - -// Waterfall Splash --------------------------------------------------------- - -ACTOR WaterfallSplash 104 -{ - Game Strife - +NOBLOCKMAP - ConversationID 225, -1, -1 - ActiveSound "world/waterfall" - States - { - Spawn: - SPLH ABCDEFG 4 - SPLH H 4 A_LoopActiveSound - Loop - } -} - -// Ceiling Water Drip ------------------------------------------------------- - -ACTOR WaterDrip 53 -{ - Game Strife - Height 1 - +NOBLOCKMAP +SPAWNCEILING +NOGRAVITY - ConversationID 226, -1, -1 - States - { - Spawn: - CDRP A 10 - CDRP BCD 8 - Loop - } -} - -// WaterFountain ------------------------------------------------------------ - -ACTOR WaterFountain 112 -{ - Game Strife - +NOBLOCKMAP - ConversationID 227, -1, -1 - ActiveSound "world/watersplash" - States - { - Spawn: - WTFT ABC 4 - WTFT D 4 A_LoopActiveSound - Loop - } -} - -// Hearts in Tank ----------------------------------------------------------- - -ACTOR HeartsInTank 113 -{ - Game Strife - Radius 16 - Height 56 - +SOLID - ConversationID 228, -1, -1 - States - { - Spawn: - HERT ABC 4 Bright - Loop - } -} - -// Teleport Swirl ----------------------------------------------------------- - -ACTOR TeleportSwirl 23 -{ - Game Strife - +NOBLOCKMAP - RenderStyle Add - Alpha 0.25 - ConversationID 229, -1, -1 - States - { - Spawn: - TELP ABCD 3 Bright - Loop - } -} - -// Dead Player -------------------------------------------------------------- -// Strife's disappeared. This one doesn't. - -ACTOR DeadStrifePlayer 15 -{ - Game Strife - ConversationID 231, -1, -1 - States - { - Spawn: - PLAY P 700 - RGIB H -1 - Stop - } -} - -// Dead Peasant ------------------------------------------------------------- -// Unlike Strife's, this one does not turn into gibs and disappear. - -ACTOR DeadPeasant 18 -{ - Game Strife - ConversationID 232, -1, -1 - States - { - Spawn: - PEAS N -1 - Stop - } -} - -// Dead Acolyte ------------------------------------------------------------- -// Unlike Strife's, this one does not turn into gibs and disappear. - -ACTOR DeadAcolyte 21 -{ - Game Strife - ConversationID 233, -1, -1 - States - { - Spawn: - AGRD N -1 - Stop - } -} - -// Dead Reaver -------------------------------------------------------------- - -ACTOR DeadReaver 20 -{ - Game Strife - ConversationID 234, -1, -1 - States - { - Spawn: - ROB1 R -1 - Stop - } -} - -// Dead Rebel --------------------------------------------------------------- - -ACTOR DeadRebel 19 -{ - Game Strife - ConversationID 235, -1, -1 - States - { - Spawn: - HMN1 N -1 - Stop - } -} - -// Sacrificed Guy ----------------------------------------------------------- - -ACTOR SacrificedGuy 212 -{ - Game Strife - ConversationID 236, -1, -1 - States - { - Spawn: - SACR A -1 - Stop - } -} - -// Pile of Guts ------------------------------------------------------------- - -ACTOR PileOfGuts -{ - // Strife used a doomednum, which is the same as the Aztec Pillar. Since - // the pillar came first in the mobjinfo list, you could not spawn this - // in a map. Pity. - Game Strife - ConversationID 237, -1, -1 - States - { - Spawn: - DEAD A -1 - Stop - } -} - -// Burning Barrel ----------------------------------------------------------- - -ACTOR StrifeBurningBarrel 70 -{ - Game Strife - Radius 16 - Height 48 - +SOLID - ConversationID 238, -1, -1 - States - { - Spawn: - BBAR ABCD 4 Bright - Loop - } -} - -// Burning Bowl ----------------------------------------------------------- - -ACTOR BurningBowl 105 -{ - Game Strife - Radius 16 - Height 16 - +SOLID - ConversationID 239, -1, -1 - ActiveSound "world/smallfire" - States - { - Spawn: - BOWL ABCD 4 Bright - Loop - } -} - -// Burning Brazier ----------------------------------------------------------- - -ACTOR BurningBrazier 106 -{ - Game Strife - Radius 10 - Height 32 - +SOLID - ConversationID 240, -1, -1 - ActiveSound "world/smallfire" - States - { - Spawn: - BRAZ ABCD 4 Bright - Loop - } -} - -// Small Torch Lit -------------------------------------------------------- - -ACTOR SmallTorchLit 107 -{ - Game Strife - Radius 2.5 - Height 16 - +NOBLOCKMAP - +FIXMAPTHINGPOS - ConversationID 241, -1, -1 - - // It doesn't have any action functions, so how does it use this sound? - ActiveSound "world/smallfire" - States - { - Spawn: - TRHL ABCD 4 Bright - Loop - } -} - -// Small Torch Unlit -------------------------------------------------------- - -ACTOR SmallTorchUnlit 108 -{ - Game Strife - Radius 2.5 - Height 16 - +NOBLOCKMAP - +FIXMAPTHINGPOS - ConversationID 242, -1, -1 - States - { - Spawn: - TRHO A -1 - Stop - } -} - -// Ceiling Chain ------------------------------------------------------------ - -ACTOR CeilingChain 109 -{ - Game Strife - Radius 20 - Height 93 - +NOBLOCKMAP +SPAWNCEILING +NOGRAVITY - ConversationID 243, -1, -1 - States - { - Spawn: - CHAN A -1 - Stop - } -} - -// Cage Light --------------------------------------------------------------- - -ACTOR CageLight 28 -{ - // No, it's not bright even though it's a light. - Game Strife - Height 3 - +NOBLOCKMAP +SPAWNCEILING +NOGRAVITY - ConversationID 244, -1, -1 - States - { - Spawn: - CAGE A -1 - Stop - } -} - -// Statue ------------------------------------------------------------------- - -ACTOR Statue 110 -{ - Game Strife - Radius 20 - Height 64 - +SOLID - ConversationID 245, -1, -1 - States - { - Spawn: - STAT A -1 - Stop - } -} - -// Ruined Statue ------------------------------------------------------------ - -ACTOR StatueRuined 44 -{ - Game Strife - Radius 20 - Height 56 - +SOLID - ConversationID 246, -1, -1 - States - { - Spawn: - DSTA A -1 - Stop - } -} - -// Medium Torch ------------------------------------------------------------- - -ACTOR MediumTorch 111 -{ - Game Strife - Radius 4 - Height 72 - +SOLID - ConversationID 247, -1, -1 - States - { - Spawn: - LTRH ABCD 4 - Loop - } -} - -// Outside Lamp ------------------------------------------------------------- - -ACTOR OutsideLamp 43 -{ - // No, it's not bright. - Game Strife - Radius 3 - Height 80 - +SOLID - ConversationID 248, -1, -1 - States - { - Spawn: - LAMP A -1 - Stop - } -} - -// Pole Lantern ------------------------------------------------------------- - -ACTOR PoleLantern 46 -{ - // No, it's not bright. - Game Strife - Radius 3 - Height 80 - +SOLID - ConversationID 249, -1, -1 - States - { - Spawn: - LANT A -1 - Stop - } -} - -// Rock 1 ------------------------------------------------------------------- - -ACTOR SRock1 99 -{ - Game Strife - +NOBLOCKMAP - ConversationID 250, -1, -1 - States - { - Spawn: - ROK1 A -1 - Stop - } -} - -// Rock 2 ------------------------------------------------------------------- - -ACTOR SRock2 100 -{ - Game Strife - +NOBLOCKMAP - ConversationID 251, -1, -1 - States - { - Spawn: - ROK2 A -1 - Stop - } -} - -// Rock 3 ------------------------------------------------------------------- - -ACTOR SRock3 101 -{ - Game Strife - +NOBLOCKMAP - ConversationID 252, -1, -1 - States - { - Spawn: - ROK3 A -1 - Stop - } -} - -// Rock 4 ------------------------------------------------------------------- - -ACTOR SRock4 102 -{ - Game Strife - +NOBLOCKMAP - ConversationID 253, -1, -1 - States - { - Spawn: - ROK4 A -1 - Stop - } -} - -// Stick in Water ----------------------------------------------------------- - -ACTOR StickInWater 215 -{ - Game Strife - +NOBLOCKMAP - +FLOORCLIP - ConversationID 254, -1, -1 - ActiveSound "world/river" - States - { - Spawn: - LOGW ABCD 5 A_LoopActiveSound - Loop - } -} - -// Rubble 1 ----------------------------------------------------------------- - -ACTOR Rubble1 29 -{ - Game Strife - +NOBLOCKMAP +NOCLIP - ConversationID 255, -1, -1 - States - { - Spawn: - RUB1 A -1 - Stop - } -} - -// Rubble 2 ----------------------------------------------------------------- - -ACTOR Rubble2 30 -{ - Game Strife - +NOBLOCKMAP +NOCLIP - ConversationID 256, -1, -1 - States - { - Spawn: - RUB2 A -1 - Stop - } -} - -// Rubble 3 ----------------------------------------------------------------- - -ACTOR Rubble3 31 -{ - Game Strife - +NOBLOCKMAP +NOCLIP - ConversationID 257, -1, -1 - States - { - Spawn: - RUB3 A -1 - Stop - } -} - -// Rubble 4 ----------------------------------------------------------------- - -ACTOR Rubble4 32 -{ - Game Strife - +NOBLOCKMAP +NOCLIP - ConversationID 258, -1, -1 - States - { - Spawn: - RUB4 A -1 - Stop - } -} - -// Rubble 5 ----------------------------------------------------------------- - -ACTOR Rubble5 36 -{ - Game Strife - +NOBLOCKMAP +NOCLIP - ConversationID 259, -1, -1 - States - { - Spawn: - RUB5 A -1 - Stop - } -} - -// Rubble 6 ----------------------------------------------------------------- - -ACTOR Rubble6 37 -{ - Game Strife - +NOBLOCKMAP +NOCLIP - ConversationID 260, -1, -1 - States - { - Spawn: - RUB6 A -1 - Stop - } -} - -// Rubble 7 ----------------------------------------------------------------- - -ACTOR Rubble7 41 -{ - Game Strife - +NOBLOCKMAP +NOCLIP - ConversationID 261, -1, -1 - States - { - Spawn: - RUB7 A -1 - Stop - } -} - -// Rubble 8 ----------------------------------------------------------------- - -ACTOR Rubble8 42 -{ - Game Strife - +NOBLOCKMAP +NOCLIP - ConversationID 262, -1, -1 - States - { - Spawn: - RUB8 A -1 - Stop - } -} - -// Surgery Crab ------------------------------------------------------------- - -ACTOR SurgeryCrab 117 -{ - Game Strife - +SOLID +SPAWNCEILING +NOGRAVITY - Radius 20 - Height 16 - ConversationID 263, -1, -1 - States - { - Spawn: - CRAB A -1 - Stop - } -} - -// Large Torch -------------------------------------------------------------- - -ACTOR LargeTorch 47 -{ - Game Strife - Radius 10 - Height 72 - +SOLID - ConversationID 264, -1, -1 - ActiveSound "world/smallfire" - States - { - Spawn: - LMPC ABCD 4 Bright - Loop - } -} - -// Huge Torch -------------------------------------------------------------- - -ACTOR HugeTorch 50 -{ - Game Strife - Radius 10 - Height 80 - +SOLID - ConversationID 265, -1, -1 - ActiveSound "world/smallfire" - States - { - Spawn: - LOGS ABCD 4 - Loop - } -} - -// Palm Tree ---------------------------------------------------------------- - -ACTOR PalmTree 51 -{ - Game Strife - Radius 15 - Height 109 - +SOLID - ConversationID 266, -1, -1 - States - { - Spawn: - TREE A -1 - Stop - } -} - -// Big Tree ---------------------------------------------------------------- - -ACTOR BigTree2 202 -{ - Game Strife - Radius 15 - Height 109 - +SOLID - ConversationID 267, -1, -1 - States - { - Spawn: - TREE B -1 - Stop - } -} - -// Potted Tree ---------------------------------------------------------------- - -ACTOR PottedTree 203 -{ - Game Strife - Radius 15 - Height 64 - +SOLID - ConversationID 268, -1, -1 - States - { - Spawn: - TREE C -1 - Stop - } -} - -// Tree Stub ---------------------------------------------------------------- - -ACTOR TreeStub 33 -{ - Game Strife - Radius 15 - Height 80 - +SOLID - ConversationID 269, -1, -1 - States - { - Spawn: - TRET A -1 - Stop - } -} - -// Short Bush --------------------------------------------------------------- - -ACTOR ShortBush 60 -{ - Game Strife - Radius 15 - Height 40 - +SOLID - ConversationID 270, -1, -1 - States - { - Spawn: - BUSH A -1 - Stop - } -} - -// Tall Bush --------------------------------------------------------------- - -ACTOR TallBush 62 -{ - Game Strife - Radius 20 - Height 64 - +SOLID - ConversationID 271, -1, -1 - States - { - Spawn: - SHRB A -1 - Stop - } -} - -// Chimney Stack ------------------------------------------------------------ - -ACTOR ChimneyStack 63 -{ - Game Strife - Radius 20 - Height 64 // This height does not fit the sprite - +SOLID - ConversationID 272, -1, -1 - States - { - Spawn: - STAK A -1 - Stop - } -} - -// Barricade Column --------------------------------------------------------- - -ACTOR BarricadeColumn 69 -{ - Game Strife - Radius 16 - Height 128 - +SOLID - ConversationID 273, -1, -1 - States - { - Spawn: - BARC A -1 - Stop - } -} - -// Pot ---------------------------------------------------------------------- - -ACTOR Pot 165 -{ - Game Strife - Radius 12 - Height 24 - +SOLID - ConversationID 274, -1, -1 - States - { - Spawn: - VAZE A -1 - Stop - } -} - -// Pitcher ------------------------------------------------------------------ - -ACTOR Pitcher 188 -{ - Game Strife - Radius 12 - Height 32 - +SOLID - ConversationID 275, -1, -1 - States - { - Spawn: - VAZE B -1 - Stop - } -} - -// Stool -------------------------------------------------------------------- - -ACTOR Stool 189 -{ - Game Strife - Radius 6 - Height 24 - +SOLID - ConversationID 276, -1, -1 - States - { - Spawn: - STOL A -1 - Stop - } -} - -// Metal Pot ---------------------------------------------------------------- - -ACTOR MetalPot 190 -{ - Game Strife - +NOBLOCKMAP - ConversationID 277, -1, -1 - States - { - Spawn: - MPOT A -1 - Stop - } -} - -// Tub ---------------------------------------------------------------------- - -ACTOR Tub 191 -{ - Game Strife - +NOBLOCKMAP - ConversationID 278, -1, -1 - States - { - Spawn: - TUB1 A -1 - Stop - } -} - -// Anvil -------------------------------------------------------------------- - -ACTOR Anvil 194 -{ - Game Strife - Radius 16 - Height 32 - +SOLID - ConversationID 279, -1, -1 - States - { - Spawn: - ANVL A -1 - Stop - } -} - -// Silver Tech Lamp ---------------------------------------------------------- - -ACTOR TechLampSilver 196 -{ - Game Strife - Radius 11 - Height 64 - +SOLID - ConversationID 280, -1, -1 - States - { - Spawn: - TECH A -1 - Stop - } -} - -// Brass Tech Lamp ---------------------------------------------------------- - -ACTOR TechLampBrass 197 -{ - Game Strife - Radius 8 - Height 64 - +SOLID - ConversationID 281, -1, -1 - States - { - Spawn: - TECH B -1 - Stop - } -} - -// Tray -------------------------------------------------------------------- - -ACTOR Tray 68 -{ - Game Strife - Radius 24 - Height 40 - +SOLID - ConversationID 282, -1, -1 - States - { - Spawn: - TRAY A -1 - Stop - } -} - -// AmmoFiller --------------------------------------------------------------- - -ACTOR AmmoFiller 228 -{ - Game Strife - Radius 12 - Height 24 - +SOLID - ConversationID 283, -1, -1 - States - { - Spawn: - AFED A -1 - Stop - } -} - -// Sigil Banner ------------------------------------------------------------- - -ACTOR SigilBanner 216 -{ - Game Strife - Radius 24 - Height 96 - +NOBLOCKMAP // I take it this was once solid, yes? - ConversationID 284, -1, -1 - States - { - Spawn: - SBAN A -1 - Stop - } -} - -// RebelBoots --------------------------------------------------------------- - -ACTOR RebelBoots 217 -{ - Game Strife - +NOBLOCKMAP - ConversationID 285, -1, -1 - States - { - Spawn: - BOTR A -1 - Stop - } -} - -// RebelHelmet -------------------------------------------------------------- - -ACTOR RebelHelmet 218 -{ - Game Strife - +NOBLOCKMAP - ConversationID 286, -1, -1 - States - { - Spawn: - HATR A -1 - Stop - } -} - -// RebelShirt --------------------------------------------------------------- - -ACTOR RebelShirt 219 -{ - Game Strife - +NOBLOCKMAP - ConversationID 287, -1, -1 - States - { - Spawn: - TOPR A -1 - Stop - } -} - -// Alien Bubble Column ------------------------------------------------------ - -ACTOR AlienBubbleColumn 221 -{ - Game Strife - Radius 16 - Height 128 - +SOLID - ConversationID 290, -1, -1 - ActiveSound "ambient/alien5" - States - { - Spawn: - BUBB A 4 A_LoopActiveSound - Loop - } -} - -// Alien Floor Bubble ------------------------------------------------------- - -ACTOR AlienFloorBubble 222 -{ - Game Strife - Radius 16 - Height 72 - +SOLID - ConversationID 291, -1, -1 - ActiveSound "ambient/alien6" - States - { - Spawn: - BUBF A 4 A_LoopActiveSound - Loop - } -} - -// Alien Ceiling Bubble ----------------------------------------------------- - -ACTOR AlienCeilingBubble 223 -{ - Game Strife - Radius 16 - Height 72 - +SOLID +SPAWNCEILING +NOGRAVITY - ConversationID 292, -1, -1 - ActiveSound "ambient/alien4" - States - { - Spawn: - BUBC A 4 A_LoopActiveSound - Loop - } -} - -// Alien Asp Climber -------------------------------------------------------- - -ACTOR AlienAspClimber 224 -{ - Game Strife - Radius 16 - Height 128 - +SOLID - ConversationID 293, -1, -1 - ActiveSound "ambient/alien3" - States - { - Spawn: - ASPR A 4 A_LoopActiveSound - Loop - } -} - -// Alien Spider Light ------------------------------------------------------- - -ACTOR AlienSpiderLight 225 -{ - Game Strife - Radius 32 - Height 56 - +SOLID - ConversationID 294, -1, -1 - ActiveSound "ambient/alien1" - States - { - Spawn: - SPDL ABC 5 A_LoopActiveSound - Loop - } -} - -// Target Practice ----------------------------------------------------------- - -ACTOR TargetPractice 208 -{ - Game Strife - Health 99999999 - PainChance 255 - Radius 10 - Height 72 - Mass 9999999 - +SOLID +SHOOTABLE +NOBLOOD - +INCOMBAT +NODAMAGE - ConversationID 205, -1, -1 - PainSound "misc/metalhit" - States - { - Spawn: - HOGN A 2 A_CheckTerrain - Loop - Pain: - HOGN B 1 A_CheckTerrain - HOGN C 1 A_Pain - Goto Spawn - } -} - diff --git a/wadsrc/decorate/strife/zombie.txt b/wadsrc/decorate/strife/zombie.txt deleted file mode 100644 index e26f8b26..00000000 --- a/wadsrc/decorate/strife/zombie.txt +++ /dev/null @@ -1,61 +0,0 @@ - -// Zombie ------------------------------------------------------------------- - -ACTOR Zombie : StrifeHumanoid 169 -{ - Game Strife - Health 31 - Radius 20 - Height 56 - PainChance 0 - +SOLID - +SHOOTABLE - +FLOORCLIP - +CANPASS - +CANPUSHWALLS - +ACTIVATEMCROSS - MinMissileChance 150 - MaxStepHeight 16 - MaxDropOffHeight 32 - Translation 0 - ConversationID 28, -1, -1 - DeathSound "zombie/death" - States - { - Spawn: - PEAS A 5 A_CheckTerrain - Loop - Pain: - AGRD A 5 A_CheckTerrain - Loop - Death: - GIBS M 5 A_TossGib - GIBS N 5 A_XScream - GIBS O 5 A_NoBlocking - GIBS PQRST 4 A_TossGib - GIBS U 5 - GIBS V 1400 - Stop - } -} - - -// Zombie Spawner ----------------------------------------------------------- - -ACTOR ZombieSpawner 170 -{ - Game Strife - Health 20 - +SHOOTABLE - +NOSECTOR - RenderStyle None - ConversationID 30, -1, -1 - ActiveSound "zombie/spawner" // Does Strife use this somewhere else? - States - { - Spawn: - TNT1 A 175 A_SpawnItemEx("Zombie") - Loop - } -} - diff --git a/wadsrc/dehsupp.lmp b/wadsrc/dehsupp.lmp deleted file mode 100644 index 881790dd91d3e91e128e8c77664188e98564f1d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9569 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 diff --git a/wadsrc/fonta164.lmp b/wadsrc/fonta164.lmp deleted file mode 100644 index b7e299d64d1d2a38ffca0470c333502e62c0c910..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 168 zcmX|)(FuSs3`C21*8WN!%|)ffKlb3pjxjxNNcw9HV}dc5eh0Ea7w80?ARBaoPS6FqtNUzv@DKt?7c5x61McvE zC!FwtH+5r?%m9Ng?~fZ4;3&F%m4rY diff --git a/wadsrc/fonta188.lmp b/wadsrc/fonta188.lmp deleted file mode 100644 index 13c489e989777decd5267738c1beacd8476500f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 173 zcmX}k;R(Vp5XJFO`S;8xA%qfyP>Nq&zy&%%C+G@}-~>+KsPSE>KKLCRmzNk~@Z9Ag zt8B8%Q(p3xj|>BzK3h10QK(mFAws2=Jk7_JC<*!vGq{+ICz$-K56rYE^MM! z2ROk6Ztwu^NvdkY+`0_WS)x3boML3I%0W$j^n;hAf|*+MSB1E+%$gT-3MmFTV~Bz$ M?BR;mZRdOU0^}hP0RR91 diff --git a/wadsrc/fonta60.lmp b/wadsrc/fonta60.lmp deleted file mode 100644 index 7afff3abbe6f5e6f45666d823fcecab98a11013b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 92 zcmZQ)U}j)o`1M}}Na_Hw2@u-=u?rCU0C5NqGcdEVva+-P2hoaPnw?!9%9mwj1&Xt? POMz)tRtYE#)bSqx^Ue$J diff --git a/wadsrc/fonta61.lmp b/wadsrc/fonta61.lmp deleted file mode 100644 index 7afff3abbe6f5e6f45666d823fcecab98a11013b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 92 zcmZQ)U}j)o`1M}}Na_Hw2@u-=u?rCU0C5NqGcdEVva+-P2hoaPnw?!9%9mwj1&Xt? POMz)tRtYE#)bSqx^Ue$J diff --git a/wadsrc/fonta62.lmp b/wadsrc/fonta62.lmp deleted file mode 100644 index b9d156b3459490b290050852a98ca14eef6e8b49..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28 YcmZQ#U}OLR0U#CwF&LGVmH$IX01yHK`~Uy| diff --git a/wadsrc/fonta63.lmp b/wadsrc/fonta63.lmp deleted file mode 100644 index 7afff3abbe6f5e6f45666d823fcecab98a11013b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 92 zcmZQ)U}j)o`1M}}Na_Hw2@u-=u?rCU0C5NqGcdEVva+-P2hoaPnw?!9%9mwj1&Xt? POMz)tRtYE#)bSqx^Ue$J diff --git a/wadsrc/fontdefs.txt b/wadsrc/fontdefs.txt deleted file mode 100644 index 7e3aae06..00000000 --- a/wadsrc/fontdefs.txt +++ /dev/null @@ -1,47 +0,0 @@ - -// Fonts used by the alternative HUD - -HUDFONT_DOOM -{ - - STTMINUS - 0 STTNUM0 - 1 STTNUM1 - 2 STTNUM2 - 3 STTNUM3 - 4 STTNUM4 - 5 STTNUM5 - 6 STTNUM6 - 7 STTNUM7 - 8 STTNUM8 - 9 STTNUM9 - NOTRANSLATION 109 // don't touch the shadow color! -} - -HUDFONT_RAVEN -{ - - NEGNUM - 0 IN0 - 1 IN1 - 2 IN2 - 3 IN3 - 4 IN4 - 5 IN5 - 6 IN6 - 7 IN7 - 8 IN8 - 9 IN9 -} - -INDEXFONT_RAVEN -{ - 0 SMALLIN0 - 1 SMALLIN1 - 2 SMALLIN2 - 3 SMALLIN3 - 4 SMALLIN4 - 5 SMALLIN5 - 6 SMALLIN6 - 7 SMALLIN7 - 8 SMALLIN8 - 9 SMALLIN9 -} diff --git a/wadsrc/gzd/decorate.gzd b/wadsrc/gzd/decorate.gzd deleted file mode 100644 index 55ef77f7..00000000 --- a/wadsrc/gzd/decorate.gzd +++ /dev/null @@ -1,3 +0,0 @@ -ACTOR FS_Mapspot : Mapspot 5004 -{ -} diff --git a/wadsrc/gzd/etc.h.txt b/wadsrc/gzd/etc.h.txt deleted file mode 100644 index 98534873341c5dfcd84122a85d67dd35f6f53cd0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 491 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 diff --git a/wadsrc/gzd/textures/glpart.png b/wadsrc/gzd/textures/glpart.png deleted file mode 100644 index ddb0aea8ea8a74843fa0709b41264552043bede0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13343 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 S&mKA91FU!7%qn-~B>f+ts&qU6 diff --git a/wadsrc/gzd/textures/glpart2.png b/wadsrc/gzd/textures/glpart2.png deleted file mode 100644 index f95255ebfb620942841caf6cecba5ac2610ba0f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 358 zcmV-s0h#`ZP)6)<54EtoMxn!Ev93lEZU;Y7j0UGrgtV@F+>;M1&07*qoM6N<$ Ef<=>*$N&HU diff --git a/wadsrc/gzd/textures/mirror.png b/wadsrc/gzd/textures/mirror.png deleted file mode 100644 index 08a6abcbe6705e5c76aeb85608df8784f69904f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26089 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∓$-JURCuRFPNhoE$>gO9$$NPPYv~_Owb_v;N z`1mU_%;KSdcp6T6q3o_!J31H`j=rT~V-w)nS0?)H|8FrZQMo9c`92;MsZ1pjOZ|tb zb(U%Br2PN|;DxTUpd_drFzjBe2*|#Q+Zifn{bs!yZAmNFqQUd*{^o@gaM4j44}ODf z_w5WtN-_H)ie9ZZt**h*^gN0C$gzEwobJ<3FC)oXhaa(eKEt1_^x>_3B~pyTXnl=IhHBMscF%a%~-fel8tMNxZj>a zmP_feen4@HCEv=8(R6j^6|wBN{#{LHlm=hQi6~Fs&yv67TN=p8gd5U*qmU%qa|NZw zR<+TkFQ=oHTj2lKje5`XuU_vItf0ie7=FFVqc!NKjrk%>qIukRU9o0*04!ER6s6Lg zFcQ{s^~gCE^oGcsGlAx-8@LFG0Q{Hzy&C2)dE1E%D|gvX_SQ`p&{DeOx+-ouKp` ziiO+5{f+agL$3oL#t_+i@>PWO;9qm@)m&#L?vx)+&yQiC3(=R|53wK`CySfXOl8(- zY!p{{N@kJ_eAtvd-_kyfKQ-y>pdUPqmJ%ji43F#M3D z1aJ8D^wdShS4Sii(7{8I|I~BR17Xkn^(YWv%&3k-n$J?{R{Cp<{m#~iQ9zQ<4+=Iz zn=F|1Tdyx~QQ=DO=g5^y!iy`&w@@R$?o6t=&tYOe{33`*X4wByxBa=B#y2oI1Nv1! z1nMW#3OU+>}muhXI;&|E2-f{8f(tLQA)qF~x6JiByvw{(MaC?z4~ z(kR{C5`w^jfFRvU$V!8xbSR6kFQJ6e9TL(dEX~LF7v{R=i8<#!!?tZX*IIyMogFm3 z{Q4fBt(W1c8|0KQi&b?Sd(pb?D-67y#`YON^R^avmmui2D~dvOk4t?ah_ax+^?Y2F zed{lT>#M7<}U63oN`fzfT7E2>%{TJ9)0z=9LH^M0V0L1#%J@FH#F{A>f8Q34 z3C=p7cVQz)0qg#}uq2EdFo~597s=+JH)Pq2v%)xY?)bs7S1TF~Lj{LH0KY;^*I zVlS1h@#nFg85CS{|7;4$cKPxLNiHMT`K1hv(9%|&t?k`GhuAND?sm${-mNK+N__8Vv9G8M4a+uEr4f?=(V2ZBqcxBq~k*O;tdL0u;XSg@Uc z3KI&h`j+;{n-=5(dSs3gqe+@e|NG;Xm~4L3+=Z(cfO0dNaw;Zdm#= zJ`NT3F&l2?VhZ?|I0@BaKMZJ4n*(pK{GNYX%%Iw`VzGZZi4}Czc-jW(+8yoU>H~+2 z^4%fx2qptRiF+GO2R7zgCBp1wBykGA?is%5Y$xb{L&D|Y=T$o*FR>PVxT#_FO>Z^* zGl#ZlL`Sv>^;ZfTWFlpPiKl%$IJ>q-(_Ev&r8M4f4`%e4IU@8L$Lqr{0t?4d6iN78{c#si3{g|43;(=RY zwEeRp!l?g_3@;bEGKX4^2xz2g$`V196@X;~U}f=x=zvRT=DiJ{bX48PeKNN7MJRO9CIb@m;B>eKQf{fzBC8WSU_Pv#L#@(&t`lJiv@GWk4 ztE4||;c2=oaC|0Gc*LOb^!vA1)X5U^{XYMmp^{U7R9H8gqsMm$sSF+mITlcSZ`U>d z7#-gMt;T`B_Ts^%WC8upKyX3|9_UMIlLH9j^fxwP5QI|bkZ=YUq&t4^^$PyuQoKtu zgD<{zdY8drXeUR)r@m6pCo1_Gp3oC>vsv{*5cV1Lp-{c#dphNG=1+F|r|SV+1?z5K7!Yz#&@0%i;qSWksCjW&d&qG0fZMccgMITXE{XqyU)d&2 zzQTeJCC74d>Lv9q$P5_2ckc7<@grIHe>>H#5b)6ZsNR>NR4l*#RdDf(Lu8K)`Q>gr zTPIzN|IR1=khLEuJX~Nr)khh>AOr}#07AkSf{fIme3B!;m!`i&lCv&dJmWbloImBM z0C7GeNv|$!-SuixoV=-vOj@`jA!HE9jG1#{)T-{EJTWYe&T`iJPDIdSS2F`2h*98Z zLspZLV#Xfg(2MQnZ4Cd6r!iL-%8nvbXb$z7paFYng{T^ocdoD>w>zZbGiGZkPk#~6r?VtP78d0_v#^D2ViXn zB4ujI!8jmG$vE=Ryexr-tq>1msPt>IurmQqZ}DhjH)b+q8Lx}_`17ZNCF_(nVq)|w z{x2WRdGUy6ud$Um8^2L#=jjJ_|DL4)Ldn4aGg0Q{?byoP07+wFJxH_DnjVE z-igW8%!Ux*Nt#D4_mN+|t6x7)S>C<7;>q$-Q%rwz&&AmJm zb6VRWhu669_>H~92S3D4&;J8K4Utf!&!ju9UZ=>fykM|ggItL6(*?zE2-x2n=7cI2 zzp*YKwKO_1R<(&fEasEDzfK+<36K=wSp0AZ;6uko4F;IY{33jt@LOa2704r#<}ms@ z!6~ys>5#ZN7A^wC1P5k0x)$6F_%z&1>Kc)SIwSlra`+g{+^iV}qS8?>K*VQ^T{>bu z#1`6XYYK&Tx{}!k#4g-mPrB(ytKNqcY}dL2$X`Yf&prSi3$n^@OBUh^suKEwP44^0!uW`82 zB|r=lNPxBK;=&!fwk3Jn^w5}az9AWHbB1sToZh`0uR%=up*5-2?-%@&bQgqhp%g9? zCE3Axmv`F>DF>eE7gQT@LOa`Z`2|ApjTCwde5MgJK&?&p*TU>@wMJ4;x0WRxz>$6V z;x;U+G3Zw+aUnC9OdvBkGM*(TYXH(U_d}Luz?dsA<CeA)O*(1ADKdC)@gNZok z!m*B5tkhupWfD<3^mXIDMyKU)achX?r|~n|mva*av*D=r=?^7oJs5|;T@9MTIyC6S zYH2`dqLPw_rMv`;L(;#TFHiMB&2LmGmO*3Un56n86d?}26M!7`_Zjuiwy1EZ_n6_YPUB3eDf-D$dVf z2Cf#Dai*tTZN0QrGBA7BJh*Q9d}zdXZd$LV&z1GIdBUrqfqt)^^ZdyJS2{X)YS!X| z*s{RA7vT^>`&IM+%aR+sGj8>=-nW^f-O3bv&h(M|92>qQ7a#gw=Y{Y2*Kz0vm-e$? zt-rYqt^W9+FNrI6ed_mqPrhPmDDS%Xn7k!_lGld`ZmCp+89BGV+uCB5Y4L|J+b{iqF)FPq}08iMMs{2x2m zass5uE6>i3+_-F339(f>;E^jBEuSMhpYm(Gliu>(|Dch38FgJ}X zWc!7gIr)#DjyJEzcnrUJTTPV?!`iekP3|G`Cli(VFg5$-%T2Whf}D8kx{~vBRUX;O zFEr!CF|2nMAuv0Uy+ib>xJu13kMHbQUI!Zi2D~bAHLRw#nMD1Q-E|$Mi+GbpL)fcaWmFGP9KS{*%naOzaiuy8Ik#G&)|=`W z6m*dduQ^R}0V6Yf6AyWD{qHVu7FWY1HQV3d%$R$w$NpiZUK$FaD-+q`A5?WImM z3?S0Rd$AQme7&13ZJueTJ<)Zf()?o=46O?^A#m0e$(42RD>t#;=M1H=%)BHBC2NVH zof%nx>}#o}zD*Sf$>25hERL(zt^bApS&HG=-Z{2um74#55bNgyJb>2yHCTpG!ba@l zVoE#fXM~`9-e%OKj!(M9Nu^hSr|U6idw}>T;rgM1M!+;9 z8S22O8&8V}fF|2(PcJ!W5W@wG1M9sV+8N>hR~Ab+p#J7 z&g9>-t!+#?fJeT22BcSgS>yy zu1j_j2m@R!V@|QL*CD0-SdrsgPCeJjptZ17^ZS}#u|E!a%uU9k%aUrs#*37tkxKo$ zyT@A$_(&D@0OO)IDtz_bzo{ElFEc4fh?B0{>`$_|1?>3=89wMfeiONZMzUU?JAN z6~!KR+FW7CU%E@XW@Z`=6`EOorSPfK9vZojMs_G-jJ!{G$f`FHNzBs3WW4i>1wQ(Mw6Um7Wr9l7nb!MEVY|eq@;FX<)2{uBjK{39dn`fjI62DtCa z=7%*}l76^!)Vsxk?-PODbG#3?msI80K%EBZ=f*}6Yf9tdw>q?p2gr><3a5l`A)@am z`o7T2LSxza)icWm^r=Oa-k)zO5z0&@} zLx7eN9}x!d*l`#+=)j=CgynXNbrb3u?tPFbQ{!)y0mV7+W)%St9L53>DF7VU$N&ZY zK}$?WdZix-<*-mX?#9XOj0YR4b#T!l1%PxlK9SNb|K8JhpK#Qh``piiO*{RHSR%=@ z@RVn+4XdT@7}M#z?j?`Wbpq~0VRv-~Rp$hSf||CVFYZ{D#@j9^pm_6=bs2pnhbf{V+Mty0G+k6$+Vr{0O}LM_uYc!~`lJqy^ka3~;AJ$FY6Xz2Z;4 zG8WaTrNB2(JvA2F_;8~U)ok9|_86+@+c#2f?eZYSir?HaHO1HoVH@@Ma{_Xb7)?{X zfZrI4-C{^Y+6&c;#Z;tUqQ!0a)Bi=|g&|K|=4Tx1cEDO#_4sj<8q|L+g+$vj%|TMfeSTLH{|o1pKU0Z-=JRDvh>6Q?wUwq>9I0-NZ`a#r+<{Q*&%Qx4aE`w|=GgQ{{QXp4}c z047<}41g!-Hi4K9Aq9)3H@u_<8Gh^(d)?}?3^SM@z*&XCRsTx$)E`fa0G!#=^Sa4n zBn15EgWXFb5g)dC;q=>38vHL zxPiq>04^csyh?Y(E1c&%sLTCEVT+}0!b*`fMtZ=}I+`-v9vDQL-Xe28En>_4sQat`0 z11Q%IZcd~uOE zzj+}G88a=K4|LtL!q)?c{bsY|pdiVcSU>(ZypmQP7h=w(1@D|((LeAeaX^m0joHZ` zGVg5GGImA(a{ZwPNMhy8roUL4+cJlOn0N6p9OC&X*~eyf40G4gwK_(oyvU8p`lrjz z%4J>OKKzlnQnta5+<(7fn@{l0V|Enn`Gdz(NTBQDZ8m)9Wn0whVq0htz7KihP41#d+&`p8W!6f{8M4zrY6!5exX-`f6U0qwYC|HoxTr^P)0H z;rfQj-KO(!neCe-$*x#qyASVm4}{V-wvwsVEGz8pk^htkGstr9kC=6$h(xOO%4z45 zr)@SHh5T^QuxhHeK2H*@+4V*tDea5a6=c)Erz?hd;Vi4l^^1*21**^+Oq1}BVQ`Vw zQkDGrCXJ?acM37ql0<7wNZqWvRtSUXhVRY2-^S+_e<}`BbNp09xj5~oPP);|tQHyQTFQ4@^|5}5Ck4t~~tzUF8 zUrZd3+%kcfNDMi#TijOJPMWKQmw1XH+Oj&Etj`j$kaiW?RNkKPdOxNlEUsru6L-DK z4Fz$_&PUR`er#9>^_lilA7%2nDo@Y-vle-Yx6X8_R8KZBSri6TXK}V z)KZRgbUzsSAe%-nD4?B~8hEpf^%orX^%#PdpWuGZ=F9b^4#YkJyEjUj*(phbAt ziCGILWwBqWa{S1CI9-j0_icjcqkw%Jn~DV;^}#P$5F}6RdEnqzFHie8!4d|?vN_a! z!LlgSoILKX`;i$fXX4~Kl)WaiRIn7)FZ4v1KH}x=UQ#9rSl0ecBto&$Ih9LS=i_w^ zy_BLQ-;*nwP-n|$aE)>PXzRckJU*Ty0TOuejxjw^##H?~qd)v=2qZJ;U3`x5y>7@5 z{0TYNS!Ex-tZN3(CN*btyxOgww4QR)HwMLHUM+4CULI@UHTrE8LYj4!!R$ReQ2{#M zqFgsla=O?$$~WX$Olln&CGkenj5a|j(APnWly!6y2P~8AQfhJ);k#-7S*+?vgFp~H zaHGe|kMwI5m317#Es#RLBRi~wq3}eF8)NMW$Y?%DU?^pB{~WL`wMoqFrUqbEU(J=? zebgx>{Q1YMyxNyMgX4!P;3!fD0Dc(T{q(o&NnQzcMV zkhz^uax6nqg8o*K>^~F!9CA|2$?*u}Z>FX88aS`=9^t+g!N^c|6d!Hbaf$TgA(TFa z?NkKiVDLV{v{v=2#|B?=*PJUWsMeoq4}Vo~=HmZ0f5o(*@0rdCBv8@cDWD$NvBS~p zPLI3-f%qLz41`$Q5`3kh*mcE@`Aj$Mj4de=tCDTBFBKPOd5i-=%zAQBQW}ejKV4+4La-wy_zf-7*(`ZER|U$Mn4DY z(&&4;Sk_&`q95QbonBkWFJH)f3&4Lk8$He{=|HP42l6X6WSC)NH$5j-$?&V(S<=M@ zfvYg=pH!{A7TZfAQG!wTP#yX|kJqnO+R>|ZYlXqjLzkv?`^gE`_ULzvIUwT zW|9~hOTInRV=32Yj%XO~fA?Qar~F<;kBdS6P}uRK_0i!_rY_}W52=x2^Wk&EFRX}c z{<<}z#`~~?-jNNpoAAodn_L$q-=di!G{%Y$bV7_}^aTcgsGq|U5K(ZCy;3)Vu$>Zj z*ZqK@f7hj(?r9mGKG>T+7uS-+1HETWY2V~%Jg~atFl+m!Y<(IJo75gwShg%zD>?>W z9GCygs)IK-1XU8u!h4NrR4HJ>Ny_t={n*Vzo3sVbWpq?1?(PM^qh@&>zDD$Vh zvG+1YmUK#UYE`UhM;pdBO%FEbuC1gJ2S^%AE6t6K#oQ#@pa>fh7JoNxh@QoFh&pHBmA)Ci6zi)OZ~oh(Q(m2ncM)LwKmj4( z)8qI{My7jT8z?o{_}^1St9dr27NH#7c+|%Iv>#I6DvHg`kFd#l3cRgseGoe2--WBE z_W9xf>=uvj;Kp*A=MvqQ9(qi|`(O2xB>@410LA=>BUIaVJuSj{F$G`_q zI4nLnnC63Js;iBXBIBryui|(>^&Ee@HsogjOGe$F7bC+-ik9gZA}K-B&wtg_*BAUd zbzp6kcyVU}G*scftS{c~vT9T|$ory+RB({s;A^HAc%PS*iM}#;R_-KQ_A8CzEh`(d?bntX1 z%JxzLd->_(m=2UKabF2m8C&NS%7q!e3`O?%BbP`=S8-#K$#yyNx&)1#Ir;*;d)RYy zw+8;zmAO1-_0E5DY5QuFj`9vIhb*xYZf}+5pD5A1Jj_!KgwD?IF)rvB9eoqX)^9KI zo)sxv=7nhNhmB6ri=x%o;YSs$hZHQ>@chW({yY|Nepq#-;6ZWz!c0!b9ew=!qY6db zX9~00wH2y-Z`dL1t5rLGVP3XDd!xa1#spVioTWY|BTY+EQV2zs?*@eUy7veF6PnGN zYm?+&x3ck*YOd)UG`lso%sh4()z~Fsl2n@C9(~0PS{Z(ORQYpsWH*;q2J>At7(ZF^ z+EnKF>CjDR{^y?;wA#4C(Iva~0KmphSomz0-bd_@X1PcenFiTZnY8>ZIUq>lU+p$q z7VjH$`H-i=tf%+7`9KR=LTpXXW~iaRH=zvJL{ z5*3u>_VUyidYB8#I{Ymly3*Rm0RG;YG>hz^YG3)ENJ5alA3jrQI5An^E-=0#9GP+Lb)eC4K-ZkL9T|%y=c;scAk`@d}_RfzW zeo4K|RDAE*%-6Bog`h}h3D@{7WI*!!)&8&&f&^!IG~jFF)!jW9_0NRAw_PqgaO+oa z1=)-KAG4!)z}b3M3}$}Go1GP~GCNeJj4jiTw!QW-Y1#VrytutUYv!)2HNv9fi#gr! z%p-FPSWBf=!y1-iket)#7LLbOvzI`@R?!?Xq^kfg^P5-N}#>91`*?YvuqD#0hlB%Lbyhkkxt0=1?(GR;hDJR)1^^86GI z5xJ`R(JtI-t3jqG@TiU57+Utx$&9O(!g?#kxYv9EbL0?|B9}=YhJIISLBT3O6fu$Zu>F@UwTn4I5xcv&cxlsF&T2nhTGY zw4t&JNFM3L5GV`6{JF2N*uQTA3ja;<9|dr~@0;LOpPg~xwsFde*_glavtT_R7k)J{ z^K{!yhR<2HjX5IP?y6;nFaRZ2*T$5ai+(-4-6e>xM<95?TfydCyOjAur-QY@$ij1F zXhn)BTu$m#3@kD$NPG0u)R1KwnRg}BFxkh5ezgb+B%e02>wQbu*vo zkY*`(p6u4quqEzTnmwVz48ITqR|)}yOAqXQJ9xRW%;NgKFr59`zJMZ!+3Td~a62%o zy%@f+S&LY2^W4f*JCx}=Zx~ZeZZpISWYL*fXK|dHFl>gqP@ZiV2-ut-ForO=3m3Bi zKsvavxHawRbLxU!liR%I7dnx$Xb|Q zRyHwPRatoEupDnjHZY@!?ESuDtprJ{$rfrVrj>Sl?auZ+P5-HQAUx>3ZyU~X8w?{w zJITnu+JEs^Acs`$02_{7t(~eKQt+4dF&0z@Z3jMvW3pOzzpVFF%ZDZ3XpDe+E)GL}%U8$#~fQb|;aSh_!1CjlXSPcm}BxxwnzX z^VzF9-2k`HCX`fzs9TX5eyjS1!8@({rswe<_gB|#lqRgDw*0ewn za~M8Yu-YSnH%rwUFc(EV_!jdy565e!!ymQN({w7{K%}d~M8Wx~v3dXC7X-nEr*FKU8e- z{V>ZFKM_=yE#M|(f_##|^+9Q_{mcYRwqE5D%uARGVTZWjD57%o(r=l8c8$&?r^H&72e=+$%x+n-2$Gf>OQGawvPNCx99Gg diff --git a/wadsrc/gzd/things.h.txt b/wadsrc/gzd/things.h.txt deleted file mode 100644 index 25e6fb9e..00000000 --- a/wadsrc/gzd/things.h.txt +++ /dev/null @@ -1,224 +0,0 @@ -const PLAYER = 0; - -const TROOPER = 1; -const SHOTGUY = 2; -const ARCHVILE = 3; -const REVENANT = 5; -const MANCUBUS = 8; -const CHAINGUY = 10; -const IMP = 11; -const DEMON = 12; -const SPECTRE = 13; -const CACODEMON = 14; -const BARONOFHELL = 15; -const HELLKNIGHT = 17; -const LOSTSOUL = 18; -const SPIDERMASTERMIND = 19; -const ARACHNOTRON = 20; -const CYBERDEMON = 21; -const PAINELEMENTAL = 22; -const WOLFSS = 23; -const KEEN = 24; -const BOSSBRAIN = 25; -const BOSSSPIT = 26; -const BOSSTARGET = 27; - -const REVENANTMISL = 6; -const IMPSHOT = 31; -const CACOSHOT = 32; -const FLYINGROCKET = 33; -const FLYINGPLASMA = 34; -const FLYINGBFG = 35; -const ARACHPLAZ = 36; -const MANCUBUSSHOT = 9; -const BARONSHOT = 16; -const SPAWNSHOT = 28; - -const PUFF = 37; -const BLOOD = 38; -const TFOG = 39; -const IFOG = 40; -const TELEPORTMAN = 41; -const EXTRABFG = 42; -const VILEFIRE = 4; -const SMOKE = 7; -const SPAWNFIRE = 29; -const PARTICLE = 145; - -const GREENARMOR = 43; -const BLUEARMOR = 44; -const HEALTHPOTION = 45; -const ARMORHELMET = 46; -const STIMPACK = 53; -const MEDIKIT = 54; - -const BLUEKEYCARD = 47; -const REDKEYCARD = 48; -const YELLOWKEYCARD = 49; -const YELLOWSKULLKEY = 50; -const REDSKULLKEY = 51; -const BLUESKULLKEY = 52; - -const SUPERCHARGE = 55; -const INVULNERABILITY = 56; -const BESERKPACK = 57; -const INVISIBILITY = 58; -const RADSUIT = 59; -const AUTOMAP = 60; -const LITEAMP = 61; -const MEGASPHERE = 62; - -const CLIP = 63; -const BULLETBOX = 64; -const ROCKET = 65; -const ROCKETBOX = 66; -const ECELL = 67; -const ECELLPACK = 68; -const SHELLS = 69; -const SHELLBOX = 70; -const BACKPACK = 71; - -const BFG = 72; -const CHAINGUN = 73; -const CHAINSAW = 74; -const RLAUNCHER = 75; -const PLASMAGUN = 76; -const SHOTGUN = 77; -const SUPERSHOTGUN = 78; - -const BARREL = 30; -const TALLTECHLAMP = 79; -const SHORTTECHLAMP = 80; -const FLOORLAMP = 81; -const TALLGRNPILLAR = 82; -const SHRTGRNPILLAR = 83; -const TALLREDPILLAR = 84; -const SHRTREDPILLAR = 85; -const SKULLCOLUMN = 86; -const HEARTCOLUMN = 87; -const EVILEYE = 88; -const SKULLROCK = 89; -const GRAYTREE = 90; -const TALLBLUFIRESTICK = 91; -const TALLGRNFIRESTICK = 92; -const TALLREDFIRESTICK = 93; -const SHRTBLUFIRESTICK = 94; -const SHRTGRNFIRESTICK = 95; -const SHRTREDFIRESTICK = 96; -const STALAGMITE = 97; -const TALLTECHPILLAR = 98; -const CANDLE = 99; -const CANDELABRA = 100; -const TREE = 126; -const BURNINGBARREL = 127; - -const TWITCHCORPSE1 = 101; -const TWITCHCORPSE2 = 110; -const HANGINGMAN1 = 102; -const HANGINGMAN2 = 103; -const HANGINGMAN3 = 104; -const HANGINGMAN4 = 105; -const HANGINGMAN5 = 106; -const HANGINGMAN6 = 107; -const HANGINGMAN7 = 108; -const HANGINGMAN8 = 109; -const HANGINGMAN9 = 128; -const HANGINGMAN10 = 129; -const HANGINGMAN11 = 130; -const HANGINGMAN12 = 131; -const HANGINGMAN13 = 132; -const HANGINGMAN14 = 133; - -const DEADCACO = 111; -const DEADPLAYER = 112; -const DEADTROOPER = 113; -const DEADDEMON = 114; -const DEADLOSTSOUL = 115; -const DEADIMP = 116; -const DEADSERGEANT = 117; -const SLOP = 118; -const SLOP2 = 119; -const SKULLPOLE1 = 120; -const SKULLPOLE2 = 122; -const BLOODPOOL1 = 121; -const SKULLPILE = 123; -const BLOODPOOL2 = 134; -const BLOODPOOL3 = 135; -const BLOODPOOL4 = 136; - -const DEADCORPSE1 = 124; -const TWITCHCORPSE3 = 125; - -const PUSH = 137; -const PULL = 138; -const DOGS = 139; -const MF_SPECIAL = 0; -const MF_SOLID = 1; -const MF_SHOOTABLE = 2; -const MF_NOSECTOR = 3; -const MF_NOBLOCKMAP = 4; - -const MF_AMBUSH = 5; -const MF_JUSTHIT = 6; -const MF_JUSTATTACKED = 7; -const MF_SPAWNCEILING = 8; -const MF_NOGRAVITY = 9; - -const MF_DROPOFF = 10; -const MF_PICKUP = 11; -const MF_NOCLIP = 12; -const MF_SLIDE = 13; -const MF_FLOAT = 14; -const MF_TELEPORT = 15; -const MF_MISSILE = 16; -const MF_DROPPED = 17; -const MF_SHADOW = 18; -const MF_NOBLOOD = 19; -const MF_CORPSE = 20; -const MF_INFLOAT = 21; - -const MF_COUNTKILL = 22; -const MF_COUNTITEM = 23; - -const MF_SKULLFLY = 24; - -const MF_NOTDMATCH = 25; - -const MF_TRANSLATION = 26; - - -const PLASMA_L = 1; -const PLASMAEXP_L = 2; -const ROCKET_L = 3; -const ROCKETEXP_L = 4; -const BFG_L = 5; -const BFGEXP_L = 6; -const BLUETALL_L = 7; -const GREENTALL_L = 8; -const REDTALL_L = 9; -const BLUESMALL_L = 10; -const GREENSMALL_L = 11; -const REDSMALL_L = 12; -const TECHLAMP_L = 13; -const TECHLAMP2_L = 14; -const COLUMN_L = 15; -const CANDLE_L = 16; -const CANDLEABRE_L = 17; -const REDBALL_L = 18; -const GREENBALL_L = 19; -const ROCKET2_L = 20; - -const CORONA_TYPE = 0; -const CORONA_OFFX = 1; -const CORONA_OFFY = 2; -const CORONA_COLOR = 3; -const CORONA_SIZE = 4; - -const LIGHT_COLOR = 5; -const LIGHT_RADIUS = 6; -const UNDEFINED_SPR = 0; -const CORONA_SPR = 1; -const DYNLIGHT_SPR = 2; -const LIGHT_SPR = 3; -const ROCKET_SPR = 19; - \ No newline at end of file diff --git a/wadsrc/hamoback.png b/wadsrc/hamoback.png deleted file mode 100644 index 4fb21c0539b987491d8d3c9875455fd52852905a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 831 zcmV-F1Hk-=P)X00000Qp)nB00099Nkl@1fv4};&_IXG?G0_TTlzEoXn zOf^pJx!kw*qB%lQ-aQCnc%icoigfxZ)_gS%aM2I>eF}Ct?uW9O_c_R$;C#Ee$9XB` zu{si$Ga3a-*0@iuk_hg~Nt8@!0GJ&TOMY^=08MJwJ?z4_@ZgE%uXHsN9LW;NeF?R? zmz;|z^K*U`8%hTu9^r*nr;9&JUbhz)p=QaS<@1ZU3J0!i7jKahBOiyUJd^Tde9u_m zP4jjrtdJci6)9=q6t?gI_LcKEOXX*hIA!0Pdr5~D>tC`2sxb`*iF1T#e`zYYlA6^H zlu5n6q978?rHji#>0rKp*pk0domktqa(li^J`Q1vLz1aYvLpUe9BibjVB zI%^I)@#K4>JlvZ=mL&iC*?=pjlq2Bhe*7%@=U%v7Q)()Q;BY5~DC39UY(bw%Wv^#C zqVo|4THZp4=M)}mbat4`0hUu1$>bP}Bx<6@3vrQWg2e~j>$Fm7cmoQ8xmzz*jyApx zkUwY7YsT%Z!{H9A-#%OYCkk6 zBw~dCZNRgg&+V9R@VFdbx|BY>#Yh8tjLn*$mSR?4OQK3a|K@m5;lrJSWjW1g`l{I? z7%tlaq*M}@w>$32j+0&H7`1jms~bqtba8|ixEF6Ko|@6V|HgJI-m`mP2(LLIi=XTX zQ{oVatx)Q@2R*i3#CQd0xPxyI)`t3PHIys!n1uYsw@;sVo{#L2mT3A63f#l5l8qdF zxD0m~19zIP=4W(&^XJ0BOUdrlL_#K^n~1=YW2avv%0AC|`w!8S&E(q5P$~cb002ov JPDHLkV1kcjjJ5y( diff --git a/wadsrc/icebreak.flac b/wadsrc/icebreak.flac deleted file mode 100644 index ee3a6bf92deee4fad3109d3afa30b4e2e699c1e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13218 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 E5BNxK)Bpeg diff --git a/wadsrc/iceca0.png b/wadsrc/iceca0.png deleted file mode 100644 index bc94b0426e715f55002c0e8ae870ec4e32127ce1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 202 zcmeAS@N?(olHy`uVBq!ia0vp^AT|dFGm!kQGOqJi0BI{v7srr_INMY1LJbByM=!+Zs4u+pf0smBM_9gMiFw)eTT|-QMgKim sQF)1dL(}5bWko)lT$1-Le{zIbNrB;0oXGqeKvNhzUHx3vIVCg!0PEmIz5oCK diff --git a/wadsrc/icecb0.png b/wadsrc/icecb0.png deleted file mode 100644 index d94cb04fb0a21ca7861b42cd43cbe6269c9e4af2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 193 zcmeAS@N?(olHy`uVBq!ia0vp^oIuRZ!3-qdx=sfPs0a9jxc+DO9~F_`)G*!3!apyk zdD@iKNeShCKFMVz-CZ5?^>m!)&Dks^q2K(dj~}Rou_VYZn8D%MjWi&KBfZEm2}rX7 zG5ZyZ@~uGH#M8wwq#{oBgrg9H0tb_Wqxa^2|L>i#IKX%5QB jKikduct%6br3K_E)S!3-obWS@QqQgQ)4A+G-!{##l2`}ri#o3pvA zV}4V^^rVFHyqxA`OLkA2vie@MkSI_kV@Z%-FoVOh8)-leM|zQC5|CyAV&-?Ivt)p@ zyr+v}NJSj$fsMQj3LGp4_A`Btzs_>OV^P)7M19jUzwO%DSp|Qr`vp|W;OXk;vd$@? F2>_CVG7A6z diff --git a/wadsrc/icecd0.png b/wadsrc/icecd0.png deleted file mode 100644 index a90eb30528b9e172d8afc91e457ab50986c74cd2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 120 zcmeAS@N?(olHy`uVBq!ia0vp^%s|Y<0U}qenx+Ay_yc@GT%#iL^>m!`a+;Sd*`1V7 z9?9Nt6DY-zUgVerQV+snMe$ldTENrAF{C0cIUyx6B_SaVC}qOH6D4@!8&HnH)78&q Iol`;+0N?i;W&i*H diff --git a/wadsrc/icedeath.flac b/wadsrc/icedeath.flac deleted file mode 100644 index 4a8ef72a82cfcf82fa579610c6c35f1d6e1bdc1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9652 zcmb_?c~nx}7d9dmn)w0_;ZQFipx}gK+Ng*Ih!cVXYEC#0sb!^QsiA?IDdKFFh7%6u zRB38v>MIVFQ>N)#nO17qn`wiUe)e1I`{Vond+xgX?7Pms=dOL$bI#pspB+H+u>=4B zC>Q_+07&iz$g~0*Advuo!|?;Fdy}5`414PAe0ON)ITxuig-Uw}?~$wwdmz01 z z(E4DV0)w_07Un+6rtH>TtvXxLgZn3b-!yEPD1)$6t%1E|BBhnG``fq^a zy6LXymLyU*W)syfO#kNGiAxY-|*8hQv+`c?u0fuskVrt*CQ2{|48Vn_aL#a%FR z|MJt}cA*hB)9?{R(N&cfJq_!aGV02UHYo_YJv2*lKhh(rdOI9CD+1VjE znAn{%5@|>_OLKIPsw1TLrB&-i`d!u3tP6Ww+uLf$`xy;cL%=K(xfEH^ucE@A=>*nk5Ti!yQ=Z;g{y9+ zHD#W#dIW`QS8&gkpKHJMVbR`BP#K^U7k{+LJ~epi!{~sMo#2;{PeJEV(EpRV+mb)K zt!tCIcLGA>qyRSn5P&2=O)c5H`*reh86apuLr$#=j0=NkOCvugnf)?6f3C^xmo+mz znRnP8>Le3D4EfIL*p;JWn#xWKZr&)7_!`ggG?dVw?$XUi)|JWH)l370| zkqNSz4=K^Wy7E2oLHql2Ro=js{aluBaa?JO>uSn4B1<|{SRsSX?rxLY|fjU#vE zQsRijjbjV4#YP6tLXTXn%8oYiwYZxuVFL3R)02Or{NSa2iLKLM1c`|drD$gE2f07~ zuVf$TQ01>7op;o8_6ccxm3XDlYR6;vtQ?G#5=?`OP zClNOuq#si;Fw4Dq2Br}A{YS#cX^RDMl@gGSxUYF&B9~naM zf512@Hfn|IRfE4f3*2_CS(ns=ExX)mu2=d#p*``+NLv!1WR`FUJW7?YIF<`MDxv8} zkA%$LJxWU-#L*|d-;AQzp&PztDf(&K6$JL|ot3`O%3?VNvpIA;x>1ILLUA!rs3wO? zfDov-1ay_)?$8vNnFB4*T6`&mdYSOyenzSGF` zG5`!vlSojTgTv(Z7Wa_h2mZ>kHXR_Gic^mCeApi6eK04|%RIHU>`a zm5*|S8XG$9QFL-rly}=>(f+neWok0!$2Zov(2TA+ss z$V%DJ^rzUAx8QIdc?k4R5_n4Op#s~H`yo6t%t$FA=@mi)m`QrY^Ywt4mMVpD+n&}u zquR~26xIfQa(+2>`ox7V7luDJ6uk8dID9AIgrDm3;g!DbB~FPj*C8&{Q;^PoYo+<#kNKq#L$mxjpvyw5~ z(*OCa(aGfw-9>xUAcVJC?B#AYH1!5#1tKiCLt1p&-X21wN8FAqvOMXGo;PG`D5n(O zZIryIIT|JKXAz^*{ohz!zbAg~>I!J7RRqx3>>xmsR8r|A1N>An{e${x1*o}grl|zL z!?1Krd>BnGFk*E?Jo8LbxWR6W>NRT|_-zK8srV5(DD$Q%gn#|F>bvn|^^mvU5QxD` ze7SJ$TfLSd-4kuc`Z4P-e6^}!^H*W^#wgvZOBHc%Sjrmm3<>uDb$lYv z4fo5@ZeZX0v|rWMQwsOT>zU$in+Z37w*46a8|eL-EoqP)-*KnrTR3~v|K$W@ z%4%)6=Y#)@hlh65S@2)6mPTREO>ToUyFT9_p9K(r5*3B!Xm3qT70OPBFLG!lO^L)C z1wEQ1&hj;fkPf%Q_nqrg-=DA^)sh}Qjplz$wl z$pRKBjGTR(zEq}Qxc9e0i1geUrJ>4xYxlcVm*2=)KC{Xds6VV&RQ$p@GT|@O+6wVX zMw(Wmy+21BbfDekSiJs}aotts(4UAy;u2$3UF*f<@6}22PCY02$oO1bDIEL;naMqp zQWV*oP?c%qP>>s|phI;|HW@qm_Qte(xx)2V&Di$Cbu0&e-@O&fclpMCRW(xF(4W`V zu9TjUqjWzy<#C1ea1gIN%cIomIghzXC}Ea2-B(&dsV6VL>sc_m=ip;n#_@yFcENTl z#f|8-^OmiJ_QS_jDk*U$O{eskh^&1gXXiWWZq84OF<}F0B{8lx1{p{dyG)_~46(4? z|8L9Fw~cnmgSzg)-zIl4&PvQBFhD2J)~Sd{E)AR}Q67zV<|Kj~e|#ZvbILyK{tsn2@y?F|day?1T>==Ho`IzdZ7QuuUh{5)m*$4`xK+Sp$cA1{b34g4ek~pk%h*^v z4>AK)X#+1uBCZ-q*d7iNXzIQowf`$c#krpH5DY(2UpKzhdmj1K@4J>!#>l%hD(2sf zfCmr01iKxqKAkMkDoDhWH(l&;@G)|w^=F!6;ohLGzKI6^VUBd?2s>14;vN!5NLQLMnxg!JQy0Zv zbCI`p99y#f`Z4pP1}8SV^FBi*Jrp%nH#Fs3+4%K=X@2U|%=l#d+!a#%iw-#{j=ZM5 z^WlG8lQT;biSg=(e5-W>8xAr94l-=z@id-EYA!nX4zCu=yVb9cwnB}eQujdV@}t`2 zu;em2FDH#+z#gwb8O1^s^BiNKX8KU&Un3!B6B2fT0JmSsJgNmD92A}RDFC{{-@wof zU)t}^?M_s!9+uvf9ebuRr?%1gck(!Qcq{J8N&mlGu$HwcYb|gw15xMkpOT7+>kGQ9R_&K zJ^TBiqVX|{;lYDHv6jz%rS79`Io_veqh7*izg_WNU+SmU%#8JlsF8HJ)2(Kk){av6OP^Bi?EJ(4$_( zu~0Db!)3eL(F{HFv%#F|;Y(zk@ARnFWt(H7_w;C5_qR4yjd8(64`Rt`Ln!g^#Q4k_ zoI$eAhV-_>=KazndD1v={+5@*plG-ct zh9gm`rh6b8P&6-mU-{Ob%9$JgY~Oe`8CRRP{}G%U43=L?t(~uI`0SeQ%+gzL7_2%X zgZq@?hAUHg{+ntiY;GI`wT~iRCBQ*oyzn#o*6n{F!<`{ts@}1quO^x)&hFJObNT8B z1VN6`#fJm~au&?n9*&I8aciQ7TNT&VQ>ohmjbF`6ZIJ{cjaDa?eZb-~MQi3}&jRe& zOeC?IfZ4_IwvgkA3GGlCT60sB%mG$PfG>LBg(jo zEH~u<$Cc^G5VN0m4#kBHK3Sb*#Yhcp26s_;w1-K1(C9URT5*30VCq(!ZYg?&SNOtw^ z#&yQ*0aKK7i=p$E63iK)5bxSIGN?TvIe)vg^lkePacX)gOJrrhm_kf}yGgxlJA0P1 zGk4UMz4*?Aa}BE#%W@@!a$N7-!lngBS`&xv@I0-`txi=5ZE}SI5e2a1`6qA%rV=H8 zF%0v&p)e8;%b?WR!X4|tga@=*ooub+>bdE)f)<2*oD>zR6P_mWe&d=`H_+QLcZuAb zrey5rtna+6no|by$w0%1>gB3>uC2y7SwSfZT{N*xvXYwv&Dk+zG|17RTH6v+!(>f_ zOyp+6`rSdkG|>2f5`Q3#KOr~{5|$IYOJ|F^H>3m|a-?eVM?IR_ZQ;Tp7y;xkKc`rwYJZ6 zIxlo+|Lc&Kw^j6={&wM4TQ`0=gM&fl2hXc?>HM7_N;Sy0S_Cb@a!B!L6;$;MTDw+dgI`tNzcG z=i)MaszCM<#2haFJOC(XYVc8=(g!Kl(mGAvdkBxdX8;2+b{hm0loml{r20Kk%gr|) zb&FTOs$RY49@h*TaF934-}2Y5c~gPed$q(wT0uAP?e`N*tjdpiS|M-GVE8?YmR&;M zrPsNZs`$Vf_7!}&Q*w`QW>5}znh6geeFWPHxY<0t4c5^4@+ieZ^sK@qath0l)4m~`5+{U#xYGCy5qpPx(#@|3U zY6Y4(_sR@U#N=fRyt8{~q+Y4Yf9Z5LTbZC^^c)sl#KYhecqlZ5w4K{P^I#-(TZcpr7|AgJlo}9nvhB4X z9tZveR_|lVlJ7L(rBlG#FTp8BRy(55Umxm}IIm{MwORMnik-yAYg2^H)htF1S|H%_ z9dYE;r5*^vJk>9cL!o40#Gh%fS1mW14jSR)3j`v`6@gHigUz|Q66|8X6 zU>xIK^lQvUz5LqSVWXBpG5TLCn^Rd%2W~u83MT#qIBKrg<$&C22DN6m#yP0omO-F> z{{bzG6P*b!qEaSy*l>$%K(|be+r!Q@iWw#A>VsvA{x-0O6q_8;suq92zh(WX=h1gJ z4-9|V|BwEQJth~nULM_wSjsULmT7XiC@{Ztk3y^ac;ER~FTcNy2*2`ALC4EGFGqfj z^EsJZE|)|`p@}F+7KBUGBoQIgF#CNl zGF;Bj;cL)^*AGgYFT{AMPP#>%(KkNmcu+ppA=onU!pTLFN>D)gzqivHpZ088X}MV0 zm3=wKM+4d&69nlf#0Vw--j%dyB_D8*7r#nlr~%tqQP0KI=k%23CE{|VwFjK2W8n+a zVg7@;9ywaoZt75BcXH3ua$hm2)DfeA#wb4YIpW7J$~G8)Wf#&4e(?Q`#xe(o4|x3E zZ`3okXh$hXaat4}-aa>Z^2N}sIG@7z>Ea|%k^t&{Nmf+`#8d=F2qg_!L+1^ihG;K#nvHCJ`oK(PU0YGS>%~cR>JZe|}q%R~SEj?fA6`0&D^Sn@-5g z-_oCx^7SQE_wC#N-br5niPGo9o)aTL!I#NONO#@OV^U|E*1(2!55S}u!D4ea6}V2# zoBJWM?x!sTRrhBlALd`-D#FeC|u|T*O5=%*7+; z3^`mGrZcUP^jB5qd2Egp=P$W3+v&KoG8?B1%v|Eh$FUX_+Id%kPmPr5H91D}n@-0T z{9=cVq8UuDiA6#Oa{%ZfGa0yl@mhK2}#L%tpRN40T#d(Fkdt=c}( ze9lG8ajf<;X^{WOl|8`$*TmZ1*rJ_AWeakK<0-e_pcx3+6L!0=b{4SssbFynP%^=IY1 ztTpc7LYZBICRcA?8QN#Qb3X-pf$N-e_#BBmjcWVRf-m3c8!N3T2E!D5q>WtRo?s$~ zJESp>JVMb|#}dnYiLjr!?N(>d|0`tLFqP!`X)qu1XA7$n_S;7 zjk1ZW4r=b=`2iEr57A;U6l*3ET+J)6#|BUgC<@Ao zXClXbrt-qV@IQUjI~8!4EGow(YMj6E4kwd~_r*YWgVxP0lJN%>;Mv6xlbg(65YArhvr!j z9!K0i0L4Iq<>jSeRunX;ijIK zvlKco{(0r}7CNJvi58I@d1^}7G;Lo!3|Z2=8wrQM1|EQ1lHPs!(W7iM-v`YeM9ycG zqlEmN=MWzwM|mNw${Gr%mG{`92K=dXrE%iK9*h;9TtK1V@hoA!C2Rni1c!1)2g*h1}Tqu!DP;t&6^O+KY`^2Xu9))o+jY zq0}$^rJ^Z!wgZWksy=*k$*A~w|It^7`QoSKISb3}aTf*e&xp!q8bik%%PuE@coLRxIlI7Xo-|PhmBoLuSwrzkGtdQB`yVT-Ty1hB zp2gB5owKp(AaN?)nMTXyyM@BcpYHdD0Ig2?T%uU2uRmKms5M zfdFIy00=w?Ai)73Uv+nlLBk{)AndMCkfBEAK834BxI%?awr8*U4& zcnxjz5Nq(WCaA4$E=>MPnHPn=NUvj3+w#gCJwzgBk!Vscn~7mEsX0_pO%4-p?S!hN z73<88bPvHTlx2N(!SC2+X;k+XvOrzR5(kUWF?QIo`{UEOb3ZHE|0@~2i25=ZaetxH zg>mav+eY2eMrF;Xja&6DE_Q96vrI2fPcN_d`1qLFn3(mLn2CvXFY&e{KCtd!`1k>e@ z_#a$eZr6Qyy=2C?%%0iW`t9{UtN+{i|GmBVa{Ch#Oor(H#r^v2q(tXd{L63g5z9Zf tRysFtIVf*)6bxVk58^E#-R>$=(EGym8hT;1eV&$6_?_)T?H9gz{|7e7{Yd}- diff --git a/wadsrc/in_epi1.txt b/wadsrc/in_epi1.txt deleted file mode 100644 index 213e80cd..00000000 --- a/wadsrc/in_epi1.txt +++ /dev/null @@ -1,89 +0,0 @@ -Background wimap0 -Splat wisplat -Pointer wiurh0 wiurh1 - -Animation 224 104 11 -{ - WIA00000 - WIA00001 - WIA00002 -} - -Animation 184 160 11 -{ - WIA00100 - WIA00101 - WIA00102 -} - -Animation 112 136 11 -{ - WIA00200 - WIA00201 - WIA00202 -} - -Animation 72 112 11 -{ - WIA00300 - WIA00301 - WIA00302 -} - -Animation 88 96 11 -{ - WIA00400 - WIA00401 - WIA00402 -} - -Animation 64 48 11 -{ - WIA00500 - WIA00501 - WIA00502 -} - -Animation 192 40 11 -{ - WIA00600 - WIA00601 - WIA00602 -} - -Animation 136 16 11 -{ - WIA00700 - WIA00701 - WIA00702 -} - -Animation 80 16 11 -{ - WIA00800 - WIA00801 - WIA00802 -} - - -Animation 64 24 11 -{ - WIA00900 - WIA00901 - WIA00902 -} - - -Spots -{ - E1M1 185 164 - E1M2 148 143 - E1M3 69 122 - E1M4 209 102 - E1M5 116 89 - E1M6 166 55 - E1M7 71 56 - E1M8 135 29 - E1M9 71 24 -} - \ No newline at end of file diff --git a/wadsrc/in_epi2.txt b/wadsrc/in_epi2.txt deleted file mode 100644 index 4570b943..00000000 --- a/wadsrc/in_epi2.txt +++ /dev/null @@ -1,46 +0,0 @@ -Background wimap1 -Splat wisplat -Pointer wiurh0 wiurh1 - -// IfEntering and IfLeaving are mutually exclusive so these have to be defined twice! - -IfLeaving E2M1 Pic 128 136 WIA10000 -IfLeaving E2M2 Pic 128 136 WIA10100 -IfLeaving E2M3 Pic 128 136 WIA10200 -IfLeaving E2M4 Pic 128 136 WIA10300 -IfLeaving E2M5 Pic 128 136 WIA10400 -IfLeaving E2M6 Pic 128 136 WIA10500 -IfLeaving E2M7 Pic 128 136 WIA10600 -IfLeaving E2M9 Pic 128 136 WIA10400 - -IfEntering E2M2 Pic 128 136 WIA10000 -IfEntering E2M3 Pic 128 136 WIA10100 -IfEntering E2M4 Pic 128 136 WIA10200 -IfEntering E2M5 Pic 128 136 WIA10300 -IfEntering E2M6 Pic 128 136 WIA10400 -IfEntering E2M7 Pic 128 136 WIA10500 -IfEntering E2M8 Pic 128 136 WIA10600 -IfEntering E2M9 Pic 128 136 WIA10400 - -IfVisited E2M9 Pic 192 144 WIA10702 - -IfEntering E2M9 Animation 192 144 11 ONCE -{ - WIA10700 - WIA10701 - WIA10702 -} - - -Spots -{ - E2M1 254 25 - E2M2 97 50 - E2M3 188 64 - E2M4 128 78 - E2M5 214 92 - E2M6 133 130 - E2M7 208 136 - E2M8 148 140 - E2M9 235 158 -} diff --git a/wadsrc/in_epi3.txt b/wadsrc/in_epi3.txt deleted file mode 100644 index d19aff6d..00000000 --- a/wadsrc/in_epi3.txt +++ /dev/null @@ -1,60 +0,0 @@ -Background wimap2 -Splat wisplat -Pointer wiurh0 wiurh1 - - -Animation 104 168 11 -{ - WIA20000 - WIA20001 - WIA20002 -} - -Animation 40 136 11 -{ - WIA20100 - WIA20101 - WIA20102 -} - -Animation 160 96 11 -{ - WIA20200 - WIA20201 - WIA20202 -} - -Animation 104 80 11 -{ - WIA20300 - WIA20301 - WIA20302 -} - -Animation 120 32 11 -{ - WIA20400 - WIA20401 - WIA20402 -} - -Animation 40 0 8 -{ - WIA20500 - WIA20501 - WIA20502 -} - - -Spots -{ - E3M1 156 168 - E3M2 48 154 - E3M3 174 95 - E3M4 265 75 - E3M5 130 48 - E3M6 279 23 - E3M7 198 48 - E3M8 140 25 - E3M9 281 136 -} diff --git a/wadsrc/in_htc1.txt b/wadsrc/in_htc1.txt deleted file mode 100644 index 1ca298d6..00000000 --- a/wadsrc/in_htc1.txt +++ /dev/null @@ -1,18 +0,0 @@ -NoAutostartMap -Background mape1 -Splat in_x -Pointer in_yah - -Spots -{ - E1M1 172 78 - E1M2 86 90 - E1M3 73 66 - E1M4 159 95 - E1M5 148 126 - E1M6 132 54 - E1M7 131 74 - E1M8 208 138 - E1M9 52 101 -} - diff --git a/wadsrc/in_htc2.txt b/wadsrc/in_htc2.txt deleted file mode 100644 index 548e6817..00000000 --- a/wadsrc/in_htc2.txt +++ /dev/null @@ -1,18 +0,0 @@ -NoAutostartMap -Background mape2 -Splat in_x -Pointer in_yah - -Spots -{ - E2M1 218 57 - E2M2 137 81 - E2M3 155 124 - E2M4 171 68 - E2M5 250 86 - E2M6 136 98 - E2M7 203 90 - E2M8 220 140 - E2M9 279 106 -} - diff --git a/wadsrc/in_htc3.txt b/wadsrc/in_htc3.txt deleted file mode 100644 index 3dd5597c..00000000 --- a/wadsrc/in_htc3.txt +++ /dev/null @@ -1,18 +0,0 @@ -NoAutostartMap -Background mape3 -Splat in_x -Pointer in_yah - -Spots -{ - E3M1 86 99 - E3M2 124 103 - E3M3 154 79 - E3M4 202 83 - E3M5 178 59 - E3M6 142 58 - E3M7 219 66 - E3M8 247 57 - E3M9 107 80 -} - diff --git a/wadsrc/indexfont.fon b/wadsrc/indexfont.fon deleted file mode 100644 index eb8188e275dcb1e81ba85eb3386ed46d98750ad1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 309 zcmah@ISv9b3>;@7K(G=eCA@)-8i^7fvL%n=mktxJ7Z4Q0Ns2jrxm}M798N&Rzf-08 zp75MEyZybjaeO!j(B9)TgWDEFA+3n)56&jI|7)qmn(hxOM&is^QnH@xT$%I}2Xr2s i!b;Fl`9f=&5^Weh8kL5kq`jiWmHs@qoZS1R+gcmAp=8mP|$w{hAak#APET|V@`2#@!3C0KY@A}OM?7@ z862M7NCR?QJY5_^D&ka+yE7dy;9+uH_-Nj*|Hs)ZW6CDPDA;r_V*Po0C)+=}_1+rQ z{FCo4p1B}yiV#Paz>hs)>MS$%3TYZAo&LyJvyMqmaK^Vhpm_|Qu6{1-oD!Mt#|%!U~CS{|L0cV+3|DUs%5w4`k&n<`%^09 zx0Ub0bJtmyW~g}aaxBnYV3VdJp`@;`cDH=PYQ}E`_FHxWO=R$N^>bP0l+XkKt_Vg1 diff --git a/wadsrc/invgemr2.png b/wadsrc/invgemr2.png deleted file mode 100644 index 9b229459594833d6a5c11002d980f6ee9ca35c1d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 215 zcmeAS@N?(olHy`uVBq!ia0vp^oIuRO!3-qZo6;u&DVqSF5LX6GO(0W3LP9`5KvPrG z(b3V+(2#*4%gf6vD=UkEp*bihNI^lt($X?2DoR4)KLf*@;^JZk2B7eNwb|4612r?2 z1o;IsI6S+N2IP2px;TbZ#HpU}6gzCdb2wnqq~mAa{(Uc{dF++_0o8}6x8K`Za&Fs; z$Me=kc$^otX_ETCg!>lLey>AS3j!Ft=di4KH?>V